{
  "schema": 1,
  "project": {
    "name": "GPUI Box",
    "repository": "https://github.com/fran0220/gpui-box",
    "releaseVersion": "0.2.0",
    "releaseStatus": "released",
    "rustVersion": "1.97",
    "edition": "2024"
  },
  "packages": [
    {
      "name": "gpui-box",
      "crate": "gpui",
      "manifest": "crates/gpui/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "The independent GPUI Box distribution derived from Zed GPUI",
      "readme": "README.md",
      "features": {
        "bench": [
          "test-support",
          "dep:criterion",
          "dep:hdrhistogram"
        ],
        "default": [
          "font-kit",
          "wayland",
          "x11",
          "windows-manifest"
        ],
        "input-latency-histogram": [
          "dep:hdrhistogram"
        ],
        "inspector": [
          "gpui_macros/inspector"
        ],
        "leak-detection": [
          "backtrace"
        ],
        "profiler": [],
        "screen-capture": [
          "scap",
          "dep:windows-capture"
        ],
        "test-support": [
          "leak-detection",
          "collections/test-support",
          "http_client/test-support",
          "wayland",
          "x11",
          "proptest"
        ],
        "wayland": [],
        "windows-manifest": [
          "dep:embed-resource"
        ],
        "x11": [
          "scap?/x11"
        ]
      },
      "dependencies": [
        {
          "alias": "accesskit",
          "package": "accesskit",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "anyhow",
          "package": "anyhow",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "async-channel",
          "package": "async-channel",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "async-task",
          "package": "async-task",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "backtrace",
          "package": "backtrace",
          "kind": "normal",
          "optional": true,
          "features": []
        },
        {
          "alias": "backtrace",
          "package": "backtrace",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "bitflags",
          "package": "bitflags",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "chrono",
          "package": "chrono",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "collections",
          "package": "gpui-box-collections",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "collections",
          "package": "gpui-box-collections",
          "kind": "dev",
          "optional": false,
          "features": [
            "test-support"
          ]
        },
        {
          "alias": "criterion",
          "package": "criterion",
          "kind": "normal",
          "optional": true,
          "features": []
        },
        {
          "alias": "ctor",
          "package": "ctor",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "derive_more",
          "package": "derive_more",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "embed-resource",
          "package": "embed-resource",
          "kind": "build",
          "optional": true,
          "features": []
        },
        {
          "alias": "env_logger",
          "package": "env_logger",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "etagere",
          "package": "etagere",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "futures",
          "package": "futures",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "futures-concurrency",
          "package": "futures-concurrency",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui_macros",
          "package": "gpui-box-macros",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui_platform",
          "package": "gpui-box-platform",
          "kind": "dev",
          "optional": false,
          "features": [
            "font-kit",
            "wayland",
            "x11"
          ]
        },
        {
          "alias": "gpui_shared_string",
          "package": "gpui-box-shared-string",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui_util",
          "package": "gpui-box-util",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui_util",
          "package": "gpui-box-util",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "hdrhistogram",
          "package": "hdrhistogram",
          "kind": "normal",
          "optional": true,
          "features": []
        },
        {
          "alias": "heapless",
          "package": "heapless",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "http_client",
          "package": "gpui-box-http-client",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "image",
          "package": "image",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "inventory",
          "package": "inventory",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "itertools",
          "package": "itertools",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "log",
          "package": "log",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "lyon",
          "package": "lyon",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "lyon",
          "package": "lyon",
          "kind": "dev",
          "optional": false,
          "features": [
            "extra"
          ]
        },
        {
          "alias": "num_cpus",
          "package": "num_cpus",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "parking",
          "package": "parking",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "parking_lot",
          "package": "parking_lot",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "pin-project",
          "package": "pin-project",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "pollster",
          "package": "pollster",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "postage",
          "package": "postage",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "profiling",
          "package": "profiling",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "proptest",
          "package": "proptest",
          "kind": "normal",
          "optional": true,
          "features": []
        },
        {
          "alias": "rand",
          "package": "rand",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "rand",
          "package": "rand",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "raw-window-handle",
          "package": "raw-window-handle",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "refineable",
          "package": "gpui-box-refineable",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "regex",
          "package": "regex",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "resvg",
          "package": "resvg",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "ropey",
          "package": "ropey",
          "kind": "normal",
          "optional": false,
          "features": [
            "simd"
          ]
        },
        {
          "alias": "scheduler",
          "package": "gpui-box-scheduler",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "scheduler",
          "package": "gpui-box-scheduler",
          "kind": "dev",
          "optional": false,
          "features": [
            "test-support"
          ]
        },
        {
          "alias": "schemars",
          "package": "schemars",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "seahash",
          "package": "seahash",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde",
          "package": "serde",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "slotmap",
          "package": "slotmap",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "smallvec",
          "package": "smallvec",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "spin",
          "package": "spin",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "stacksafe",
          "package": "stacksafe",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "strum",
          "package": "strum",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "sum_tree",
          "package": "gpui-box-sum-tree",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "taffy",
          "package": "taffy",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "thiserror",
          "package": "thiserror",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "ttf-parser",
          "package": "ttf-parser",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "unicode-bidi",
          "package": "unicode-bidi",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "unicode-linebreak",
          "package": "unicode-linebreak",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "unicode-segmentation",
          "package": "unicode-segmentation",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "url",
          "package": "url",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "usvg",
          "package": "usvg",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "util_macros",
          "package": "gpui-box-util-macros",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "uuid",
          "package": "uuid",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "waker-fn",
          "package": "waker-fn",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "web-time",
          "package": "web-time",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 2773
    },
    {
      "name": "gpui-box-android",
      "crate": "gpui_android",
      "manifest": "crates/gpui_android/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "Android Activity and native surface backend for GPUI Box",
      "readme": null,
      "features": {
        "host-check": []
      },
      "dependencies": [
        {
          "alias": "accesskit",
          "package": "accesskit",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "anyhow",
          "package": "anyhow",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "futures",
          "package": "futures",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui_wgpu",
          "package": "gpui-box-wgpu",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "jni",
          "package": "jni",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "raw-window-handle",
          "package": "raw-window-handle",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "uuid",
          "package": "uuid",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 42
    },
    {
      "name": "gpui-box-app-host",
      "crate": "app_host",
      "manifest": "tools/app-host/Cargo.toml",
      "cohort": "tool",
      "layer": 2,
      "version": "0.2.0",
      "license": "MIT",
      "publish": false,
      "description": null,
      "readme": null,
      "features": {
        "capture": [
          "gpui_platform/test-support",
          "dep:gpui-kit-testkit"
        ]
      },
      "dependencies": [
        {
          "alias": "anyhow",
          "package": "anyhow",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "base64",
          "package": "base64",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "env_logger",
          "package": "env_logger",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit",
          "package": "gpui-kit",
          "kind": "normal",
          "optional": false,
          "features": [
            "syntax"
          ]
        },
        {
          "alias": "gpui-kit-semantics",
          "package": "gpui-kit-semantics",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit-testkit",
          "package": "gpui-kit-testkit",
          "kind": "normal",
          "optional": true,
          "features": [
            "test-support"
          ]
        },
        {
          "alias": "gpui-kit-theme",
          "package": "gpui-kit-theme",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui_platform",
          "package": "gpui-box-platform",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde",
          "package": "serde",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 31
    },
    {
      "name": "gpui-box-browser-gallery",
      "crate": "browser_gallery",
      "manifest": "examples/browser-gallery/Cargo.toml",
      "cohort": "tool",
      "layer": 2,
      "version": "0.2.0",
      "license": "MIT",
      "publish": false,
      "description": null,
      "readme": null,
      "features": {},
      "dependencies": [],
      "symbolCount": 1
    },
    {
      "name": "gpui-box-collections",
      "crate": "collections",
      "manifest": "crates/collections/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "GPUI Box collection types",
      "readme": null,
      "features": {
        "test-support": []
      },
      "dependencies": [
        {
          "alias": "gpui_util",
          "package": "gpui-box-util",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "indexmap",
          "package": "indexmap",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "rustc-hash",
          "package": "rustc-hash",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 30
    },
    {
      "name": "gpui-box-gallery",
      "crate": "gallery",
      "manifest": "examples/gallery/Cargo.toml",
      "cohort": "tool",
      "layer": 2,
      "version": "0.2.0",
      "license": "MIT",
      "publish": false,
      "description": null,
      "readme": null,
      "features": {},
      "dependencies": [
        {
          "alias": "anyhow",
          "package": "anyhow",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit",
          "package": "gpui-kit",
          "kind": "normal",
          "optional": false,
          "features": [
            "fixtures"
          ]
        },
        {
          "alias": "gpui-kit-assets",
          "package": "gpui-kit-assets",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit-semantics",
          "package": "gpui-kit-semantics",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit-testkit",
          "package": "gpui-kit-testkit",
          "kind": "normal",
          "optional": false,
          "features": [
            "test-support"
          ]
        },
        {
          "alias": "gpui-kit-theme",
          "package": "gpui-kit-theme",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui_platform",
          "package": "gpui-box-platform",
          "kind": "normal",
          "optional": false,
          "features": [
            "test-support"
          ]
        },
        {
          "alias": "serde",
          "package": "serde",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 7
    },
    {
      "name": "gpui-box-headless-visual",
      "crate": "headless_visual",
      "manifest": "tools/headless-visual/Cargo.toml",
      "cohort": "tool",
      "layer": 2,
      "version": "0.2.0",
      "license": "MIT",
      "publish": false,
      "description": null,
      "readme": null,
      "features": {},
      "dependencies": [
        {
          "alias": "anyhow",
          "package": "anyhow",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": [
            "test-support"
          ]
        },
        {
          "alias": "gpui-kit",
          "package": "gpui-box-kit",
          "kind": "normal",
          "optional": false,
          "features": [
            "fixtures",
            "terminal"
          ]
        },
        {
          "alias": "gpui-kit-semantics",
          "package": "gpui-box-kit-semantics",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit-testkit",
          "package": "gpui-box-kit-testkit",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit-theme",
          "package": "gpui-box-kit-theme",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui_platform",
          "package": "gpui-box-platform",
          "kind": "normal",
          "optional": false,
          "features": [
            "test-support"
          ]
        },
        {
          "alias": "gpui_wgpu",
          "package": "gpui-box-wgpu",
          "kind": "normal",
          "optional": false,
          "features": [
            "test-support"
          ]
        },
        {
          "alias": "image",
          "package": "image",
          "kind": "normal",
          "optional": false,
          "features": [
            "png"
          ]
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 1
    },
    {
      "name": "gpui-box-http-client",
      "crate": "http_client",
      "manifest": "crates/http_client/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "HTTP client abstractions for GPUI Box",
      "readme": null,
      "features": {
        "test-support": []
      },
      "dependencies": [
        {
          "alias": "anyhow",
          "package": "anyhow",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "async-compression",
          "package": "async-compression",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "bytes",
          "package": "bytes",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "derive_more",
          "package": "derive_more",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "futures",
          "package": "futures",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "http",
          "package": "http",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "http-body",
          "package": "http-body",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "log",
          "package": "log",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "parking_lot",
          "package": "parking_lot",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde",
          "package": "serde",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_urlencoded",
          "package": "serde_urlencoded",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "url",
          "package": "url",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 48
    },
    {
      "name": "gpui-box-ios",
      "crate": "gpui_ios",
      "manifest": "crates/gpui_ios/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "UIKit host integration for GPUI Box (native acceptance pending)",
      "readme": null,
      "features": {
        "platform-check": []
      },
      "dependencies": [
        {
          "alias": "accesskit",
          "package": "accesskit",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "accesskit_consumer",
          "package": "accesskit_consumer",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "anyhow",
          "package": "anyhow",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "cc",
          "package": "cc",
          "kind": "build",
          "optional": false,
          "features": []
        },
        {
          "alias": "futures",
          "package": "futures",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-box-mobile-reference",
          "package": "gpui-box-mobile-reference",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit",
          "package": "gpui-box-kit",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui_wgpu",
          "package": "gpui-box-wgpu",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "log",
          "package": "log",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "raw-window-handle",
          "package": "raw-window-handle",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "tempfile",
          "package": "tempfile",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "uuid",
          "package": "uuid",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 19
    },
    {
      "name": "gpui-box-kit",
      "crate": "gpui_kit",
      "manifest": "crates/gpui-kit/Cargo.toml",
      "cohort": "kit",
      "layer": 1,
      "version": "0.2.0",
      "license": "MIT",
      "publish": true,
      "description": "GPUI Box Kit design-system components and interaction primitives",
      "readme": null,
      "features": {
        "default": [
          "native-media",
          "terminal"
        ],
        "dotlottie": [
          "dep:base64",
          "dep:image",
          "dep:rasterlottie",
          "dep:zip"
        ],
        "fixtures": [],
        "native-media": [
          "media/native-playback"
        ],
        "syntax": [
          "dep:tree-sitter",
          "dep:tree-sitter-json"
        ],
        "terminal": [
          "dep:alacritty_terminal"
        ]
      },
      "dependencies": [
        {
          "alias": "base64",
          "package": "base64",
          "kind": "normal",
          "optional": true,
          "features": []
        },
        {
          "alias": "chrono",
          "package": "chrono",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "chrono-tz",
          "package": "chrono-tz",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "dev",
          "optional": false,
          "features": [
            "test-support"
          ]
        },
        {
          "alias": "gpui-kit",
          "package": "gpui-box-kit",
          "kind": "dev",
          "optional": false,
          "features": [
            "fixtures"
          ]
        },
        {
          "alias": "gpui-kit-assets",
          "package": "gpui-kit-assets",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit-semantics",
          "package": "gpui-kit-semantics",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit-testkit",
          "package": "gpui-box-kit-testkit",
          "kind": "dev",
          "optional": false,
          "features": [
            "test-support"
          ]
        },
        {
          "alias": "gpui-kit-theme",
          "package": "gpui-kit-theme",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit-tokens",
          "package": "gpui-kit-tokens",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "image",
          "package": "image",
          "kind": "normal",
          "optional": true,
          "features": []
        },
        {
          "alias": "media",
          "package": "gpui-box-media",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "proptest",
          "package": "proptest",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "pulldown-cmark",
          "package": "pulldown-cmark",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "rasterlottie",
          "package": "rasterlottie",
          "kind": "normal",
          "optional": true,
          "features": []
        },
        {
          "alias": "serde",
          "package": "serde",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "smallvec",
          "package": "smallvec",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "tree-sitter",
          "package": "tree-sitter",
          "kind": "normal",
          "optional": true,
          "features": []
        },
        {
          "alias": "tree-sitter-json",
          "package": "tree-sitter-json",
          "kind": "normal",
          "optional": true,
          "features": []
        },
        {
          "alias": "unicode-segmentation",
          "package": "unicode-segmentation",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "web-time",
          "package": "web-time",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "zip",
          "package": "zip",
          "kind": "normal",
          "optional": true,
          "features": []
        }
      ],
      "symbolCount": 4975
    },
    {
      "name": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "manifest": "crates/gpui-kit-assets/Cargo.toml",
      "cohort": "kit",
      "layer": 1,
      "version": "0.2.0",
      "license": "MIT",
      "publish": true,
      "description": "Licensed fonts and generic icon assets for GPUI Box Kit",
      "readme": null,
      "features": {},
      "dependencies": [
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "tracing",
          "package": "tracing",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "ttf-parser",
          "package": "ttf-parser",
          "kind": "dev",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 29
    },
    {
      "name": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "manifest": "crates/gpui-kit-semantics/Cargo.toml",
      "cohort": "kit",
      "layer": 1,
      "version": "0.2.0",
      "license": "MIT",
      "publish": true,
      "description": "GPUI Box Kit per-frame semantic trees for testing native GPUI interfaces",
      "readme": null,
      "features": {},
      "dependencies": [
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "dev",
          "optional": false,
          "features": [
            "test-support"
          ]
        },
        {
          "alias": "serde",
          "package": "serde",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "dev",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 80
    },
    {
      "name": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "manifest": "crates/gpui-kit-testkit/Cargo.toml",
      "cohort": "kit",
      "layer": 1,
      "version": "0.2.0",
      "license": "MIT",
      "publish": true,
      "description": "GPUI Box Kit semantic assertions, window capture, and visual diff helpers",
      "readme": null,
      "features": {
        "test-support": [
          "gpui/test-support"
        ]
      },
      "dependencies": [
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit-semantics",
          "package": "gpui-kit-semantics",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "png",
          "package": "png",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "raw-window-handle",
          "package": "raw-window-handle",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde",
          "package": "serde",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "tempfile",
          "package": "tempfile",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "thiserror",
          "package": "thiserror",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 67
    },
    {
      "name": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "manifest": "crates/gpui-kit-theme/Cargo.toml",
      "cohort": "kit",
      "layer": 1,
      "version": "0.2.0",
      "license": "MIT",
      "publish": true,
      "description": "GPUI adapter for GPUI Box Kit semantic design tokens",
      "readme": null,
      "features": {},
      "dependencies": [
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit-tokens",
          "package": "gpui-kit-tokens",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "dev",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 96
    },
    {
      "name": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "manifest": "crates/gpui-kit-tokens/Cargo.toml",
      "cohort": "kit",
      "layer": 1,
      "version": "0.2.0",
      "license": "MIT",
      "publish": true,
      "description": "Typed, GPUI-independent design tokens for GPUI Box Kit",
      "readme": null,
      "features": {},
      "dependencies": [
        {
          "alias": "jsonschema",
          "package": "jsonschema",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde",
          "package": "serde",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "thiserror",
          "package": "thiserror",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 165
    },
    {
      "name": "gpui-box-linux",
      "crate": "gpui_linux",
      "manifest": "crates/gpui_linux/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "GPUI Box platform integration for Linux and FreeBSD",
      "readme": null,
      "features": {
        "default": [
          "wayland",
          "x11"
        ],
        "screen-capture": [
          "gpui/screen-capture",
          "scap"
        ],
        "test-support": [
          "gpui/test-support"
        ],
        "wayland": [
          "bitflags",
          "gpui_wgpu",
          "ashpd/wayland",
          "calloop-wayland-source",
          "wayland-backend",
          "wayland-client",
          "wayland-cursor",
          "wayland-protocols",
          "wayland-protocols-plasma",
          "wayland-protocols-wlr",
          "filedescriptor",
          "xkbcommon/wayland",
          "open",
          "gpui/wayland"
        ],
        "x11": [
          "gpui_wgpu",
          "ashpd",
          "as-raw-xcb-connection",
          "x11rb",
          "xkbcommon/x11",
          "xim",
          "x11-clipboard",
          "filedescriptor",
          "open",
          "scap?/x11"
        ]
      },
      "dependencies": [],
      "symbolCount": 135
    },
    {
      "name": "gpui-box-macos",
      "crate": "gpui_macos",
      "manifest": "crates/gpui_macos/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "GPUI Box platform integration for macOS",
      "readme": null,
      "features": {
        "default": [
          "gpui/default"
        ],
        "font-kit": [
          "dep:font-kit"
        ],
        "runtime_shaders": [],
        "screen-capture": [
          "gpui/screen-capture"
        ],
        "test-support": [
          "gpui/test-support"
        ]
      },
      "dependencies": [
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 59
    },
    {
      "name": "gpui-box-macros",
      "crate": "gpui_macros",
      "manifest": "crates/gpui_macros/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "Procedural macros for GPUI Box",
      "readme": null,
      "features": {
        "inspector": []
      },
      "dependencies": [
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "dev",
          "optional": false,
          "features": [
            "inspector",
            "test-support"
          ]
        },
        {
          "alias": "heck",
          "package": "heck",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "proc-macro2",
          "package": "proc-macro2",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "quote",
          "package": "quote",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "syn",
          "package": "syn",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 36
    },
    {
      "name": "gpui-box-mcp",
      "crate": "mcp",
      "manifest": "tools/mcp/Cargo.toml",
      "cohort": "tool",
      "layer": 2,
      "version": "0.2.0",
      "license": "MIT",
      "publish": true,
      "description": "Remote and checkout Model Context Protocol server for GPUI Box development",
      "readme": "../../docs/mcp.md",
      "features": {},
      "dependencies": [
        {
          "alias": "anyhow",
          "package": "anyhow",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "axum",
          "package": "axum",
          "kind": "normal",
          "optional": false,
          "features": [
            "http1",
            "json",
            "tokio"
          ]
        },
        {
          "alias": "futures",
          "package": "futures",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "tokio",
          "package": "tokio",
          "kind": "normal",
          "optional": false,
          "features": [
            "net",
            "rt-multi-thread",
            "signal",
            "sync",
            "time"
          ]
        }
      ],
      "symbolCount": 0
    },
    {
      "name": "gpui-box-media",
      "crate": "media",
      "manifest": "crates/media/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "Native media playback and platform media bindings for GPUI Box",
      "readme": null,
      "features": {
        "default": [
          "native-playback"
        ],
        "native-playback": [
          "dep:bindgen",
          "dep:cc",
          "dep:core-foundation",
          "dep:core-video",
          "dep:ctor",
          "dep:foreign-types",
          "dep:metal",
          "dep:objc",
          "dep:url",
          "dep:windows",
          "dep:windows-core"
        ]
      },
      "dependencies": [
        {
          "alias": "anyhow",
          "package": "anyhow",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 34
    },
    {
      "name": "gpui-box-platform",
      "crate": "gpui_platform",
      "manifest": "crates/gpui_platform/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "Cross-platform integration for GPUI Box",
      "readme": null,
      "features": {
        "default": [
          "native-platform",
          "font-kit"
        ],
        "font-kit": [
          "gpui_macos?/font-kit"
        ],
        "native-platform": [
          "dep:gpui_android",
          "dep:gpui_ios",
          "dep:gpui_linux",
          "dep:gpui_macos",
          "dep:gpui_web",
          "dep:gpui_windows"
        ],
        "runtime_shaders": [
          "gpui_macos/runtime_shaders"
        ],
        "screen-capture": [
          "gpui/screen-capture",
          "gpui_macos/screen-capture",
          "gpui_windows/screen-capture",
          "gpui_linux/screen-capture"
        ],
        "test-support": [
          "gpui/test-support",
          "gpui_macos/test-support",
          "gpui_windows/test-support",
          "dep:gpui_wgpu",
          "gpui_wgpu/test-support"
        ],
        "wayland": [
          "gpui_linux/wayland"
        ],
        "web-multithreaded": [
          "gpui_web/multithreaded"
        ],
        "x11": [
          "gpui_linux/x11"
        ]
      },
      "dependencies": [
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui_wgpu",
          "package": "gpui-box-wgpu",
          "kind": "normal",
          "optional": true,
          "features": []
        },
        {
          "alias": "log",
          "package": "log",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 12
    },
    {
      "name": "gpui-box-refineable",
      "crate": "refineable",
      "manifest": "crates/refineable/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "A macro for creating 'refinement' types that can be used to partially initialize or mutate a complex struct",
      "readme": null,
      "features": {},
      "dependencies": [
        {
          "alias": "derive_refineable",
          "package": "gpui-box-refineable-derive",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 9
    },
    {
      "name": "gpui-box-refineable-derive",
      "crate": "derive_refineable",
      "manifest": "crates/refineable/derive_refineable/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "A derive macro for creating refinement types in Rust",
      "readme": null,
      "features": {},
      "dependencies": [
        {
          "alias": "proc-macro2",
          "package": "proc-macro2",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "quote",
          "package": "quote",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "syn",
          "package": "syn",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 1
    },
    {
      "name": "gpui-box-scheduler",
      "crate": "scheduler",
      "manifest": "crates/scheduler/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "Task scheduler for GPUI Box",
      "readme": null,
      "features": {
        "test-support": []
      },
      "dependencies": [
        {
          "alias": "async-task",
          "package": "async-task",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "backtrace",
          "package": "backtrace",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "chrono",
          "package": "chrono",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "flume",
          "package": "flume",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "futures",
          "package": "futures",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "parking_lot",
          "package": "parking_lot",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "rand",
          "package": "rand",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "web-time",
          "package": "web-time",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 86
    },
    {
      "name": "gpui-box-shared-string",
      "crate": "gpui_shared_string",
      "manifest": "crates/gpui_shared_string/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "Shared string types for GPUI Box",
      "readme": null,
      "features": {},
      "dependencies": [
        {
          "alias": "schemars",
          "package": "schemars",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde",
          "package": "serde",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "smol_str",
          "package": "smol_str",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 0
    },
    {
      "name": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "manifest": "crates/sum_tree/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "A sum tree data structure, a concurrency-friendly B-tree",
      "readme": null,
      "features": {
        "test-support": [
          "proptest"
        ]
      },
      "dependencies": [
        {
          "alias": "ctor",
          "package": "ctor",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "heapless",
          "package": "heapless",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "log",
          "package": "log",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "proptest",
          "package": "proptest",
          "kind": "normal",
          "optional": true,
          "features": []
        },
        {
          "alias": "proptest",
          "package": "proptest",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "rand",
          "package": "rand",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "rayon",
          "package": "rayon",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "tracing",
          "package": "tracing",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 106
    },
    {
      "name": "gpui-box-util",
      "crate": "gpui_util",
      "manifest": "crates/gpui_util/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "Utility types for GPUI Box",
      "readme": null,
      "features": {},
      "dependencies": [
        {
          "alias": "anyhow",
          "package": "anyhow",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "log",
          "package": "log",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 21
    },
    {
      "name": "gpui-box-util-macros",
      "crate": "util_macros",
      "manifest": "crates/util_macros/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "Utility macros for GPUI Box",
      "readme": null,
      "features": {
        "perf-enabled": []
      },
      "dependencies": [
        {
          "alias": "quote",
          "package": "quote",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "syn",
          "package": "syn",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 4
    },
    {
      "name": "gpui-box-web",
      "crate": "gpui_web",
      "manifest": "crates/gpui_web/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "GPUI Box platform integration for the web",
      "readme": null,
      "features": {
        "default": [],
        "multithreaded": [
          "dep:wasm_thread"
        ]
      },
      "dependencies": [],
      "symbolCount": 26
    },
    {
      "name": "gpui-box-webview",
      "crate": "gpui_webview",
      "manifest": "crates/gpui-webview/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "MIT",
      "publish": true,
      "description": "Caller-owned native browser engine hosts for GPUI Box",
      "readme": null,
      "features": {},
      "dependencies": [
        {
          "alias": "anyhow",
          "package": "anyhow",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "base64",
          "package": "base64",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui_platform",
          "package": "gpui-box-platform",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "raw-window-handle",
          "package": "raw-window-handle",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "url",
          "package": "url",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 20
    },
    {
      "name": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "manifest": "crates/gpui_wgpu/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "wgpu renderer for GPUI Box",
      "readme": null,
      "features": {
        "default": [],
        "font-kit": [
          "dep:font-kit"
        ],
        "test-support": [
          "gpui/test-support",
          "dep:image"
        ]
      },
      "dependencies": [
        {
          "alias": "anyhow",
          "package": "anyhow",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "bytemuck",
          "package": "bytemuck",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "collections",
          "package": "gpui-box-collections",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "cosmic-text",
          "package": "cosmic-text",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "criterion",
          "package": "criterion",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "env_logger",
          "package": "env_logger",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "etagere",
          "package": "etagere",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "font-kit",
          "package": "zed-font-kit",
          "kind": "normal",
          "optional": true,
          "features": []
        },
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "dev",
          "optional": false,
          "features": [
            "test-support"
          ]
        },
        {
          "alias": "gpui_util",
          "package": "gpui-box-util",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "image",
          "package": "image",
          "kind": "normal",
          "optional": true,
          "features": []
        },
        {
          "alias": "image",
          "package": "image",
          "kind": "dev",
          "optional": false,
          "features": []
        },
        {
          "alias": "itertools",
          "package": "itertools",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "log",
          "package": "log",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "naga",
          "package": "naga",
          "kind": "dev",
          "optional": false,
          "features": [
            "wgsl-in"
          ]
        },
        {
          "alias": "parking_lot",
          "package": "parking_lot",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "profiling",
          "package": "profiling",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "raw-window-handle",
          "package": "raw-window-handle",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "smallvec",
          "package": "smallvec",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "swash",
          "package": "swash",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "unicode-bidi",
          "package": "unicode-bidi",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "unicode-segmentation",
          "package": "unicode-segmentation",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "wgpu",
          "package": "wgpu",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 59
    },
    {
      "name": "gpui-box-windows",
      "crate": "gpui_windows",
      "manifest": "crates/gpui_windows/Cargo.toml",
      "cohort": "framework",
      "layer": 0,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": true,
      "description": "GPUI Box platform integration for Windows",
      "readme": null,
      "features": {
        "default": [
          "gpui/default"
        ],
        "screen-capture": [
          "gpui/screen-capture",
          "scap"
        ],
        "test-support": [
          "gpui/test-support"
        ]
      },
      "dependencies": [
        {
          "alias": "gpui",
          "package": "gpui-box",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 22
    },
    {
      "name": "perf",
      "crate": "perf",
      "manifest": "tooling/perf/Cargo.toml",
      "cohort": "tool",
      "layer": 2,
      "version": "0.2.0",
      "license": "Apache-2.0",
      "publish": false,
      "description": "A tool for measuring Zed test performance, with too many Clippy lints",
      "readme": null,
      "features": {},
      "dependencies": [
        {
          "alias": "collections",
          "package": "gpui-box-collections",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde",
          "package": "serde",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 15
    },
    {
      "name": "xtask",
      "crate": "xtask",
      "manifest": "xtask/Cargo.toml",
      "cohort": "tool",
      "layer": 2,
      "version": "0.2.0",
      "license": "MIT",
      "publish": false,
      "description": null,
      "readme": null,
      "features": {},
      "dependencies": [
        {
          "alias": "anyhow",
          "package": "anyhow",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "gpui-kit",
          "package": "gpui-kit",
          "kind": "normal",
          "optional": false,
          "features": [
            "fixtures"
          ]
        },
        {
          "alias": "gpui-kit-tokens",
          "package": "gpui-kit-tokens",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "proc-macro2",
          "package": "proc-macro2",
          "kind": "normal",
          "optional": false,
          "features": [
            "span-locations"
          ]
        },
        {
          "alias": "pulldown-cmark",
          "package": "pulldown-cmark",
          "kind": "normal",
          "optional": false,
          "features": [
            "html"
          ]
        },
        {
          "alias": "quote",
          "package": "quote",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "serde",
          "package": "serde",
          "kind": "normal",
          "optional": false,
          "features": [
            "derive"
          ]
        },
        {
          "alias": "serde_json",
          "package": "serde_json",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "sha2",
          "package": "sha2",
          "kind": "normal",
          "optional": false,
          "features": []
        },
        {
          "alias": "syn",
          "package": "syn",
          "kind": "normal",
          "optional": false,
          "features": [
            "visit"
          ]
        },
        {
          "alias": "toml",
          "package": "toml",
          "kind": "normal",
          "optional": false,
          "features": []
        }
      ],
      "symbolCount": 17
    }
  ],
  "symbols": [
    {
      "id": "app_host::references::EntityDispatch",
      "name": "EntityDispatch",
      "kind": "type",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "references",
      "path": "app_host::references",
      "source": "tools/app-host/src/references.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub type EntityDispatch<T> = fn (& Entity<T>, & str, & Value, bool, & mut Window, & mut App, & Registration<'_>) -> Result<Value>;",
      "cfg": []
    },
    {
      "id": "app_host::references::Registration",
      "name": "Registration",
      "kind": "struct",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "references",
      "path": "app_host::references",
      "source": "tools/app-host/src/references.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct Registration<'a> { registry : & 'a Registry, scope : Scope, anchor : Option<EntityId>, ancestor : Option<Rc<Entry>>, }",
      "cfg": []
    },
    {
      "id": "app_host::references::Registration::borrow_focus",
      "name": "borrow_focus",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "references",
      "path": "app_host::references",
      "source": "tools/app-host/src/references.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn borrow_focus (& self, reference : & Value, cx : & App) -> Result<FocusHandle>",
      "cfg": [],
      "target": "Registration<'_>"
    },
    {
      "id": "app_host::references::Registration::entity",
      "name": "entity",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "references",
      "path": "app_host::references",
      "source": "tools/app-host/src/references.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn entity<P : 'static, T : 'static> (& self, kind : & 'static str, parent : & Entity<P>, target : & Entity<T>, current : fn (& P, & App) -> Option<Entity<T>>, command_allowed : fn (& P, & App) -> bool, dispatch : EntityDispatch<T>,) -> Result<Value>",
      "cfg": [],
      "target": "Registration<'_>"
    },
    {
      "id": "app_host::references::Registration::focus",
      "name": "focus",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "references",
      "path": "app_host::references",
      "source": "tools/app-host/src/references.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn focus<P : 'static> (& self, parent : & Entity<P>, target : & FocusHandle, current : fn (& P, & FocusHandle, & App) -> bool, command_allowed : fn (& P, & App) -> bool,) -> Result<Value>",
      "cfg": [],
      "target": "Registration<'_>"
    },
    {
      "id": "app_host::references::Registry",
      "name": "Registry",
      "kind": "struct",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "references",
      "path": "app_host::references",
      "source": "tools/app-host/src/references.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Default)] pub struct Registry (Rc<RefCell<State>>);",
      "cfg": []
    },
    {
      "id": "app_host::references::Registry::invoke",
      "name": "invoke",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "references",
      "path": "app_host::references",
      "source": "tools/app-host/src/references.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invoke (& self, owner : EffectOwner, reference : & Value, method : & str, args : & Value, query : bool, window : & mut Window, cx : & mut App,) -> Result<Value>",
      "cfg": [],
      "target": "Registry"
    },
    {
      "id": "app_host::references::Registry::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "references",
      "path": "app_host::references",
      "source": "tools/app-host/src/references.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "Registry"
    },
    {
      "id": "app_host::references::Registry::reconcile",
      "name": "reconcile",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "references",
      "path": "app_host::references",
      "source": "tools/app-host/src/references.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn reconcile (& self, root : & Node, owner_for : impl Fn (& Node) -> Option<EffectOwner>, parent_for : impl Fn (& Node) -> Option<EntityId>, cx : & App,)",
      "cfg": [],
      "target": "Registry"
    },
    {
      "id": "app_host::references::Registry::registration",
      "name": "registration",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "references",
      "path": "app_host::references",
      "source": "tools/app-host/src/references.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn registration (& self, node : & Node, owner : EffectOwner) -> Registration<'_>",
      "cfg": [],
      "target": "Registry"
    },
    {
      "id": "app_host::references::Registry::release",
      "name": "release",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "references",
      "path": "app_host::references",
      "source": "tools/app-host/src/references.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn release (& self, reference : & Value, owner : EffectOwner) -> Result<()>",
      "cfg": [],
      "target": "Registry"
    },
    {
      "id": "app_host::references::Registry::revoke",
      "name": "revoke",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "references",
      "path": "app_host::references",
      "source": "tools/app-host/src/references.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn revoke (& self)",
      "cfg": [],
      "target": "Registry"
    },
    {
      "id": "app_host::references::Registry::source",
      "name": "source",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "references",
      "path": "app_host::references",
      "source": "tools/app-host/src/references.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn source (& self, reference : & Value, instance : u64) -> Result<(String, Option<String>)>",
      "cfg": [],
      "target": "Registry"
    },
    {
      "id": "app_host::resources::MAX_BYTES",
      "name": "MAX_BYTES",
      "kind": "constant",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const MAX_BYTES: usize",
      "cfg": []
    },
    {
      "id": "app_host::resources::MAX_ENCODED",
      "name": "MAX_ENCODED",
      "kind": "constant",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const MAX_ENCODED: usize",
      "cfg": []
    },
    {
      "id": "app_host::resources::MAX_OWNER_BYTES",
      "name": "MAX_OWNER_BYTES",
      "kind": "constant",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const MAX_OWNER_BYTES: usize",
      "cfg": []
    },
    {
      "id": "app_host::resources::MAX_OWNER_COUNT",
      "name": "MAX_OWNER_COUNT",
      "kind": "constant",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const MAX_OWNER_COUNT: usize",
      "cfg": []
    },
    {
      "id": "app_host::resources::Registration",
      "name": "Registration",
      "kind": "struct",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Deserialize)] # [serde (deny_unknown_fields)] pub struct Registration { pub key : String, pub mime : String, pub data : String, }",
      "cfg": []
    },
    {
      "id": "app_host::resources::ResourceBytes",
      "name": "ResourceBytes",
      "kind": "struct",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "A revocable lease, not ownership of resource bytes. Consumers must parse synchronously within with_bytes and enforce format-specific work limits. In particular, authorizing these bytes does not authorize external references.",
      "documentation": "A revocable lease, not ownership of resource bytes. Consumers must parse\nsynchronously within with_bytes and enforce format-specific work limits.\nIn particular, authorizing these bytes does not authorize external references.",
      "signature": "# [doc = \" A revocable lease, not ownership of resource bytes. Consumers must parse\"] # [doc = \" synchronously within with_bytes and enforce format-specific work limits.\"] # [doc = \" In particular, authorizing these bytes does not authorize external references.\"] pub struct ResourceBytes (Lease);",
      "cfg": []
    },
    {
      "id": "app_host::resources::ResourceBytes::with_bytes",
      "name": "with_bytes",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_bytes<R> (& self, cx : & App, use_bytes : impl FnOnce (& [u8]) -> Result<R>) -> Result<R>",
      "cfg": [],
      "target": "ResourceBytes"
    },
    {
      "id": "app_host::resources::ResourceRef",
      "name": "ResourceRef",
      "kind": "struct",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] # [serde (deny_unknown_fields)] pub struct ResourceRef { pub key : String, }",
      "cfg": []
    },
    {
      "id": "app_host::resources::ResourceStore",
      "name": "ResourceStore",
      "kind": "struct",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct ResourceStore (Rc<RefCell<State>>);",
      "cfg": []
    },
    {
      "id": "app_host::resources::ResourceStore::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "Call from Host's release observer while App can still evict GPU atlases.",
      "documentation": "Call from Host's release observer while App can still evict GPU atlases.",
      "signature": "pub fn clear (& mut self, cx : & mut App)",
      "cfg": [],
      "target": "ResourceStore"
    },
    {
      "id": "app_host::resources::ResourceStore::reconcile",
      "name": "reconcile",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "Active authorized mount → generation principal, supplied only by host. Many mounts share one immutable bucket and one generation quota.",
      "documentation": "Active authorized mount → generation principal, supplied only by host.\nMany mounts share one immutable bucket and one generation quota.",
      "signature": "pub fn reconcile (& mut self, approved : & HashMap<EffectOwner, EffectOwner>, cx : & mut App)",
      "cfg": [],
      "target": "ResourceStore"
    },
    {
      "id": "app_host::resources::ResourceStore::register",
      "name": "register",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "Atomic registration: rejection consumes no count/byte quota and may be retried.",
      "documentation": "Atomic registration: rejection consumes no count/byte quota and may be retried.",
      "signature": "pub fn register (& mut self, owner : EffectOwner, registration : Registration,) -> Result<ResourceRef>",
      "cfg": [],
      "target": "ResourceStore"
    },
    {
      "id": "app_host::resources::ResourceStore::revoke",
      "name": "revoke",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn revoke (& mut self, owner : EffectOwner, cx : & mut App)",
      "cfg": [],
      "target": "ResourceStore"
    },
    {
      "id": "app_host::resources::Resources",
      "name": "Resources",
      "kind": "struct",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "App contains only a weak view; the Host owns the lifetime via ResourceStore.",
      "documentation": "App contains only a weak view; the Host owns the lifetime via ResourceStore.",
      "signature": "# [doc = \" App contains only a weak view; the Host owns the lifetime via ResourceStore.\"] pub struct Resources (Weak<RefCell<State>>);",
      "cfg": []
    },
    {
      "id": "app_host::resources::Resources::bytes",
      "name": "bytes",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bytes (reference : & ResourceRef, cx : & App) -> Result<ResourceBytes>",
      "cfg": [],
      "target": "Resources"
    },
    {
      "id": "app_host::resources::Resources::image",
      "name": "image",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn image (reference : & ResourceRef, cx : & App) -> Result<ImageSource>",
      "cfg": [],
      "target": "Resources"
    },
    {
      "id": "app_host::resources::Resources::install",
      "name": "install",
      "kind": "method",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "resources",
      "path": "app_host::resources",
      "source": "tools/app-host/src/resources.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn install (cx : & mut App) -> ResourceStore",
      "cfg": [],
      "target": "Resources"
    },
    {
      "id": "app_host::review_fonts::register_emoji_review_font",
      "name": "register_emoji_review_font",
      "kind": "function",
      "package": "gpui-box-app-host",
      "crate": "app_host",
      "module": "review_fonts",
      "path": "app_host::review_fonts",
      "source": "tools/app-host/src/review_fonts.rs",
      "summary": "Add the pinned Noto Color Emoji review fixture to a caller-owned text system.",
      "documentation": "Add the pinned Noto Color Emoji review fixture to a caller-owned text system.\n\nThis does not enable system font discovery or change default fallback policy.\nCall once per fresh capture text system, before constructing the headless app.",
      "signature": "pub fn register_emoji_review_font (text_system : & dyn gpui::PlatformTextSystem) -> gpui::Result<()>",
      "cfg": []
    },
    {
      "id": "browser_gallery::start",
      "name": "start",
      "kind": "function",
      "package": "gpui-box-browser-gallery",
      "crate": "browser_gallery",
      "module": "",
      "path": "browser_gallery",
      "source": "examples/browser-gallery/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn start ()",
      "cfg": []
    },
    {
      "id": "collections::collections::HashMap",
      "name": "HashMap",
      "kind": "type",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "collections",
      "path": "collections::collections",
      "source": "crates/collections/src/collections.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub type HashMap<K, V> = FxHashMap<K, V>;",
      "cfg": []
    },
    {
      "id": "collections::collections::HashSet",
      "name": "HashSet",
      "kind": "type",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "collections",
      "path": "collections::collections",
      "source": "crates/collections/src/collections.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub type HashSet<T> = FxHashSet<T>;",
      "cfg": []
    },
    {
      "id": "collections::collections::IndexMap",
      "name": "IndexMap",
      "kind": "type",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "collections",
      "path": "collections::collections",
      "source": "crates/collections/src/collections.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub type IndexMap<K, V> = indexmap::IndexMap<K, V, rustc_hash::FxBuildHasher>;",
      "cfg": []
    },
    {
      "id": "collections::collections::IndexSet",
      "name": "IndexSet",
      "kind": "type",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "collections",
      "path": "collections::collections",
      "source": "crates/collections/src/collections.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub type IndexSet<T> = indexmap::IndexSet<T, rustc_hash::FxBuildHasher>;",
      "cfg": []
    },
    {
      "id": "collections::collections::TypeIdHashMap",
      "name": "TypeIdHashMap",
      "kind": "type",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "collections",
      "path": "collections::collections",
      "source": "crates/collections/src/collections.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub type TypeIdHashMap<V> = std::collections::HashMap<std::any::TypeId, V, gpui_util::TypeIdHashBuilder>;",
      "cfg": []
    },
    {
      "id": "collections::collections::TypeIdHashSet",
      "name": "TypeIdHashSet",
      "kind": "type",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "collections",
      "path": "collections::collections",
      "source": "crates/collections/src/collections.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub type TypeIdHashSet = std::collections::HashSet<std::any::TypeId, gpui_util::TypeIdHashBuilder>;",
      "cfg": []
    },
    {
      "id": "collections::collections::reexport-1",
      "name": "indexmap :: Equivalent",
      "kind": "reexport",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "collections",
      "path": "collections::collections",
      "source": "crates/collections/src/collections.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use indexmap::Equivalent;",
      "cfg": []
    },
    {
      "id": "collections::collections::reexport-2",
      "name": "rustc_hash :: { FxBuildHasher , FxHashMap , FxHashSet , FxHasher }",
      "kind": "reexport",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "collections",
      "path": "collections::collections",
      "source": "crates/collections/src/collections.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use rustc_hash::{ FxBuildHasher, FxHashMap, FxHashSet, FxHasher };",
      "cfg": []
    },
    {
      "id": "collections::collections::reexport-3",
      "name": "std :: collections :: *",
      "kind": "reexport",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "collections",
      "path": "collections::collections",
      "source": "crates/collections/src/collections.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use std::collections::*;",
      "cfg": []
    },
    {
      "id": "collections::vecmap::Entry",
      "name": "Entry",
      "kind": "enum",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub enum Entry<'a, K, V> { Occupied (OccupiedEntry<'a, K, V>), Vacant (VacantEntry<'a, K, V>), }",
      "cfg": []
    },
    {
      "id": "collections::vecmap::Entry::key",
      "name": "key",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn key (& self) -> & K",
      "cfg": [],
      "target": "Entry<'a, K, V>"
    },
    {
      "id": "collections::vecmap::Entry::or_insert",
      "name": "or_insert",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn or_insert (self, value : V) -> & 'a mut V",
      "cfg": [],
      "target": "Entry<'a, K, V>"
    },
    {
      "id": "collections::vecmap::Entry::or_insert_default",
      "name": "or_insert_default",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn or_insert_default (self) -> & 'a mut V where V : Default,",
      "cfg": [],
      "target": "Entry<'a, K, V>"
    },
    {
      "id": "collections::vecmap::Entry::or_insert_with",
      "name": "or_insert_with",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn or_insert_with<F> (self, default : F) -> & 'a mut V where F : FnOnce () -> V,",
      "cfg": [],
      "target": "Entry<'a, K, V>"
    },
    {
      "id": "collections::vecmap::Entry::or_insert_with_key",
      "name": "or_insert_with_key",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn or_insert_with_key<F> (self, default : F) -> & 'a mut V where F : FnOnce (& K) -> V,",
      "cfg": [],
      "target": "Entry<'a, K, V>"
    },
    {
      "id": "collections::vecmap::EntryRef",
      "name": "EntryRef",
      "kind": "enum",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub enum EntryRef<'key, 'map, K, V> { Occupied (OccupiedEntry<'map, K, V>), Vacant (VacantEntryRef<'key, 'map, K, V>), }",
      "cfg": []
    },
    {
      "id": "collections::vecmap::EntryRef::key",
      "name": "key",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn key (& self) -> & K",
      "cfg": [],
      "target": "EntryRef<'key, 'map, K, V>"
    },
    {
      "id": "collections::vecmap::EntryRef::or_insert",
      "name": "or_insert",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn or_insert (self, value : V) -> & 'map mut V",
      "cfg": [],
      "target": "EntryRef<'key, 'map, K, V>"
    },
    {
      "id": "collections::vecmap::EntryRef::or_insert_default",
      "name": "or_insert_default",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn or_insert_default (self) -> & 'map mut V where V : Default,",
      "cfg": [],
      "target": "EntryRef<'key, 'map, K, V>"
    },
    {
      "id": "collections::vecmap::EntryRef::or_insert_with",
      "name": "or_insert_with",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn or_insert_with<F> (self, default : F) -> & 'map mut V where F : FnOnce () -> V,",
      "cfg": [],
      "target": "EntryRef<'key, 'map, K, V>"
    },
    {
      "id": "collections::vecmap::EntryRef::or_insert_with_key",
      "name": "or_insert_with_key",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn or_insert_with_key<F> (self, default : F) -> & 'map mut V where F : FnOnce (& K) -> V,",
      "cfg": [],
      "target": "EntryRef<'key, 'map, K, V>"
    },
    {
      "id": "collections::vecmap::Iter",
      "name": "Iter",
      "kind": "struct",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct Iter<'a, K, V> { iter : std::iter::Zip<std::slice::Iter<'a, K>, std::slice::Iter<'a, V>>, }",
      "cfg": []
    },
    {
      "id": "collections::vecmap::OccupiedEntry",
      "name": "OccupiedEntry",
      "kind": "struct",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct OccupiedEntry<'a, K, V> { key : & 'a K, value : & 'a mut V, }",
      "cfg": []
    },
    {
      "id": "collections::vecmap::VacantEntry",
      "name": "VacantEntry",
      "kind": "struct",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct VacantEntry<'a, K, V> { map : & 'a mut VecMap<K, V>, key : K, }",
      "cfg": []
    },
    {
      "id": "collections::vecmap::VacantEntryRef",
      "name": "VacantEntryRef",
      "kind": "struct",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct VacantEntryRef<'key, 'map, K, V> { map : & 'map mut VecMap<K, V>, key : & 'key K, }",
      "cfg": []
    },
    {
      "id": "collections::vecmap::VecMap",
      "name": "VecMap",
      "kind": "struct",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "A collection that provides a map interface but is backed by vectors.",
      "documentation": "A collection that provides a map interface but is backed by vectors.\n\nThis is suitable for small key-value stores where the item count is not\nlarge enough to overcome the overhead of a more complex algorithm.\n\nIf this meets your use cases, then [`VecMap`] should be a drop-in\nreplacement for [`std::collections::HashMap`] or [`crate::HashMap`]. Note\nthat we are adding APIs on an as-needed basis. If the API you need is not\npresent yet, please add it!\n\nBecause it uses vectors as a backing store, the map also iterates over items\nin insertion order, like [`crate::IndexMap`].\n\nThis struct uses a struct-of-arrays (SoA) representation which tends to be\nmore cache efficient and promotes autovectorization when using simple key or\nvalue types.",
      "signature": "# [doc = \" A collection that provides a map interface but is backed by vectors.\"] # [doc = \"\"] # [doc = \" This is suitable for small key-value stores where the item count is not\"] # [doc = \" large enough to overcome the overhead of a more complex algorithm.\"] # [doc = \"\"] # [doc = \" If this meets your use cases, then [`VecMap`] should be a drop-in\"] # [doc = \" replacement for [`std::collections::HashMap`] or [`crate::HashMap`]. Note\"] # [doc = \" that we are adding APIs on an as-needed basis. If the API you need is not\"] # [doc = \" present yet, please add it!\"] # [doc = \"\"] # [doc = \" Because it uses vectors as a backing store, the map also iterates over items\"] # [doc = \" in insertion order, like [`crate::IndexMap`].\"] # [doc = \"\"] # [doc = \" This struct uses a struct-of-arrays (SoA) representation which tends to be\"] # [doc = \" more cache efficient and promotes autovectorization when using simple key or\"] # [doc = \" value types.\"] # [derive (Default)] pub struct VecMap<K, V> { keys : Vec<K>, values : Vec<V>, }",
      "cfg": []
    },
    {
      "id": "collections::vecmap::VecMap::entry",
      "name": "entry",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn entry (& mut self, key : K) -> Entry<'_, K, V>",
      "cfg": [],
      "target": "VecMap<K, V>"
    },
    {
      "id": "collections::vecmap::VecMap::entry_ref",
      "name": "entry_ref",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "Like [`Self::entry`] but takes its key by reference instead of by value.",
      "documentation": "Like [`Self::entry`] but takes its key by reference instead of by value.\n\nThis can be helpful if you have a key where cloning is expensive, as we\ncan avoid cloning the key until a value is inserted under that entry.",
      "signature": "pub fn entry_ref<'a, 'k> (& 'a mut self, key : & 'k K) -> EntryRef<'k, 'a, K, V>",
      "cfg": [],
      "target": "VecMap<K, V>"
    },
    {
      "id": "collections::vecmap::VecMap::iter",
      "name": "iter",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn iter (& self) -> Iter<'_, K, V>",
      "cfg": [],
      "target": "VecMap<K, V>"
    },
    {
      "id": "collections::vecmap::VecMap::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-collections",
      "crate": "collections",
      "module": "vecmap",
      "path": "collections::vecmap",
      "source": "crates/collections/src/vecmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "VecMap<K, V>"
    },
    {
      "id": "derive_refineable::derive_refineable::derive_refineable",
      "name": "derive_refineable",
      "kind": "function",
      "package": "gpui-box-refineable-derive",
      "crate": "derive_refineable",
      "module": "derive_refineable",
      "path": "derive_refineable::derive_refineable",
      "source": "crates/refineable/derive_refineable/src/derive_refineable.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn derive_refineable (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gallery::recipes::footnote",
      "name": "footnote",
      "kind": "function",
      "package": "gpui-box-gallery",
      "crate": "gallery",
      "module": "recipes",
      "path": "gallery::recipes",
      "source": "examples/gallery/src/recipes.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn footnote (theme : & Theme, text : impl Into<SharedString>) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gallery::recipes::identity_tile",
      "name": "identity_tile",
      "kind": "function",
      "package": "gpui-box-gallery",
      "crate": "gallery",
      "module": "recipes",
      "path": "gallery::recipes",
      "source": "examples/gallery/src/recipes.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn identity_tile (theme : & Theme, glyph : Icon) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gallery::recipes::page",
      "name": "page",
      "kind": "function",
      "package": "gpui-box-gallery",
      "crate": "gallery",
      "module": "recipes",
      "path": "gallery::recipes",
      "source": "examples/gallery/src/recipes.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn page (theme : & Theme) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gallery::recipes::page_header",
      "name": "page_header",
      "kind": "function",
      "package": "gpui-box-gallery",
      "crate": "gallery",
      "module": "recipes",
      "path": "gallery::recipes",
      "source": "examples/gallery/src/recipes.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn page_header (theme : & Theme, title : impl Into<SharedString>, count : Option<usize>,) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gallery::recipes::row_content",
      "name": "row_content",
      "kind": "function",
      "package": "gpui-box-gallery",
      "crate": "gallery",
      "module": "recipes",
      "path": "gallery::recipes",
      "source": "examples/gallery/src/recipes.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn row_content (theme : & Theme, title : impl Into<SharedString>, detail : impl Into<SharedString>,) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gallery::recipes::section_title",
      "name": "section_title",
      "kind": "function",
      "package": "gpui-box-gallery",
      "crate": "gallery",
      "module": "recipes",
      "path": "gallery::recipes",
      "source": "examples/gallery/src/recipes.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn section_title (theme : & Theme, text : impl Into<SharedString>) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gallery::recipes::subtitle",
      "name": "subtitle",
      "kind": "function",
      "package": "gpui-box-gallery",
      "crate": "gallery",
      "module": "recipes",
      "path": "gallery::recipes",
      "source": "examples/gallery/src/recipes.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn subtitle (theme : & Theme, text : impl Into<SharedString>) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gpui::action::Action",
      "name": "Action",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "Actions are used to implement keyboard-driven UI. When you declare an action, you can bind keys to the action in the keymap and listeners for that action in the element tree.",
      "documentation": "Actions are used to implement keyboard-driven UI. When you declare an action, you can bind keys\nto the action in the keymap and listeners for that action in the element tree.\n\nTo declare a list of simple actions, you can use the actions! macro, which defines a simple unit\nstruct action for each listed action name in the given namespace.\n\n```\nuse gpui::actions;\nactions!(editor, [MoveUp, MoveDown, MoveLeft, MoveRight, Newline]);\n```\n\nRegistering the actions with the same name will result in a panic during  `App` creation.\n\n# Derive Macro\n\nMore complex data types can also be actions, by using the derive macro for `Action`:\n\n```\nuse gpui::Action;\n#[derive(Clone, PartialEq, serde::Deserialize, schemars::JsonSchema, Action)]\n#[action(namespace = editor)]\npub struct SelectNext {\npub replace_newest: bool,\n}\n```\n\nThe derive macro for `Action` requires that the type implement `Clone` and `PartialEq`. It also\nrequires `serde::Deserialize` and `schemars::JsonSchema` unless `#[action(no_json)]` is\nspecified. In Zed these trait impls are used to load keymaps from JSON.\n\nMultiple arguments separated by commas may be specified in `#[action(...)]`:\n\n- `namespace = some_namespace` sets the namespace. In Zed this is required.\n\n- `name = \"ActionName\"` overrides the action's name. This must not contain `::`.\n\n- `no_json` causes the `build` method to always error and `action_json_schema` to return `None`,\nand allows actions not implement `serde::Serialize` and `schemars::JsonSchema`.\n\n- `no_register` skips registering the action. This is useful for implementing the `Action` trait\nwhile not supporting invocation by name or JSON deserialization.\n\n- `deprecated_aliases = [\"editor::SomeAction\"]` specifies deprecated old names for the action.\nThese action names should *not* correspond to any actions that are registered. These old names\ncan then still be used to refer to invoke this action. In Zed, the keymap JSON schema will\naccept these old names and provide warnings.\n\n- `deprecated = \"Message about why this action is deprecation\"` specifies a deprecation message.\nIn Zed, the keymap JSON schema will cause this to be displayed as a warning.\n\n# Manual Implementation\n\nIf you want to control the behavior of the action trait manually, you can use the lower-level\n`#[register_action]` macro, which only generates the code needed to register your action before\n`main`.\n\n```\nuse gpui::{SharedString, register_action};\n#[derive(Clone, PartialEq, Eq, serde::Deserialize, schemars::JsonSchema)]\npub struct Paste {\npub content: SharedString,\n}\n\nimpl gpui::Action for Paste {\n# fn boxed_clone(&self) -> Box<dyn gpui::Action> { unimplemented!()}\n# fn partial_eq(&self, other: &dyn gpui::Action) -> bool { unimplemented!() }\n# fn name(&self) -> &'static str { \"Paste\" }\n# fn name_for_type() -> &'static str { \"Paste\" }\n# fn build(value: serde_json::Value) -> anyhow::Result<Box<dyn gpui::Action>> {\n#     unimplemented!()\n# }\n}\n\nregister_action!(Paste);\n```",
      "signature": "# [doc = \" Actions are used to implement keyboard-driven UI. When you declare an action, you can bind keys\"] # [doc = \" to the action in the keymap and listeners for that action in the element tree.\"] # [doc = \"\"] # [doc = \" To declare a list of simple actions, you can use the actions! macro, which defines a simple unit\"] # [doc = \" struct action for each listed action name in the given namespace.\"] # [doc = \"\"] # [doc = \" ```\"] # [doc = \" use gpui::actions;\"] # [doc = \" actions!(editor, [MoveUp, MoveDown, MoveLeft, MoveRight, Newline]);\"] # [doc = \" ```\"] # [doc = \"\"] # [doc = \" Registering the actions with the same name will result in a panic during `App` creation.\"] # [doc = \"\"] # [doc = \" # Derive Macro\"] # [doc = \"\"] # [doc = \" More complex data types can also be actions, by using the derive macro for `Action`:\"] # [doc = \"\"] # [doc = \" ```\"] # [doc = \" use gpui::Action;\"] # [doc = \" #[derive(Clone, PartialEq, serde::Deserialize, schemars::JsonSchema, Action)]\"] # [doc = \" #[action(namespace = editor)]\"] # [doc = \" pub struct SelectNext {\"] # [doc = \" pub replace_newest: bool,\"] # [doc = \" }\"] # [doc = \" ```\"] # [doc = \"\"] # [doc = \" The derive macro for `Action` requires that the type implement `Clone` and `PartialEq`. It also\"] # [doc = \" requires `serde::Deserialize` and `schemars::JsonSchema` unless `#[action(no_json)]` is\"] # [doc = \" specified. In Zed these trait impls are used to load keymaps from JSON.\"] # [doc = \"\"] # [doc = \" Multiple arguments separated by commas may be specified in `#[action(...)]`:\"] # [doc = \"\"] # [doc = \" - `namespace = some_namespace` sets the namespace. In Zed this is required.\"] # [doc = \"\"] # [doc = \" - `name = \\\"ActionName\\\"` overrides the action's name. This must not contain `::`.\"] # [doc = \"\"] # [doc = \" - `no_json` causes the `build` method to always error and `action_json_schema` to return `None`,\"] # [doc = \" and allows actions not implement `serde::Serialize` and `schemars::JsonSchema`.\"] # [doc = \"\"] # [doc = \" - `no_register` skips registering the action. This is useful for implementing the `Action` trait\"] # [doc = \" while not supporting invocation by name or JSON deserialization.\"] # [doc = \"\"] # [doc = \" - `deprecated_aliases = [\\\"editor::SomeAction\\\"]` specifies deprecated old names for the action.\"] # [doc = \" These action names should *not* correspond to any actions that are registered. These old names\"] # [doc = \" can then still be used to refer to invoke this action. In Zed, the keymap JSON schema will\"] # [doc = \" accept these old names and provide warnings.\"] # [doc = \"\"] # [doc = \" - `deprecated = \\\"Message about why this action is deprecation\\\"` specifies a deprecation message.\"] # [doc = \" In Zed, the keymap JSON schema will cause this to be displayed as a warning.\"] # [doc = \"\"] # [doc = \" # Manual Implementation\"] # [doc = \"\"] # [doc = \" If you want to control the behavior of the action trait manually, you can use the lower-level\"] # [doc = \" `#[register_action]` macro, which only generates the code needed to register your action before\"] # [doc = \" `main`.\"] # [doc = \"\"] # [doc = \" ```\"] # [doc = \" use gpui::{SharedString, register_action};\"] # [doc = \" #[derive(Clone, PartialEq, Eq, serde::Deserialize, schemars::JsonSchema)]\"] # [doc = \" pub struct Paste {\"] # [doc = \" pub content: SharedString,\"] # [doc = \" }\"] # [doc = \"\"] # [doc = \" impl gpui::Action for Paste {\"] # [doc = \" # fn boxed_clone(&self) -> Box<dyn gpui::Action> { unimplemented!()}\"] # [doc = \" # fn partial_eq(&self, other: &dyn gpui::Action) -> bool { unimplemented!() }\"] # [doc = \" # fn name(&self) -> &'static str { \\\"Paste\\\" }\"] # [doc = \" # fn name_for_type() -> &'static str { \\\"Paste\\\" }\"] # [doc = \" # fn build(value: serde_json::Value) -> anyhow::Result<Box<dyn gpui::Action>> {\"] # [doc = \" # unimplemented!()\"] # [doc = \" # }\"] # [doc = \" }\"] # [doc = \"\"] # [doc = \" register_action!(Paste);\"] # [doc = \" ```\"] pub trait Action : Any + Send { # [doc = \" Clone the action into a new box\"] fn boxed_clone (& self) -> Box<dyn Action>; # [doc = \" Do a partial equality check on this action and the other\"] fn partial_eq (& self, action : & dyn Action) -> bool; # [doc = \" Get the name of this action, for displaying in UI\"] fn name (& self) -> & 'static str; # [doc = \" Get the name of this action type (static)\"] fn name_for_type () -> & 'static str where Self : Sized; # [doc = \" Build this action from a JSON value. This is used to construct actions from the keymap.\"] # [doc = \" A value of `{}` will be passed for actions that don't have any parameters.\"] fn build (value : serde_json::Value) -> Result<Box<dyn Action>> where Self : Sized; # [doc = \" Optional JSON schema for the action's input data.\"] fn action_json_schema (_ : & mut schemars::SchemaGenerator) -> Option<schemars::Schema> where Self : Sized, { None } # [doc = \" A list of alternate, deprecated names for this action. These names can still be used to\"] # [doc = \" invoke the action. In Zed, the keymap JSON schema will accept these old names and provide\"] # [doc = \" warnings.\"] fn deprecated_aliases () -> & 'static [& 'static str] where Self : Sized, { & [] } # [doc = \" Returns the deprecation message for this action, if any. In Zed, the keymap JSON schema will\"] # [doc = \" cause this to be displayed as a warning.\"] fn deprecation_message () -> Option<& 'static str> where Self : Sized, { None } # [doc = \" The documentation for this action, if any. When using the derive macro for actions\"] # [doc = \" this will be automatically generated from the doc comments on the action struct.\"] fn documentation () -> Option<& 'static str> where Self : Sized, { None } }",
      "cfg": []
    },
    {
      "id": "gpui::action::ActionBuildError",
      "name": "ActionBuildError",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "Error type for `Keystroke::parse`. This is used instead of `anyhow::Error` so that Zed can use markdown to display it.",
      "documentation": "Error type for `Keystroke::parse`. This is used instead of `anyhow::Error` so that Zed can use\nmarkdown to display it.",
      "signature": "# [doc = \" Error type for `Keystroke::parse`. This is used instead of `anyhow::Error` so that Zed can use\"] # [doc = \" markdown to display it.\"] # [derive (Debug)] pub enum ActionBuildError { # [doc = \" Indicates that an action with this name has not been registered.\"] NotFound { # [doc = \" Name of the action that was not found.\"] name : String, }, # [doc = \" Indicates that an error occurred while building the action, typically a JSON deserialization\"] # [doc = \" error.\"] BuildError { # [doc = \" Name of the action that was attempting to be built.\"] name : String, # [doc = \" Error that occurred while building the action.\"] error : anyhow::Error, }, }",
      "cfg": []
    },
    {
      "id": "gpui::action::ActionRegistry::action_schema_by_name",
      "name": "action_schema_by_name",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn action_schema_by_name (& self, name : & str, generator : & mut schemars::SchemaGenerator,) -> Option<Option<schemars::Schema>>",
      "cfg": [],
      "target": "ActionRegistry"
    },
    {
      "id": "gpui::action::ActionRegistry::action_schemas",
      "name": "action_schemas",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn action_schemas (& self, generator : & mut schemars::SchemaGenerator,) -> Vec<(& 'static str, Option<schemars::Schema>)>",
      "cfg": [],
      "target": "ActionRegistry"
    },
    {
      "id": "gpui::action::ActionRegistry::all_action_names",
      "name": "all_action_names",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn all_action_names (& self) -> & [& 'static str]",
      "cfg": [],
      "target": "ActionRegistry"
    },
    {
      "id": "gpui::action::ActionRegistry::build_action",
      "name": "build_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "Construct an action based on its name and optional JSON parameters sourced from the keymap.",
      "documentation": "Construct an action based on its name and optional JSON parameters sourced from the keymap.",
      "signature": "pub fn build_action (& self, name : & str, params : Option<serde_json::Value>,) -> std::result::Result<Box<dyn Action>, ActionBuildError>",
      "cfg": [],
      "target": "ActionRegistry"
    },
    {
      "id": "gpui::action::ActionRegistry::build_action_type",
      "name": "build_action_type",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "Construct an action based on its name and optional JSON parameters sourced from the keymap.",
      "documentation": "Construct an action based on its name and optional JSON parameters sourced from the keymap.",
      "signature": "pub fn build_action_type (& self, type_id : & TypeId) -> Result<Box<dyn Action>>",
      "cfg": [],
      "target": "ActionRegistry"
    },
    {
      "id": "gpui::action::ActionRegistry::deprecated_aliases",
      "name": "deprecated_aliases",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn deprecated_aliases (& self) -> & HashMap<& 'static str, & 'static str>",
      "cfg": [],
      "target": "ActionRegistry"
    },
    {
      "id": "gpui::action::ActionRegistry::deprecation_messages",
      "name": "deprecation_messages",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn deprecation_messages (& self) -> & HashMap<& 'static str, & 'static str>",
      "cfg": [],
      "target": "ActionRegistry"
    },
    {
      "id": "gpui::action::ActionRegistry::documentation",
      "name": "documentation",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn documentation (& self) -> & HashMap<& 'static str, & 'static str>",
      "cfg": [],
      "target": "ActionRegistry"
    },
    {
      "id": "gpui::action::MacroActionBuilder",
      "name": "MacroActionBuilder",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "This type must be public so that our macros can build it in other crates. But this is an implementation detail and should not be used directly.",
      "documentation": "This type must be public so that our macros can build it in other crates.\nBut this is an implementation detail and should not be used directly.",
      "signature": "# [doc = \" This type must be public so that our macros can build it in other crates.\"] # [doc = \" But this is an implementation detail and should not be used directly.\"] # [doc (hidden)] pub struct MacroActionBuilder (pub fn () -> MacroActionData);",
      "cfg": []
    },
    {
      "id": "gpui::action::MacroActionData",
      "name": "MacroActionData",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "This type must be public so that our macros can build it in other crates. But this is an implementation detail and should not be used directly.",
      "documentation": "This type must be public so that our macros can build it in other crates.\nBut this is an implementation detail and should not be used directly.",
      "signature": "# [doc = \" This type must be public so that our macros can build it in other crates.\"] # [doc = \" But this is an implementation detail and should not be used directly.\"] # [doc (hidden)] pub struct MacroActionData { pub name : & 'static str, pub type_id : TypeId, pub build : ActionBuilder, pub json_schema : fn (& mut schemars::SchemaGenerator) -> Option<schemars::Schema>, pub deprecated_aliases : & 'static [& 'static str], pub deprecation_message : Option<& 'static str>, pub documentation : Option<& 'static str>, }",
      "cfg": []
    },
    {
      "id": "gpui::action::actions",
      "name": "actions",
      "kind": "macro",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "Defines and registers unit structs that can be used as actions. For more complex data types, derive `Action`.",
      "documentation": "Defines and registers unit structs that can be used as actions. For more complex data types, derive `Action`.\n\nFor example:\n\n```\nuse gpui::actions;\nactions!(editor, [MoveUp, MoveDown, MoveLeft, MoveRight, Newline]);\n```\n\nThis will create actions with names like `editor::MoveUp`, `editor::MoveDown`, etc.\n\nThe namespace argument `editor` can also be omitted, though it is required for Zed actions.",
      "signature": "macro_rules! actions",
      "cfg": []
    },
    {
      "id": "gpui::action::generate_list_of_all_registered_actions",
      "name": "generate_list_of_all_registered_actions",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "Generate a list of all the registered actions. Useful for transforming the list of available actions into a format suited for static analysis such as in validating keymaps, or generating documentation.",
      "documentation": "Generate a list of all the registered actions.\nUseful for transforming the list of available actions into a\nformat suited for static analysis such as in validating keymaps, or\ngenerating documentation.",
      "signature": "pub fn generate_list_of_all_registered_actions () -> impl Iterator<Item = MacroActionData>",
      "cfg": []
    },
    {
      "id": "gpui::action::reexport-1",
      "name": "gpui_macros :: Action",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui_macros::Action;",
      "cfg": []
    },
    {
      "id": "gpui::action::reexport-2",
      "name": "no_action :: { NoAction , Unbind , is_no_action , is_unbind }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "action",
      "path": "gpui::action",
      "source": "crates/gpui/src/action.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use no_action::{ NoAction, Unbind, is_no_action, is_unbind };",
      "cfg": []
    },
    {
      "id": "gpui::app::AnyDrag",
      "name": "AnyDrag",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Contains state associated with an active drag operation, started by dragging an element within the window or by dragging into the app from the underlying platform.",
      "documentation": "Contains state associated with an active drag operation, started by dragging an element\nwithin the window or by dragging into the app from the underlying platform.",
      "signature": "# [doc = \" Contains state associated with an active drag operation, started by dragging an element\"] # [doc = \" within the window or by dragging into the app from the underlying platform.\"] pub struct AnyDrag { # [doc = \" Owner captured at drag creation. OS-originated drags have no owner.\"] pub effect_owner : Option<crate::EffectOwner>, # [doc = \" The view used to render this drag\"] pub view : AnyView, # [doc = \" The value of the dragged item, to be dropped\"] pub value : Arc<dyn Any>, # [doc = \" This is used to render the dragged item in the same place\"] # [doc = \" on the original element that the drag was initiated\"] pub cursor_offset : Point<Pixels>, # [doc = \" The cursor style to use while dragging\"] pub cursor_style : Option<CursorStyle>, # [doc = \" Resolves the payload to offer the platform if the drag leaves the window.\"] # [doc = \" Invoked at most once per drag gesture, at promotion time.\"] pub external_payload_source : Option<ExternalDragPayloadSource>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::AnyTooltip",
      "name": "AnyTooltip",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Contains state associated with a tooltip. You'll only need this struct if you're implementing tooltip behavior on a custom element. Otherwise, use [Div::tooltip](crate::Interactivity::tooltip).",
      "documentation": "Contains state associated with a tooltip. You'll only need this struct if you're implementing\ntooltip behavior on a custom element. Otherwise, use [Div::tooltip](crate::Interactivity::tooltip).",
      "signature": "# [doc = \" Contains state associated with a tooltip. You'll only need this struct if you're implementing\"] # [doc = \" tooltip behavior on a custom element. Otherwise, use [Div::tooltip](crate::Interactivity::tooltip).\"] # [derive (Clone)] pub struct AnyTooltip { # [doc = \" The view used to display the tooltip\"] pub view : AnyView, # [doc = \" The absolute position of the mouse when the tooltip was deployed.\"] pub mouse_position : Point<Pixels>, # [doc = \" Given the bounds of the tooltip, checks whether the tooltip should still be visible and\"] # [doc = \" updates its state accordingly. This is needed atop the hovered element's mouse move handler\"] # [doc = \" to handle the case where the element is not painted (e.g. via use of `visible_on_hover`).\"] pub check_visible_and_update : Rc<dyn Fn (Bounds<Pixels>, & mut Window, & mut App) -> bool>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::App",
      "name": "App",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Contains the state of the full application, and passed as a reference to a variety of callbacks. Other [Context] derefs to this type. You need a reference to an `App` to access the state of a [Entity].",
      "documentation": "Contains the state of the full application, and passed as a reference to a variety of callbacks.\nOther [Context] derefs to this type.\nYou need a reference to an `App` to access the state of a [Entity].",
      "signature": "# [doc = \" Contains the state of the full application, and passed as a reference to a variety of callbacks.\"] # [doc = \" Other [Context] derefs to this type.\"] # [doc = \" You need a reference to an `App` to access the state of a [Entity].\"] pub struct App { pub (crate) this : Weak<AppCell>, pub (crate) platform : Rc<dyn Platform>, pub (crate) effect_owner : Rc<Cell<Option<crate::EffectOwner>>>, pub (crate) clipboard_policy : Option<crate::effect_owner::ClipboardPolicy>, pub (crate) native_menu_revision : Option<crate::NativeMenuSessionId>, text_system : Arc<TextSystem>, pub (crate) actions : Rc<ActionRegistry>, pub (crate) active_drag : Option<AnyDrag>, platform_owned_drag : Option<PlatformOwnedDrag>, pub (crate) background_executor : BackgroundExecutor, pub (crate) foreground_executor : ForegroundExecutor, pub (crate) entities : EntityMap, pub (crate) new_entity_observers : SubscriberSet<TypeId, NewEntityListener>, pub (crate) windows : SlotMap<WindowId, Option<Box<Window>>>, pub (crate) window_handles : FxHashMap<WindowId, AnyWindowHandle>, pub (crate) focus_handles : Arc<FocusMap>, pub (crate) keymap : Rc<RefCell<Keymap>>, pub (crate) keyboard_layout : Box<dyn PlatformKeyboardLayout>, pub (crate) keyboard_mapper : Rc<dyn PlatformKeyboardMapper>, pub (crate) global_action_listeners : TypeIdHashMap<Vec<Rc<dyn Fn (& dyn Any, DispatchPhase, & mut Self)>>>, pending_effects : VecDeque<Effect>, pub (crate) observers : SubscriberSet<EntityId, Handler>, pub (crate) event_listeners : SubscriberSet<EntityId, (TypeId, Listener)>, pub (crate) keystroke_observers : SubscriberSet<(), KeystrokeObserver>, pub (crate) keystroke_interceptors : SubscriberSet<(), KeystrokeObserver>, pub (crate) keyboard_layout_observers : SubscriberSet<(), Handler>, pub (crate) thermal_state_observers : SubscriberSet<(), Handler>, pub (crate) release_listeners : SubscriberSet<EntityId, ReleaseListener>, pub (crate) global_observers : SubscriberSet<TypeId, Handler>, pub (crate) quit_observers : SubscriberSet<(), QuitHandler>, pub (crate) restart_observers : SubscriberSet<(), Handler>, pub (crate) window_closed_observers : SubscriberSet<(), WindowClosedHandler>, # [doc = \" Per-App element arena. This isolates element allocations between different\"] # [doc = \" App instances (important for tests where multiple Apps run concurrently).\"] pub (crate) element_arena : RefCell<Arena>, # [doc = \" Per-App event arena.\"] pub (crate) event_arena : Arena, pub (crate) globals_by_type : TypeIdHashMap<Box<dyn Any>>, pub (crate) loading_assets : FxHashMap<(TypeId, u64), Box<dyn Any>>, asset_source : Arc<dyn AssetSource>, pub (crate) svg_renderer : SvgRenderer, http_client : Arc<dyn HttpClient>, pub (crate) pending_notifications : FxHashSet<EntityId>, pub (crate) pending_global_notifications : TypeIdHashSet, pub (crate) restart_path : Option<PathBuf>, pub (crate) layout_id_buffer : Vec<LayoutId>, pub (crate) propagate_event : bool, pub (crate) prompt_builder : Option<PromptBuilder>, pub (crate) window_invalidators_by_entity : FxHashMap<EntityId, FxHashMap<WindowId, WindowInvalidator>>, pub (crate) tracked_entities : FxHashMap<WindowId, FxHashSet<EntityId>>, pub (crate) current_window_by_entity : FxHashMap<EntityId, WindowId>, # [cfg (any (feature = \"inspector\", debug_assertions))] pub (crate) inspector_renderer : Option<crate::InspectorRenderer>, # [cfg (any (feature = \"inspector\", debug_assertions))] pub (crate) inspector_element_registry : InspectorElementRegistry, # [cfg (any (test, feature = \"test-support\", debug_assertions))] pub (crate) name : Option<& 'static str>, pub (crate) text_rendering_mode : Rc<Cell<TextRenderingMode>>, pub (crate) window_update_stack : Vec<WindowId>, pub (crate) mode : GpuiMode, pub (crate) cursor_hide_mode : CursorHideMode, pub (crate) reduce_motion : bool, # [doc = \" Whether the app was created by [`Application::new_inaccessible`]. No\"] # [doc = \" accesskit APIs will be called when this flag is set.\"] pub (crate) accessibility_force_disabled : bool, flushing_effects : bool, pending_updates : usize, quit_mode : QuitMode, quitting : bool, # [cfg (any (test, feature = \"leak-detection\"))] _ref_counts : Arc<RwLock<EntityRefCounts>>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::App::action_deprecation_messages",
      "name": "action_deprecation_messages",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get a map from an action name to the deprecation messages.",
      "documentation": "Get a map from an action name to the deprecation messages.",
      "signature": "pub fn action_deprecation_messages (& self) -> & HashMap<& 'static str, & 'static str>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::action_documentation",
      "name": "action_documentation",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get a map from an action name to the documentation.",
      "documentation": "Get a map from an action name to the documentation.",
      "signature": "pub fn action_documentation (& self) -> & HashMap<& 'static str, & 'static str>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::action_schema_by_name",
      "name": "action_schema_by_name",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get the schema for a specific action by name. Returns `None` if the action is not found. Returns `Some(None)` if the action exists but has no schema. Returns `Some(Some(schema))` if the action exists and has a schema.",
      "documentation": "Get the schema for a specific action by name.\nReturns `None` if the action is not found.\nReturns `Some(None)` if the action exists but has no schema.\nReturns `Some(Some(schema))` if the action exists and has a schema.",
      "signature": "pub fn action_schema_by_name (& self, name : & str, generator : & mut schemars::SchemaGenerator,) -> Option<Option<schemars::Schema>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::action_schemas",
      "name": "action_schemas",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get all non-internal actions that have been registered, along with their schemas.",
      "documentation": "Get all non-internal actions that have been registered, along with their schemas.",
      "signature": "pub fn action_schemas (& self, generator : & mut schemars::SchemaGenerator,) -> Vec<(& 'static str, Option<schemars::Schema>)>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::activate",
      "name": "activate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Instructs the platform to activate the application by bringing it to the foreground.",
      "documentation": "Instructs the platform to activate the application by bringing it to the foreground.",
      "signature": "pub fn activate (& self, ignoring_other_apps : bool)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::active_drag_cursor_style",
      "name": "active_drag_cursor_style",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Gets the cursor style of the currently active drag operation.",
      "documentation": "Gets the cursor style of the currently active drag operation.",
      "signature": "pub fn active_drag_cursor_style (& self) -> Option<CursorStyle>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::active_window",
      "name": "active_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns a handle to the window that is currently focused at the platform level, if one exists.",
      "documentation": "Returns a handle to the window that is currently focused at the platform level, if one exists.",
      "signature": "pub fn active_window (& self) -> Option<AnyWindowHandle>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::add_recent_document",
      "name": "add_recent_document",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Adds given path to the bottom of the list of recent paths for the application. The list is usually shown on the application icon's context menu in the dock, and allows to open the recent files via that context menu. If the path is already in the list, it will be moved to the bottom of the list.",
      "documentation": "Adds given path to the bottom of the list of recent paths for the application.\nThe list is usually shown on the application icon's context menu in the dock,\nand allows to open the recent files via that context menu.\nIf the path is already in the list, it will be moved to the bottom of the list.",
      "signature": "pub fn add_recent_document (& self, path : & Path)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::all_action_names",
      "name": "all_action_names",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get all action names that have been registered. Note that registration only allows for actions to be built dynamically, and is unrelated to binding actions in the element tree.",
      "documentation": "Get all action names that have been registered. Note that registration only allows for\nactions to be built dynamically, and is unrelated to binding actions in the element tree.",
      "signature": "pub fn all_action_names (& self) -> & [& 'static str]",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::all_bindings_for_input",
      "name": "all_bindings_for_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns key bindings that invoke the given action on the currently focused element, without checking context. Bindings are returned in the order they were added. For display, the last binding should take precedence.",
      "documentation": "Returns key bindings that invoke the given action on the currently focused element, without\nchecking context. Bindings are returned in the order they were added. For display, the last\nbinding should take precedence.",
      "signature": "pub fn all_bindings_for_input (& self, input : & [Keystroke]) -> Vec<KeyBinding>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::app_path",
      "name": "app_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the full pathname of the current app bundle.",
      "documentation": "Returns the full pathname of the current app bundle.\n\nReturns an error if the app is not being run from a bundle.",
      "signature": "pub fn app_path (& self) -> Result<PathBuf>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::assert_no_new_leaks",
      "name": "assert_no_new_leaks",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Asserts that no entities created after `snapshot` still have alive handles.",
      "documentation": "Asserts that no entities created after `snapshot` still have alive handles.\n\nEntities that were already tracked at the time of the snapshot are ignored,\neven if they still have handles. Only *new* entities (those whose\n`EntityId` was not present in the snapshot) are considered leaks.\n\n# Panics\n\nPanics if any new entity handles exist. The panic message lists every\nleaked entity with its type name, and includes allocation-site backtraces\nwhen `LEAK_BACKTRACE` is set.",
      "signature": "pub fn assert_no_new_leaks (& self, snapshot : & LeakDetectorSnapshot)",
      "cfg": [
        "cfg (any (test, feature = \"leak-detection\"))"
      ],
      "target": "App"
    },
    {
      "id": "gpui::app::App::asset_source",
      "name": "asset_source",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Accessor for the application's asset source, which is provided when constructing the `App`.",
      "documentation": "Accessor for the application's asset source, which is provided when constructing the `App`.",
      "signature": "pub fn asset_source (& self) -> & Arc<dyn AssetSource>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::background_executor",
      "name": "background_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Obtains a reference to the executor, which can be used to spawn futures.",
      "documentation": "Obtains a reference to the executor, which can be used to spawn futures.",
      "signature": "pub fn background_executor (& self) -> & BackgroundExecutor",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::bind_keys",
      "name": "bind_keys",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Register key bindings.",
      "documentation": "Register key bindings.",
      "signature": "pub fn bind_keys (& mut self, bindings : impl IntoIterator<Item = KeyBinding>)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::build_action",
      "name": "build_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Build an action from some arbitrary data, typically a keymap entry.",
      "documentation": "Build an action from some arbitrary data, typically a keymap entry.",
      "signature": "pub fn build_action (& self, name : & str, data : Option<serde_json::Value>,) -> std::result::Result<Box<dyn Action>, ActionBuildError>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::button_layout",
      "name": "button_layout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the window button layout configuration when supported.",
      "documentation": "Returns the window button layout configuration when supported.",
      "signature": "pub fn button_layout (& self) -> Option<WindowButtonLayout>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::can_select_mixed_files_and_dirs",
      "name": "can_select_mixed_files_and_dirs",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns `true` if the platform file picker supports selecting a mix of files and directories.",
      "documentation": "Returns `true` if the platform file picker supports selecting a mix of files and directories.",
      "signature": "pub fn can_select_mixed_files_and_dirs (& self) -> bool",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::clear_globals",
      "name": "clear_globals",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Clear all stored globals. Does not notify global observers.",
      "documentation": "Clear all stored globals. Does not notify global observers.",
      "signature": "pub fn clear_globals (& mut self)",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "App"
    },
    {
      "id": "gpui::app::App::clear_key_bindings",
      "name": "clear_key_bindings",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Clear all key bindings in the app.",
      "documentation": "Clear all key bindings in the app.",
      "signature": "pub fn clear_key_bindings (& mut self)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::compositor_name",
      "name": "compositor_name",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "On Linux, returns the name of the compositor in use.",
      "documentation": "On Linux, returns the name of the compositor in use.\n\nReturns an empty string on other platforms.",
      "signature": "pub fn compositor_name (& self) -> & 'static str",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::cursor_hide_mode",
      "name": "cursor_hide_mode",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the current policy for hiding the cursor in response to keyboard input.",
      "documentation": "Returns the current policy for hiding the cursor in response to\nkeyboard input.",
      "signature": "pub fn cursor_hide_mode (& self) -> CursorHideMode",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::default_global",
      "name": "default_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Access the global of the given type mutably. A default value is assigned if a global of this type has not yet been assigned.",
      "documentation": "Access the global of the given type mutably. A default value is assigned if a global of this type has not\nyet been assigned.",
      "signature": "pub fn default_global<G : Global + Default> (& mut self) -> & mut G",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::defer",
      "name": "defer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Schedules the given function to be run at the end of the current effect cycle, allowing entities that are currently on the stack to be returned to the app.",
      "documentation": "Schedules the given function to be run at the end of the current effect cycle, allowing entities\nthat are currently on the stack to be returned to the app.",
      "signature": "pub fn defer (& mut self, f : impl FnOnce (& mut App) + 'static)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::delete_credentials",
      "name": "delete_credentials",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Deletes credentials from the platform keychain.",
      "documentation": "Deletes credentials from the platform keychain.",
      "signature": "pub fn delete_credentials (& self, url : & str) -> Task<Result<()>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::deprecated_actions_to_preferred_actions",
      "name": "deprecated_actions_to_preferred_actions",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get a map from a deprecated action name to the canonical name.",
      "documentation": "Get a map from a deprecated action name to the canonical name.",
      "signature": "pub fn deprecated_actions_to_preferred_actions (& self) -> & HashMap<& 'static str, & 'static str>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::dismiss_system_notification",
      "name": "dismiss_system_notification",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Removes the delivered or pending notification with this tag.",
      "documentation": "Removes the delivered or pending notification with this tag.\n\nBest-effort: some platforms cannot retract a notification once shown,\nin which case it ages out of the notification center on its own.",
      "signature": "pub fn dismiss_system_notification (& self, tag : & str)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::dispatch_action",
      "name": "dispatch_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Dispatch an action to the currently active window or global action handler See [`crate::Action`] for more information on how actions work",
      "documentation": "Dispatch an action to the currently active window or global action handler\nSee [`crate::Action`] for more information on how actions work",
      "signature": "pub fn dispatch_action (& mut self, action : & dyn Action)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::displays",
      "name": "displays",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the list of currently active displays.",
      "documentation": "Returns the list of currently active displays.",
      "signature": "pub fn displays (& self) -> Vec<Rc<dyn PlatformDisplay>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::drop_image",
      "name": "drop_image",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Removes an image from the sprite atlas on all windows.",
      "documentation": "Removes an image from the sprite atlas on all windows.\n\nIf the current window is being updated, it will be removed from `App.windows`, you can use `current_window` to specify the current window.\nThis is a no-op if the image is not in the sprite atlas.",
      "signature": "pub fn drop_image (& mut self, image : Arc<RenderImage>, current_window : Option<& mut Window>)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::fetch_asset",
      "name": "fetch_asset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Asynchronously load an asset, if the asset hasn't finished loading this will return None.",
      "documentation": "Asynchronously load an asset, if the asset hasn't finished loading this will return None.\n\nNote that the multiple calls to this method will only result in one `Asset::load` call at a\ntime, and the results of this call will be cached",
      "signature": "pub fn fetch_asset<A : Asset> (& mut self, source : & A::Source) -> (Shared<Task<A::Output>>, bool)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::find_display",
      "name": "find_display",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the display with the given ID, if one exists.",
      "documentation": "Returns the display with the given ID, if one exists.",
      "signature": "pub fn find_display (& self, id : DisplayId) -> Option<Rc<dyn PlatformDisplay>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::focus_handle",
      "name": "focus_handle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Obtain a new [`FocusHandle`], which allows you to track and manipulate the keyboard focus for elements rendered within this window.",
      "documentation": "Obtain a new [`FocusHandle`], which allows you to track and manipulate the keyboard focus\nfor elements rendered within this window.",
      "signature": "pub fn focus_handle (& self) -> FocusHandle",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::foreground_executor",
      "name": "foreground_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Obtains a reference to the executor, which can be used to spawn futures.",
      "documentation": "Obtains a reference to the executor, which can be used to spawn futures.",
      "signature": "pub fn foreground_executor (& self) -> & ForegroundExecutor",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::get_menus",
      "name": "get_menus",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Gets the menu bar for this application.",
      "documentation": "Gets the menu bar for this application.",
      "signature": "pub fn get_menus (& self) -> Option<Vec<OwnedMenu>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::get_name",
      "name": "get_name",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the name for this [`App`].",
      "documentation": "Returns the name for this [`App`].",
      "signature": "pub fn get_name (& self) -> Option<& 'static str>",
      "cfg": [
        "cfg (any (test, feature = \"test-support\", debug_assertions))"
      ],
      "target": "App"
    },
    {
      "id": "gpui::app::App::global",
      "name": "global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Access the global of the given type. Panics if a global for that type has not been assigned.",
      "documentation": "Access the global of the given type. Panics if a global for that type has not been assigned.",
      "signature": "pub fn global<G : Global> (& self) -> & G",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::global_mut",
      "name": "global_mut",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Access the global of the given type mutably. Panics if a global for that type has not been assigned.",
      "documentation": "Access the global of the given type mutably. Panics if a global for that type has not been assigned.",
      "signature": "pub fn global_mut<G : Global> (& mut self) -> & mut G",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::has_active_drag",
      "name": "has_active_drag",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Is there currently something being dragged?",
      "documentation": "Is there currently something being dragged?",
      "signature": "pub fn has_active_drag (& self) -> bool",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::has_asset",
      "name": "has_asset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Check whether an asset is present in GPUI's cache (loading or loaded), without fetching it.",
      "documentation": "Check whether an asset is present in GPUI's cache (loading or loaded),\nwithout fetching it.",
      "signature": "pub fn has_asset<A : Asset> (& self, source : & A::Source) -> bool",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "App"
    },
    {
      "id": "gpui::app::App::has_global",
      "name": "has_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Check whether a global of the given type has been assigned.",
      "documentation": "Check whether a global of the given type has been assigned.",
      "signature": "pub fn has_global<G : Global> (& self) -> bool",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::hide",
      "name": "hide",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Hide the application at the platform level. May do nothing on mobile; use [`Self::try_hide`] to receive a refusal.",
      "documentation": "Hide the application at the platform level.\nMay do nothing on mobile; use [`Self::try_hide`] to receive a refusal.",
      "signature": "pub fn hide (& self)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::hide_other_apps",
      "name": "hide_other_apps",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Hide other applications at the platform level. May do nothing on mobile; use [`Self::try_hide_other_apps`].",
      "documentation": "Hide other applications at the platform level.\nMay do nothing on mobile; use [`Self::try_hide_other_apps`].",
      "signature": "pub fn hide_other_apps (& self)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::http_client",
      "name": "http_client",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the HTTP client for the application.",
      "documentation": "Returns the HTTP client for the application.",
      "signature": "pub fn http_client (& self) -> Arc<dyn HttpClient>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::init_colors",
      "name": "init_colors",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Initializes gpui's default colors for the application.",
      "documentation": "Initializes gpui's default colors for the application.\n\nThese colors can be accessed through `cx.default_colors()`.",
      "signature": "pub fn init_colors (& mut self)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::intercept_keystrokes",
      "name": "intercept_keystrokes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Register a callback to be invoked when a keystroke is received by the application in any window. Note that this fires _before_ all other action and event mechanisms have resolved unlike [`App::observe_keystrokes`] which fires after. This means that `cx.stop_propagation` calls within interceptors will prevent action dispatch",
      "documentation": "Register a callback to be invoked when a keystroke is received by the application\nin any window. Note that this fires _before_ all other action and event mechanisms have resolved\nunlike [`App::observe_keystrokes`] which fires after. This means that `cx.stop_propagation` calls\nwithin interceptors will prevent action dispatch",
      "signature": "pub fn intercept_keystrokes (& mut self, mut f : impl FnMut (& KeystrokeEvent, & mut Window, & mut App) + 'static,) -> Subscription",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::is_action_available",
      "name": "is_action_available",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Checks if the given action is bound in the current context, as defined by the app's current focus, the bindings in the element tree, and any global action listeners.",
      "documentation": "Checks if the given action is bound in the current context, as defined by the app's current focus,\nthe bindings in the element tree, and any global action listeners.",
      "signature": "pub fn is_action_available (& mut self, action : & dyn Action) -> bool",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::is_cursor_visible",
      "name": "is_cursor_visible",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns whether the cursor is currently visible according to the platform. This will report `false` after a keyboard input has hidden the cursor and the user has not yet moved the mouse to restore it.",
      "documentation": "Returns whether the cursor is currently visible according to the\nplatform. This will report `false` after a keyboard input has hidden\nthe cursor and the user has not yet moved the mouse to restore it.\n\nSee [`App::set_cursor_hide_mode`].",
      "signature": "pub fn is_cursor_visible (& self) -> bool",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::is_screen_capture_supported",
      "name": "is_screen_capture_supported",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns whether `screen_capture_sources` may work.",
      "documentation": "Returns whether `screen_capture_sources` may work.",
      "signature": "pub fn is_screen_capture_supported (& self) -> bool",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::key_bindings",
      "name": "key_bindings",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get all key bindings in the app.",
      "documentation": "Get all key bindings in the app.",
      "signature": "pub fn key_bindings (& self) -> Rc<RefCell<Keymap>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::keyboard_layout",
      "name": "keyboard_layout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get the id of the current keyboard layout",
      "documentation": "Get the id of the current keyboard layout",
      "signature": "pub fn keyboard_layout (& self) -> & dyn PlatformKeyboardLayout",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::keyboard_mapper",
      "name": "keyboard_mapper",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get the current keyboard mapper.",
      "documentation": "Get the current keyboard mapper.",
      "signature": "pub fn keyboard_mapper (& self) -> & Rc<dyn PlatformKeyboardMapper>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::leak_detector_snapshot",
      "name": "leak_detector_snapshot",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Captures a snapshot of all entities that currently have alive handles.",
      "documentation": "Captures a snapshot of all entities that currently have alive handles.\n\nThe returned [`LeakDetectorSnapshot`] can later be passed to\n[`assert_no_new_leaks`](Self::assert_no_new_leaks) to verify that no\nentities created after the snapshot are still alive.",
      "signature": "pub fn leak_detector_snapshot (& self) -> LeakDetectorSnapshot",
      "cfg": [
        "cfg (any (test, feature = \"leak-detection\"))"
      ],
      "target": "App"
    },
    {
      "id": "gpui::app::App::notify",
      "name": "notify",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Tell GPUI that an entity has changed and observers of it should be notified.",
      "documentation": "Tell GPUI that an entity has changed and observers of it should be notified.",
      "signature": "pub fn notify (& mut self, entity_id : EntityId)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::observe",
      "name": "observe",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Arrange a callback to be invoked when the given entity calls `notify` on its respective context.",
      "documentation": "Arrange a callback to be invoked when the given entity calls `notify` on its respective context.",
      "signature": "pub fn observe<W> (& mut self, entity : & Entity<W>, mut on_notify : impl FnMut (Entity<W>, & mut App) + 'static,) -> Subscription where W : 'static,",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::observe_global",
      "name": "observe_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Register a callback to be invoked when a global of the given type is updated.",
      "documentation": "Register a callback to be invoked when a global of the given type is updated.",
      "signature": "pub fn observe_global<G : Global> (& mut self, mut f : impl FnMut (& mut Self) + 'static,) -> Subscription",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::observe_keystrokes",
      "name": "observe_keystrokes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Register a callback to be invoked when a keystroke is received by the application in any window. Note that this fires after all other action and event mechanisms have resolved and that this API will not be invoked if the event's propagation is stopped.",
      "documentation": "Register a callback to be invoked when a keystroke is received by the application\nin any window. Note that this fires after all other action and event mechanisms have resolved\nand that this API will not be invoked if the event's propagation is stopped.",
      "signature": "pub fn observe_keystrokes (& mut self, mut f : impl FnMut (& KeystrokeEvent, & mut Window, & mut App) + 'static,) -> Subscription",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::observe_new",
      "name": "observe_new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Arrange for the given function to be invoked whenever a view of the specified type is created. The function will be passed a mutable reference to the view along with an appropriate context.",
      "documentation": "Arrange for the given function to be invoked whenever a view of the specified type is created.\nThe function will be passed a mutable reference to the view along with an appropriate context.",
      "signature": "pub fn observe_new<T : 'static> (& self, on_new : impl 'static + Fn (& mut T, Option<& mut Window>, & mut Context<T>),) -> Subscription",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::observe_release",
      "name": "observe_release",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Observe the release of a entity. The callback is invoked after the entity has no more strong references but before it has been dropped.",
      "documentation": "Observe the release of a entity. The callback is invoked after the entity\nhas no more strong references but before it has been dropped.",
      "signature": "pub fn observe_release<T> (& self, handle : & Entity<T>, on_release : impl FnOnce (& mut T, & mut App) + 'static,) -> Subscription where T : 'static,",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::observe_release_in",
      "name": "observe_release_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Observe the release of a entity. The callback is invoked after the entity has no more strong references but before it has been dropped.",
      "documentation": "Observe the release of a entity. The callback is invoked after the entity\nhas no more strong references but before it has been dropped.",
      "signature": "pub fn observe_release_in<T> (& self, handle : & Entity<T>, window : & Window, on_release : impl FnOnce (& mut T, & mut Window, & mut App) + 'static,) -> Subscription where T : 'static,",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::on_action",
      "name": "on_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Register a global handler for actions invoked via the keyboard. These handlers are run at the end of the bubble phase for actions, and so will only be invoked if there are no other handlers or if they called `cx.propagate()`.",
      "documentation": "Register a global handler for actions invoked via the keyboard. These handlers are run at\nthe end of the bubble phase for actions, and so will only be invoked if there are no other\nhandlers or if they called `cx.propagate()`.",
      "signature": "pub fn on_action<A : Action> (& mut self, listener : impl Fn (& A, & mut Self) + 'static,) -> & mut Self",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::on_app_quit",
      "name": "on_app_quit",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Register a callback to be invoked when the application is about to quit. It is not possible to cancel the quit event at this point.",
      "documentation": "Register a callback to be invoked when the application is about to quit.\nIt is not possible to cancel the quit event at this point.",
      "signature": "pub fn on_app_quit<Fut> (& self, mut on_quit : impl FnMut (& mut App) -> Fut + 'static,) -> Subscription where Fut : 'static + Future<Output = ()>,",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::on_app_restart",
      "name": "on_app_restart",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Register a callback to be invoked when the application is about to restart.",
      "documentation": "Register a callback to be invoked when the application is about to restart.\n\nThese callbacks are called before any `on_app_quit` callbacks.",
      "signature": "pub fn on_app_restart (& self, mut on_restart : impl 'static + FnMut (& mut App)) -> Subscription",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::on_keyboard_layout_change",
      "name": "on_keyboard_layout_change",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Invokes a handler when the current keyboard layout changes",
      "documentation": "Invokes a handler when the current keyboard layout changes",
      "signature": "pub fn on_keyboard_layout_change<F> (& self, mut callback : F) -> Subscription where F : 'static + FnMut (& mut App),",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::on_system_notification_response",
      "name": "on_system_notification_response",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Registers the handler invoked when the user activates a system notification, either by clicking its body or one of its action buttons. Subsequent registrations replace the handler.",
      "documentation": "Registers the handler invoked when the user activates a system\nnotification, either by clicking its body or one of its action\nbuttons. Subsequent registrations replace the handler.",
      "signature": "pub fn on_system_notification_response<F> (& self, mut callback : F) where F : 'static + FnMut (SystemNotificationResponse, & mut App),",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::on_thermal_state_change",
      "name": "on_thermal_state_change",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Invokes a handler when the thermal state changes",
      "documentation": "Invokes a handler when the thermal state changes",
      "signature": "pub fn on_thermal_state_change<F> (& self, mut callback : F) -> Subscription where F : 'static + FnMut (& mut App),",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::on_window_closed",
      "name": "on_window_closed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Register a callback to be invoked when a window is closed The window is no longer accessible at the point this callback is invoked.",
      "documentation": "Register a callback to be invoked when a window is closed\nThe window is no longer accessible at the point this callback is invoked.",
      "signature": "pub fn on_window_closed (& self, mut on_closed : impl FnMut (& mut App, WindowId) + 'static,) -> Subscription",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::open_url",
      "name": "open_url",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Directs the platform's default browser to open the given URL.",
      "documentation": "Directs the platform's default browser to open the given URL.",
      "signature": "pub fn open_url (& self, url : & str)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::open_window",
      "name": "open_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Opens a new window with the given option and the root view returned by the given function. The function is invoked with a `Window`, which can be used to interact with window-specific functionality.",
      "documentation": "Opens a new window with the given option and the root view returned by the given function.\nThe function is invoked with a `Window`, which can be used to interact with window-specific\nfunctionality.",
      "signature": "pub fn open_window<V : 'static + Render> (& mut self, options : crate::WindowOptions, build_root_view : impl FnOnce (& mut Window, & mut App) -> Entity<V>,) -> anyhow::Result<WindowHandle<V>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::open_with_system",
      "name": "open_with_system",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Opens the specified path with the system's default application. May do nothing on mobile; use [`Self::try_open_with_system`].",
      "documentation": "Opens the specified path with the system's default application.\nMay do nothing on mobile; use [`Self::try_open_with_system`].",
      "signature": "pub fn open_with_system (& self, path : & Path)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::path_for_auxiliary_executable",
      "name": "path_for_auxiliary_executable",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the file URL of the executable with the specified name in the application bundle",
      "documentation": "Returns the file URL of the executable with the specified name in the application bundle",
      "signature": "pub fn path_for_auxiliary_executable (& self, name : & str) -> Result<PathBuf>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::perform_dock_menu_action",
      "name": "perform_dock_menu_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Performs the action associated with the given dock menu item, only used on Windows for now.",
      "documentation": "Performs the action associated with the given dock menu item, only used on Windows for now.",
      "signature": "pub fn perform_dock_menu_action (& self, action : usize)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::primary_display",
      "name": "primary_display",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the primary display that will be used for new windows.",
      "documentation": "Returns the primary display that will be used for new windows.",
      "signature": "pub fn primary_display (& self) -> Option<Rc<dyn PlatformDisplay>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::prompt_for_new_path",
      "name": "prompt_for_new_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Displays a platform modal for selecting a new path where a file can be saved.",
      "documentation": "Displays a platform modal for selecting a new path where a file can be saved.\n\nThe provided directory will be used to set the initial location.\nWhen a path is selected, it is relayed asynchronously via the returned oneshot channel.\nIf cancelled, a `None` will be relayed instead.\nMay return an error on Linux if the file picker couldn't be opened.",
      "signature": "pub fn prompt_for_new_path (& self, directory : & Path, suggested_name : Option<& str>,) -> oneshot::Receiver<Result<Option<PathBuf>>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::prompt_for_paths",
      "name": "prompt_for_paths",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Displays a platform modal for selecting paths.",
      "documentation": "Displays a platform modal for selecting paths.\n\nWhen one or more paths are selected, they'll be relayed asynchronously via the returned oneshot channel.\nIf cancelled, a `None` will be relayed instead.\nMay return an error on Linux if the file picker couldn't be opened.",
      "signature": "pub fn prompt_for_paths (& self, options : PathPromptOptions,) -> oneshot::Receiver<Result<Option<Vec<PathBuf>>>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::propagate",
      "name": "propagate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Action handlers stop propagation by default during the bubble phase of action dispatch dispatching to action handlers higher in the element tree. This is the opposite of [`Self::stop_propagation`]. It's also possible to cancel a call to [`Self::stop_propagation`] by calling this method before effects are flushed.",
      "documentation": "Action handlers stop propagation by default during the bubble phase of action dispatch\ndispatching to action handlers higher in the element tree. This is the opposite of\n[`Self::stop_propagation`]. It's also possible to cancel a call to [`Self::stop_propagation`] by calling\nthis method before effects are flushed.",
      "signature": "pub fn propagate (& mut self)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::quit",
      "name": "quit",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Gracefully quit the application via the platform's standard routine. May do nothing on mobile; use [`Self::try_quit`] to receive a refusal.",
      "documentation": "Gracefully quit the application via the platform's standard routine.\nMay do nothing on mobile; use [`Self::try_quit`] to receive a refusal.",
      "signature": "pub fn quit (& self)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::read_credentials",
      "name": "read_credentials",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Reads credentials from the platform keychain.",
      "documentation": "Reads credentials from the platform keychain.",
      "signature": "pub fn read_credentials (& self, url : & str) -> Task<Result<Option<(String, Vec<u8>)>>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::read_from_clipboard",
      "name": "read_from_clipboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Reads data from the platform clipboard.",
      "documentation": "Reads data from the platform clipboard.",
      "signature": "pub fn read_from_clipboard (& self) -> Option<ClipboardItem>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::read_from_find_pasteboard",
      "name": "read_from_find_pasteboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Reads data from macOS's \"Find\" pasteboard.",
      "documentation": "Reads data from macOS's \"Find\" pasteboard.\n\nUsed to share the current search string between apps.\n\n<https://developer.apple.com/documentation/appkit/nspasteboard/name-swift.struct/find>",
      "signature": "pub fn read_from_find_pasteboard (& self) -> Option<ClipboardItem>",
      "cfg": [
        "cfg (target_os = \"macos\")"
      ],
      "target": "App"
    },
    {
      "id": "gpui::app::App::read_from_primary",
      "name": "read_from_primary",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Reads data from the primary selection buffer. Only available on Linux.",
      "documentation": "Reads data from the primary selection buffer.\nOnly available on Linux.",
      "signature": "pub fn read_from_primary (& self) -> Option<ClipboardItem>",
      "cfg": [
        "cfg (any (target_os = \"linux\", target_os = \"freebsd\"))"
      ],
      "target": "App"
    },
    {
      "id": "gpui::app::App::reduce_motion",
      "name": "reduce_motion",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns whether non-essential animations (e.g. loading spinners) should be rendered in a static state instead of animating.",
      "documentation": "Returns whether non-essential animations (e.g. loading spinners) should\nbe rendered in a static state instead of animating.",
      "signature": "pub fn reduce_motion (& self) -> bool",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::ref_counts_drop_handle",
      "name": "ref_counts_drop_handle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ref_counts_drop_handle (& self) -> impl Sized + use<>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::refresh_windows",
      "name": "refresh_windows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Schedules all windows in the application to be redrawn. This can be called multiple times in an update cycle and still result in a single redraw.",
      "documentation": "Schedules all windows in the application to be redrawn. This can be called\nmultiple times in an update cycle and still result in a single redraw.",
      "signature": "pub fn refresh_windows (& mut self)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::register_inspector_element",
      "name": "register_inspector_element",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Registers a renderer specific to an inspector state.",
      "documentation": "Registers a renderer specific to an inspector state.",
      "signature": "pub fn register_inspector_element<T : 'static, R : crate::IntoElement> (& mut self, f : impl 'static + Fn (crate::InspectorElementId, & T, & mut Window, & mut App) -> R,)",
      "cfg": [
        "cfg (any (feature = \"inspector\", debug_assertions))"
      ],
      "target": "App"
    },
    {
      "id": "gpui::app::App::register_url_scheme",
      "name": "register_url_scheme",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Registers the given URL scheme (e.g. `zed` for `zed://` urls) to be opened by the current app.",
      "documentation": "Registers the given URL scheme (e.g. `zed` for `zed://` urls) to be\nopened by the current app.\n\nOn some platforms (e.g. macOS) you may be able to register URL schemes\nas part of app distribution, but this method exists to let you register\nschemes at runtime.",
      "signature": "pub fn register_url_scheme (& self, scheme : & str) -> Task<Result<()>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::remove_asset",
      "name": "remove_asset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Remove an asset from GPUI's cache",
      "documentation": "Remove an asset from GPUI's cache",
      "signature": "pub fn remove_asset<A : Asset> (& mut self, source : & A::Source)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::remove_global",
      "name": "remove_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Remove the global of the given type from the app context. Does not notify global observers.",
      "documentation": "Remove the global of the given type from the app context. Does not notify global observers.",
      "signature": "pub fn remove_global<G : Global> (& mut self) -> G",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::reset_prompt_builder",
      "name": "reset_prompt_builder",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Reset the prompt builder to the default implementation.",
      "documentation": "Reset the prompt builder to the default implementation.",
      "signature": "pub fn reset_prompt_builder (& mut self)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::restart",
      "name": "restart",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Restarts the application. May do nothing on mobile; use [`Self::try_restart`] to avoid notifying restart observers when the platform cannot restart.",
      "documentation": "Restarts the application.\nMay do nothing on mobile; use [`Self::try_restart`] to avoid notifying\nrestart observers when the platform cannot restart.",
      "signature": "pub fn restart (& mut self)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::reveal_path",
      "name": "reveal_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Reveals the specified path at the platform level, such as in Finder on macOS. May do nothing on mobile; use [`Self::try_reveal_path`].",
      "documentation": "Reveals the specified path at the platform level, such as in Finder on macOS.\nMay do nothing on mobile; use [`Self::try_reveal_path`].",
      "signature": "pub fn reveal_path (& self, path : & Path)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::screen_capture_sources",
      "name": "screen_capture_sources",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns a list of available screen capture sources.",
      "documentation": "Returns a list of available screen capture sources.",
      "signature": "pub fn screen_capture_sources (& self,) -> oneshot::Receiver<Result<Vec<Rc<dyn ScreenCaptureSource>>>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_active_drag_cursor_style",
      "name": "set_active_drag_cursor_style",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Sets the cursor style for the currently active drag operation.",
      "documentation": "Sets the cursor style for the currently active drag operation.",
      "signature": "pub fn set_active_drag_cursor_style (& mut self, cursor_style : CursorStyle, window : & mut Window,) -> bool",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_app_identity",
      "name": "set_app_identity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Sets the application's process-wide identity and user-visible name.",
      "documentation": "Sets the application's process-wide identity and user-visible name.\n\nThe identifier is used for platform identity mechanisms such as the\nWindows AppUserModelID. The name is used wherever the operating system\npresents the application to the user. Call this once, early in startup,\nbefore opening windows or posting notifications.",
      "signature": "pub fn set_app_identity (& self, identifier : & str, name : & str)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_cursor_hide_mode",
      "name": "set_cursor_hide_mode",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Sets the policy controlling when GPUI hides the cursor in response to keyboard input.",
      "documentation": "Sets the policy controlling when GPUI hides the cursor in response\nto keyboard input.",
      "signature": "pub fn set_cursor_hide_mode (& mut self, mode : CursorHideMode)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_dock_menu",
      "name": "set_dock_menu",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Sets the right click menu for the app icon in the dock May do nothing on mobile; use [`Self::try_set_dock_menu`].",
      "documentation": "Sets the right click menu for the app icon in the dock\nMay do nothing on mobile; use [`Self::try_set_dock_menu`].",
      "signature": "pub fn set_dock_menu (& self, menus : Vec<MenuItem>)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_global",
      "name": "set_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Sets the value of the global of the given type.",
      "documentation": "Sets the value of the global of the given type.",
      "signature": "pub fn set_global<G : Global> (& mut self, global : G)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_http_client",
      "name": "set_http_client",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Sets the HTTP client for the application.",
      "documentation": "Sets the HTTP client for the application.",
      "signature": "pub fn set_http_client (& mut self, new_client : Arc<dyn HttpClient>)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_inspector_renderer",
      "name": "set_inspector_renderer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Sets the renderer for the inspector.",
      "documentation": "Sets the renderer for the inspector.",
      "signature": "pub fn set_inspector_renderer (& mut self, f : crate::InspectorRenderer)",
      "cfg": [
        "cfg (any (feature = \"inspector\", debug_assertions))"
      ],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_menus",
      "name": "set_menus",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Sets the menu bar for this application. This will replace any existing menu bar.",
      "documentation": "Sets the menu bar for this application. This will replace any existing menu bar.",
      "signature": "pub fn set_menus (& self, menus : impl IntoIterator<Item = Menu>)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_prompt_builder",
      "name": "set_prompt_builder",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Set the prompt renderer for GPUI. This will replace the default or platform specific prompts with this custom implementation.",
      "documentation": "Set the prompt renderer for GPUI. This will replace the default or platform specific\nprompts with this custom implementation.",
      "signature": "pub fn set_prompt_builder (& mut self, renderer : impl Fn (PromptLevel, & str, Option<& str>, & [PromptButton], PromptHandle, & mut Window, & mut App,) -> RenderablePromptHandle + 'static,)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_quit_mode",
      "name": "set_quit_mode",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Configures when the application should automatically quit. By default, [`QuitMode::Default`] is used.",
      "documentation": "Configures when the application should automatically quit.\nBy default, [`QuitMode::Default`] is used.",
      "signature": "pub fn set_quit_mode (& mut self, mode : QuitMode)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_reduce_motion",
      "name": "set_reduce_motion",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Sets whether non-essential animations (e.g. loading spinners) should be rendered in a static state instead of animating.",
      "documentation": "Sets whether non-essential animations (e.g. loading spinners) should be\nrendered in a static state instead of animating.",
      "signature": "pub fn set_reduce_motion (& mut self, reduce_motion : bool)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_restart_path",
      "name": "set_restart_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Sets the path to use when restarting the application.",
      "documentation": "Sets the path to use when restarting the application.",
      "signature": "pub fn set_restart_path (& mut self, path : PathBuf)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_text_rendering_mode",
      "name": "set_text_rendering_mode",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Sets the text rendering mode for the application.",
      "documentation": "Sets the text rendering mode for the application.",
      "signature": "pub fn set_text_rendering_mode (& mut self, mode : TextRenderingMode)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::set_window_appearance",
      "name": "set_window_appearance",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Overrides the appearance (light/dark) applied to the app's windows, independent of the OS-wide setting. Pass `None` to clear the override and follow the system again. The current value is reported by [`App::window_appearance`].",
      "documentation": "Overrides the appearance (light/dark) applied to the app's windows, independent of\nthe OS-wide setting. Pass `None` to clear the override and follow the system again.\nThe current value is reported by [`App::window_appearance`].\n\nOn macOS this sets the underlying `NSApplication.appearance`, which controls the\nnative window chrome (the window border and titlebar) of every window. Use this\nwhen the app uses a dark theme while the system is in light mode (or vice versa)\nso the window edges render to match the theme. While an appearance is forced,\nwindows stop tracking system light/dark changes; pass `None` to resume following\nthe system. On other platforms this is a no-op.",
      "signature": "pub fn set_window_appearance (& self, appearance : Option<WindowAppearance>)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::should_auto_hide_scrollbars",
      "name": "should_auto_hide_scrollbars",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns whether the user has configured scrollbars to auto-hide at the platform level.",
      "documentation": "Returns whether the user has configured scrollbars to auto-hide at the platform level.",
      "signature": "pub fn should_auto_hide_scrollbars (& self) -> bool",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::show_system_notification",
      "name": "show_system_notification",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Posts a notification to the operating system's notification center.",
      "documentation": "Posts a notification to the operating system's notification center.\n\nPosting a notification whose [`SystemNotification::tag`] matches an\nearlier one replaces that notification where the platform supports it.\nNo-op on platforms without notification support, or when delivery is\nunavailable (e.g. authorization was denied).",
      "signature": "pub fn show_system_notification (& self, notification : SystemNotification)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::shutdown",
      "name": "shutdown",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Quit the application gracefully. Handlers registered with [`Context::on_app_quit`] will be given `SHUTDOWN_TIMEOUT` to complete before exiting.",
      "documentation": "Quit the application gracefully. Handlers registered with [`Context::on_app_quit`]\nwill be given `SHUTDOWN_TIMEOUT` to complete before exiting.",
      "signature": "pub fn shutdown (& mut self)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::spawn",
      "name": "spawn",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Spawns the future returned by the given function on the main thread. The closure will be invoked with [AsyncApp], which allows the application state to be accessed across await points.",
      "documentation": "Spawns the future returned by the given function on the main thread. The closure will be invoked\nwith [AsyncApp], which allows the application state to be accessed across await points.",
      "signature": "pub fn spawn<AsyncFn, R> (& self, f : AsyncFn) -> Task<R> where AsyncFn : AsyncFnOnce (& mut AsyncApp) -> R + 'static, R : 'static,",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::spawn_with_priority",
      "name": "spawn_with_priority",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Spawns the future returned by the given function on the main thread with the given priority. The closure will be invoked with [AsyncApp], which allows the application state to be accessed across await points.",
      "documentation": "Spawns the future returned by the given function on the main thread with\nthe given priority. The closure will be invoked with [AsyncApp], which\nallows the application state to be accessed across await points.",
      "signature": "pub fn spawn_with_priority<AsyncFn, R> (& self, priority : Priority, f : AsyncFn) -> Task<R> where AsyncFn : AsyncFnOnce (& mut AsyncApp) -> R + 'static, R : 'static,",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::stop_active_drag",
      "name": "stop_active_drag",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Stops active drag and clears any related effects.",
      "documentation": "Stops active drag and clears any related effects.",
      "signature": "pub fn stop_active_drag (& mut self, window : & mut Window) -> bool",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::stop_propagation",
      "name": "stop_propagation",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Event handlers propagate events by default. Call this method to stop dispatching to event handlers with a lower z-index (mouse) or higher in the tree (keyboard). This is the opposite of [`Self::propagate`]. It's also possible to cancel a call to [`Self::propagate`] by calling this method before effects are flushed.",
      "documentation": "Event handlers propagate events by default. Call this method to stop dispatching to\nevent handlers with a lower z-index (mouse) or higher in the tree (keyboard). This is\nthe opposite of [`Self::propagate`]. It's also possible to cancel a call to [`Self::propagate`] by\ncalling this method before effects are flushed.",
      "signature": "pub fn stop_propagation (& mut self)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::subscribe",
      "name": "subscribe",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Arrange for the given callback to be invoked whenever the given entity emits an event of a given type. The callback is provided a handle to the emitting entity and a reference to the emitted event.",
      "documentation": "Arrange for the given callback to be invoked whenever the given entity emits an event of a given type.\nThe callback is provided a handle to the emitting entity and a reference to the emitted event.",
      "signature": "pub fn subscribe<T, Event> (& mut self, entity : & Entity<T>, mut on_event : impl FnMut (Entity<T>, & Event, & mut App) + 'static,) -> Subscription where T : 'static + EventEmitter<Event>, Event : 'static,",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::svg_renderer",
      "name": "svg_renderer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the SVG renderer used by the application.",
      "documentation": "Returns the SVG renderer used by the application.",
      "signature": "pub fn svg_renderer (& self) -> SvgRenderer",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::text_rendering_mode",
      "name": "text_rendering_mode",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the current text rendering mode for the application.",
      "documentation": "Returns the current text rendering mode for the application.",
      "signature": "pub fn text_rendering_mode (& self) -> TextRenderingMode",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::text_system",
      "name": "text_system",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Accessor for the text system.",
      "documentation": "Accessor for the text system.",
      "signature": "pub fn text_system (& self) -> & Arc<TextSystem>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::thermal_state",
      "name": "thermal_state",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the current thermal state of the system.",
      "documentation": "Returns the current thermal state of the system.",
      "signature": "pub fn thermal_state (& self) -> ThermalState",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::to_async",
      "name": "to_async",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Creates an `AsyncApp`, which can be cloned and has a static lifetime so it can be held across `await` points.",
      "documentation": "Creates an `AsyncApp`, which can be cloned and has a static lifetime\nso it can be held across `await` points.",
      "signature": "pub fn to_async (& self) -> AsyncApp",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::try_global",
      "name": "try_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Access the global of the given type if a value has been assigned.",
      "documentation": "Access the global of the given type if a value has been assigned.",
      "signature": "pub fn try_global<G : Global> (& self) -> Option<& G>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::try_hide",
      "name": "try_hide",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Checks and requests application hiding on the owner UI thread.",
      "documentation": "Checks and requests application hiding on the owner UI thread.",
      "signature": "pub fn try_hide (& self) -> Result<(), crate::PlatformOperationError>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::try_hide_other_apps",
      "name": "try_hide_other_apps",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Checks and requests hiding other applications on the owner UI thread.",
      "documentation": "Checks and requests hiding other applications on the owner UI thread.",
      "signature": "pub fn try_hide_other_apps (& self) -> Result<(), crate::PlatformOperationError>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::try_open_with_system",
      "name": "try_open_with_system",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Checks and requests opening a path on the owner UI thread. Success means the request was issued, not that the external application opened it.",
      "documentation": "Checks and requests opening a path on the owner UI thread. Success means\nthe request was issued, not that the external application opened it.",
      "signature": "pub fn try_open_with_system (& self, path : & Path) -> Result<(), crate::PlatformOperationError>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::try_quit",
      "name": "try_quit",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Checks and requests quit on the owner UI thread. Success means accepted, not that the OS has finished terminating the application.",
      "documentation": "Checks and requests quit on the owner UI thread. Success means accepted,\nnot that the OS has finished terminating the application.",
      "signature": "pub fn try_quit (& self) -> Result<(), crate::PlatformOperationError>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::try_restart",
      "name": "try_restart",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Checks restart before notifying observers or consuming the restart path.",
      "documentation": "Checks restart before notifying observers or consuming the restart path.",
      "signature": "pub fn try_restart (& mut self) -> Result<(), crate::PlatformOperationError>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::try_reveal_path",
      "name": "try_reveal_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Checks and requests path reveal on the owner UI thread.",
      "documentation": "Checks and requests path reveal on the owner UI thread.",
      "signature": "pub fn try_reveal_path (& self, path : & Path) -> Result<(), crate::PlatformOperationError>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::try_set_dock_menu",
      "name": "try_set_dock_menu",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Checks and installs a dock menu on the owner UI thread.",
      "documentation": "Checks and installs a dock menu on the owner UI thread.",
      "signature": "pub fn try_set_dock_menu (& self, menus : Vec<MenuItem>,) -> Result<(), crate::PlatformOperationError>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::try_unhide_other_apps",
      "name": "try_unhide_other_apps",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Checks and requests unhiding other applications on the owner UI thread.",
      "documentation": "Checks and requests unhiding other applications on the owner UI thread.",
      "signature": "pub fn try_unhide_other_apps (& self) -> Result<(), crate::PlatformOperationError>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::unhide_other_apps",
      "name": "unhide_other_apps",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Unhide other applications at the platform level. May do nothing on mobile; use [`Self::try_unhide_other_apps`].",
      "documentation": "Unhide other applications at the platform level.\nMay do nothing on mobile; use [`Self::try_unhide_other_apps`].",
      "signature": "pub fn unhide_other_apps (& self)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::update_jump_list",
      "name": "update_jump_list",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Updates the jump list with the updated list of recent paths for the application, only used on Windows for now. Note that this also sets the dock menu on Windows.",
      "documentation": "Updates the jump list with the updated list of recent paths for the application, only used on Windows for now.\nNote that this also sets the dock menu on Windows.",
      "signature": "pub fn update_jump_list (& self, menus : Vec<MenuItem>, entries : Vec<SmallVec<[PathBuf; 2]>>,) -> Task<Vec<SmallVec<[PathBuf; 2]>>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::window_appearance",
      "name": "window_appearance",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the appearance of the application's windows.",
      "documentation": "Returns the appearance of the application's windows.",
      "signature": "pub fn window_appearance (& self) -> WindowAppearance",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::window_stack",
      "name": "window_stack",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the window handles ordered by their appearance on screen, front to back.",
      "documentation": "Returns the window handles ordered by their appearance on screen, front to back.\n\nThe first window in the returned list is the active/topmost window of the application.\n\nThis method returns None if the platform doesn't implement the method yet.",
      "signature": "pub fn window_stack (& self) -> Option<Vec<AnyWindowHandle>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::windows",
      "name": "windows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns handles to all open windows in the application. Each handle could be downcast to a handle typed for the root view of that window. To find all windows of a given type, you could filter on",
      "documentation": "Returns handles to all open windows in the application.\nEach handle could be downcast to a handle typed for the root view of that window.\nTo find all windows of a given type, you could filter on",
      "signature": "pub fn windows (& self) -> Vec<AnyWindowHandle>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::with_window",
      "name": "with_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Run `f` against the entity's *current* window — the most recently rendered window that referenced the entity, or its creation window if it has yet to be rendered. Returns `None` if the entity has no current window, or if that window has been closed, or if it is already on the update stack.",
      "documentation": "Run `f` against the entity's *current* window — the most recently\nrendered window that referenced the entity, or its creation window if\nit has yet to be rendered. Returns `None` if the entity has no\ncurrent window, or if that window has been closed, or if it is\nalready on the update stack.",
      "signature": "pub fn with_window<R> (& mut self, entity_id : EntityId, f : impl FnOnce (& mut Window, & mut App) -> R,) -> Option<R>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::write_credentials",
      "name": "write_credentials",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Writes credentials to the platform keychain.",
      "documentation": "Writes credentials to the platform keychain.",
      "signature": "pub fn write_credentials (& self, url : & str, username : & str, password : & [u8],) -> Task<Result<()>>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::write_to_clipboard",
      "name": "write_to_clipboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Writes data to the platform clipboard.",
      "documentation": "Writes data to the platform clipboard.",
      "signature": "pub fn write_to_clipboard (& self, item : ClipboardItem)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::app::App::write_to_find_pasteboard",
      "name": "write_to_find_pasteboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Writes data to macOS's \"Find\" pasteboard.",
      "documentation": "Writes data to macOS's \"Find\" pasteboard.\n\nUsed to share the current search string between apps.\n\n<https://developer.apple.com/documentation/appkit/nspasteboard/name-swift.struct/find>",
      "signature": "pub fn write_to_find_pasteboard (& self, item : ClipboardItem)",
      "cfg": [
        "cfg (target_os = \"macos\")"
      ],
      "target": "App"
    },
    {
      "id": "gpui::app::App::write_to_primary",
      "name": "write_to_primary",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Writes data to the primary selection buffer. Only available on Linux.",
      "documentation": "Writes data to the primary selection buffer.\nOnly available on Linux.",
      "signature": "pub fn write_to_primary (& self, item : ClipboardItem)",
      "cfg": [
        "cfg (any (target_os = \"linux\", target_os = \"freebsd\"))"
      ],
      "target": "App"
    },
    {
      "id": "gpui::app::AppCell",
      "name": "AppCell",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Temporary(?) wrapper around [`RefCell<App>`] to help us debug any double borrows. Strongly consider removing after stabilization.",
      "documentation": "Temporary(?) wrapper around [`RefCell<App>`] to help us debug any double borrows.\nStrongly consider removing after stabilization.",
      "signature": "# [doc = \" Temporary(?) wrapper around [`RefCell<App>`] to help us debug any double borrows.\"] # [doc = \" Strongly consider removing after stabilization.\"] # [doc (hidden)] pub struct AppCell { app : RefCell<App>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::AppCell::borrow",
      "name": "borrow",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn borrow (& self) -> AppRef<'_>",
      "cfg": [],
      "target": "AppCell"
    },
    {
      "id": "gpui::app::AppCell::borrow_mut",
      "name": "borrow_mut",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn borrow_mut (& self) -> AppRefMut<'_>",
      "cfg": [],
      "target": "AppCell"
    },
    {
      "id": "gpui::app::AppCell::try_borrow_mut",
      "name": "try_borrow_mut",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn try_borrow_mut (& self) -> Result<AppRefMut<'_>, BorrowMutError>",
      "cfg": [],
      "target": "AppCell"
    },
    {
      "id": "gpui::app::AppRef",
      "name": "AppRef",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] # [derive (Deref, DerefMut)] pub struct AppRef<'a> (Ref<'a, App>);",
      "cfg": []
    },
    {
      "id": "gpui::app::AppRefMut",
      "name": "AppRefMut",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] # [derive (Deref, DerefMut)] pub struct AppRefMut<'a> (RefMut<'a, App>);",
      "cfg": []
    },
    {
      "id": "gpui::app::Application",
      "name": "Application",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "A reference to a GPUI application, typically constructed in the `main` function of your app. You won't interact with this type much outside of initial configuration and startup.",
      "documentation": "A reference to a GPUI application, typically constructed in the `main` function of your app.\nYou won't interact with this type much outside of initial configuration and startup.",
      "signature": "# [doc = \" A reference to a GPUI application, typically constructed in the `main` function of your app.\"] # [doc = \" You won't interact with this type much outside of initial configuration and startup.\"] pub struct Application (Rc<AppCell>);",
      "cfg": []
    },
    {
      "id": "gpui::app::Application::background_executor",
      "name": "background_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns a handle to the [`BackgroundExecutor`] associated with this app, which can be used to spawn futures in the background.",
      "documentation": "Returns a handle to the [`BackgroundExecutor`] associated with this app, which can be used to spawn futures in the background.",
      "signature": "pub fn background_executor (& self) -> BackgroundExecutor",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::Application::foreground_executor",
      "name": "foreground_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns a handle to the [`ForegroundExecutor`] associated with this app, which can be used to spawn futures in the foreground.",
      "documentation": "Returns a handle to the [`ForegroundExecutor`] associated with this app, which can be used to spawn futures in the foreground.",
      "signature": "pub fn foreground_executor (& self) -> ForegroundExecutor",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::Application::new_inaccessible",
      "name": "new_inaccessible",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Builds an app with accessibility (AccessKit) integration forcibly disabled.",
      "documentation": "Builds an app with accessibility (AccessKit) integration forcibly\ndisabled.\n\nIn this mode, accessibility APIs (e.g.\n[`div().role()`][crate::StatefulInteractiveElement::role]) silently\nno-op.\n\nSee the [accessibility guide](crate::_accessibility) for an overview of\nthe features this disables.",
      "signature": "pub fn new_inaccessible (platform : Rc<dyn Platform>) -> Self",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::Application::on_open_urls",
      "name": "on_open_urls",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Register a handler to be invoked when the platform instructs the application to open one or more URLs.",
      "documentation": "Register a handler to be invoked when the platform instructs the application\nto open one or more URLs.",
      "signature": "pub fn on_open_urls<F> (& self, mut callback : F) -> & Self where F : 'static + FnMut (Vec<String>),",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::Application::on_reopen",
      "name": "on_reopen",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Invokes a handler when an already-running application is launched. On macOS, this can occur when the application icon is double-clicked or the app is launched via the dock.",
      "documentation": "Invokes a handler when an already-running application is launched.\nOn macOS, this can occur when the application icon is double-clicked or the app is launched via the dock.",
      "signature": "pub fn on_reopen<F> (& self, mut callback : F) -> & Self where F : 'static + FnMut (& mut App),",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::Application::on_system_wake",
      "name": "on_system_wake",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Invokes a handler when the system wakes from sleep.",
      "documentation": "Invokes a handler when the system wakes from sleep.",
      "signature": "pub fn on_system_wake<F> (& self, mut callback : F) -> & Self where F : 'static + FnMut (& mut App),",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::Application::path_for_auxiliary_executable",
      "name": "path_for_auxiliary_executable",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns the file URL of the executable with the specified name in the application bundle",
      "documentation": "Returns the file URL of the executable with the specified name in the application bundle",
      "signature": "pub fn path_for_auxiliary_executable (& self, name : & str) -> Result<PathBuf>",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::Application::run",
      "name": "run",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Start the application. The provided callback will be called once the app is fully launched.",
      "documentation": "Start the application. The provided callback will be called once the\napp is fully launched.",
      "signature": "pub fn run<F> (self, on_finish_launching : F) where F : 'static + FnOnce (& mut App),",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::Application::run_embedded",
      "name": "run_embedded",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Start the application for an embedder that drives the run loop itself.",
      "documentation": "Start the application for an embedder that drives the run loop itself.\n\nOn ordinary platforms `Platform::run` blocks for the lifetime of the app, and the\napp state is kept alive by [`Application::run`]'s stack frame. Embedded platforms —\nwhere the run loop belongs to someone else, e.g. GPUI compiled into a Wasm guest,\nor a GPUI view hosted inside a foreign native application — implement\n`Platform::run` to invoke the launch callback and return immediately. This method\nsupports that shape: it returns an [`ApplicationHandle`] that keeps the app alive\nand lets the embedder re-enter it whenever the external run loop yields control.",
      "signature": "pub fn run_embedded<F> (self, on_finish_launching : F) -> ApplicationHandle where F : 'static + FnOnce (& mut App),",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::Application::text_system",
      "name": "text_system",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Returns a reference to the [`TextSystem`] associated with this app.",
      "documentation": "Returns a reference to the [`TextSystem`] associated with this app.",
      "signature": "pub fn text_system (& self) -> Arc<TextSystem>",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::Application::with_assets",
      "name": "with_assets",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Assigns the source of assets for the application.",
      "documentation": "Assigns the source of assets for the application.",
      "signature": "pub fn with_assets (self, asset_source : impl AssetSource) -> Self",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::Application::with_http_client",
      "name": "with_http_client",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Sets the HTTP client for the application.",
      "documentation": "Sets the HTTP client for the application.",
      "signature": "pub fn with_http_client (self, http_client : Arc<dyn HttpClient>) -> Self",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::Application::with_platform",
      "name": "with_platform",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Builds an app with a caller-provided platform implementation.",
      "documentation": "Builds an app with a caller-provided platform implementation.",
      "signature": "pub fn with_platform (platform : Rc<dyn Platform>) -> Self",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::Application::with_quit_mode",
      "name": "with_quit_mode",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Configures when the application should automatically quit. By default, [`QuitMode::Default`] is used.",
      "documentation": "Configures when the application should automatically quit.\nBy default, [`QuitMode::Default`] is used.",
      "signature": "pub fn with_quit_mode (self, mode : QuitMode) -> Self",
      "cfg": [],
      "target": "Application"
    },
    {
      "id": "gpui::app::ApplicationHandle",
      "name": "ApplicationHandle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "A strong handle to an [`Application`] started with [`Application::run_embedded`].",
      "documentation": "A strong handle to an [`Application`] started with [`Application::run_embedded`].\n\nDropping this handle releases the app, so an embedder must hold it for as long as the\napp should run. While held, it is the embedder's entry point back into GPUI each time\nthe external run loop gives it control.",
      "signature": "# [doc = \" A strong handle to an [`Application`] started with [`Application::run_embedded`].\"] # [doc = \"\"] # [doc = \" Dropping this handle releases the app, so an embedder must hold it for as long as the\"] # [doc = \" app should run. While held, it is the embedder's entry point back into GPUI each time\"] # [doc = \" the external run loop gives it control.\"] pub struct ApplicationHandle { app : Rc<AppCell>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::ApplicationHandle::to_async",
      "name": "to_async",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "An [`AsyncApp`] for use across await points. It holds the app weakly; keeping the app alive remains this handle's job.",
      "documentation": "An [`AsyncApp`] for use across await points. It holds the app weakly; keeping the\napp alive remains this handle's job.",
      "signature": "pub fn to_async (& self) -> AsyncApp",
      "cfg": [],
      "target": "ApplicationHandle"
    },
    {
      "id": "gpui::app::ApplicationHandle::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Invoke `f` with the app context. Must not be called re-entrantly from code that is already inside an update; the app state is a `RefCell` and will panic on a double borrow.",
      "documentation": "Invoke `f` with the app context. Must not be called re-entrantly from code that\nis already inside an update; the app state is a `RefCell` and will panic on a\ndouble borrow.",
      "signature": "pub fn update<R> (& self, f : impl FnOnce (& mut App) -> R) -> R",
      "cfg": [],
      "target": "ApplicationHandle"
    },
    {
      "id": "gpui::app::CursorHideMode",
      "name": "CursorHideMode",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Controls when GPUI hides the mouse cursor in response to keyboard input.",
      "documentation": "Controls when GPUI hides the mouse cursor in response to keyboard input.\n\nRestoration on mouse motion is handled by the platform layer; this enum\nonly describes the policy for *triggering* a hide.",
      "signature": "# [doc = \" Controls when GPUI hides the mouse cursor in response to keyboard input.\"] # [doc = \"\"] # [doc = \" Restoration on mouse motion is handled by the platform layer; this enum\"] # [doc = \" only describes the policy for *triggering* a hide.\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq)] pub enum CursorHideMode { # [doc = \" Never hide the cursor automatically.\"] Never, # [doc = \" Hide on character-producing key presses (typing).\"] OnTyping, # [doc = \" Hide on character-producing key presses, *and* when a key binding\"] # [doc = \" resolves to an action that consumes the keystroke.\"] # [default] OnTypingAndAction, }",
      "cfg": []
    },
    {
      "id": "gpui::app::ExternalDragPayloadSource",
      "name": "ExternalDragPayloadSource",
      "kind": "type",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Lazily resolves the payload handed to the platform when an internal drag is promoted to a native drag session.",
      "documentation": "Lazily resolves the payload handed to the platform when an internal drag is\npromoted to a native drag session.",
      "signature": "# [doc = \" Lazily resolves the payload handed to the platform when an internal drag is\"] # [doc = \" promoted to a native drag session.\"] pub type ExternalDragPayloadSource = Box<dyn FnOnce (& mut Window, & mut App) -> Option<ExternalDragPayload> + 'static>;",
      "cfg": []
    },
    {
      "id": "gpui::app::GpuiBorrow",
      "name": "GpuiBorrow",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "A mutable reference to an entity owned by GPUI",
      "documentation": "A mutable reference to an entity owned by GPUI",
      "signature": "# [doc = \" A mutable reference to an entity owned by GPUI\"] pub struct GpuiBorrow<'a, T> { inner : Option<Lease<T>>, app : & 'a mut App, }",
      "cfg": []
    },
    {
      "id": "gpui::app::GpuiMode::test",
      "name": "test",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn test () -> Self",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "GpuiMode"
    },
    {
      "id": "gpui::app::KeystrokeEvent",
      "name": "KeystrokeEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "A keystroke event, and potentially the associated action",
      "documentation": "A keystroke event, and potentially the associated action",
      "signature": "# [doc = \" A keystroke event, and potentially the associated action\"] # [derive (Debug)] pub struct KeystrokeEvent { # [doc = \" The keystroke that occurred\"] pub keystroke : Keystroke, # [doc = \" The action that was resolved for the keystroke, if any\"] pub action : Option<Box<dyn Action>>, # [doc = \" The context stack at the time\"] pub context_stack : Vec<KeyContext>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::QuitMode",
      "name": "QuitMode",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Defines when the application should automatically quit.",
      "documentation": "Defines when the application should automatically quit.",
      "signature": "# [doc = \" Defines when the application should automatically quit.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum QuitMode { # [doc = \" Use [`QuitMode::Explicit`] on macOS and [`QuitMode::LastWindowClosed`] on other platforms.\"] # [default] Default, # [doc = \" Quit automatically when the last window is closed.\"] LastWindowClosed, # [doc = \" Quit only when requested via [`App::quit`].\"] Explicit, }",
      "cfg": []
    },
    {
      "id": "gpui::app::SHUTDOWN_TIMEOUT",
      "name": "SHUTDOWN_TIMEOUT",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "The duration for which futures returned from [Context::on_app_quit] can run before the application fully quits.",
      "documentation": "The duration for which futures returned from [Context::on_app_quit] can run before the application fully quits.",
      "signature": "pub const SHUTDOWN_TIMEOUT: Duration",
      "cfg": []
    },
    {
      "id": "gpui::app::SystemWindowTab",
      "name": "SystemWindowTab",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] # [derive (Clone, PartialEq, Eq)] pub struct SystemWindowTab { pub id : WindowId, pub title : SharedString, pub handle : AnyWindowHandle, pub last_active_at : Instant, }",
      "cfg": []
    },
    {
      "id": "gpui::app::SystemWindowTab::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Create a new instance of the window tab.",
      "documentation": "Create a new instance of the window tab.",
      "signature": "pub fn new (title : SharedString, handle : AnyWindowHandle) -> Self",
      "cfg": [],
      "target": "SystemWindowTab"
    },
    {
      "id": "gpui::app::SystemWindowTabController",
      "name": "SystemWindowTabController",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "A controller for managing window tabs.",
      "documentation": "A controller for managing window tabs.",
      "signature": "# [doc = \" A controller for managing window tabs.\"] # [derive (Default)] pub struct SystemWindowTabController { visible : Option<bool>, tab_groups : FxHashMap<usize, Vec<SystemWindowTab>>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::SystemWindowTabController::add_tab",
      "name": "add_tab",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Insert a tab into a tab group.",
      "documentation": "Insert a tab into a tab group.",
      "signature": "pub fn add_tab (cx : & mut App, id : WindowId, tabs : Vec<SystemWindowTab>)",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::get_next_tab_group_window",
      "name": "get_next_tab_group_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get the next tab group window handle.",
      "documentation": "Get the next tab group window handle.",
      "signature": "pub fn get_next_tab_group_window (cx : & mut App, id : WindowId) -> Option<& AnyWindowHandle>",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::get_prev_tab_group_window",
      "name": "get_prev_tab_group_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get the previous tab group window handle.",
      "documentation": "Get the previous tab group window handle.",
      "signature": "pub fn get_prev_tab_group_window (cx : & mut App, id : WindowId) -> Option<& AnyWindowHandle>",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::init",
      "name": "init",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Initialize the global window tab controller.",
      "documentation": "Initialize the global window tab controller.",
      "signature": "pub fn init (cx : & mut App)",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::init_visible",
      "name": "init_visible",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Initialize the visibility of the system window tab controller.",
      "documentation": "Initialize the visibility of the system window tab controller.",
      "signature": "pub fn init_visible (cx : & mut App, visible : bool)",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::is_visible",
      "name": "is_visible",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get the visibility of the system window tab controller.",
      "documentation": "Get the visibility of the system window tab controller.",
      "signature": "pub fn is_visible (& self) -> bool",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::merge_all_windows",
      "name": "merge_all_windows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Merge all tab groups into a single group.",
      "documentation": "Merge all tab groups into a single group.",
      "signature": "pub fn merge_all_windows (cx : & mut App, id : WindowId)",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::move_tab_to_new_window",
      "name": "move_tab_to_new_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Move a tab to a new tab group.",
      "documentation": "Move a tab to a new tab group.",
      "signature": "pub fn move_tab_to_new_window (cx : & mut App, id : WindowId)",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Create a new instance of the window tab controller.",
      "documentation": "Create a new instance of the window tab controller.",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::remove_tab",
      "name": "remove_tab",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Remove a tab from a tab group.",
      "documentation": "Remove a tab from a tab group.",
      "signature": "pub fn remove_tab (cx : & mut App, id : WindowId) -> Option<SystemWindowTab>",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::select_next_tab",
      "name": "select_next_tab",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Selects the next tab in the tab group in the trailing direction.",
      "documentation": "Selects the next tab in the tab group in the trailing direction.",
      "signature": "pub fn select_next_tab (cx : & mut App, id : WindowId)",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::select_previous_tab",
      "name": "select_previous_tab",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Selects the previous tab in the tab group in the leading direction.",
      "documentation": "Selects the previous tab in the tab group in the leading direction.",
      "signature": "pub fn select_previous_tab (cx : & mut App, id : WindowId)",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::set_visible",
      "name": "set_visible",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Set the visibility of the system window tab controller.",
      "documentation": "Set the visibility of the system window tab controller.",
      "signature": "pub fn set_visible (cx : & mut App, visible : bool)",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::tab_groups",
      "name": "tab_groups",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get all tab groups.",
      "documentation": "Get all tab groups.",
      "signature": "pub fn tab_groups (& self) -> & FxHashMap<usize, Vec<SystemWindowTab>>",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::tabs",
      "name": "tabs",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Get all tabs in the same window.",
      "documentation": "Get all tabs in the same window.",
      "signature": "pub fn tabs (& self, id : WindowId) -> Option<& Vec<SystemWindowTab>>",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::update_last_active",
      "name": "update_last_active",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Update the last active of a window.",
      "documentation": "Update the last active of a window.",
      "signature": "pub fn update_last_active (cx : & mut App, id : WindowId)",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::update_tab_position",
      "name": "update_tab_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Update the position of a tab within its group.",
      "documentation": "Update the position of a tab within its group.",
      "signature": "pub fn update_tab_position (cx : & mut App, id : WindowId, ix : usize)",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::SystemWindowTabController::update_tab_title",
      "name": "update_tab_title",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "Update the title of a tab.",
      "documentation": "Update the title of a tab.",
      "signature": "pub fn update_tab_title (cx : & mut App, id : WindowId, title : SharedString)",
      "cfg": [],
      "target": "SystemWindowTabController"
    },
    {
      "id": "gpui::app::async_context::AsyncApp",
      "name": "AsyncApp",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "An async-friendly version of [App] with a static lifetime so it can be held across `await` points in async code. You're provided with an instance when calling [App::spawn], and you can also create one with [App::to_async].",
      "documentation": "An async-friendly version of [App] with a static lifetime so it can be held across `await` points in async code.\nYou're provided with an instance when calling [App::spawn], and you can also create one with [App::to_async].\n\nInternally, this holds a weak reference to an `App`. Methods will panic if the app has been dropped,\nbut this should not happen in practice when using foreground tasks spawned via `cx.spawn()`,\nas the executor checks if the app is alive before running each task.",
      "signature": "# [doc = \" An async-friendly version of [App] with a static lifetime so it can be held across `await` points in async code.\"] # [doc = \" You're provided with an instance when calling [App::spawn], and you can also create one with [App::to_async].\"] # [doc = \"\"] # [doc = \" Internally, this holds a weak reference to an `App`. Methods will panic if the app has been dropped,\"] # [doc = \" but this should not happen in practice when using foreground tasks spawned via `cx.spawn()`,\"] # [doc = \" as the executor checks if the app is alive before running each task.\"] # [derive (Clone)] pub struct AsyncApp { pub (crate) app : Weak<AppCell>, pub (crate) background_executor : BackgroundExecutor, pub (crate) foreground_executor : ForegroundExecutor, }",
      "cfg": []
    },
    {
      "id": "gpui::app::async_context::AsyncApp::background_executor",
      "name": "background_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Get an executor which can be used to spawn futures in the background.",
      "documentation": "Get an executor which can be used to spawn futures in the background.",
      "signature": "pub fn background_executor (& self) -> & BackgroundExecutor",
      "cfg": [],
      "target": "AsyncApp"
    },
    {
      "id": "gpui::app::async_context::AsyncApp::foreground_executor",
      "name": "foreground_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Get an executor which can be used to spawn futures in the foreground.",
      "documentation": "Get an executor which can be used to spawn futures in the foreground.",
      "signature": "pub fn foreground_executor (& self) -> & ForegroundExecutor",
      "cfg": [],
      "target": "AsyncApp"
    },
    {
      "id": "gpui::app::async_context::AsyncApp::has_global",
      "name": "has_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Determine whether global state of the specified type has been assigned.",
      "documentation": "Determine whether global state of the specified type has been assigned.",
      "signature": "pub fn has_global<G : Global> (& self) -> bool",
      "cfg": [],
      "target": "AsyncApp"
    },
    {
      "id": "gpui::app::async_context::AsyncApp::on_drop",
      "name": "on_drop",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Run something using this entity and cx, when the returned struct is dropped",
      "documentation": "Run something using this entity and cx, when the returned struct is dropped",
      "signature": "pub fn on_drop<T : 'static, Callback : FnOnce (& mut T, & mut Context<T>) + 'static> (& self, entity : & WeakEntity<T>, f : Callback,) -> gpui_util::Deferred<impl FnOnce () + use<T, Callback>>",
      "cfg": [],
      "target": "AsyncApp"
    },
    {
      "id": "gpui::app::async_context::AsyncApp::open_window",
      "name": "open_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Open a window with the given options based on the root view returned by the given function.",
      "documentation": "Open a window with the given options based on the root view returned by the given function.",
      "signature": "pub fn open_window<V> (& self, options : crate::WindowOptions, build_root_view : impl FnOnce (& mut Window, & mut App) -> Entity<V>,) -> Result<WindowHandle<V>> where V : 'static + Render,",
      "cfg": [],
      "target": "AsyncApp"
    },
    {
      "id": "gpui::app::async_context::AsyncApp::read_default_global",
      "name": "read_default_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Reads the global state of the specified type, passing it to the given callback. A default value is assigned if a global of this type has not yet been assigned.",
      "documentation": "Reads the global state of the specified type, passing it to the given callback.\nA default value is assigned if a global of this type has not yet been assigned.",
      "signature": "pub fn read_default_global<G : Global + Default, R> (& self, read : impl FnOnce (& G, & App) -> R,) -> R",
      "cfg": [],
      "target": "AsyncApp"
    },
    {
      "id": "gpui::app::async_context::AsyncApp::read_global",
      "name": "read_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Reads the global state of the specified type, passing it to the given callback.",
      "documentation": "Reads the global state of the specified type, passing it to the given callback.\n\nPanics if no global state of the specified type has been assigned.",
      "signature": "pub fn read_global<G : Global, R> (& self, read : impl FnOnce (& G, & App) -> R) -> R",
      "cfg": [],
      "target": "AsyncApp"
    },
    {
      "id": "gpui::app::async_context::AsyncApp::refresh",
      "name": "refresh",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Schedules all windows in the application to be redrawn.",
      "documentation": "Schedules all windows in the application to be redrawn.",
      "signature": "pub fn refresh (& self)",
      "cfg": [],
      "target": "AsyncApp"
    },
    {
      "id": "gpui::app::async_context::AsyncApp::spawn",
      "name": "spawn",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Schedule a future to be polled in the foreground.",
      "documentation": "Schedule a future to be polled in the foreground.",
      "signature": "pub fn spawn<AsyncFn, R> (& self, f : AsyncFn) -> Task<R> where AsyncFn : AsyncFnOnce (& mut AsyncApp) -> R + 'static, R : 'static,",
      "cfg": [],
      "target": "AsyncApp"
    },
    {
      "id": "gpui::app::async_context::AsyncApp::subscribe",
      "name": "subscribe",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Arrange for the given callback to be invoked whenever the given entity emits an event of a given type. The callback is provided a handle to the emitting entity and a reference to the emitted event.",
      "documentation": "Arrange for the given callback to be invoked whenever the given entity emits an event of a given type.\nThe callback is provided a handle to the emitting entity and a reference to the emitted event.",
      "signature": "pub fn subscribe<T, Event> (& mut self, entity : & Entity<T>, on_event : impl FnMut (Entity<T>, & Event, & mut App) + 'static,) -> Subscription where T : 'static + EventEmitter<Event>, Event : 'static,",
      "cfg": [],
      "target": "AsyncApp"
    },
    {
      "id": "gpui::app::async_context::AsyncApp::try_read_global",
      "name": "try_read_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Reads the global state of the specified type, passing it to the given callback.",
      "documentation": "Reads the global state of the specified type, passing it to the given callback.\n\nSimilar to [`AsyncApp::read_global`], but returns an error instead of panicking",
      "signature": "pub fn try_read_global<G : Global, R> (& self, read : impl FnOnce (& G, & App) -> R) -> Option<R>",
      "cfg": [],
      "target": "AsyncApp"
    },
    {
      "id": "gpui::app::async_context::AsyncApp::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Invoke the given function in the context of the app, then flush any effects produced during its invocation.",
      "documentation": "Invoke the given function in the context of the app, then flush any effects produced during its invocation.",
      "signature": "pub fn update<R> (& self, f : impl FnOnce (& mut App) -> R) -> R",
      "cfg": [],
      "target": "AsyncApp"
    },
    {
      "id": "gpui::app::async_context::AsyncApp::update_global",
      "name": "update_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "A convenience method for [`App::update_global`](BorrowAppContext::update_global) for updating the global state of the specified type.",
      "documentation": "A convenience method for [`App::update_global`](BorrowAppContext::update_global)\nfor updating the global state of the specified type.",
      "signature": "pub fn update_global<G : Global, R> (& self, update : impl FnOnce (& mut G, & mut App) -> R) -> R",
      "cfg": [],
      "target": "AsyncApp"
    },
    {
      "id": "gpui::app::async_context::AsyncWindowContext",
      "name": "AsyncWindowContext",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "A cloneable, owned handle to the application context, composed with the window associated with the current task.",
      "documentation": "A cloneable, owned handle to the application context,\ncomposed with the window associated with the current task.",
      "signature": "# [doc = \" A cloneable, owned handle to the application context,\"] # [doc = \" composed with the window associated with the current task.\"] # [derive (Clone, Deref, DerefMut)] pub struct AsyncWindowContext { # [deref] # [deref_mut] app : AsyncApp, window : AnyWindowHandle, }",
      "cfg": []
    },
    {
      "id": "gpui::app::async_context::AsyncWindowContext::on_next_frame",
      "name": "on_next_frame",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "A convenience method for [`Window::on_next_frame`].",
      "documentation": "A convenience method for [`Window::on_next_frame`].",
      "signature": "pub fn on_next_frame (& mut self, f : impl FnOnce (& mut Window, & mut App) + 'static)",
      "cfg": [],
      "target": "AsyncWindowContext"
    },
    {
      "id": "gpui::app::async_context::AsyncWindowContext::prompt",
      "name": "prompt",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Present a platform dialog. The provided message will be presented, along with buttons for each answer. When a button is clicked, the returned Receiver will receive the index of the clicked button.",
      "documentation": "Present a platform dialog.\nThe provided message will be presented, along with buttons for each answer.\nWhen a button is clicked, the returned Receiver will receive the index of the clicked button.",
      "signature": "pub fn prompt<T> (& mut self, level : PromptLevel, message : & str, detail : Option<& str>, answers : & [T],) -> oneshot::Receiver<usize> where T : Clone + Into<PromptButton>,",
      "cfg": [],
      "target": "AsyncWindowContext"
    },
    {
      "id": "gpui::app::async_context::AsyncWindowContext::read_global",
      "name": "read_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "A convenience method for [`App::global`].",
      "documentation": "A convenience method for [`App::global`].",
      "signature": "pub fn read_global<G : Global, R> (& mut self, read : impl FnOnce (& G, & Window, & App) -> R,) -> Result<R>",
      "cfg": [],
      "target": "AsyncWindowContext"
    },
    {
      "id": "gpui::app::async_context::AsyncWindowContext::spawn",
      "name": "spawn",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Schedule a future to be executed on the main thread. This is used for collecting the results of background tasks and updating the UI.",
      "documentation": "Schedule a future to be executed on the main thread. This is used for collecting\nthe results of background tasks and updating the UI.",
      "signature": "pub fn spawn<AsyncFn, R> (& self, f : AsyncFn) -> Task<R> where AsyncFn : AsyncFnOnce (& mut AsyncWindowContext) -> R + 'static, R : 'static,",
      "cfg": [],
      "target": "AsyncWindowContext"
    },
    {
      "id": "gpui::app::async_context::AsyncWindowContext::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "A convenience method for [`App::update_window`].",
      "documentation": "A convenience method for [`App::update_window`].",
      "signature": "pub fn update<R> (& mut self, update : impl FnOnce (& mut Window, & mut App) -> R) -> Result<R>",
      "cfg": [],
      "target": "AsyncWindowContext"
    },
    {
      "id": "gpui::app::async_context::AsyncWindowContext::update_global",
      "name": "update_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "A convenience method for [`App::update_global`](BorrowAppContext::update_global). for updating the global state of the specified type.",
      "documentation": "A convenience method for [`App::update_global`](BorrowAppContext::update_global).\nfor updating the global state of the specified type.",
      "signature": "pub fn update_global<G, R> (& mut self, update : impl FnOnce (& mut G, & mut Window, & mut App) -> R,) -> Result<R> where G : Global,",
      "cfg": [],
      "target": "AsyncWindowContext"
    },
    {
      "id": "gpui::app::async_context::AsyncWindowContext::update_root",
      "name": "update_root",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "A convenience method for [`App::update_window`].",
      "documentation": "A convenience method for [`App::update_window`].",
      "signature": "pub fn update_root<R> (& mut self, update : impl FnOnce (AnyView, & mut Window, & mut App) -> R,) -> Result<R>",
      "cfg": [],
      "target": "AsyncWindowContext"
    },
    {
      "id": "gpui::app::async_context::AsyncWindowContext::window_handle",
      "name": "window_handle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::async_context",
      "path": "gpui::app::async_context",
      "source": "crates/gpui/src/app/async_context.rs",
      "summary": "Get the handle of the window this context is associated with.",
      "documentation": "Get the handle of the window this context is associated with.",
      "signature": "pub fn window_handle (& self) -> AnyWindowHandle",
      "cfg": [],
      "target": "AsyncWindowContext"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext",
      "name": "BenchAppContext",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "A GPUI app context for Criterion benchmarks.",
      "documentation": "A GPUI app context for Criterion benchmarks.\n\n`BenchAppContext` is intentionally separate from `TestAppContext`: it owns a\nbenchmark app instance and exposes only the app/window operations needed by\nbenchmark setup. Criterion remains responsible for the measured loop via its\n`Bencher` API.",
      "signature": "# [doc = \" A GPUI app context for Criterion benchmarks.\"] # [doc = \"\"] # [doc = \" `BenchAppContext` is intentionally separate from `TestAppContext`: it owns a\"] # [doc = \" benchmark app instance and exposes only the app/window operations needed by\"] # [doc = \" benchmark setup. Criterion remains responsible for the measured loop via its\"] # [doc = \" `Bencher` API.\"] # [derive (Clone)] pub struct BenchAppContext<'a, 'measurement> { app : Rc<AppCell>, background_executor : BackgroundExecutor, foreground_executor : ForegroundExecutor, benchmark_name : Option<& 'static str>, bencher : Rc<RefCell<Option<& 'a mut criterion::Bencher<'measurement>>>>, report : BenchReport, }",
      "cfg": []
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::add_empty_window",
      "name": "add_empty_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Adds a window with an empty root view for benchmark setup.",
      "documentation": "Adds a window with an empty root view for benchmark setup.",
      "signature": "pub fn add_empty_window (& mut self) -> BenchWindowContext<'a, 'measurement>",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::background_executor",
      "name": "background_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Returns the background executor used by this benchmark app.",
      "documentation": "Returns the background executor used by this benchmark app.",
      "signature": "pub fn background_executor (& self) -> & BackgroundExecutor",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::bench_batched_task",
      "name": "bench_batched_task",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Measures a GPUI task with per-iteration setup outside the timed interval.",
      "documentation": "Measures a GPUI task with per-iteration setup outside the timed interval.\n\n`setup` runs before timing starts. The returned input is passed by mutable\nreference to `benchmark`, which returns the task whose completion is\nmeasured. Both the setup input and task output are dropped after timing\nstops.\n\nEach iteration is kept in its own Criterion batch so frame tracing and\ndestruction cannot overlap adjacent measurements.",
      "signature": "pub fn bench_batched_task<Input, Output> (& mut self, setup : impl FnMut (& mut Self) -> Input, benchmark : impl FnMut (& mut Input, & mut Self) -> Task<Output>,) where Output : 'static,",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::bench_iter",
      "name": "bench_iter",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Measures a generic benchmark workload using Criterion's iteration loop.",
      "documentation": "Measures a generic benchmark workload using Criterion's iteration loop.\n\nThe closure is invoked once per Criterion iteration with this\nbenchmark app context so it can update GPUI state.\n\nAny window draws triggered by the workload are recorded into the\nbenchmark's frame report through the GPUI frame profiler.",
      "signature": "pub fn bench_iter (& mut self, mut benchmark : impl FnMut (& mut Self))",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::bench_renderer",
      "name": "bench_renderer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Measures frame latency after updating a GPUI entity in its current window.",
      "documentation": "Measures frame latency after updating a GPUI entity in its current window.\n\nEach iteration runs `update` against the entity in its current window. In\nbench builds, flushing the update's effects synchronously draws dirty\nwindows. The entity should be part of the window's render tree, such as the\nroot view or a child of it.\n\nFrame timings are collected through the GPUI frame profiler\n([`crate::profiler::record_frame_timing`]), which is enabled for the\nduration of the measurement.",
      "signature": "pub fn bench_renderer<V> (& mut self, view : Entity<V>, mut update : impl FnMut (& mut V, & mut Window, & mut Context<V>),) where V : 'static + Render,",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::bench_task",
      "name": "bench_task",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Measures a GPUI task to completion using Criterion's iteration loop.",
      "documentation": "Measures a GPUI task to completion using Criterion's iteration loop.\n\nThe closure is invoked once per Criterion iteration. The returned task\nmay depend on foreground work, background work, timers, or external\nworkers that wake GPUI tasks. Its output is dropped after the timed\ninterval.\n\nAny window draws triggered by the task are recorded into the benchmark's\nframe report through the GPUI frame profiler.",
      "signature": "pub fn bench_task<Output> (& mut self, mut benchmark : impl FnMut (& mut Self) -> Task<Output>) where Output : 'static,",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::benchmark_name",
      "name": "benchmark_name",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "The benchmark function name that created this context.",
      "documentation": "The benchmark function name that created this context.",
      "signature": "pub fn benchmark_name (& self) -> Option<& 'static str>",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::foreground_executor",
      "name": "foreground_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Returns the foreground executor used by this benchmark app.",
      "documentation": "Returns the foreground executor used by this benchmark app.",
      "signature": "pub fn foreground_executor (& self) -> & ForegroundExecutor",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Creates a new benchmark app context backed by the provided platform.",
      "documentation": "Creates a new benchmark app context backed by the provided platform.\n\nThe platform's executors must be backed by a [`ThreadedDispatcher`]\n(see [`bench_platform`]) so the context can drain foreground work via\n[`Self::run_until_idle`]; panics otherwise.",
      "signature": "pub fn new (platform : Rc<dyn Platform>, benchmark_name : Option<& 'static str>, bencher : & 'a mut criterion::Bencher<'measurement>,) -> Self",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::new_with_platform_and_report",
      "name": "new_with_platform_and_report",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Creates a new benchmark app context backed by the provided platform.",
      "documentation": "Creates a new benchmark app context backed by the provided platform.\n\nThe platform's executors must be backed by a [`ThreadedDispatcher`]\n(see [`bench_platform`]) so the context can drain foreground work via\n[`Self::run_until_idle`]; panics otherwise.",
      "signature": "pub fn new_with_platform_and_report (platform : Rc<dyn Platform>, benchmark_name : Option<& 'static str>, bencher : & 'a mut criterion::Bencher<'measurement>, report : BenchReport,) -> Self",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Reads app state.",
      "documentation": "Reads app state.",
      "signature": "pub fn read<R> (& self, read : impl FnOnce (& App) -> R) -> R",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::run_until_idle",
      "name": "run_until_idle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Runs queued foreground tasks on this thread and waits for in flight background work to finish. Timers that aren't due yet are not waited for (see [`ThreadedDispatcher::run_until_idle`]).",
      "documentation": "Runs queued foreground tasks on this thread and waits for in flight\nbackground work to finish. Timers that aren't due yet are not waited\nfor (see [`ThreadedDispatcher::run_until_idle`]).",
      "signature": "pub fn run_until_idle (& self)",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::teardown",
      "name": "teardown",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Runs GPUI benchmark teardown.",
      "documentation": "Runs GPUI benchmark teardown.\n\nCancels any timers still armed on the shared dispatcher and drains the\nwork that cancellation unblocks so they can't fire during a later\nbenchmark; assumes no other `BenchAppContext` is live on this thread.",
      "signature": "pub fn teardown (mut self)",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchAppContext::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Updates the app and flushes synchronous GPUI effects afterward.",
      "documentation": "Updates the app and flushes synchronous GPUI effects afterward.",
      "signature": "pub fn update<R> (& mut self, update : impl FnOnce (& mut App) -> R) -> R",
      "cfg": [],
      "target": "BenchAppContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchReport",
      "name": "BenchReport",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "A small report produced by GPUI benchmarks.",
      "documentation": "A small report produced by GPUI benchmarks.",
      "signature": "# [doc = \" A small report produced by GPUI benchmarks.\"] # [derive (Clone)] pub struct BenchReport { frame_snapshot : Rc<RefCell<WindowFrameSnapshot>>, frame_budget_nanos : u128, }",
      "cfg": []
    },
    {
      "id": "gpui::app::bench_context::BenchReport::print",
      "name": "print",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Prints this report to stderr.",
      "documentation": "Prints this report to stderr.",
      "signature": "pub fn print (& self, benchmark_name : Option<& 'static str>)",
      "cfg": [],
      "target": "BenchReport"
    },
    {
      "id": "gpui::app::bench_context::BenchReport::with_fps",
      "name": "with_fps",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Creates a report whose per-frame budget is one frame at `fps` when counting frame budget overruns.",
      "documentation": "Creates a report whose per-frame budget is one frame at `fps` when\ncounting frame budget overruns.",
      "signature": "pub fn with_fps (fps : u64) -> Self",
      "cfg": [],
      "target": "BenchReport"
    },
    {
      "id": "gpui::app::bench_context::BenchReport::with_frame_budget_nanos",
      "name": "with_frame_budget_nanos",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Creates a report that treats `frame_budget_nanos` as the per-frame budget when counting frame budget overruns.",
      "documentation": "Creates a report that treats `frame_budget_nanos` as the per-frame budget\nwhen counting frame budget overruns.",
      "signature": "pub fn with_frame_budget_nanos (frame_budget_nanos : u128) -> Self",
      "cfg": [],
      "target": "BenchReport"
    },
    {
      "id": "gpui::app::bench_context::BenchWindowContext",
      "name": "BenchWindowContext",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "A window-specific context for GPUI benchmarks.",
      "documentation": "A window-specific context for GPUI benchmarks.\n\nThis is separate from `VisualTestContext`; it provides access to a benchmark\nwindow without exposing test-only helpers such as input simulation.",
      "signature": "# [doc = \" A window-specific context for GPUI benchmarks.\"] # [doc = \"\"] # [doc = \" This is separate from `VisualTestContext`; it provides access to a benchmark\"] # [doc = \" window without exposing test-only helpers such as input simulation.\"] # [derive (Clone)] pub struct BenchWindowContext<'a, 'measurement> { cx : BenchAppContext<'a, 'measurement>, window : AnyWindowHandle, }",
      "cfg": []
    },
    {
      "id": "gpui::app::bench_context::BenchWindowContext::app_context",
      "name": "app_context",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Returns the underlying benchmark app context.",
      "documentation": "Returns the underlying benchmark app context.",
      "signature": "pub fn app_context (& mut self) -> & mut BenchAppContext<'a, 'measurement>",
      "cfg": [],
      "target": "BenchWindowContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchWindowContext::run_until_idle",
      "name": "run_until_idle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Runs queued foreground tasks on this thread and waits for in-flight background work to finish. Pending timers are not waited for.",
      "documentation": "Runs queued foreground tasks on this thread and waits for in-flight\nbackground work to finish. Pending timers are not waited for.",
      "signature": "pub fn run_until_idle (& self)",
      "cfg": [],
      "target": "BenchWindowContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchWindowContext::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Updates the benchmark window.",
      "documentation": "Updates the benchmark window.",
      "signature": "pub fn update<R> (& mut self, update : impl FnOnce (& mut Window, & mut App) -> R) -> R",
      "cfg": [],
      "target": "BenchWindowContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::BenchWindowContext::window_handle",
      "name": "window_handle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Returns the window associated with this context.",
      "documentation": "Returns the window associated with this context.",
      "signature": "pub fn window_handle (& self) -> AnyWindowHandle",
      "cfg": [],
      "target": "BenchWindowContext<'a, 'measurement>"
    },
    {
      "id": "gpui::app::bench_context::bench_platform",
      "name": "bench_platform",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::bench_context",
      "path": "gpui::app::bench_context",
      "source": "crates/gpui/src/app/bench_context.rs",
      "summary": "Returns a benchmark platform backed by this thread's shared dispatcher.",
      "documentation": "Returns a benchmark platform backed by this thread's shared dispatcher.\n\nThe platform uses this thread's shared multithreaded [`ThreadedDispatcher`], so\nbackground work runs with production concurrency in real time. The dispatcher\nis cached per thread and reused across benchmark invocations so worker and\ntimer threads persist for the whole process instead of being recreated for\nevery Criterion calibration pass.\n\nText is shaped with the provided platform text system. Benchmarks generated\nby `#[gpui::bench]` use the current platform's text system, so text-heavy\nbenchmark measurements include production shaping and glyph rasterization.\n\n`headless_renderer_factory` supplies a renderer for benchmark windows, e.g.\n`gpui_platform::current_headless_renderer`. When present, scenes drawn by\nbenchmarks are rasterized through the real sprite atlas and submitted to\nthe GPU on present, so quad/sprite regressions show up in measurements.\nWhen `None`, presenting discards the scene. Currently only macOS provides\na headless renderer (Metal), so GPU submission is excluded from benchmark\nmeasurements on other platforms.",
      "signature": "pub fn bench_platform (headless_renderer_factory : Option<Box<dyn Fn () -> Option<Box<dyn PlatformHeadlessRenderer>>>>, text_system : Arc<dyn PlatformTextSystem>,) -> Rc<dyn Platform>",
      "cfg": []
    },
    {
      "id": "gpui::app::context::Context",
      "name": "Context",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "The app context, with specialized behavior for the given entity.",
      "documentation": "The app context, with specialized behavior for the given entity.",
      "signature": "# [doc = \" The app context, with specialized behavior for the given entity.\"] pub struct Context<'a, T> { app : & 'a mut App, entity_state : WeakEntity<T>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::context::Context::defer_in",
      "name": "defer_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Schedules the given function to be run at the end of the current effect cycle, allowing entities that are currently on the stack to be returned to the app.",
      "documentation": "Schedules the given function to be run at the end of the current effect cycle, allowing entities\nthat are currently on the stack to be returned to the app.",
      "signature": "pub fn defer_in (& mut self, window : & Window, f : impl FnOnce (& mut T, & mut Window, & mut Context<T>) + 'static,)",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::emit",
      "name": "emit",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Emit an event of the specified type, which can be handled by other entities that have subscribed via `subscribe` methods on their respective contexts.",
      "documentation": "Emit an event of the specified type, which can be handled by other entities that have subscribed via `subscribe` methods on their respective contexts.",
      "signature": "pub fn emit<Evt> (& mut self, event : Evt) where T : EventEmitter<Evt>, Evt : 'static,",
      "cfg": [],
      "target": "Context<'_, T>"
    },
    {
      "id": "gpui::app::context::Context::entity",
      "name": "entity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Returns a handle to the entity belonging to this context.",
      "documentation": "Returns a handle to the entity belonging to this context.",
      "signature": "pub fn entity (& self) -> Entity<T>",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::entity_id",
      "name": "entity_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "The entity id of the entity backing this context.",
      "documentation": "The entity id of the entity backing this context.",
      "signature": "pub fn entity_id (& self) -> EntityId",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::focus_self",
      "name": "focus_self",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Move focus to the current view, assuming it implements [`Focusable`].",
      "documentation": "Move focus to the current view, assuming it implements [`Focusable`].",
      "signature": "pub fn focus_self (& mut self, window : & mut Window) where T : Focusable,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::focus_view",
      "name": "focus_view",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Focus the given view in the given window. View type is required to implement Focusable.",
      "documentation": "Focus the given view in the given window. View type is required to implement Focusable.",
      "signature": "pub fn focus_view<W : Focusable> (& mut self, view : & Entity<W>, window : & mut Window)",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::listener",
      "name": "listener",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Convenience method for accessing view state in an event callback.",
      "documentation": "Convenience method for accessing view state in an event callback.\n\nMany GPUI callbacks take the form of `Fn(&E, &mut Window, &mut App)`,\nbut it's often useful to be able to access view state in these\ncallbacks. This method provides a convenient way to do so.",
      "signature": "pub fn listener<E : ? Sized> (& self, f : impl Fn (& mut T, & E, & mut Window, & mut Context<T>) + 'static,) -> impl Fn (& E, & mut Window, & mut App) + 'static",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::notify",
      "name": "notify",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Tell GPUI that this entity has changed and observers of it should be notified.",
      "documentation": "Tell GPUI that this entity has changed and observers of it should be notified.",
      "signature": "pub fn notify (& mut self)",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::observe",
      "name": "observe",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Arranges for the given function to be called whenever [`Context::notify`] is called with the given entity.",
      "documentation": "Arranges for the given function to be called whenever [`Context::notify`] is\ncalled with the given entity.",
      "signature": "pub fn observe<W> (& mut self, entity : & Entity<W>, mut on_notify : impl FnMut (& mut T, Entity<W>, & mut Context<T>) + 'static,) -> Subscription where T : 'static, W : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::observe_button_layout_changed",
      "name": "observe_button_layout_changed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Registers a callback to be invoked when the window button layout changes.",
      "documentation": "Registers a callback to be invoked when the window button layout changes.",
      "signature": "pub fn observe_button_layout_changed (& self, window : & mut Window, mut callback : impl FnMut (& mut T, & mut Window, & mut Context<T>) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::observe_global",
      "name": "observe_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a callback to for updates to the given global",
      "documentation": "Register a callback to for updates to the given global",
      "signature": "pub fn observe_global<G : 'static> (& mut self, mut f : impl FnMut (& mut T, & mut Context<T>) + 'static,) -> Subscription where T : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::observe_global_in",
      "name": "observe_global_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a callback to be invoked when the given global state changes.",
      "documentation": "Register a callback to be invoked when the given global state changes.",
      "signature": "pub fn observe_global_in<G : Global> (& mut self, window : & Window, mut f : impl FnMut (& mut T, & mut Window, & mut Context<T>) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::observe_in",
      "name": "observe_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Observe another entity for changes to its state, as tracked by [`Context::notify`].",
      "documentation": "Observe another entity for changes to its state, as tracked by [`Context::notify`].",
      "signature": "pub fn observe_in<V2> (& mut self, observed : & Entity<V2>, window : & mut Window, mut on_notify : impl FnMut (& mut T, Entity<V2>, & mut Window, & mut Context<T>) + 'static,) -> Subscription where V2 : 'static, T : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::observe_keystrokes",
      "name": "observe_keystrokes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a callback to be invoked when a keystroke is received by the application in any window. Note that this fires after all other action and event mechanisms have resolved and that this API will not be invoked if the event's propagation is stopped.",
      "documentation": "Register a callback to be invoked when a keystroke is received by the application\nin any window. Note that this fires after all other action and event mechanisms have resolved\nand that this API will not be invoked if the event's propagation is stopped.",
      "signature": "pub fn observe_keystrokes (& mut self, mut f : impl FnMut (& mut T, & KeystrokeEvent, & mut Window, & mut Context<T>) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::observe_pending_input",
      "name": "observe_pending_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a callback to be invoked when the window's pending input changes.",
      "documentation": "Register a callback to be invoked when the window's pending input changes.",
      "signature": "pub fn observe_pending_input (& self, window : & mut Window, mut callback : impl FnMut (& mut T, & mut Window, & mut Context<T>) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::observe_release",
      "name": "observe_release",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a callback to be run on the release of another entity",
      "documentation": "Register a callback to be run on the release of another entity",
      "signature": "pub fn observe_release<T2> (& self, entity : & Entity<T2>, on_release : impl FnOnce (& mut T, & mut T2, & mut Context<T>) + 'static,) -> Subscription where T : Any, T2 : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::observe_release_in",
      "name": "observe_release_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a callback to be invoked when the given Entity is released.",
      "documentation": "Register a callback to be invoked when the given Entity is released.",
      "signature": "pub fn observe_release_in<T2> (& self, observed : & Entity<T2>, window : & Window, mut on_release : impl FnMut (& mut T, & mut T2, & mut Window, & mut Context<T>) + 'static,) -> Subscription where T : 'static, T2 : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::observe_self",
      "name": "observe_self",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Observe changes to ourselves",
      "documentation": "Observe changes to ourselves",
      "signature": "pub fn observe_self (& mut self, mut on_event : impl FnMut (& mut T, & mut Context<T>) + 'static,) -> Subscription where T : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::observe_window_activation",
      "name": "observe_window_activation",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a callback to be invoked when the window is activated or deactivated.",
      "documentation": "Register a callback to be invoked when the window is activated or deactivated.",
      "signature": "pub fn observe_window_activation (& self, window : & mut Window, mut callback : impl FnMut (& mut T, & mut Window, & mut Context<T>) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::observe_window_appearance",
      "name": "observe_window_appearance",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Registers a callback to be invoked when the window appearance changes.",
      "documentation": "Registers a callback to be invoked when the window appearance changes.",
      "signature": "pub fn observe_window_appearance (& self, window : & mut Window, mut callback : impl FnMut (& mut T, & mut Window, & mut Context<T>) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::observe_window_bounds",
      "name": "observe_window_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a callback to be invoked when the window is resized.",
      "documentation": "Register a callback to be invoked when the window is resized.",
      "signature": "pub fn observe_window_bounds (& self, window : & mut Window, mut callback : impl FnMut (& mut T, & mut Window, & mut Context<T>) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::on_action",
      "name": "on_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a callback to be invoked when the given Action type is dispatched to the window.",
      "documentation": "Register a callback to be invoked when the given Action type is dispatched to the window.",
      "signature": "pub fn on_action (& mut self, action_type : TypeId, window : & mut Window, listener : impl Fn (& mut T, & dyn Any, DispatchPhase, & mut Window, & mut Context<T>) + 'static,)",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::on_app_quit",
      "name": "on_app_quit",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Arrange for the given function to be invoked whenever the application is quit. The future returned from this callback will be polled for up to [crate::SHUTDOWN_TIMEOUT] until the app fully quits.",
      "documentation": "Arrange for the given function to be invoked whenever the application is quit.\nThe future returned from this callback will be polled for up to [crate::SHUTDOWN_TIMEOUT] until the app fully quits.",
      "signature": "pub fn on_app_quit<Fut> (& self, mut on_quit : impl FnMut (& mut T, & mut Context<T>) -> Fut + 'static,) -> Subscription where Fut : 'static + Future<Output = ()>, T : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::on_app_restart",
      "name": "on_app_restart",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a callback to be invoked when the application is about to restart.",
      "documentation": "Register a callback to be invoked when the application is about to restart.",
      "signature": "pub fn on_app_restart (& self, mut on_restart : impl FnMut (& mut T, & mut App) + 'static,) -> Subscription where T : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::on_blur",
      "name": "on_blur",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a listener to be called when the given focus handle loses focus. Returns a subscription and persists until the subscription is dropped.",
      "documentation": "Register a listener to be called when the given focus handle loses focus.\nReturns a subscription and persists until the subscription is dropped.",
      "signature": "pub fn on_blur (& mut self, handle : & FocusHandle, window : & mut Window, mut listener : impl FnMut (& mut T, & mut Window, & mut Context<T>) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::on_drop",
      "name": "on_drop",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Run something using this entity and cx, when the returned struct is dropped",
      "documentation": "Run something using this entity and cx, when the returned struct is dropped",
      "signature": "pub fn on_drop (& self, f : impl FnOnce (& mut T, & mut Context<T>) + 'static,) -> Deferred<impl FnOnce ()>",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::on_focus",
      "name": "on_focus",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a listener to be called when the given focus handle receives focus. Returns a subscription and persists until the subscription is dropped.",
      "documentation": "Register a listener to be called when the given focus handle receives focus.\nReturns a subscription and persists until the subscription is dropped.",
      "signature": "pub fn on_focus (& mut self, handle : & FocusHandle, window : & mut Window, mut listener : impl FnMut (& mut T, & mut Window, & mut Context<T>) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::on_focus_in",
      "name": "on_focus_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a listener to be called when the given focus handle or one of its descendants receives focus. This does not fire if the given focus handle - or one of its descendants - was previously focused. Returns a subscription and persists until the subscription is dropped.",
      "documentation": "Register a listener to be called when the given focus handle or one of its descendants receives focus.\nThis does not fire if the given focus handle - or one of its descendants - was previously focused.\nReturns a subscription and persists until the subscription is dropped.",
      "signature": "pub fn on_focus_in (& mut self, handle : & FocusHandle, window : & mut Window, mut listener : impl FnMut (& mut T, & mut Window, & mut Context<T>) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::on_focus_lost",
      "name": "on_focus_lost",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a listener to be called when nothing in the window has focus. This typically happens when the node that was focused is removed from the tree, and this callback lets you chose a default place to restore the users focus. Returns a subscription and persists until the subscription is dropped.",
      "documentation": "Register a listener to be called when nothing in the window has focus.\nThis typically happens when the node that was focused is removed from the tree,\nand this callback lets you chose a default place to restore the users focus.\nReturns a subscription and persists until the subscription is dropped.",
      "signature": "pub fn on_focus_lost (& mut self, window : & mut Window, mut listener : impl FnMut (& mut T, & mut Window, & mut Context<T>) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::on_focus_out",
      "name": "on_focus_out",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a listener to be called when the given focus handle or one of its descendants loses focus. Returns a subscription and persists until the subscription is dropped.",
      "documentation": "Register a listener to be called when the given focus handle or one of its descendants loses focus.\nReturns a subscription and persists until the subscription is dropped.",
      "signature": "pub fn on_focus_out (& mut self, handle : & FocusHandle, window : & mut Window, mut listener : impl FnMut (& mut T, FocusOutEvent, & mut Window, & mut Context<T>) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::on_next_frame",
      "name": "on_next_frame",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Sets a given callback to be run on the next frame.",
      "documentation": "Sets a given callback to be run on the next frame.",
      "signature": "pub fn on_next_frame (& self, window : & mut Window, f : impl FnOnce (& mut T, & mut Window, & mut Context<T>) + 'static,) where T : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::on_release",
      "name": "on_release",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a callback to be invoked when GPUI releases this entity.",
      "documentation": "Register a callback to be invoked when GPUI releases this entity.",
      "signature": "pub fn on_release (& self, on_release : impl FnOnce (& mut T, & mut App) + 'static) -> Subscription where T : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::on_release_in",
      "name": "on_release_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Register a callback to be invoked when the view is released.",
      "documentation": "Register a callback to be invoked when the view is released.\n\nThe callback receives a handle to the view's window. This handle may be\ninvalid, if the window was closed before the view was released.",
      "signature": "pub fn on_release_in (& mut self, window : & Window, on_release : impl FnOnce (& mut T, & mut Window, & mut App) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::processor",
      "name": "processor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Convenience method for producing view state in a closure. See `listener` for more details.",
      "documentation": "Convenience method for producing view state in a closure.\nSee `listener` for more details.",
      "signature": "pub fn processor<E, R> (& self, f : impl Fn (& mut T, E, & mut Window, & mut Context<T>) -> R + 'static,) -> impl Fn (E, & mut Window, & mut App) -> R + 'static",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::spawn",
      "name": "spawn",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Spawn the future returned by the given function. The function is provided a weak handle to the entity owned by this context and a context that can be held across await points. The returned task must be held or detached.",
      "documentation": "Spawn the future returned by the given function.\nThe function is provided a weak handle to the entity owned by this context and a context that can be held across await points.\nThe returned task must be held or detached.",
      "signature": "pub fn spawn<AsyncFn, R> (& self, f : AsyncFn) -> Task<R> where T : 'static, AsyncFn : AsyncFnOnce (WeakEntity<T>, & mut AsyncApp) -> R + 'static, R : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::spawn_in",
      "name": "spawn_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Schedule a future to be run asynchronously. The given callback is invoked with a [`WeakEntity<V>`] to avoid leaking the entity for a long-running process. It's also given an [`AsyncWindowContext`], which can be used to access the state of the entity across await points. The returned future will be polled on the main thread.",
      "documentation": "Schedule a future to be run asynchronously.\nThe given callback is invoked with a [`WeakEntity<V>`] to avoid leaking the entity for a long-running process.\nIt's also given an [`AsyncWindowContext`], which can be used to access the state of the entity across await points.\nThe returned future will be polled on the main thread.",
      "signature": "pub fn spawn_in<AsyncFn, R> (& self, window : & Window, f : AsyncFn) -> Task<R> where R : 'static, AsyncFn : AsyncFnOnce (WeakEntity<T>, & mut AsyncWindowContext) -> R + 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::spawn_in_with_priority",
      "name": "spawn_in_with_priority",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Schedule a future to be run asynchronously with the given priority. The given callback is invoked with a [`WeakEntity<V>`] to avoid leaking the entity for a long-running process. It's also given an [`AsyncWindowContext`], which can be used to access the state of the entity across await points. The returned future will be polled on the main thread.",
      "documentation": "Schedule a future to be run asynchronously with the given priority.\nThe given callback is invoked with a [`WeakEntity<V>`] to avoid leaking the entity for a long-running process.\nIt's also given an [`AsyncWindowContext`], which can be used to access the state of the entity across await points.\nThe returned future will be polled on the main thread.",
      "signature": "pub fn spawn_in_with_priority<AsyncFn, R> (& self, priority : Priority, window : & Window, f : AsyncFn,) -> Task<R> where R : 'static, AsyncFn : AsyncFnOnce (WeakEntity<T>, & mut AsyncWindowContext) -> R + 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::subscribe",
      "name": "subscribe",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Subscribe to an event type from another entity",
      "documentation": "Subscribe to an event type from another entity",
      "signature": "pub fn subscribe<T2, Evt> (& mut self, entity : & Entity<T2>, mut on_event : impl FnMut (& mut T, Entity<T2>, & Evt, & mut Context<T>) + 'static,) -> Subscription where T : 'static, T2 : 'static + EventEmitter<Evt>, Evt : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::subscribe_in",
      "name": "subscribe_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Subscribe to events emitted by another entity. The entity to which you're subscribing must implement the [`EventEmitter`] trait. The callback will be invoked with a reference to the current view, a handle to the emitting `Entity`, the event, a mutable reference to the `Window`, and the context for the entity.",
      "documentation": "Subscribe to events emitted by another entity.\nThe entity to which you're subscribing must implement the [`EventEmitter`] trait.\nThe callback will be invoked with a reference to the current view, a handle to the emitting `Entity`, the event, a mutable reference to the `Window`, and the context for the entity.",
      "signature": "pub fn subscribe_in<Emitter, Evt> (& mut self, emitter : & Entity<Emitter>, window : & Window, mut on_event : impl FnMut (& mut T, & Entity<Emitter>, & Evt, & mut Window, & mut Context<T>) + 'static,) -> Subscription where Emitter : EventEmitter<Evt>, Evt : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::subscribe_self",
      "name": "subscribe_self",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Subscribe to an event type from ourself",
      "documentation": "Subscribe to an event type from ourself",
      "signature": "pub fn subscribe_self<Evt> (& mut self, mut on_event : impl FnMut (& mut T, & Evt, & mut Context<T>) + 'static,) -> Subscription where T : 'static + EventEmitter<Evt>, Evt : 'static,",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::context::Context::weak_entity",
      "name": "weak_entity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::context",
      "path": "gpui::app::context",
      "source": "crates/gpui/src/app/context.rs",
      "summary": "Returns a weak handle to the entity belonging to this context.",
      "documentation": "Returns a weak handle to the entity belonging to this context.",
      "signature": "pub fn weak_entity (& self) -> WeakEntity<T>",
      "cfg": [],
      "target": "Context<'a, T>"
    },
    {
      "id": "gpui::app::entity_map::AnyEntity",
      "name": "AnyEntity",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "A dynamically typed reference to a entity, which can be downcast into a `Entity<T>`.",
      "documentation": "A dynamically typed reference to a entity, which can be downcast into a `Entity<T>`.",
      "signature": "# [doc = \" A dynamically typed reference to a entity, which can be downcast into a `Entity<T>`.\"] pub struct AnyEntity { pub (crate) entity_id : EntityId, pub (crate) entity_type : TypeId, entity_map : Weak<RwLock<EntityRefCounts>>, # [cfg (any (test, feature = \"leak-detection\"))] handle_id : HandleId, }",
      "cfg": []
    },
    {
      "id": "gpui::app::entity_map::AnyEntity::downcast",
      "name": "downcast",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Converts this entity handle into a strongly-typed entity handle of the given type. If this entity handle is not of the specified type, returns itself as an error variant.",
      "documentation": "Converts this entity handle into a strongly-typed entity handle of the given type.\nIf this entity handle is not of the specified type, returns itself as an error variant.",
      "signature": "pub fn downcast<T : 'static> (self) -> Result<Entity<T>, AnyEntity>",
      "cfg": [],
      "target": "AnyEntity"
    },
    {
      "id": "gpui::app::entity_map::AnyEntity::downgrade",
      "name": "downgrade",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Converts this entity handle into a weak variant, which does not prevent it from being released.",
      "documentation": "Converts this entity handle into a weak variant, which does not prevent it from being released.",
      "signature": "pub fn downgrade (& self) -> AnyWeakEntity",
      "cfg": [],
      "target": "AnyEntity"
    },
    {
      "id": "gpui::app::entity_map::AnyEntity::entity_id",
      "name": "entity_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Returns the id associated with this entity.",
      "documentation": "Returns the id associated with this entity.",
      "signature": "pub fn entity_id (& self) -> EntityId",
      "cfg": [],
      "target": "AnyEntity"
    },
    {
      "id": "gpui::app::entity_map::AnyEntity::entity_type",
      "name": "entity_type",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Returns the [TypeId] associated with this entity.",
      "documentation": "Returns the [TypeId] associated with this entity.",
      "signature": "pub fn entity_type (& self) -> TypeId",
      "cfg": [],
      "target": "AnyEntity"
    },
    {
      "id": "gpui::app::entity_map::AnyWeakEntity",
      "name": "AnyWeakEntity",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "A type erased, weak reference to a entity.",
      "documentation": "A type erased, weak reference to a entity.",
      "signature": "# [doc = \" A type erased, weak reference to a entity.\"] # [derive (Clone)] pub struct AnyWeakEntity { pub (crate) entity_id : EntityId, entity_type : TypeId, entity_ref_counts : Weak<RwLock<EntityRefCounts>>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::entity_map::AnyWeakEntity::assert_released",
      "name": "assert_released",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Asserts that the entity referenced by this weak handle has been fully released.",
      "documentation": "Asserts that the entity referenced by this weak handle has been fully released.\n\n# Example\n\n```ignore\nlet entity = cx.new(|_| MyEntity::new());\nlet weak = entity.downgrade();\ndrop(entity);\n\n// Verify the entity was released\nweak.assert_released();\n```\n\n# Debugging Leaks\n\nIf this method panics due to leaked handles, set the `LEAK_BACKTRACE` environment\nvariable to see where the leaked handles were allocated:\n\n```bash\nLEAK_BACKTRACE=1 cargo test my_test\n```\n\n# Panics\n\n- Panics if any strong handles to the entity are still alive.\n- Panics if the entity was recently dropped but cleanup hasn't completed yet\n(resources are retained until the end of the effect cycle).",
      "signature": "pub fn assert_released (& self)",
      "cfg": [
        "cfg (any (test, feature = \"leak-detection\"))"
      ],
      "target": "AnyWeakEntity"
    },
    {
      "id": "gpui::app::entity_map::AnyWeakEntity::entity_id",
      "name": "entity_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Get the entity ID associated with this weak reference.",
      "documentation": "Get the entity ID associated with this weak reference.",
      "signature": "pub fn entity_id (& self) -> EntityId",
      "cfg": [],
      "target": "AnyWeakEntity"
    },
    {
      "id": "gpui::app::entity_map::AnyWeakEntity::is_upgradable",
      "name": "is_upgradable",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Check if this weak handle can be upgraded, or if the entity has already been dropped",
      "documentation": "Check if this weak handle can be upgraded, or if the entity has already been dropped",
      "signature": "pub fn is_upgradable (& self) -> bool",
      "cfg": [],
      "target": "AnyWeakEntity"
    },
    {
      "id": "gpui::app::entity_map::AnyWeakEntity::new_invalid",
      "name": "new_invalid",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Creates a weak entity that can never be upgraded.",
      "documentation": "Creates a weak entity that can never be upgraded.",
      "signature": "pub fn new_invalid () -> Self",
      "cfg": [],
      "target": "AnyWeakEntity"
    },
    {
      "id": "gpui::app::entity_map::AnyWeakEntity::upgrade",
      "name": "upgrade",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Upgrade this weak entity reference to a strong reference.",
      "documentation": "Upgrade this weak entity reference to a strong reference.",
      "signature": "pub fn upgrade (& self) -> Option<AnyEntity>",
      "cfg": [],
      "target": "AnyWeakEntity"
    },
    {
      "id": "gpui::app::entity_map::Entity",
      "name": "Entity",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "A strong, well-typed reference to a struct which is managed by GPUI",
      "documentation": "A strong, well-typed reference to a struct which is managed\nby GPUI",
      "signature": "# [doc = \" A strong, well-typed reference to a struct which is managed\"] # [doc = \" by GPUI\"] # [derive (Deref, DerefMut)] pub struct Entity<T> { # [deref] # [deref_mut] pub (crate) any_entity : AnyEntity, pub (crate) entity_type : PhantomData<fn (T) -> T>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::entity_map::Entity::as_mut",
      "name": "as_mut",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Updates the entity referenced by this handle with the given function.",
      "documentation": "Updates the entity referenced by this handle with the given function.",
      "signature": "pub fn as_mut<'a, C : AppContext> (& self, cx : & 'a mut C) -> GpuiBorrow<'a, T>",
      "cfg": [],
      "target": "Entity<T>"
    },
    {
      "id": "gpui::app::entity_map::Entity::downgrade",
      "name": "downgrade",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Downgrade this entity pointer to a non-retaining weak pointer",
      "documentation": "Downgrade this entity pointer to a non-retaining weak pointer",
      "signature": "pub fn downgrade (& self) -> WeakEntity<T>",
      "cfg": [],
      "target": "Entity<T>"
    },
    {
      "id": "gpui::app::entity_map::Entity::entity_id",
      "name": "entity_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Get the entity ID associated with this entity",
      "documentation": "Get the entity ID associated with this entity",
      "signature": "pub fn entity_id (& self) -> EntityId",
      "cfg": [],
      "target": "Entity<T>"
    },
    {
      "id": "gpui::app::entity_map::Entity::into_any",
      "name": "into_any",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Convert this into a dynamically typed entity.",
      "documentation": "Convert this into a dynamically typed entity.",
      "signature": "pub fn into_any (self) -> AnyEntity",
      "cfg": [],
      "target": "Entity<T>"
    },
    {
      "id": "gpui::app::entity_map::Entity::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Grab a reference to this entity from the context.",
      "documentation": "Grab a reference to this entity from the context.",
      "signature": "pub fn read<'a> (& self, cx : & 'a App) -> & 'a T",
      "cfg": [],
      "target": "Entity<T>"
    },
    {
      "id": "gpui::app::entity_map::Entity::read_with",
      "name": "read_with",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Read the entity referenced by this handle with the given function.",
      "documentation": "Read the entity referenced by this handle with the given function.",
      "signature": "pub fn read_with<R, C : AppContext> (& self, cx : & C, f : impl FnOnce (& T, & App) -> R) -> R",
      "cfg": [],
      "target": "Entity<T>"
    },
    {
      "id": "gpui::app::entity_map::Entity::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Updates the entity referenced by this handle with the given function.",
      "documentation": "Updates the entity referenced by this handle with the given function.",
      "signature": "pub fn update<R, C : AppContext> (& self, cx : & mut C, update : impl FnOnce (& mut T, & mut Context<T>) -> R,) -> R",
      "cfg": [],
      "target": "Entity<T>"
    },
    {
      "id": "gpui::app::entity_map::Entity::update_in",
      "name": "update_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Updates the entity referenced by this handle with the given function if the referenced entity still exists, within a visual context that has a window. Returns an error if the window has been closed.",
      "documentation": "Updates the entity referenced by this handle with the given function if\nthe referenced entity still exists, within a visual context that has a window.\nReturns an error if the window has been closed.",
      "signature": "pub fn update_in<R, C : VisualContext> (& self, cx : & mut C, update : impl FnOnce (& mut T, & mut Window, & mut Context<T>) -> R,) -> C::Result<R>",
      "cfg": [],
      "target": "Entity<T>"
    },
    {
      "id": "gpui::app::entity_map::Entity::write",
      "name": "write",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Updates the entity referenced by this handle with the given function.",
      "documentation": "Updates the entity referenced by this handle with the given function.",
      "signature": "pub fn write<C : AppContext> (& self, cx : & mut C, value : T)",
      "cfg": [],
      "target": "Entity<T>"
    },
    {
      "id": "gpui::app::entity_map::EntityId::as_non_zero_u64",
      "name": "as_non_zero_u64",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Converts this entity id to a [NonZeroU64]",
      "documentation": "Converts this entity id to a [NonZeroU64]",
      "signature": "pub fn as_non_zero_u64 (self) -> NonZeroU64",
      "cfg": [],
      "target": "EntityId"
    },
    {
      "id": "gpui::app::entity_map::EntityId::as_u64",
      "name": "as_u64",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Converts this entity id to a [u64]",
      "documentation": "Converts this entity id to a [u64]",
      "signature": "pub fn as_u64 (self) -> u64",
      "cfg": [],
      "target": "EntityId"
    },
    {
      "id": "gpui::app::entity_map::EntityMap::assert_no_new_leaks",
      "name": "assert_no_new_leaks",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Asserts that no entities created after `snapshot` still have alive handles.",
      "documentation": "Asserts that no entities created after `snapshot` still have alive handles.\n\nSee [`LeakDetector::assert_no_new_leaks`] for details.",
      "signature": "pub fn assert_no_new_leaks (& self, snapshot : & LeakDetectorSnapshot)",
      "cfg": [
        "cfg (any (test, feature = \"leak-detection\"))"
      ],
      "target": "EntityMap"
    },
    {
      "id": "gpui::app::entity_map::EntityMap::clear_accessed",
      "name": "clear_accessed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clear_accessed (& mut self)",
      "cfg": [],
      "target": "EntityMap"
    },
    {
      "id": "gpui::app::entity_map::EntityMap::end_lease",
      "name": "end_lease",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Returns an entity after moving it to the stack.",
      "documentation": "Returns an entity after moving it to the stack.",
      "signature": "pub fn end_lease<T> (& mut self, mut lease : Lease<T>)",
      "cfg": [],
      "target": "EntityMap"
    },
    {
      "id": "gpui::app::entity_map::EntityMap::extend_accessed",
      "name": "extend_accessed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn extend_accessed (& mut self, entities : & FxHashSet<EntityId>)",
      "cfg": [],
      "target": "EntityMap"
    },
    {
      "id": "gpui::app::entity_map::EntityMap::insert",
      "name": "insert",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Insert an entity into a slot obtained by calling `reserve`.",
      "documentation": "Insert an entity into a slot obtained by calling `reserve`.",
      "signature": "pub fn insert<T> (& mut self, slot : Slot<T>, entity : T) -> Entity<T> where T : 'static,",
      "cfg": [],
      "target": "EntityMap"
    },
    {
      "id": "gpui::app::entity_map::EntityMap::leak_detector_snapshot",
      "name": "leak_detector_snapshot",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Captures a snapshot of all entities that currently have alive handles.",
      "documentation": "Captures a snapshot of all entities that currently have alive handles.\n\nThe returned [`LeakDetectorSnapshot`] can later be passed to\n[`assert_no_new_leaks`](Self::assert_no_new_leaks) to verify that no\nentities created after the snapshot are still alive.",
      "signature": "pub fn leak_detector_snapshot (& self) -> LeakDetectorSnapshot",
      "cfg": [
        "cfg (any (test, feature = \"leak-detection\"))"
      ],
      "target": "EntityMap"
    },
    {
      "id": "gpui::app::entity_map::EntityMap::lease",
      "name": "lease",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Move an entity to the stack.",
      "documentation": "Move an entity to the stack.",
      "signature": "pub fn lease<T> (& mut self, pointer : & Entity<T>) -> Lease<T>",
      "cfg": [],
      "target": "EntityMap"
    },
    {
      "id": "gpui::app::entity_map::EntityMap::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "EntityMap"
    },
    {
      "id": "gpui::app::entity_map::EntityMap::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn read<T : 'static> (& self, entity : & Entity<T>) -> & T",
      "cfg": [],
      "target": "EntityMap"
    },
    {
      "id": "gpui::app::entity_map::EntityMap::ref_counts_drop_handle",
      "name": "ref_counts_drop_handle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ref_counts_drop_handle (& self) -> Arc<RwLock<EntityRefCounts>>",
      "cfg": [],
      "target": "EntityMap"
    },
    {
      "id": "gpui::app::entity_map::EntityMap::reserve",
      "name": "reserve",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Reserve a slot for an entity, which you can subsequently use with `insert`.",
      "documentation": "Reserve a slot for an entity, which you can subsequently use with `insert`.",
      "signature": "pub fn reserve<T : 'static> (& self) -> Slot<T>",
      "cfg": [],
      "target": "EntityMap"
    },
    {
      "id": "gpui::app::entity_map::EntityMap::take_dropped",
      "name": "take_dropped",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn take_dropped (& mut self) -> Vec<(EntityId, Box<dyn Any>)>",
      "cfg": [],
      "target": "EntityMap"
    },
    {
      "id": "gpui::app::entity_map::LeakDetector::assert_no_new_leaks",
      "name": "assert_no_new_leaks",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Asserts that no entities created after `snapshot` still have alive handles.",
      "documentation": "Asserts that no entities created after `snapshot` still have alive handles.\n\nEntities that were already tracked at the time of the snapshot are ignored,\neven if they still have handles. Only *new* entities (those whose\n`EntityId` was not present in the snapshot) are considered leaks.\n\n# Panics\n\nPanics if any new entity handles exist. The panic message lists every\nleaked entity with its type name, and includes allocation-site backtraces\nwhen `LEAK_BACKTRACE` is set.",
      "signature": "pub fn assert_no_new_leaks (& self, snapshot : & LeakDetectorSnapshot)",
      "cfg": [],
      "target": "LeakDetector"
    },
    {
      "id": "gpui::app::entity_map::LeakDetector::assert_released",
      "name": "assert_released",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Asserts that all handles to the given entity have been released.",
      "documentation": "Asserts that all handles to the given entity have been released.\n\n# Panics\n\nPanics if any handles to the entity are still alive. The panic message\nincludes backtraces for each leaked handle if `LEAK_BACKTRACE` is set,\notherwise it suggests setting the environment variable to get more info.",
      "signature": "pub fn assert_released (& mut self, entity_id : EntityId)",
      "cfg": [],
      "target": "LeakDetector"
    },
    {
      "id": "gpui::app::entity_map::LeakDetector::handle_created",
      "name": "handle_created",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Records that a new handle has been created for the given entity.",
      "documentation": "Records that a new handle has been created for the given entity.\n\nReturns a unique `HandleId` that must be passed to `handle_released` when\nthe handle is dropped. If `LEAK_BACKTRACE` is set, captures a backtrace\nat the allocation site.",
      "signature": "pub fn handle_created (& mut self, entity_id : EntityId, type_name : Option<& 'static str>,) -> HandleId",
      "cfg": [],
      "target": "LeakDetector"
    },
    {
      "id": "gpui::app::entity_map::LeakDetector::handle_released",
      "name": "handle_released",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Records that a handle has been released (dropped).",
      "documentation": "Records that a handle has been released (dropped).\n\nThis removes the handle from tracking. The `handle_id` should be the same\none returned by `handle_created` when the handle was allocated.",
      "signature": "pub fn handle_released (& mut self, entity_id : EntityId, handle_id : HandleId)",
      "cfg": [],
      "target": "LeakDetector"
    },
    {
      "id": "gpui::app::entity_map::LeakDetector::snapshot",
      "name": "snapshot",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Captures a snapshot of all entity IDs that currently have alive handles.",
      "documentation": "Captures a snapshot of all entity IDs that currently have alive handles.\n\nThe returned [`LeakDetectorSnapshot`] can later be passed to\n[`assert_no_new_leaks`](Self::assert_no_new_leaks) to verify that no\nentities created after the snapshot are still alive.",
      "signature": "pub fn snapshot (& self) -> LeakDetectorSnapshot",
      "cfg": [],
      "target": "LeakDetector"
    },
    {
      "id": "gpui::app::entity_map::LeakDetectorSnapshot",
      "name": "LeakDetectorSnapshot",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "A snapshot of the set of alive entities at a point in time.",
      "documentation": "A snapshot of the set of alive entities at a point in time.\n\nCreated by [`App::leak_detector_snapshot`](crate::App::leak_detector_snapshot).\nCan later be passed to\n[`App::assert_no_new_leaks`](crate::App::assert_no_new_leaks) to verify that\nno new entity handles remain between the snapshot and the current state.",
      "signature": "# [doc = \" A snapshot of the set of alive entities at a point in time.\"] # [doc = \"\"] # [doc = \" Created by [`App::leak_detector_snapshot`](crate::App::leak_detector_snapshot).\"] # [doc = \" Can later be passed to\"] # [doc = \" [`App::assert_no_new_leaks`](crate::App::assert_no_new_leaks) to verify that\"] # [doc = \" no new entity handles remain between the snapshot and the current state.\"] # [cfg (any (test, feature = \"leak-detection\"))] pub struct LeakDetectorSnapshot { entity_ids : collections::HashSet<EntityId>, }",
      "cfg": [
        "cfg (any (test, feature = \"leak-detection\"))"
      ]
    },
    {
      "id": "gpui::app::entity_map::WeakEntity",
      "name": "WeakEntity",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "A weak reference to a entity of the given type.",
      "documentation": "A weak reference to a entity of the given type.",
      "signature": "# [doc = \" A weak reference to a entity of the given type.\"] # [derive (Deref, DerefMut)] pub struct WeakEntity<T> { # [deref] # [deref_mut] any_entity : AnyWeakEntity, entity_type : PhantomData<fn (T) -> T>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::entity_map::WeakEntity::new_invalid",
      "name": "new_invalid",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Create a new weak entity that can never be upgraded.",
      "documentation": "Create a new weak entity that can never be upgraded.",
      "signature": "pub fn new_invalid () -> Self",
      "cfg": [],
      "target": "WeakEntity<T>"
    },
    {
      "id": "gpui::app::entity_map::WeakEntity::read_with",
      "name": "read_with",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Reads the entity referenced by this handle with the given function if the referenced entity still exists. Returns an error if the entity has been released.",
      "documentation": "Reads the entity referenced by this handle with the given function if\nthe referenced entity still exists. Returns an error if the entity has\nbeen released.",
      "signature": "pub fn read_with<C, R> (& self, cx : & C, read : impl FnOnce (& T, & App) -> R) -> Result<R> where C : AppContext,",
      "cfg": [],
      "target": "WeakEntity<T>"
    },
    {
      "id": "gpui::app::entity_map::WeakEntity::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Updates the entity referenced by this handle with the given function if the referenced entity still exists. Returns an error if the entity has been released.",
      "documentation": "Updates the entity referenced by this handle with the given function if\nthe referenced entity still exists. Returns an error if the entity has\nbeen released.",
      "signature": "pub fn update<C, R> (& self, cx : & mut C, update : impl FnOnce (& mut T, & mut Context<T>) -> R,) -> Result<R> where C : AppContext,",
      "cfg": [],
      "target": "WeakEntity<T>"
    },
    {
      "id": "gpui::app::entity_map::WeakEntity::update_in",
      "name": "update_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Updates the entity referenced by this handle with the given function if the referenced entity still exists, within a visual context that has a window. Returns an error if the entity has been released.",
      "documentation": "Updates the entity referenced by this handle with the given function if\nthe referenced entity still exists, within a visual context that has a window.\nReturns an error if the entity has been released.",
      "signature": "pub fn update_in<C, R> (& self, cx : & mut C, update : impl FnOnce (& mut T, & mut Window, & mut Context<T>) -> R,) -> Result<R> where C : AppContext,",
      "cfg": [],
      "target": "WeakEntity<T>"
    },
    {
      "id": "gpui::app::entity_map::WeakEntity::upgrade",
      "name": "upgrade",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::entity_map",
      "path": "gpui::app::entity_map",
      "source": "crates/gpui/src/app/entity_map.rs",
      "summary": "Upgrade this weak entity reference into a strong entity reference",
      "documentation": "Upgrade this weak entity reference into a strong entity reference",
      "signature": "pub fn upgrade (& self) -> Option<Entity<T>>",
      "cfg": [],
      "target": "WeakEntity<T>"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext",
      "name": "HeadlessAppContext",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "A cross-platform headless app context for tests that need real text shaping.",
      "documentation": "A cross-platform headless app context for tests that need real text shaping.\n\nUnlike the old `HeadlessMetalAppContext`, this works on any platform. It uses\n`TestPlatform` for deterministic scheduling and accepts a pluggable\n`PlatformTextSystem` so tests get real glyph measurements.\n\n# Usage\n\n```ignore\nlet text_system = Arc::new(gpui_wgpu::CosmicTextSystem::new(\"fallback\"));\nlet mut cx = HeadlessAppContext::with_platform(\ntext_system,\nArc::new(Assets),\n|| gpui_platform::current_headless_renderer(),\n);\n```",
      "signature": "# [doc = \" A cross-platform headless app context for tests that need real text shaping.\"] # [doc = \"\"] # [doc = \" Unlike the old `HeadlessMetalAppContext`, this works on any platform. It uses\"] # [doc = \" `TestPlatform` for deterministic scheduling and accepts a pluggable\"] # [doc = \" `PlatformTextSystem` so tests get real glyph measurements.\"] # [doc = \"\"] # [doc = \" # Usage\"] # [doc = \"\"] # [doc = \" ```ignore\"] # [doc = \" let text_system = Arc::new(gpui_wgpu::CosmicTextSystem::new(\\\"fallback\\\"));\"] # [doc = \" let mut cx = HeadlessAppContext::with_platform(\"] # [doc = \" text_system,\"] # [doc = \" Arc::new(Assets),\"] # [doc = \" || gpui_platform::current_headless_renderer(),\"] # [doc = \");\"] # [doc = \" ```\"] pub struct HeadlessAppContext { # [doc = \" The underlying app cell.\"] pub app : Rc<AppCell>, # [doc = \" The background executor for running async tasks.\"] pub background_executor : BackgroundExecutor, # [doc = \" The foreground executor for running tasks on the main thread.\"] pub foreground_executor : ForegroundExecutor, dispatcher : TestDispatcher, text_system : Arc<TextSystem>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::advance_clock",
      "name": "advance_clock",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Advances the simulated clock.",
      "documentation": "Advances the simulated clock.",
      "signature": "pub fn advance_clock (& self, duration : Duration)",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::allow_parking",
      "name": "allow_parking",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Enables parking mode, allowing blocking on real I/O (e.g., async asset loading).",
      "documentation": "Enables parking mode, allowing blocking on real I/O (e.g., async asset loading).",
      "signature": "pub fn allow_parking (& self)",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::background_executor",
      "name": "background_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Returns the background executor.",
      "documentation": "Returns the background executor.",
      "signature": "pub fn background_executor (& self) -> & BackgroundExecutor",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::capture_screenshot",
      "name": "capture_screenshot",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Captures a screenshot from a window.",
      "documentation": "Captures a screenshot from a window.\n\nRequires that the context was created with a renderer factory that\nreturns `Some` via [`HeadlessAppContext::with_platform`].",
      "signature": "pub fn capture_screenshot (& mut self, window : AnyWindowHandle) -> Result<RgbaImage>",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::forbid_parking",
      "name": "forbid_parking",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Disables parking mode, returning to deterministic test execution.",
      "documentation": "Disables parking mode, returning to deterministic test execution.",
      "signature": "pub fn forbid_parking (& self)",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::foreground_executor",
      "name": "foreground_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Returns the foreground executor.",
      "documentation": "Returns the foreground executor.",
      "signature": "pub fn foreground_executor (& self) -> & ForegroundExecutor",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Creates a new headless app context with the given text system.",
      "documentation": "Creates a new headless app context with the given text system.",
      "signature": "pub fn new (platform_text_system : Arc<dyn PlatformTextSystem>) -> Self",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::open_window",
      "name": "open_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Opens a window for headless rendering.",
      "documentation": "Opens a window for headless rendering.",
      "signature": "pub fn open_window<V : Render + 'static> (& mut self, size : Size<Pixels>, build_root : impl FnOnce (& mut Window, & mut App) -> Entity<V>,) -> Result<WindowHandle<V>>",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::run_until_parked",
      "name": "run_until_parked",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Runs all pending tasks until parked.",
      "documentation": "Runs all pending tasks until parked.",
      "signature": "pub fn run_until_parked (& self)",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::text_system",
      "name": "text_system",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Returns the text system.",
      "documentation": "Returns the text system.",
      "signature": "pub fn text_system (& self) -> & Arc<TextSystem>",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Updates app state.",
      "documentation": "Updates app state.",
      "signature": "pub fn update<R> (& mut self, f : impl FnOnce (& mut App) -> R) -> R",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::update_window",
      "name": "update_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Updates a window and calls draw to render.",
      "documentation": "Updates a window and calls draw to render.",
      "signature": "pub fn update_window<R> (& mut self, window : AnyWindowHandle, f : impl FnOnce (AnyView, & mut Window, & mut App) -> R,) -> Result<R>",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::with_asset_source",
      "name": "with_asset_source",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Creates a new headless app context with a custom text system and asset source.",
      "documentation": "Creates a new headless app context with a custom text system and asset source.",
      "signature": "pub fn with_asset_source (platform_text_system : Arc<dyn PlatformTextSystem>, asset_source : Arc<dyn AssetSource>,) -> Self",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::headless_app_context::HeadlessAppContext::with_platform",
      "name": "with_platform",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::headless_app_context",
      "path": "gpui::app::headless_app_context",
      "source": "crates/gpui/src/app/headless_app_context.rs",
      "summary": "Creates a new headless app context with the given text system, asset source, and an optional renderer factory for screenshot support.",
      "documentation": "Creates a new headless app context with the given text system, asset source,\nand an optional renderer factory for screenshot support.",
      "signature": "pub fn with_platform (platform_text_system : Arc<dyn PlatformTextSystem>, asset_source : Arc<dyn AssetSource>, renderer_factory : impl Fn () -> Option<Box<dyn PlatformHeadlessRenderer>> + 'static,) -> Self",
      "cfg": [],
      "target": "HeadlessAppContext"
    },
    {
      "id": "gpui::app::reexport-1",
      "name": "async_context :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use async_context::*;",
      "cfg": []
    },
    {
      "id": "gpui::app::reexport-2",
      "name": "bench_context :: { BenchAppContext , BenchReport , BenchWindowContext , bench_platform }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (feature = \"bench\")] pub use bench_context::{ BenchAppContext, BenchReport, BenchWindowContext, bench_platform };",
      "cfg": [
        "cfg (feature = \"bench\")"
      ]
    },
    {
      "id": "gpui::app::reexport-3",
      "name": "context :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use context::*;",
      "cfg": []
    },
    {
      "id": "gpui::app::reexport-4",
      "name": "entity_map :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use entity_map::*;",
      "cfg": []
    },
    {
      "id": "gpui::app::reexport-5",
      "name": "headless_app_context :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (any (test, feature = \"test-support\"))] pub use headless_app_context::*;",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ]
    },
    {
      "id": "gpui::app::reexport-6",
      "name": "test_app :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (any (test, feature = \"test-support\"))] pub use test_app::*;",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ]
    },
    {
      "id": "gpui::app::reexport-7",
      "name": "test_context :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (any (test, feature = \"test-support\"))] pub use test_context::*;",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ]
    },
    {
      "id": "gpui::app::reexport-8",
      "name": "visual_test_context :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app",
      "path": "gpui::app",
      "source": "crates/gpui/src/app.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (all (target_os = \"macos\", any (test, feature = \"test-support\")))] pub use visual_test_context::*;",
      "cfg": [
        "cfg (all (target_os = \"macos\", any (test, feature = \"test-support\")))"
      ]
    },
    {
      "id": "gpui::app::test_app::TestApp",
      "name": "TestApp",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "A test application context with a clean API.",
      "documentation": "A test application context with a clean API.\n\nUnlike `TestAppContext`, `TestApp` automatically flushes effects after\neach update and provides simpler window management.",
      "signature": "# [doc = \" A test application context with a clean API.\"] # [doc = \"\"] # [doc = \" Unlike `TestAppContext`, `TestApp` automatically flushes effects after\"] # [doc = \" each update and provides simpler window management.\"] pub struct TestApp { app : Rc<AppCell>, platform : Rc<TestPlatform>, background_executor : BackgroundExecutor, foreground_executor : ForegroundExecutor, # [allow (dead_code)] dispatcher : TestDispatcher, text_system : Arc<TextSystem>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::test_app::TestApp::advance_clock",
      "name": "advance_clock",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Advance the simulated clock by the given duration.",
      "documentation": "Advance the simulated clock by the given duration.",
      "signature": "pub fn advance_clock (& self, duration : Duration)",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::background_executor",
      "name": "background_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Get the background executor.",
      "documentation": "Get the background executor.",
      "signature": "pub fn background_executor (& self) -> & BackgroundExecutor",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::background_spawn",
      "name": "background_spawn",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Spawn a future on the background executor.",
      "documentation": "Spawn a future on the background executor.",
      "signature": "pub fn background_spawn<R> (& self, future : impl Future<Output = R> + Send + 'static) -> Task<R> where R : Send + 'static,",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::did_prompt_for_new_path",
      "name": "did_prompt_for_new_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Check if a file path prompt is pending.",
      "documentation": "Check if a file path prompt is pending.",
      "signature": "pub fn did_prompt_for_new_path (& self) -> bool",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::foreground_executor",
      "name": "foreground_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Get the foreground executor.",
      "documentation": "Get the foreground executor.",
      "signature": "pub fn foreground_executor (& self) -> & ForegroundExecutor",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::has_global",
      "name": "has_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Check if a global of the given type exists.",
      "documentation": "Check if a global of the given type exists.",
      "signature": "pub fn has_global<G : Global> (& self) -> bool",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::has_pending_prompt",
      "name": "has_pending_prompt",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Check if a prompt dialog is pending.",
      "documentation": "Check if a prompt dialog is pending.",
      "signature": "pub fn has_pending_prompt (& self) -> bool",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Create a new test application.",
      "documentation": "Create a new test application.",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::new_entity",
      "name": "new_entity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Create a new entity in the app.",
      "documentation": "Create a new entity in the app.",
      "signature": "pub fn new_entity<T : 'static> (& mut self, build : impl FnOnce (& mut Context<T>) -> T,) -> Entity<T>",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::open_window",
      "name": "open_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Open a test window with the given root view, using maximized bounds.",
      "documentation": "Open a test window with the given root view, using maximized bounds.",
      "signature": "pub fn open_window<V : Render + 'static> (& mut self, build_view : impl FnOnce (& mut Window, & mut Context<V>) -> V,) -> TestAppWindow<V>",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::open_window_with_options",
      "name": "open_window_with_options",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Open a test window with specific options.",
      "documentation": "Open a test window with specific options.",
      "signature": "pub fn open_window_with_options<V : Render + 'static> (& mut self, options : WindowOptions, build_view : impl FnOnce (& mut Window, & mut Context<V>) -> V,) -> TestAppWindow<V>",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::opened_url",
      "name": "opened_url",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Get URLs that have been opened via `cx.open_url()`.",
      "documentation": "Get URLs that have been opened via `cx.open_url()`.",
      "signature": "pub fn opened_url (& self) -> Option<String>",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Run a closure with read-only access to the App context.",
      "documentation": "Run a closure with read-only access to the App context.",
      "signature": "pub fn read<R> (& self, f : impl FnOnce (& App) -> R) -> R",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::read_entity",
      "name": "read_entity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Read an entity.",
      "documentation": "Read an entity.",
      "signature": "pub fn read_entity<T : 'static, R> (& self, entity : & Entity<T>, f : impl FnOnce (& T, & App) -> R,) -> R",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::read_from_clipboard",
      "name": "read_from_clipboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Read from the simulated clipboard.",
      "documentation": "Read from the simulated clipboard.",
      "signature": "pub fn read_from_clipboard (& self) -> Option<ClipboardItem>",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::read_global",
      "name": "read_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Read a global value.",
      "documentation": "Read a global value.",
      "signature": "pub fn read_global<G : Global, R> (& self, f : impl FnOnce (& G, & App) -> R) -> R",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::run_until_parked",
      "name": "run_until_parked",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Run pending tasks until there's nothing left to do.",
      "documentation": "Run pending tasks until there's nothing left to do.",
      "signature": "pub fn run_until_parked (& self)",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::set_global",
      "name": "set_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Set a global value.",
      "documentation": "Set a global value.",
      "signature": "pub fn set_global<G : Global> (& mut self, global : G)",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::simulate_new_path_selection",
      "name": "simulate_new_path_selection",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Simulate answering a path selection dialog.",
      "documentation": "Simulate answering a path selection dialog.",
      "signature": "pub fn simulate_new_path_selection (& self, select : impl FnOnce (& std::path::Path) -> Option<std::path::PathBuf>,)",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::simulate_prompt_answer",
      "name": "simulate_prompt_answer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Simulate answering a prompt dialog.",
      "documentation": "Simulate answering a prompt dialog.",
      "signature": "pub fn simulate_prompt_answer (& self, button : & str)",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::spawn",
      "name": "spawn",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Spawn a future on the foreground executor.",
      "documentation": "Spawn a future on the foreground executor.",
      "signature": "pub fn spawn<Fut, R> (& self, f : impl FnOnce (AsyncApp) -> Fut) -> Task<R> where Fut : Future<Output = R> + 'static, R : 'static,",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::text_system",
      "name": "text_system",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Get the text system.",
      "documentation": "Get the text system.",
      "signature": "pub fn text_system (& self) -> & Arc<TextSystem>",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::to_async",
      "name": "to_async",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Get an async handle to the app.",
      "documentation": "Get an async handle to the app.",
      "signature": "pub fn to_async (& self) -> AsyncApp",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Run a closure with mutable access to the App context. Automatically runs until parked after the closure completes.",
      "documentation": "Run a closure with mutable access to the App context.\nAutomatically runs until parked after the closure completes.",
      "signature": "pub fn update<R> (& mut self, f : impl FnOnce (& mut App) -> R) -> R",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::update_entity",
      "name": "update_entity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Update an entity.",
      "documentation": "Update an entity.",
      "signature": "pub fn update_entity<T : 'static, R> (& mut self, entity : & Entity<T>, f : impl FnOnce (& mut T, & mut Context<T>) -> R,) -> R",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::update_global",
      "name": "update_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Update a global value.",
      "documentation": "Update a global value.",
      "signature": "pub fn update_global<G : Global, R> (& mut self, f : impl FnOnce (& mut G, & mut App) -> R) -> R",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::windows",
      "name": "windows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Get all open windows.",
      "documentation": "Get all open windows.",
      "signature": "pub fn windows (& self) -> Vec<AnyWindowHandle>",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::with_seed",
      "name": "with_seed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Create a new test application with a specific random seed.",
      "documentation": "Create a new test application with a specific random seed.",
      "signature": "pub fn with_seed (seed : u64) -> Self",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::with_text_system",
      "name": "with_text_system",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Create a new test application with a custom text system for real font shaping.",
      "documentation": "Create a new test application with a custom text system for real font shaping.",
      "signature": "pub fn with_text_system (text_system : Arc<dyn PlatformTextSystem>) -> Self",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::with_text_system_and_assets",
      "name": "with_text_system_and_assets",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Create a new test application with a custom text system and asset source.",
      "documentation": "Create a new test application with a custom text system and asset source.",
      "signature": "pub fn with_text_system_and_assets (text_system : Arc<dyn PlatformTextSystem>, asset_source : Arc<dyn crate::AssetSource>,) -> Self",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestApp::write_to_clipboard",
      "name": "write_to_clipboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Write text to the simulated clipboard.",
      "documentation": "Write text to the simulated clipboard.",
      "signature": "pub fn write_to_clipboard (& self, item : ClipboardItem)",
      "cfg": [],
      "target": "TestApp"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow",
      "name": "TestAppWindow",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "A test window with inspection and simulation capabilities.",
      "documentation": "A test window with inspection and simulation capabilities.",
      "signature": "# [doc = \" A test window with inspection and simulation capabilities.\"] pub struct TestAppWindow<V> { handle : WindowHandle<V>, app : Rc<AppCell>, platform : Rc<TestPlatform>, background_executor : BackgroundExecutor, }",
      "cfg": []
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::draw",
      "name": "draw",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Force a redraw of the window.",
      "documentation": "Force a redraw of the window.",
      "signature": "pub fn draw (& mut self)",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::handle",
      "name": "handle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Get the window handle.",
      "documentation": "Get the window handle.",
      "signature": "pub fn handle (& self) -> WindowHandle<V>",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Read the root view.",
      "documentation": "Read the root view.",
      "signature": "pub fn read<R> (& self, f : impl FnOnce (& V, & App) -> R) -> R",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::root",
      "name": "root",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Get the root view entity.",
      "documentation": "Get the root view entity.",
      "signature": "pub fn root (& self) -> Entity<V>",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::simulate_click",
      "name": "simulate_click",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Simulate a click at the given position.",
      "documentation": "Simulate a click at the given position.",
      "signature": "pub fn simulate_click (& mut self, position : Point<Pixels>, button : MouseButton)",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::simulate_event",
      "name": "simulate_event",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Simulate an input event.",
      "documentation": "Simulate an input event.",
      "signature": "pub fn simulate_event<E : InputEvent> (& mut self, event : E)",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::simulate_input",
      "name": "simulate_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Simulate typing text.",
      "documentation": "Simulate typing text.",
      "signature": "pub fn simulate_input (& mut self, input : & str)",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::simulate_keystroke",
      "name": "simulate_keystroke",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Simulate a keystroke.",
      "documentation": "Simulate a keystroke.",
      "signature": "pub fn simulate_keystroke (& mut self, keystroke : & str)",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::simulate_keystrokes",
      "name": "simulate_keystrokes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Simulate multiple keystrokes (space-separated).",
      "documentation": "Simulate multiple keystrokes (space-separated).",
      "signature": "pub fn simulate_keystrokes (& mut self, keystrokes : & str)",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::simulate_mouse_down",
      "name": "simulate_mouse_down",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Simulate a mouse down event.",
      "documentation": "Simulate a mouse down event.",
      "signature": "pub fn simulate_mouse_down (& mut self, position : Point<Pixels>, button : MouseButton)",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::simulate_mouse_move",
      "name": "simulate_mouse_move",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Simulate a mouse move.",
      "documentation": "Simulate a mouse move.",
      "signature": "pub fn simulate_mouse_move (& mut self, position : Point<Pixels>)",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::simulate_mouse_up",
      "name": "simulate_mouse_up",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Simulate a mouse up event.",
      "documentation": "Simulate a mouse up event.",
      "signature": "pub fn simulate_mouse_up (& mut self, position : Point<Pixels>, button : MouseButton)",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::simulate_resize",
      "name": "simulate_resize",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Simulate resizing the window.",
      "documentation": "Simulate resizing the window.",
      "signature": "pub fn simulate_resize (& mut self, size : Size<Pixels>)",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::simulate_scroll",
      "name": "simulate_scroll",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Simulate a scroll event.",
      "documentation": "Simulate a scroll event.",
      "signature": "pub fn simulate_scroll (& mut self, position : Point<Pixels>, delta : Point<Pixels>)",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::title",
      "name": "title",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Get the window title.",
      "documentation": "Get the window title.",
      "signature": "pub fn title (& self) -> Option<String>",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_app::TestAppWindow::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_app",
      "path": "gpui::app::test_app",
      "source": "crates/gpui/src/app/test_app.rs",
      "summary": "Update the root view.",
      "documentation": "Update the root view.",
      "signature": "pub fn update<R> (& mut self, f : impl FnOnce (& mut V, & mut Window, & mut Context<V>) -> R) -> R",
      "cfg": [],
      "target": "TestAppWindow<V>"
    },
    {
      "id": "gpui::app::test_context::AnyWindowHandle::build_entity",
      "name": "build_entity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Creates the given view in this window.",
      "documentation": "Creates the given view in this window.",
      "signature": "pub fn build_entity<V : Render + 'static> (& self, cx : & mut TestAppContext, build_view : impl FnOnce (& mut Window, & mut Context<V>) -> V,) -> Entity<V>",
      "cfg": [],
      "target": "AnyWindowHandle"
    },
    {
      "id": "gpui::app::test_context::Entity::condition",
      "name": "condition",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns a future that resolves when the condition becomes true.",
      "documentation": "Returns a future that resolves when the condition becomes true.",
      "signature": "pub fn condition<Evt> (& self, cx : & TestAppContext, mut predicate : impl FnMut (& V, & App) -> bool,) -> impl Future<Output = ()> where Evt : 'static, V : EventEmitter<Evt>,",
      "cfg": [],
      "target": "Entity<V>"
    },
    {
      "id": "gpui::app::test_context::Entity::next_event",
      "name": "next_event",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Block until the next event is emitted by the entity, then return it.",
      "documentation": "Block until the next event is emitted by the entity, then return it.",
      "signature": "pub fn next_event<Event> (& self, cx : & mut TestAppContext) -> impl Future<Output = Event> where Event : Send + Clone + 'static, T : EventEmitter<Event>,",
      "cfg": [],
      "target": "Entity<T>"
    },
    {
      "id": "gpui::app::test_context::Entity::next_notification",
      "name": "next_notification",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns a future that resolves when the view is next updated.",
      "documentation": "Returns a future that resolves when the view is next updated.",
      "signature": "pub fn next_notification (& self, advance_clock_by : Duration, cx : & TestAppContext,) -> impl Future<Output = ()>",
      "cfg": [],
      "target": "Entity<V>"
    },
    {
      "id": "gpui::app::test_context::TestAppContext",
      "name": "TestAppContext",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "A TestAppContext is provided to tests created with `#[gpui::test]`, it provides an implementation of `Context` with additional methods that are useful in tests.",
      "documentation": "A TestAppContext is provided to tests created with `#[gpui::test]`, it provides\nan implementation of `Context` with additional methods that are useful in tests.",
      "signature": "# [doc = \" A TestAppContext is provided to tests created with `#[gpui::test]`, it provides\"] # [doc = \" an implementation of `Context` with additional methods that are useful in tests.\"] # [derive (Clone)] pub struct TestAppContext { # [doc (hidden)] pub background_executor : BackgroundExecutor, # [doc (hidden)] pub foreground_executor : ForegroundExecutor, # [doc (hidden)] pub dispatcher : TestDispatcher, pub (crate) test_platform : Rc<TestPlatform>, text_system : Arc<TextSystem>, fn_name : Option<& 'static str>, on_quit : Rc<RefCell<Vec<Box<dyn FnOnce () + 'static>>>>, # [doc (hidden)] pub app : Rc<AppCell>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::test_context::TestAppContext::activate_accessibility",
      "name": "activate_accessibility",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Activates the test window's platform accessibility adapter.",
      "documentation": "Activates the test window's platform accessibility adapter.",
      "signature": "pub fn activate_accessibility (& mut self, window : AnyWindowHandle)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::add_empty_window",
      "name": "add_empty_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Adds a new window with no content.",
      "documentation": "Adds a new window with no content.",
      "signature": "pub fn add_empty_window (& mut self) -> & mut VisualTestContext",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::add_window",
      "name": "add_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Adds a new window. The Window will always be backed by a `TestWindow` which can be retrieved with `self.test_window(handle)`",
      "documentation": "Adds a new window. The Window will always be backed by a `TestWindow` which\ncan be retrieved with `self.test_window(handle)`",
      "signature": "pub fn add_window<F, V> (& mut self, build_window : F) -> WindowHandle<V> where F : FnOnce (& mut Window, & mut Context<V>) -> V, V : 'static + Render,",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::add_window_view",
      "name": "add_window_view",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Adds a new window, and returns its root view and a `VisualTestContext` which can be used as a `Window` and `App` for the rest of the test. Typically you would shadow this context with the returned one. `let (view, cx) = cx.add_window_view(...);`",
      "documentation": "Adds a new window, and returns its root view and a `VisualTestContext` which can be used\nas a `Window` and `App` for the rest of the test. Typically you would shadow this context with\nthe returned one. `let (view, cx) = cx.add_window_view(...);`",
      "signature": "pub fn add_window_view<F, V> (& mut self, build_root_view : F,) -> (Entity<V>, & mut VisualTestContext) where F : FnOnce (& mut Window, & mut Context<V>) -> V, V : 'static + Render,",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::app_identity",
      "name": "app_identity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns the application identity configured during this test.",
      "documentation": "Returns the application identity configured during this test.",
      "signature": "pub fn app_identity (& self) -> Option<(SharedString, SharedString)>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::build",
      "name": "build",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Creates a new `TestAppContext`. Usually you can rely on `#[gpui::test]` to do this for you.",
      "documentation": "Creates a new `TestAppContext`. Usually you can rely on `#[gpui::test]` to do this for you.",
      "signature": "pub fn build (dispatcher : TestDispatcher, fn_name : Option<& 'static str>) -> Self",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::condition",
      "name": "condition",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Runs until the given condition becomes true. (Prefer `run_until_parked` if you don't need to jump in at a specific time).",
      "documentation": "Runs until the given condition becomes true. (Prefer `run_until_parked` if you\ndon't need to jump in at a specific time).",
      "signature": "pub async fn condition<T : 'static> (& mut self, entity : & Entity<T>, mut predicate : impl FnMut (& mut T, & mut Context<T>) -> bool,)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::delivered_system_notifications",
      "name": "delivered_system_notifications",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns the system notifications currently delivered by the test platform.",
      "documentation": "Returns the system notifications currently delivered by the test platform.",
      "signature": "pub fn delivered_system_notifications (& self) -> Vec<SystemNotification>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::did_prompt_for_new_path",
      "name": "did_prompt_for_new_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Checks whether there have been any new path prompts received by the platform.",
      "documentation": "Checks whether there have been any new path prompts received by the platform.",
      "signature": "pub fn did_prompt_for_new_path (& self) -> bool",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::did_prompt_for_paths",
      "name": "did_prompt_for_paths",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns true if there's a path selection dialog pending.",
      "documentation": "Returns true if there's a path selection dialog pending.",
      "signature": "pub fn did_prompt_for_paths (& self) -> bool",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::dismiss_context_menu",
      "name": "dismiss_context_menu",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates closing the pending native context menu without a selection.",
      "documentation": "Simulates closing the pending native context menu without a selection.",
      "signature": "pub fn dismiss_context_menu (& self, window : AnyWindowHandle)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::dismissed_system_notifications",
      "name": "dismissed_system_notifications",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns the tags of all system notifications dismissed during this test, in order.",
      "documentation": "Returns the tags of all system notifications dismissed during this test, in order.",
      "signature": "pub fn dismissed_system_notifications (& self) -> Vec<SharedString>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::dispatch_accessibility_action",
      "name": "dispatch_accessibility_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Delivers an AccessKit action to the same listener path used by a platform adapter.",
      "documentation": "Delivers an AccessKit action to the same listener path used by a\nplatform adapter.",
      "signature": "pub fn dispatch_accessibility_action (& mut self, window : AnyWindowHandle, request : accesskit::ActionRequest,)",
      "cfg": [
        "cfg (not (target_family = \"wasm\"))"
      ],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::dispatch_action",
      "name": "dispatch_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulate dispatching an action to the currently focused node in the window.",
      "documentation": "Simulate dispatching an action to the currently focused node in the window.",
      "signature": "pub fn dispatch_action<A> (& mut self, window : AnyWindowHandle, action : A) where A : Action,",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::dispatch_keystroke",
      "name": "dispatch_keystroke",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "dispatches a single Keystroke (see also `simulate_keystrokes` and `simulate_input`)",
      "documentation": "dispatches a single Keystroke (see also `simulate_keystrokes` and `simulate_input`)",
      "signature": "pub fn dispatch_keystroke (& mut self, window : AnyWindowHandle, keystroke : Keystroke)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::events",
      "name": "events",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns a stream of events emitted by the given Entity.",
      "documentation": "Returns a stream of events emitted by the given Entity.",
      "signature": "pub fn events<Evt, T : 'static + EventEmitter<Evt>> (& mut self, entity : & Entity<T>,) -> futures::channel::mpsc::UnboundedReceiver<Evt> where Evt : 'static + Clone,",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::executor",
      "name": "executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns an executor (for running tasks in the background)",
      "documentation": "Returns an executor (for running tasks in the background)",
      "signature": "pub fn executor (& self) -> BackgroundExecutor",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::expect_restart",
      "name": "expect_restart",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns true if there's an alert dialog open.",
      "documentation": "Returns true if there's an alert dialog open.",
      "signature": "pub fn expect_restart (& self) -> oneshot::Receiver<Option<PathBuf>>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::foreground_executor",
      "name": "foreground_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns an executor (for running tasks on the main thread)",
      "documentation": "Returns an executor (for running tasks on the main thread)",
      "signature": "pub fn foreground_executor (& self) -> & ForegroundExecutor",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::has_global",
      "name": "has_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "true if the given global is defined",
      "documentation": "true if the given global is defined",
      "signature": "pub fn has_global<G : Global> (& self) -> bool",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::has_pending_prompt",
      "name": "has_pending_prompt",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns true if there's an alert dialog open.",
      "documentation": "Returns true if there's an alert dialog open.",
      "signature": "pub fn has_pending_prompt (& self) -> bool",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::new_app",
      "name": "new_app",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "returns a new `TestAppContext` re-using the same executors to interleave tasks.",
      "documentation": "returns a new `TestAppContext` re-using the same executors to interleave tasks.",
      "signature": "pub fn new_app (& self) -> TestAppContext",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::notifications",
      "name": "notifications",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns a stream of notifications whenever the Entity is updated.",
      "documentation": "Returns a stream of notifications whenever the Entity is updated.",
      "signature": "pub fn notifications<T : 'static> (& mut self, entity : & Entity<T>,) -> impl Stream<Item = ()> + use<T>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::on_quit",
      "name": "on_quit",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Register cleanup to run when the test ends.",
      "documentation": "Register cleanup to run when the test ends.",
      "signature": "pub fn on_quit (& mut self, f : impl FnOnce () + 'static)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::open_window",
      "name": "open_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Opens a new window with a specific size.",
      "documentation": "Opens a new window with a specific size.\n\nUnlike `add_window` which uses maximized bounds, this allows controlling\nthe window dimensions, which is important for layout-sensitive tests.",
      "signature": "pub fn open_window<F, V> (& mut self, window_size : Size<Pixels>, build_window : F,) -> WindowHandle<V> where F : FnOnce (& mut Window, & mut Context<V>) -> V, V : 'static + Render,",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::opened_url",
      "name": "opened_url",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "All the urls that have been opened with cx.open_url() during this test.",
      "documentation": "All the urls that have been opened with cx.open_url() during this test.",
      "signature": "pub fn opened_url (& self) -> Option<String>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::pending_context_menu_position",
      "name": "pending_context_menu_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns the logical window position of the pending native context menu.",
      "documentation": "Returns the logical window position of the pending native context menu.",
      "signature": "pub fn pending_context_menu_position (& self, window : AnyWindowHandle) -> Option<Point<Pixels>>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::pending_prompt",
      "name": "pending_prompt",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns true if there's an alert dialog open.",
      "documentation": "Returns true if there's an alert dialog open.",
      "signature": "pub fn pending_prompt (& self) -> Option<(String, String)>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::quit",
      "name": "quit",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Called by the test helper to end the test. public so the macro can call it.",
      "documentation": "Called by the test helper to end the test.\npublic so the macro can call it.",
      "signature": "pub fn quit (& self)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Gives you an `&App` for the duration of the closure",
      "documentation": "Gives you an `&App` for the duration of the closure",
      "signature": "pub fn read<R> (& self, f : impl FnOnce (& App) -> R) -> R",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::read_from_clipboard",
      "name": "read_from_clipboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates reading from the platform clipboard. This will return the most recent value from `write_to_clipboard`.",
      "documentation": "Simulates reading from the platform clipboard.\nThis will return the most recent value from `write_to_clipboard`.",
      "signature": "pub fn read_from_clipboard (& self) -> Option<ClipboardItem>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::read_global",
      "name": "read_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "runs the given closure with a reference to the global panics if `has_global` would return false.",
      "documentation": "runs the given closure with a reference to the global\npanics if `has_global` would return false.",
      "signature": "pub fn read_global<G : Global, R> (& self, read : impl FnOnce (& G, & App) -> R) -> R",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::refresh",
      "name": "refresh",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Schedules all windows to be redrawn on the next effect cycle.",
      "documentation": "Schedules all windows to be redrawn on the next effect cycle.",
      "signature": "pub fn refresh (& mut self) -> Result<()>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::run_until_parked",
      "name": "run_until_parked",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Wait until there are no more pending tasks.",
      "documentation": "Wait until there are no more pending tasks.",
      "signature": "pub fn run_until_parked (& self)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::select_context_menu_item",
      "name": "select_context_menu_item",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates choosing one native context-menu item by its recursive index path, for example `[2, 0]` for the first item of the third submenu.",
      "documentation": "Simulates choosing one native context-menu item by its recursive index\npath, for example `[2, 0]` for the first item of the third submenu.",
      "signature": "pub fn select_context_menu_item (& self, window : AnyWindowHandle, path : & [usize])",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::set_global",
      "name": "set_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "sets the global in this context.",
      "documentation": "sets the global in this context.",
      "signature": "pub fn set_global<G : Global> (& mut self, global : G)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::set_name",
      "name": "set_name",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Set a name for this App.",
      "documentation": "Set a name for this App.",
      "signature": "pub fn set_name (& mut self, name : & 'static str)",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::set_native_context_menu_cancel_fails",
      "name": "set_native_context_menu_cancel_fails",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates native cancellation refusal without closing the menu. Its revision is still invalidated, so later native commands cannot dispatch.",
      "documentation": "Simulates native cancellation refusal without closing the menu. Its\nrevision is still invalidated, so later native commands cannot dispatch.",
      "signature": "pub fn set_native_context_menu_cancel_fails (& self, window : AnyWindowHandle, fails : bool)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::set_native_context_menus_supported",
      "name": "set_native_context_menus_supported",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Controls whether the test window accepts platform-native context menus. Test windows default to unsupported so component fallback rendering is exercised unless a test opts into the native contract.",
      "documentation": "Controls whether the test window accepts platform-native context menus.\nTest windows default to unsupported so component fallback rendering is\nexercised unless a test opts into the native contract.",
      "signature": "pub fn set_native_context_menus_supported (& self, window : AnyWindowHandle, supported : bool)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::set_screen_capture_sources",
      "name": "set_screen_capture_sources",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Causes the given sources to be returned if the application queries for screen capture sources.",
      "documentation": "Causes the given sources to be returned if the application queries for screen\ncapture sources.",
      "signature": "pub fn set_screen_capture_sources (& self, sources : Vec<TestScreenCaptureSource>)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::shown_system_notifications",
      "name": "shown_system_notifications",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns all system notifications shown during this test, in order.",
      "documentation": "Returns all system notifications shown during this test, in order.",
      "signature": "pub fn shown_system_notifications (& self) -> Vec<SystemNotification>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::simulate_input",
      "name": "simulate_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "simulate_input takes a string of text to type. cx.simulate_input(\"abc\") will type abc into your current editor This will also run the background executor until it's parked.",
      "documentation": "simulate_input takes a string of text to type.\ncx.simulate_input(\"abc\")\nwill type abc into your current editor\nThis will also run the background executor until it's parked.",
      "signature": "pub fn simulate_input (& mut self, window : AnyWindowHandle, input : & str)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::simulate_keystrokes",
      "name": "simulate_keystrokes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "simulate_keystrokes takes a space-separated list of keys to type. cx.simulate_keystrokes(\"cmd-shift-p b k s p enter\") in Zed, this will run backspace on the current editor through the command palette. This will also run the background executor until it's parked.",
      "documentation": "simulate_keystrokes takes a space-separated list of keys to type.\ncx.simulate_keystrokes(\"cmd-shift-p b k s p enter\")\nin Zed, this will run backspace on the current editor through the command palette.\nThis will also run the background executor until it's parked.",
      "signature": "pub fn simulate_keystrokes (& mut self, window : AnyWindowHandle, keystrokes : & str)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::simulate_new_path_selection",
      "name": "simulate_new_path_selection",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates choosing a File in the platform's \"Open\" dialog.",
      "documentation": "Simulates choosing a File in the platform's \"Open\" dialog.",
      "signature": "pub fn simulate_new_path_selection (& self, select_path : impl FnOnce (& std::path::Path) -> Option<std::path::PathBuf>,)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::simulate_path_prompt_response",
      "name": "simulate_path_prompt_response",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates responding to a `prompt_for_paths` (\"Open\") dialog.",
      "documentation": "Simulates responding to a `prompt_for_paths` (\"Open\") dialog.",
      "signature": "pub fn simulate_path_prompt_response (& self, select_paths : impl FnOnce (& crate::PathPromptOptions) -> Option<Vec<std::path::PathBuf>>,)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::simulate_prompt_answer",
      "name": "simulate_prompt_answer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates clicking a button in an platform-level alert dialog.",
      "documentation": "Simulates clicking a button in an platform-level alert dialog.",
      "signature": "pub fn simulate_prompt_answer (& self, button : & str)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::simulate_system_notification_response",
      "name": "simulate_system_notification_response",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates the user activating a system notification.",
      "documentation": "Simulates the user activating a system notification.",
      "signature": "pub fn simulate_system_notification_response (& self, response : SystemNotificationResponse)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::simulate_window_insets",
      "name": "simulate_window_insets",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates residual viewport occlusion through the platform inset callback. This changes test geometry, not an actual system keyboard or safe area.",
      "documentation": "Simulates residual viewport occlusion through the platform inset callback.\nThis changes test geometry, not an actual system keyboard or safe area.",
      "signature": "pub fn simulate_window_insets (& self, window : AnyWindowHandle, insets : crate::WindowInsets)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::simulate_window_resize",
      "name": "simulate_window_resize",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates the user resizing the window to the new size.",
      "documentation": "Simulates the user resizing the window to the new size.",
      "signature": "pub fn simulate_window_resize (& self, window_handle : AnyWindowHandle, size : Size<Pixels>)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::single",
      "name": "single",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Create a single TestAppContext, for non-multi-client tests",
      "documentation": "Create a single TestAppContext, for non-multi-client tests",
      "signature": "pub fn single () -> Self",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::skip_drawing",
      "name": "skip_drawing",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Skip all drawing operations for the duration of this test.",
      "documentation": "Skip all drawing operations for the duration of this test.",
      "signature": "pub fn skip_drawing (& mut self)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::spawn",
      "name": "spawn",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Run the given task on the main thread.",
      "documentation": "Run the given task on the main thread.",
      "signature": "pub fn spawn<Fut, R> (& self, f : impl FnOnce (AsyncApp) -> Fut) -> Task<R> where Fut : Future<Output = R> + 'static, R : 'static,",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::test_function_name",
      "name": "test_function_name",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "The name of the test function that created this `TestAppContext`",
      "documentation": "The name of the test function that created this `TestAppContext`",
      "signature": "pub fn test_function_name (& self) -> Option<& 'static str>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::text_system",
      "name": "text_system",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "returns the TextSystem",
      "documentation": "returns the TextSystem",
      "signature": "pub fn text_system (& self) -> & Arc<TextSystem>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::to_async",
      "name": "to_async",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns an `AsyncApp` which can be used to run tasks that expect to be on a background thread on the current thread in tests.",
      "documentation": "Returns an `AsyncApp` which can be used to run tasks that expect to be on a background\nthread on the current thread in tests.",
      "signature": "pub fn to_async (& self) -> AsyncApp",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::try_read_global",
      "name": "try_read_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "runs the given closure with a reference to the global (if set)",
      "documentation": "runs the given closure with a reference to the global (if set)",
      "signature": "pub fn try_read_global<G : Global, R> (& self, read : impl FnOnce (& G, & App) -> R) -> Option<R>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Gives you an `&mut App` for the duration of the closure",
      "documentation": "Gives you an `&mut App` for the duration of the closure",
      "signature": "pub fn update<R> (& self, f : impl FnOnce (& mut App) -> R) -> R",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::update_global",
      "name": "update_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "updates the global in this context. (panics if `has_global` would return false)",
      "documentation": "updates the global in this context. (panics if `has_global` would return false)",
      "signature": "pub fn update_global<G : Global, R> (& mut self, update : impl FnOnce (& mut G, & mut App) -> R) -> R",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::windows",
      "name": "windows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Returns all windows open in the test.",
      "documentation": "Returns all windows open in the test.",
      "signature": "pub fn windows (& self) -> Vec<AnyWindowHandle>",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::TestAppContext::write_to_clipboard",
      "name": "write_to_clipboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates writing to the platform clipboard",
      "documentation": "Simulates writing to the platform clipboard",
      "signature": "pub fn write_to_clipboard (& self, item : ClipboardItem)",
      "cfg": [],
      "target": "TestAppContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext",
      "name": "VisualTestContext",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "A VisualTestContext is the test-equivalent of a `Window` and `App`. It allows you to run window-specific test code. It can be dereferenced to a `TextAppContext`.",
      "documentation": "A VisualTestContext is the test-equivalent of a `Window` and `App`. It allows you to\nrun window-specific test code. It can be dereferenced to a `TextAppContext`.",
      "signature": "# [derive (Deref, DerefMut, Clone)] # [doc = \" A VisualTestContext is the test-equivalent of a `Window` and `App`. It allows you to\"] # [doc = \" run window-specific test code. It can be dereferenced to a `TextAppContext`.\"] pub struct VisualTestContext { # [deref] # [deref_mut] # [doc = \" cx is the original TestAppContext (you can more easily access this using Deref)\"] pub cx : TestAppContext, window : AnyWindowHandle, }",
      "cfg": []
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::deactivate_window",
      "name": "deactivate_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates the user blurring the window.",
      "documentation": "Simulates the user blurring the window.",
      "signature": "pub fn deactivate_window (& mut self)",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::debug_bounds",
      "name": "debug_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "debug_bounds returns the bounds of the element with the given selector.",
      "documentation": "debug_bounds returns the bounds of the element with the given selector.",
      "signature": "pub fn debug_bounds (& mut self, selector : & 'static str) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::dispatch_action",
      "name": "dispatch_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Dispatch the action to the currently focused node.",
      "documentation": "Dispatch the action to the currently focused node.",
      "signature": "pub fn dispatch_action<A> (& mut self, action : A) where A : Action,",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::document_path",
      "name": "document_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Read the document path off the window (set by `Window#set_document_path`)",
      "documentation": "Read the document path off the window (set by `Window#set_document_path`)",
      "signature": "pub fn document_path (& mut self) -> Option<std::path::PathBuf>",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::draw",
      "name": "draw",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Draw an element to the window. Useful for simulating events or actions",
      "documentation": "Draw an element to the window. Useful for simulating events or actions",
      "signature": "pub fn draw<E> (& mut self, origin : Point<Pixels>, space : impl Into<Size<AvailableSpace>>, f : impl FnOnce (& mut Window, & mut App) -> E,) -> (E::RequestLayoutState, E::PrepaintState) where E : Element,",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::from_window",
      "name": "from_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Creates a new VisualTestContext. You would typically shadow the passed in TestAppContext with this, as this is typically more useful. `let cx = VisualTestContext::from_window(window, cx);`",
      "documentation": "Creates a new VisualTestContext. You would typically shadow the passed in\nTestAppContext with this, as this is typically more useful.\n`let cx = VisualTestContext::from_window(window, cx);`",
      "signature": "pub fn from_window (window : AnyWindowHandle, cx : & TestAppContext) -> Self",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::into_mut",
      "name": "into_mut",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Get an &mut VisualTestContext (which is mostly what you need to pass to other methods). This method internally retains the VisualTestContext until the end of the test.",
      "documentation": "Get an &mut VisualTestContext (which is mostly what you need to pass to other methods).\nThis method internally retains the VisualTestContext until the end of the test.",
      "signature": "pub fn into_mut (self) -> & 'static mut Self",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::run_until_parked",
      "name": "run_until_parked",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Wait until there are no more pending tasks.",
      "documentation": "Wait until there are no more pending tasks.",
      "signature": "pub fn run_until_parked (& self)",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::simulate_capslock_change",
      "name": "simulate_capslock_change",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulate a capslock changed event",
      "documentation": "Simulate a capslock changed event",
      "signature": "pub fn simulate_capslock_change (& mut self, on : bool)",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::simulate_click",
      "name": "simulate_click",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulate a primary mouse click at the given point",
      "documentation": "Simulate a primary mouse click at the given point",
      "signature": "pub fn simulate_click (& mut self, position : Point<Pixels>, modifiers : Modifiers)",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::simulate_close",
      "name": "simulate_close",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates the user closing the window. Returns true if the window was closed.",
      "documentation": "Simulates the user closing the window.\nReturns true if the window was closed.",
      "signature": "pub fn simulate_close (& mut self) -> bool",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::simulate_event",
      "name": "simulate_event",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulate an event from the platform, e.g. a ScrollWheelEvent Make sure you've called [VisualTestContext::draw] first!",
      "documentation": "Simulate an event from the platform, e.g. a ScrollWheelEvent\nMake sure you've called [VisualTestContext::draw] first!",
      "signature": "pub fn simulate_event<E : InputEvent> (& mut self, event : E)",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::simulate_input",
      "name": "simulate_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulate typing text `cx.simulate_input(\"hello\")` Automatically runs until parked.",
      "documentation": "Simulate typing text `cx.simulate_input(\"hello\")`\nAutomatically runs until parked.",
      "signature": "pub fn simulate_input (& mut self, input : & str)",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::simulate_insets",
      "name": "simulate_insets",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates viewport insets and their redraw notification, not a native keyboard.",
      "documentation": "Simulates viewport insets and their redraw notification, not a native keyboard.",
      "signature": "pub fn simulate_insets (& self, insets : crate::WindowInsets)",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::simulate_keystrokes",
      "name": "simulate_keystrokes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulate a sequence of keystrokes `cx.simulate_keystrokes(\"cmd-p escape\")` Automatically runs until parked.",
      "documentation": "Simulate a sequence of keystrokes `cx.simulate_keystrokes(\"cmd-p escape\")`\nAutomatically runs until parked.",
      "signature": "pub fn simulate_keystrokes (& mut self, keystrokes : & str)",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::simulate_modifiers_change",
      "name": "simulate_modifiers_change",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulate a modifiers changed event",
      "documentation": "Simulate a modifiers changed event",
      "signature": "pub fn simulate_modifiers_change (& mut self, modifiers : Modifiers)",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::simulate_mouse_down",
      "name": "simulate_mouse_down",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulate a mouse down event to the given point",
      "documentation": "Simulate a mouse down event to the given point",
      "signature": "pub fn simulate_mouse_down (& mut self, position : Point<Pixels>, button : MouseButton, modifiers : Modifiers,)",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::simulate_mouse_move",
      "name": "simulate_mouse_move",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulate a mouse move event to the given point",
      "documentation": "Simulate a mouse move event to the given point",
      "signature": "pub fn simulate_mouse_move (& mut self, position : Point<Pixels>, button : impl Into<Option<MouseButton>>, modifiers : Modifiers,)",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::simulate_mouse_up",
      "name": "simulate_mouse_up",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulate a mouse up event to the given point",
      "documentation": "Simulate a mouse up event to the given point",
      "signature": "pub fn simulate_mouse_up (& mut self, position : Point<Pixels>, button : MouseButton, modifiers : Modifiers,)",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::simulate_resize",
      "name": "simulate_resize",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Simulates the user resizing the window to the new size.",
      "documentation": "Simulates the user resizing the window to the new size.",
      "signature": "pub fn simulate_resize (& self, size : Size<Pixels>)",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Provides a `Window` and `App` for the duration of the closure.",
      "documentation": "Provides a `Window` and `App` for the duration of the closure.",
      "signature": "pub fn update<R> (& mut self, f : impl FnOnce (& mut Window, & mut App) -> R) -> R",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::test_context::VisualTestContext::window_title",
      "name": "window_title",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::test_context",
      "path": "gpui::app::test_context",
      "source": "crates/gpui/src/app/test_context.rs",
      "summary": "Read the title off the window (set by `Window#set_window_title`)",
      "documentation": "Read the title off the window (set by `Window#set_window_title`)",
      "signature": "pub fn window_title (& mut self) -> Option<String>",
      "cfg": [],
      "target": "VisualTestContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext",
      "name": "VisualTestAppContext",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "A test context that uses real macOS rendering instead of mocked rendering. This is used for visual tests that need to capture actual screenshots.",
      "documentation": "A test context that uses real macOS rendering instead of mocked rendering.\nThis is used for visual tests that need to capture actual screenshots.\n\nUnlike `TestAppContext` which uses `TestPlatform` with mocked rendering,\n`VisualTestAppContext` uses the real `MacPlatform` to produce actual rendered output.\n\nWindows created through this context are positioned off-screen (at coordinates like -10000, -10000)\nso they are invisible to the user but still fully rendered by the compositor.",
      "signature": "# [doc = \" A test context that uses real macOS rendering instead of mocked rendering.\"] # [doc = \" This is used for visual tests that need to capture actual screenshots.\"] # [doc = \"\"] # [doc = \" Unlike `TestAppContext` which uses `TestPlatform` with mocked rendering,\"] # [doc = \" `VisualTestAppContext` uses the real `MacPlatform` to produce actual rendered output.\"] # [doc = \"\"] # [doc = \" Windows created through this context are positioned off-screen (at coordinates like -10000, -10000)\"] # [doc = \" so they are invisible to the user but still fully rendered by the compositor.\"] # [derive (Clone)] pub struct VisualTestAppContext { # [doc = \" The underlying app cell\"] pub app : Rc<AppCell>, # [doc = \" The background executor for running async tasks\"] pub background_executor : BackgroundExecutor, # [doc = \" The foreground executor for running tasks on the main thread\"] pub foreground_executor : ForegroundExecutor, # [doc = \" The test dispatcher for deterministic task scheduling\"] dispatcher : TestDispatcher, platform : Rc<dyn Platform>, text_system : Arc<TextSystem>, }",
      "cfg": []
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::advance_clock",
      "name": "advance_clock",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Advances the simulated clock by the given duration and processes any tasks that become ready. This is essential for testing time-based behaviors like tooltip delays.",
      "documentation": "Advances the simulated clock by the given duration and processes any tasks\nthat become ready. This is essential for testing time-based behaviors like\ntooltip delays.",
      "signature": "pub fn advance_clock (& self, duration : Duration)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::capture_screenshot",
      "name": "capture_screenshot",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Captures a screenshot of the specified window using direct texture capture.",
      "documentation": "Captures a screenshot of the specified window using direct texture capture.\n\nThis renders the scene to a Metal texture and reads the pixels directly,\nwhich does not require the window to be visible on screen.",
      "signature": "pub fn capture_screenshot (& mut self, window : AnyWindowHandle) -> Result<RgbaImage>",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::dispatch_action",
      "name": "dispatch_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Dispatches an action to the given window.",
      "documentation": "Dispatches an action to the given window.",
      "signature": "pub fn dispatch_action (& mut self, window : AnyWindowHandle, action : impl Action)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::dispatch_keystroke",
      "name": "dispatch_keystroke",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Dispatches a single keystroke to a window.",
      "documentation": "Dispatches a single keystroke to a window.",
      "signature": "pub fn dispatch_keystroke (& mut self, window : AnyWindowHandle, keystroke : Keystroke)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::executor",
      "name": "executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Returns the background executor.",
      "documentation": "Returns the background executor.",
      "signature": "pub fn executor (& self) -> BackgroundExecutor",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::foreground_executor",
      "name": "foreground_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Returns the foreground executor.",
      "documentation": "Returns the foreground executor.",
      "signature": "pub fn foreground_executor (& self) -> ForegroundExecutor",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::has_global",
      "name": "has_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Checks if a global of type G exists.",
      "documentation": "Checks if a global of type G exists.",
      "signature": "pub fn has_global<G : Global> (& self) -> bool",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::is_screen_capture_supported",
      "name": "is_screen_capture_supported",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Returns whether screen capture is supported on this platform.",
      "documentation": "Returns whether screen capture is supported on this platform.",
      "signature": "pub fn is_screen_capture_supported (& self) -> bool",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Creates a new `VisualTestAppContext` with real macOS platform rendering but deterministic task scheduling via TestDispatcher.",
      "documentation": "Creates a new `VisualTestAppContext` with real macOS platform rendering\nbut deterministic task scheduling via TestDispatcher.\n\nThis provides:\n- Real Metal/compositor rendering for accurate screenshots\n- Deterministic task scheduling via TestDispatcher\n- Controllable time via `advance_clock`\n\nNote: This uses a no-op asset source, so SVG icons won't render.\nUse `with_asset_source` to provide real assets for icon rendering.",
      "signature": "pub fn new (platform : Rc<dyn Platform>) -> Self",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::open_offscreen_window",
      "name": "open_offscreen_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Opens a window positioned off-screen for invisible rendering.",
      "documentation": "Opens a window positioned off-screen for invisible rendering.\n\nThe window is positioned at (-10000, -10000) so it's not visible on any display,\nbut it's still fully rendered by the compositor and can be captured via ScreenCaptureKit.\n\n# Arguments\n* `size` - The size of the window to create\n* `build_root` - A closure that builds the root view for the window",
      "signature": "pub fn open_offscreen_window<V : Render + 'static> (& mut self, size : Size<Pixels>, build_root : impl FnOnce (& mut Window, & mut App) -> Entity<V>,) -> Result<WindowHandle<V>>",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::open_offscreen_window_default",
      "name": "open_offscreen_window_default",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Opens an off-screen window with default size (1280x800).",
      "documentation": "Opens an off-screen window with default size (1280x800).",
      "signature": "pub fn open_offscreen_window_default<V : Render + 'static> (& mut self, build_root : impl FnOnce (& mut Window, & mut App) -> Entity<V>,) -> Result<WindowHandle<V>>",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Reads from the app state.",
      "documentation": "Reads from the app state.",
      "signature": "pub fn read<R> (& self, f : impl FnOnce (& App) -> R) -> R",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::read_from_clipboard",
      "name": "read_from_clipboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Reads from the clipboard.",
      "documentation": "Reads from the clipboard.",
      "signature": "pub fn read_from_clipboard (& self) -> Option<ClipboardItem>",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::read_global",
      "name": "read_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Reads a global value.",
      "documentation": "Reads a global value.",
      "signature": "pub fn read_global<G : Global, R> (& self, f : impl FnOnce (& G, & App) -> R) -> R",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::run_until_parked",
      "name": "run_until_parked",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Runs all pending foreground and background tasks until there's nothing left to do. This is essential for processing async operations like tooltip timers.",
      "documentation": "Runs all pending foreground and background tasks until there's nothing left to do.\nThis is essential for processing async operations like tooltip timers.",
      "signature": "pub fn run_until_parked (& self)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::set_global",
      "name": "set_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Sets a global value.",
      "documentation": "Sets a global value.",
      "signature": "pub fn set_global<G : Global> (& mut self, global : G)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::simulate_click",
      "name": "simulate_click",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Simulates a click (mouse down followed by mouse up).",
      "documentation": "Simulates a click (mouse down followed by mouse up).",
      "signature": "pub fn simulate_click (& mut self, window : AnyWindowHandle, position : Point<Pixels>, modifiers : Modifiers,)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::simulate_event",
      "name": "simulate_event",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Simulates an input event on the given window.",
      "documentation": "Simulates an input event on the given window.",
      "signature": "pub fn simulate_event<E : InputEvent> (& mut self, window : AnyWindowHandle, event : E)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::simulate_input",
      "name": "simulate_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Simulates typing text input on the given window.",
      "documentation": "Simulates typing text input on the given window.",
      "signature": "pub fn simulate_input (& mut self, window : AnyWindowHandle, input : & str)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::simulate_keystrokes",
      "name": "simulate_keystrokes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Simulates a sequence of keystrokes on the given window.",
      "documentation": "Simulates a sequence of keystrokes on the given window.\n\nKeystrokes are specified as a space-separated string, e.g., \"cmd-p escape\".",
      "signature": "pub fn simulate_keystrokes (& mut self, window : AnyWindowHandle, keystrokes : & str)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::simulate_mouse_down",
      "name": "simulate_mouse_down",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Simulates a mouse down event.",
      "documentation": "Simulates a mouse down event.",
      "signature": "pub fn simulate_mouse_down (& mut self, window : AnyWindowHandle, position : Point<Pixels>, button : MouseButton, modifiers : Modifiers,)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::simulate_mouse_move",
      "name": "simulate_mouse_move",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Simulates a mouse move event.",
      "documentation": "Simulates a mouse move event.",
      "signature": "pub fn simulate_mouse_move (& mut self, window : AnyWindowHandle, position : Point<Pixels>, button : impl Into<Option<MouseButton>>, modifiers : Modifiers,)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::simulate_mouse_up",
      "name": "simulate_mouse_up",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Simulates a mouse up event.",
      "documentation": "Simulates a mouse up event.",
      "signature": "pub fn simulate_mouse_up (& mut self, window : AnyWindowHandle, position : Point<Pixels>, button : MouseButton, modifiers : Modifiers,)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::spawn",
      "name": "spawn",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Spawns a task on the foreground executor.",
      "documentation": "Spawns a task on the foreground executor.",
      "signature": "pub fn spawn<F, R> (& self, f : F) -> Task<R> where F : Future<Output = R> + 'static, R : 'static,",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::text_system",
      "name": "text_system",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Returns the text system used by this context.",
      "documentation": "Returns the text system used by this context.",
      "signature": "pub fn text_system (& self) -> & Arc<TextSystem>",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Updates the app state.",
      "documentation": "Updates the app state.",
      "signature": "pub fn update<R> (& mut self, f : impl FnOnce (& mut App) -> R) -> R",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::update_global",
      "name": "update_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Updates a global value.",
      "documentation": "Updates a global value.",
      "signature": "pub fn update_global<G : Global, R> (& mut self, f : impl FnOnce (& mut G, & mut App) -> R) -> R",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::update_window",
      "name": "update_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Updates a window.",
      "documentation": "Updates a window.",
      "signature": "pub fn update_window<T, F> (& mut self, window : AnyWindowHandle, f : F) -> Result<T> where F : FnOnce (AnyView, & mut Window, & mut App) -> T,",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::wait_for",
      "name": "wait_for",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Waits for a condition to become true, with a timeout.",
      "documentation": "Waits for a condition to become true, with a timeout.",
      "signature": "pub async fn wait_for<T : 'static> (& mut self, entity : & Entity<T>, predicate : impl Fn (& T) -> bool, timeout : Duration,) -> Result<()>",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::wait_for_animations",
      "name": "wait_for_animations",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Waits for animations to complete by waiting a couple of frames.",
      "documentation": "Waits for animations to complete by waiting a couple of frames.",
      "signature": "pub async fn wait_for_animations (& self)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::with_asset_source",
      "name": "with_asset_source",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Creates a new `VisualTestAppContext` with a custom asset source.",
      "documentation": "Creates a new `VisualTestAppContext` with a custom asset source.\n\nUse this when you need SVG icons to render properly in visual tests.\nPass the real `Assets` struct to enable icon rendering.",
      "signature": "pub fn with_asset_source (platform : Rc<dyn Platform>, asset_source : Arc<dyn AssetSource>,) -> Self",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::app::visual_test_context::VisualTestAppContext::write_to_clipboard",
      "name": "write_to_clipboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "app::visual_test_context",
      "path": "gpui::app::visual_test_context",
      "source": "crates/gpui/src/app/visual_test_context.rs",
      "summary": "Writes to the clipboard.",
      "documentation": "Writes to the clipboard.",
      "signature": "pub fn write_to_clipboard (& self, item : ClipboardItem)",
      "cfg": [],
      "target": "VisualTestAppContext"
    },
    {
      "id": "gpui::arena::Arena",
      "name": "Arena",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "arena",
      "path": "gpui::arena",
      "source": "crates/gpui/src/arena.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct Arena { chunks : Vec<Chunk>, elements : Vec<ArenaElement>, valid : Rc<Cell<bool>>, current_chunk_index : usize, chunk_size : NonZeroUsize, scope_depth : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::arena::Arena::alloc",
      "name": "alloc",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "arena",
      "path": "gpui::arena",
      "source": "crates/gpui/src/arena.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn alloc<T> (& mut self, f : impl FnOnce () -> T) -> ArenaBox<T>",
      "cfg": [],
      "target": "Arena"
    },
    {
      "id": "gpui::arena::Arena::begin_scope",
      "name": "begin_scope",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "arena",
      "path": "gpui::arena",
      "source": "crates/gpui/src/arena.rs",
      "summary": "Marks the start of a scope (e.g. a window draw) whose allocations must stay live until the scope ends, even if `clear` is called by a nested scope in the meantime.",
      "documentation": "Marks the start of a scope (e.g. a window draw) whose allocations must stay\nlive until the scope ends, even if `clear` is called by a nested scope in\nthe meantime.",
      "signature": "pub fn begin_scope (& mut self)",
      "cfg": [],
      "target": "Arena"
    },
    {
      "id": "gpui::arena::Arena::capacity",
      "name": "capacity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "arena",
      "path": "gpui::arena",
      "source": "crates/gpui/src/arena.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn capacity (& self) -> usize",
      "cfg": [],
      "target": "Arena"
    },
    {
      "id": "gpui::arena::Arena::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "arena",
      "path": "gpui::arena",
      "source": "crates/gpui/src/arena.rs",
      "summary": "Drops all allocations and resets the arena, unless a scope is still active.",
      "documentation": "Drops all allocations and resets the arena, unless a scope is still active.\n\nWhen a draw triggers a nested draw (e.g. re-entrant window procedure\ninvocations on Windows, or opening a window from within a draw), the nested\ndraw's clear must not free memory the outer draw still references, so it is\ndeferred: the outer draw's own clear will drop both draws' allocations.",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "Arena"
    },
    {
      "id": "gpui::arena::Arena::end_scope",
      "name": "end_scope",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "arena",
      "path": "gpui::arena",
      "source": "crates/gpui/src/arena.rs",
      "summary": "Ends the innermost scope started with `begin_scope`.",
      "documentation": "Ends the innermost scope started with `begin_scope`.\n\nPanics if no scope is active: an unbalanced `end_scope` would let `clear`\nrun while an enclosing scope still references arena memory, which is\nexactly the use-after-free this bookkeeping exists to prevent, so failing\nloudly here is preferable.",
      "signature": "pub fn end_scope (& mut self)",
      "cfg": [],
      "target": "Arena"
    },
    {
      "id": "gpui::arena::Arena::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "arena",
      "path": "gpui::arena",
      "source": "crates/gpui/src/arena.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (chunk_size : usize) -> Self",
      "cfg": [],
      "target": "Arena"
    },
    {
      "id": "gpui::arena::ArenaBox",
      "name": "ArenaBox",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "arena",
      "path": "gpui::arena",
      "source": "crates/gpui/src/arena.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct ArenaBox<T : ? Sized> { ptr : * mut T, valid : Rc<Cell<bool>>, }",
      "cfg": []
    },
    {
      "id": "gpui::arena::ArenaBox::map",
      "name": "map",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "arena",
      "path": "gpui::arena",
      "source": "crates/gpui/src/arena.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn map<U : ? Sized> (mut self, f : impl FnOnce (& mut T) -> & mut U) -> ArenaBox<U>",
      "cfg": [],
      "target": "ArenaBox<T>"
    },
    {
      "id": "gpui::asset_cache::Asset",
      "name": "Asset",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "asset_cache",
      "path": "gpui::asset_cache",
      "source": "crates/gpui/src/asset_cache.rs",
      "summary": "A trait for asynchronous asset loading.",
      "documentation": "A trait for asynchronous asset loading.",
      "signature": "# [doc = \" A trait for asynchronous asset loading.\"] pub trait Asset : 'static { # [doc = \" The source of the asset.\"] type Source : Clone + Hash + Send; # [doc = \" The loaded asset\"] type Output : Clone + Send; # [doc = \" Load the asset asynchronously\"] fn load (source : Self::Source, cx : & mut App,) -> impl Future<Output = Self::Output> + Send + 'static; }",
      "cfg": []
    },
    {
      "id": "gpui::asset_cache::AssetLogger",
      "name": "AssetLogger",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "asset_cache",
      "path": "gpui::asset_cache",
      "source": "crates/gpui/src/asset_cache.rs",
      "summary": "An asset Loader which logs the [`Err`] variant of a [`Result`] during loading",
      "documentation": "An asset Loader which logs the [`Err`] variant of a [`Result`] during loading",
      "signature": "# [doc = \" An asset Loader which logs the [`Err`] variant of a [`Result`] during loading\"] pub enum AssetLogger<T> { # [doc (hidden)] _Phantom (PhantomData<T>, & 'static dyn crate::seal::Sealed), }",
      "cfg": []
    },
    {
      "id": "gpui::asset_cache::Resource",
      "name": "Resource",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "asset_cache",
      "path": "gpui::asset_cache",
      "source": "crates/gpui/src/asset_cache.rs",
      "summary": "An enum representing",
      "documentation": "An enum representing",
      "signature": "# [doc = \" An enum representing\"] # [derive (Debug, PartialEq, Eq, Hash, Clone)] pub enum Resource { # [doc = \" This resource is at a given URI\"] Uri (SharedUri), # [doc = \" This resource is at a given path in the file system\"] Path (Arc<Path>), # [doc = \" This resource is embedded in the application binary\"] Embedded (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui::asset_cache::hash",
      "name": "hash",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "asset_cache",
      "path": "gpui::asset_cache",
      "source": "crates/gpui/src/asset_cache.rs",
      "summary": "Use a quick, non-cryptographically secure hash function to get an identifier from data",
      "documentation": "Use a quick, non-cryptographically secure hash function to get an identifier from data",
      "signature": "pub fn hash<T : Hash> (data : & T) -> u64",
      "cfg": []
    },
    {
      "id": "gpui::assets::AssetSource",
      "name": "AssetSource",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "assets",
      "path": "gpui::assets",
      "source": "crates/gpui/src/assets.rs",
      "summary": "A source of assets for this app to use.",
      "documentation": "A source of assets for this app to use.",
      "signature": "# [doc = \" A source of assets for this app to use.\"] pub trait AssetSource : 'static + Send + Sync { # [doc = \" Load the given asset from the source path.\"] fn load (& self, path : & str) -> Result<Option<Cow<'static, [u8]>>>; # [doc = \" List the assets at the given path.\"] fn list (& self, path : & str) -> Result<Vec<SharedString>>; }",
      "cfg": []
    },
    {
      "id": "gpui::assets::ImageId",
      "name": "ImageId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "assets",
      "path": "gpui::assets",
      "source": "crates/gpui/src/assets.rs",
      "summary": "A unique identifier for the image cache",
      "documentation": "A unique identifier for the image cache",
      "signature": "# [doc = \" A unique identifier for the image cache\"] # [derive (Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] pub struct ImageId (pub usize);",
      "cfg": []
    },
    {
      "id": "gpui::assets::RenderImage",
      "name": "RenderImage",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "assets",
      "path": "gpui::assets",
      "source": "crates/gpui/src/assets.rs",
      "summary": "A cached and processed image, in BGRA format",
      "documentation": "A cached and processed image, in BGRA format",
      "signature": "# [doc = \" A cached and processed image, in BGRA format\"] pub struct RenderImage { # [doc = \" The ID associated with this image\"] pub id : ImageId, # [doc = \" The scale factor of this image on render.\"] pub (crate) scale_factor : f32, data : SmallVec<[Frame; 1]>, }",
      "cfg": []
    },
    {
      "id": "gpui::assets::RenderImage::as_bytes",
      "name": "as_bytes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "assets",
      "path": "gpui::assets",
      "source": "crates/gpui/src/assets.rs",
      "summary": "Convert this image into a byte slice.",
      "documentation": "Convert this image into a byte slice.",
      "signature": "pub fn as_bytes (& self, frame_index : usize) -> Option<& [u8]>",
      "cfg": [],
      "target": "RenderImage"
    },
    {
      "id": "gpui::assets::RenderImage::delay",
      "name": "delay",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "assets",
      "path": "gpui::assets",
      "source": "crates/gpui/src/assets.rs",
      "summary": "Get the delay of this frame from the previous",
      "documentation": "Get the delay of this frame from the previous",
      "signature": "pub fn delay (& self, frame_index : usize) -> Delay",
      "cfg": [],
      "target": "RenderImage"
    },
    {
      "id": "gpui::assets::RenderImage::frame_count",
      "name": "frame_count",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "assets",
      "path": "gpui::assets",
      "source": "crates/gpui/src/assets.rs",
      "summary": "Get the number of frames for this image.",
      "documentation": "Get the number of frames for this image.",
      "signature": "pub fn frame_count (& self) -> usize",
      "cfg": [],
      "target": "RenderImage"
    },
    {
      "id": "gpui::assets::RenderImage::from_rgba",
      "name": "from_rgba",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "assets",
      "path": "gpui::assets",
      "source": "crates/gpui/src/assets.rs",
      "summary": "Creates a single-frame image from tightly packed RGBA8 pixels.",
      "documentation": "Creates a single-frame image from tightly packed RGBA8 pixels.\n\n`size` is measured in physical pixels. The byte length must be exactly\n`width × height × 4`; the channels are converted to the renderer's\ninternal BGRA layout so callers do not need to know the atlas format.",
      "signature": "pub fn from_rgba (size : Size<DevicePixels>, mut bytes : Vec<u8>) -> Result<Self>",
      "cfg": [],
      "target": "RenderImage"
    },
    {
      "id": "gpui::assets::RenderImage::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "assets",
      "path": "gpui::assets",
      "source": "crates/gpui/src/assets.rs",
      "summary": "Create a new image from the given data.",
      "documentation": "Create a new image from the given data.",
      "signature": "pub fn new (data : impl Into<SmallVec<[Frame; 1]>>) -> Self",
      "cfg": [],
      "target": "RenderImage"
    },
    {
      "id": "gpui::assets::RenderImage::size",
      "name": "size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "assets",
      "path": "gpui::assets",
      "source": "crates/gpui/src/assets.rs",
      "summary": "Get the size of this image, in pixels.",
      "documentation": "Get the size of this image, in pixels.",
      "signature": "pub fn size (& self, frame_index : usize) -> Size<DevicePixels>",
      "cfg": [],
      "target": "RenderImage"
    },
    {
      "id": "gpui::assets::RenderImageParams",
      "name": "RenderImageParams",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "assets",
      "path": "gpui::assets",
      "source": "crates/gpui/src/assets.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (PartialEq, Eq, Hash, Clone)] # [expect (missing_docs)] pub struct RenderImageParams { pub image_id : ImageId, pub frame_index : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::atlas_lease::AtlasLease",
      "name": "AtlasLease",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "atlas_lease",
      "path": "gpui::atlas_lease",
      "source": "crates/gpui/src/atlas_lease.rs",
      "summary": "Keeps atlas allocations alive. A reset invalidates the lease permanently. Clones share ownership; the final drop releases only the leased allocations. Native leases are Send + Sync; Wasm leases retain thread-local GPU resources.",
      "documentation": "Keeps atlas allocations alive. A reset invalidates the lease permanently.\nClones share ownership; the final drop releases only the leased allocations.\nNative leases are Send + Sync; Wasm leases retain thread-local GPU resources.",
      "signature": "# [doc = \" Keeps atlas allocations alive. A reset invalidates the lease permanently.\"] # [doc = \" Clones share ownership; the final drop releases only the leased allocations.\"] # [doc = \" Native leases are Send + Sync; Wasm leases retain thread-local GPU resources.\"] # [derive (Clone)] pub struct AtlasLease (Arc<Lease>);",
      "cfg": []
    },
    {
      "id": "gpui::atlas_lease::AtlasLease::is_valid",
      "name": "is_valid",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "atlas_lease",
      "path": "gpui::atlas_lease",
      "source": "crates/gpui/src/atlas_lease.rs",
      "summary": "False after renderer resource reset, even if tile coordinates were reused.",
      "documentation": "False after renderer resource reset, even if tile coordinates were reused.",
      "signature": "pub fn is_valid (& self) -> bool",
      "cfg": [],
      "target": "AtlasLease"
    },
    {
      "id": "gpui::atlas_lease::AtlasLeaseRegistry",
      "name": "AtlasLeaseRegistry",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "atlas_lease",
      "path": "gpui::atlas_lease",
      "source": "crates/gpui/src/atlas_lease.rs",
      "summary": "Internal renderer bookkeeping. Call under the atlas allocation lock.",
      "documentation": "Internal renderer bookkeeping. Call under the atlas allocation lock.",
      "signature": "# [doc = \" Internal renderer bookkeeping. Call under the atlas allocation lock.\"] # [doc (hidden)] pub struct AtlasLeaseRegistry { epoch : u64, revision : u64, valid : Arc<AtomicBool>, pins : HashMap<AtlasKey, (usize, bool)>, tiles : HashMap<(AtlasTextureId, u32), (AtlasTile, AtlasKey)>, # [cfg (test)] tile_lookups : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::atlas_lease::AtlasLeaseRegistry::defer_remove",
      "name": "defer_remove",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "atlas_lease",
      "path": "gpui::atlas_lease",
      "source": "crates/gpui/src/atlas_lease.rs",
      "summary": "Returns true when eviction must wait for the final lease release.",
      "documentation": "Returns true when eviction must wait for the final lease release.",
      "signature": "pub fn defer_remove (& mut self, key : & AtlasKey) -> bool",
      "cfg": [],
      "target": "AtlasLeaseRegistry"
    },
    {
      "id": "gpui::atlas_lease::AtlasLeaseRegistry::insert_tile",
      "name": "insert_tile",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "atlas_lease",
      "path": "gpui::atlas_lease",
      "source": "crates/gpui/src/atlas_lease.rs",
      "summary": "Register an allocation under the same lock as the atlas key map.",
      "documentation": "Register an allocation under the same lock as the atlas key map.",
      "signature": "pub fn insert_tile (& mut self, key : AtlasKey, tile : AtlasTile)",
      "cfg": [],
      "target": "AtlasLeaseRegistry"
    },
    {
      "id": "gpui::atlas_lease::AtlasLeaseRegistry::invalidate",
      "name": "invalidate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "atlas_lease",
      "path": "gpui::atlas_lease",
      "source": "crates/gpui/src/atlas_lease.rs",
      "summary": "Must precede recycling resources on device loss or atlas clear.",
      "documentation": "Must precede recycling resources on device loss or atlas clear.",
      "signature": "pub fn invalidate (& mut self)",
      "cfg": [],
      "target": "AtlasLeaseRegistry"
    },
    {
      "id": "gpui::atlas_lease::AtlasLeaseRegistry::pin",
      "name": "pin",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "atlas_lease",
      "path": "gpui::atlas_lease",
      "source": "crates/gpui/src/atlas_lease.rs",
      "summary": "The caller must first verify every key still names its requested tile.",
      "documentation": "The caller must first verify every key still names its requested tile.",
      "signature": "pub fn pin (& mut self, keys : Vec<AtlasKey>, release : impl FnOnce (u64, Vec<AtlasKey>) + AtlasLeaseThreadBound + 'static,) -> AtlasLease",
      "cfg": [],
      "target": "AtlasLeaseRegistry"
    },
    {
      "id": "gpui::atlas_lease::AtlasLeaseRegistry::pin_tiles",
      "name": "pin_tiles",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "atlas_lease",
      "path": "gpui::atlas_lease",
      "source": "crates/gpui/src/atlas_lease.rs",
      "summary": "Retain tiles with one expected-constant-time lookup per reference, independent of unrelated atlas population. Complete identity is checked.",
      "documentation": "Retain tiles with one expected-constant-time lookup per reference,\nindependent of unrelated atlas population. Complete identity is checked.",
      "signature": "pub fn pin_tiles (& mut self, tiles : & [AtlasTile], release : impl FnOnce (u64, Vec<AtlasKey>) + AtlasLeaseThreadBound + 'static,) -> Option<AtlasLease>",
      "cfg": [],
      "target": "AtlasLeaseRegistry"
    },
    {
      "id": "gpui::atlas_lease::AtlasLeaseRegistry::release",
      "name": "release",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "atlas_lease",
      "path": "gpui::atlas_lease",
      "source": "crates/gpui/src/atlas_lease.rs",
      "summary": "Returns deferred keys to remove while still holding the allocation lock, so reset/reallocation cannot occur between release and removal.",
      "documentation": "Returns deferred keys to remove while still holding the allocation lock,\nso reset/reallocation cannot occur between release and removal.",
      "signature": "pub fn release (& mut self, epoch : u64, keys : Vec<AtlasKey>) -> Vec<AtlasKey>",
      "cfg": [],
      "target": "AtlasLeaseRegistry"
    },
    {
      "id": "gpui::atlas_lease::AtlasLeaseRegistry::remove_tile",
      "name": "remove_tile",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "atlas_lease",
      "path": "gpui::atlas_lease",
      "source": "crates/gpui/src/atlas_lease.rs",
      "summary": "Forget an allocation only when its actual eviction occurs.",
      "documentation": "Forget an allocation only when its actual eviction occurs.",
      "signature": "pub fn remove_tile (& mut self, tile : AtlasTile)",
      "cfg": [],
      "target": "AtlasLeaseRegistry"
    },
    {
      "id": "gpui::atlas_lease::AtlasLeaseRegistry::revision",
      "name": "revision",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "atlas_lease",
      "path": "gpui::atlas_lease",
      "source": "crates/gpui/src/atlas_lease.rs",
      "summary": "Changes before any unleased coordinates can be recycled. Paint marks use this to detect eviction/reset during the live capture interval.",
      "documentation": "Changes before any unleased coordinates can be recycled. Paint marks\nuse this to detect eviction/reset during the live capture interval.",
      "signature": "pub fn revision (& self) -> u64",
      "cfg": [],
      "target": "AtlasLeaseRegistry"
    },
    {
      "id": "gpui::atlas_lease::AtlasLeaseThreadBound",
      "name": "AtlasLeaseThreadBound",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "atlas_lease",
      "path": "gpui::atlas_lease",
      "summary": "Native submission callbacks may release resources on another thread. Wasm GPU resources are thread-confined, so their leases must remain local too.",
      "declarations": [
        {
          "source": "crates/gpui/src/atlas_lease.rs",
          "documentation": "Native submission callbacks may release resources on another thread. Wasm\nGPU resources are thread-confined, so their leases must remain local too.",
          "signature": "# [doc = \" Native submission callbacks may release resources on another thread. Wasm\"] # [doc = \" GPU resources are thread-confined, so their leases must remain local too.\"] # [doc (hidden)] # [cfg (not (target_family = \"wasm\"))] pub trait AtlasLeaseThreadBound : Send + Sync { }",
          "cfg": [
            "cfg (not (target_family = \"wasm\"))"
          ]
        },
        {
          "source": "crates/gpui/src/atlas_lease.rs",
          "documentation": "Wasm counterpart of the native submission callback bound.",
          "signature": "# [doc = \" Wasm counterpart of the native submission callback bound.\"] # [doc (hidden)] # [cfg (target_family = \"wasm\")] pub trait AtlasLeaseThreadBound { }",
          "cfg": [
            "cfg (target_family = \"wasm\")"
          ]
        }
      ]
    },
    {
      "id": "gpui::bounds_tree::BoundsTree::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "bounds_tree",
      "path": "gpui::bounds_tree",
      "source": "crates/gpui/src/bounds_tree.rs",
      "summary": "Clears all nodes from the tree.",
      "documentation": "Clears all nodes from the tree.",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "BoundsTree<U>"
    },
    {
      "id": "gpui::bounds_tree::BoundsTree::insert",
      "name": "insert",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "bounds_tree",
      "path": "gpui::bounds_tree",
      "source": "crates/gpui/src/bounds_tree.rs",
      "summary": "Inserts bounds into the tree and returns its assigned ordering.",
      "documentation": "Inserts bounds into the tree and returns its assigned ordering.\n\nThe ordering is one greater than the maximum ordering of any\nexisting bounds that intersect with the new bounds.",
      "signature": "pub fn insert (& mut self, new_bounds : Bounds<U>) -> u32",
      "cfg": [],
      "target": "BoundsTree<U>"
    },
    {
      "id": "gpui::color::Background",
      "name": "Background",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "A renderer-backed solid, gradient, or pattern background.",
      "documentation": "A renderer-backed solid, gradient, or pattern background.",
      "signature": "# [doc = \" A renderer-backed solid, gradient, or pattern background.\"] # [derive (Clone, Copy, PartialEq, Serialize, Deserialize, JsonSchema)] # [repr (C)] pub struct Background { pub (crate) tag : BackgroundTag, pub (crate) color_space : ColorSpace, pub (crate) solid : Hsla, pub (crate) gradient_angle_or_pattern_height : f32, pub (crate) gradient_center : Point<f32>, pub (crate) gradient_radius : Point<f32>, pub (crate) colors : [LinearColorStop; MAX_GRADIENT_STOPS], pub (crate) color_stop_count : u32, }",
      "cfg": []
    },
    {
      "id": "gpui::color::Background::as_solid",
      "name": "as_solid",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Returns the solid color if this is a solid background, None otherwise.",
      "documentation": "Returns the solid color if this is a solid background, None otherwise.",
      "signature": "pub fn as_solid (& self) -> Option<Hsla>",
      "cfg": [],
      "target": "Background"
    },
    {
      "id": "gpui::color::Background::color_space",
      "name": "color_space",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Use specified color space for color interpolation.",
      "documentation": "Use specified color space for color interpolation.\n\n<https://developer.mozilla.org/en-US/docs/Web/CSS/color-interpolation-method>",
      "signature": "pub fn color_space (mut self, color_space : ColorSpace) -> Self",
      "cfg": [],
      "target": "Background"
    },
    {
      "id": "gpui::color::Background::is_transparent",
      "name": "is_transparent",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Returns whether the background color is transparent.",
      "documentation": "Returns whether the background color is transparent.",
      "signature": "pub fn is_transparent (& self) -> bool",
      "cfg": [],
      "target": "Background"
    },
    {
      "id": "gpui::color::Background::opacity",
      "name": "opacity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Returns a new background color with the same hue, saturation, and lightness, but with a modified alpha value.",
      "documentation": "Returns a new background color with the same hue, saturation, and lightness, but with a modified alpha value.",
      "signature": "pub fn opacity (& self, factor : f32) -> Self",
      "cfg": [],
      "target": "Background"
    },
    {
      "id": "gpui::color::ColorSpace",
      "name": "ColorSpace",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "A color space for color interpolation.",
      "documentation": "A color space for color interpolation.\n\nReferences:\n- <https://developer.mozilla.org/en-US/docs/Web/CSS/color-interpolation-method>\n- <https://www.w3.org/TR/css-color-4/#typedef-color-space>",
      "signature": "# [doc = \" A color space for color interpolation.\"] # [doc = \"\"] # [doc = \" References:\"] # [doc = \" - <https://developer.mozilla.org/en-US/docs/Web/CSS/color-interpolation-method>\"] # [doc = \" - <https://www.w3.org/TR/css-color-4/#typedef-color-space>\"] # [derive (Debug, Clone, Copy, PartialEq, Default, Serialize, Deserialize, JsonSchema)] # [repr (C)] pub enum ColorSpace { # [default] # [doc = \" The sRGB color space.\"] Srgb = 0, # [doc = \" The Oklab color space.\"] Oklab = 1, }",
      "cfg": []
    },
    {
      "id": "gpui::color::Hsla",
      "name": "Hsla",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "An HSLA color",
      "documentation": "An HSLA color",
      "signature": "# [doc = \" An HSLA color\"] # [derive (Default, Copy, Clone, Debug)] # [repr (C)] pub struct Hsla { # [doc = \" Hue, in a range from 0 to 1\"] pub h : f32, # [doc = \" Saturation, in a range from 0 to 1\"] pub s : f32, # [doc = \" Lightness, in a range from 0 to 1\"] pub l : f32, # [doc = \" Alpha, in a range from 0 to 1\"] pub a : f32, }",
      "cfg": []
    },
    {
      "id": "gpui::color::Hsla::alpha",
      "name": "alpha",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Returns a new HSLA color with the same hue, saturation, and lightness, but with a new alpha value.",
      "documentation": "Returns a new HSLA color with the same hue, saturation,\nand lightness, but with a new alpha value.\n\nExample:\n```\nlet color = gpui::red();\nlet red_color = color.alpha(0.25);\nassert_eq!(red_color.a, 0.25);\n```\n\nThis will return a red color with 25% opacity.\n\nExample:\n```\nuse gpui::hsla;\nlet color = hsla(0.7, 1.0, 0.5, 0.7); // A saturated blue\nlet faded_color = color.alpha(0.25);\nassert_eq!(faded_color.a, 0.25);\n```\n\nThis will return a blue color with 25% opacity.",
      "signature": "pub fn alpha (& self, a : f32) -> Self",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::Hsla::black",
      "name": "black",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "The color black",
      "documentation": "The color black",
      "signature": "pub const fn black () -> Self",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::Hsla::blend",
      "name": "blend",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Blends `other` on top of `self` based on `other`'s alpha value. The resulting color is a combination of `self`'s and `other`'s colors.",
      "documentation": "Blends `other` on top of `self` based on `other`'s alpha value. The resulting color is a combination of `self`'s and `other`'s colors.\n\nIf `other`'s alpha value is 1.0 or greater, `other` color is fully opaque, thus `other` is returned as the output color.\nIf `other`'s alpha value is 0.0 or less, `other` color is fully transparent, thus `self` is returned as the output color.\nElse, the output color is calculated as a blend of `self` and `other` based on their weighted alpha values.\n\nAssumptions:\n- Alpha values are contained in the range [0, 1], with 1 as fully opaque and 0 as fully transparent.\n- The relative contributions of `self` and `other` is based on `self`'s alpha value (`self.a`) and `other`'s  alpha value (`other.a`), `self` contributing `self.a * (1.0 - other.a)` and `other` contributing its own alpha value.\n- RGB color components are contained in the range [0, 1].\n- If `self` and `other` colors are out of the valid range, the blend operation's output and behavior is undefined.",
      "signature": "pub fn blend (self, other : Hsla) -> Hsla",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::Hsla::blue",
      "name": "blue",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "The color blue",
      "documentation": "The color blue",
      "signature": "pub const fn blue () -> Self",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::Hsla::fade_out",
      "name": "fade_out",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Fade out the color by a given factor. This factor should be between 0.0 and 1.0. Where 0.0 will leave the color unchanged, and 1.0 will completely fade out the color.",
      "documentation": "Fade out the color by a given factor. This factor should be between 0.0 and 1.0.\nWhere 0.0 will leave the color unchanged, and 1.0 will completely fade out the color.",
      "signature": "pub fn fade_out (& mut self, factor : f32)",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::Hsla::grayscale",
      "name": "grayscale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Returns a new HSLA color with the same hue, and lightness, but with no saturation.",
      "documentation": "Returns a new HSLA color with the same hue, and lightness, but with no saturation.",
      "signature": "pub fn grayscale (& self) -> Self",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::Hsla::green",
      "name": "green",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "The color green",
      "documentation": "The color green",
      "signature": "pub const fn green () -> Self",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::Hsla::is_opaque",
      "name": "is_opaque",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Returns true if the HSLA color is fully opaque, false otherwise.",
      "documentation": "Returns true if the HSLA color is fully opaque, false otherwise.",
      "signature": "pub fn is_opaque (& self) -> bool",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::Hsla::is_transparent",
      "name": "is_transparent",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Returns true if the HSLA color is fully transparent, false otherwise.",
      "documentation": "Returns true if the HSLA color is fully transparent, false otherwise.",
      "signature": "pub fn is_transparent (& self) -> bool",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::Hsla::opacity",
      "name": "opacity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Multiplies the alpha value of the color by a given factor and returns a new HSLA color.",
      "documentation": "Multiplies the alpha value of the color by a given factor\nand returns a new HSLA color.\n\nUseful for transforming colors with dynamic opacity,\nlike a color from an external source.\n\nExample:\n```\nlet color = gpui::red();\nlet faded_color = color.opacity(0.5);\nassert_eq!(faded_color.a, 0.5);\n```\n\nThis will return a red color with half the opacity.\n\nExample:\n```\nuse gpui::hsla;\nlet color = hsla(0.7, 1.0, 0.5, 0.7); // A saturated blue\nlet faded_color = color.opacity(0.16);\nassert!((faded_color.a - 0.112).abs() < 1e-6);\n```\n\nThis will return a blue color with around ~10% opacity,\nsuitable for an element's hover or selected state.\n",
      "signature": "pub fn opacity (& self, factor : f32) -> Self",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::Hsla::red",
      "name": "red",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "The color red",
      "documentation": "The color red",
      "signature": "pub const fn red () -> Self",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::Hsla::to_rgb",
      "name": "to_rgb",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Converts this HSLA color to an RGBA color.",
      "documentation": "Converts this HSLA color to an RGBA color.",
      "signature": "pub fn to_rgb (self) -> Rgba",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::Hsla::transparent_black",
      "name": "transparent_black",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "The color transparent black",
      "documentation": "The color transparent black",
      "signature": "pub const fn transparent_black () -> Self",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::Hsla::white",
      "name": "white",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "The color white",
      "documentation": "The color white",
      "signature": "pub const fn white () -> Self",
      "cfg": [],
      "target": "Hsla"
    },
    {
      "id": "gpui::color::LinearColorStop",
      "name": "LinearColorStop",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "A color stop in a linear gradient.",
      "documentation": "A color stop in a linear gradient.\n\n<https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/linear-gradient#linear-color-stop>",
      "signature": "# [doc = \" A color stop in a linear gradient.\"] # [doc = \"\"] # [doc = \" <https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/linear-gradient#linear-color-stop>\"] # [derive (Debug, Clone, Copy, Default, PartialEq, Serialize, Deserialize, JsonSchema)] # [repr (C)] pub struct LinearColorStop { # [doc = \" The color of the color stop.\"] pub color : Hsla, # [doc = \" The percentage of the gradient, in the range 0.0 to 1.0.\"] pub percentage : f32, }",
      "cfg": []
    },
    {
      "id": "gpui::color::LinearColorStop::opacity",
      "name": "opacity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Returns a new color stop with the same color, but with a modified alpha value.",
      "documentation": "Returns a new color stop with the same color, but with a modified alpha value.",
      "signature": "pub fn opacity (& self, factor : f32) -> Self",
      "cfg": [],
      "target": "LinearColorStop"
    },
    {
      "id": "gpui::color::MAX_GRADIENT_STOPS",
      "name": "MAX_GRADIENT_STOPS",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "The number of stops one renderer-backed gradient can carry.",
      "documentation": "The number of stops one renderer-backed gradient can carry.\n\nStops are stored inline with scene primitives so quads and paths use the\nsame representation on Metal, Direct3D, and WGPU. Eight covers ordinary\nUI washes, charts, heat scales, and shimmer signatures without introducing\na renderer-specific side buffer.",
      "signature": "pub const MAX_GRADIENT_STOPS: usize",
      "cfg": []
    },
    {
      "id": "gpui::color::MAX_LINEAR_GRADIENT_STOPS",
      "name": "MAX_LINEAR_GRADIENT_STOPS",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Compatibility name for the renderer-backed gradient stop capacity.",
      "documentation": "Compatibility name for the renderer-backed gradient stop capacity.",
      "signature": "pub const MAX_LINEAR_GRADIENT_STOPS: usize",
      "cfg": []
    },
    {
      "id": "gpui::color::Rgba",
      "name": "Rgba",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "An RGBA color",
      "documentation": "An RGBA color",
      "signature": "# [doc = \" An RGBA color\"] # [derive (PartialEq, Clone, Copy, Default)] # [repr (C)] pub struct Rgba { # [doc = \" The red component of the color, in the range 0.0 to 1.0\"] pub r : f32, # [doc = \" The green component of the color, in the range 0.0 to 1.0\"] pub g : f32, # [doc = \" The blue component of the color, in the range 0.0 to 1.0\"] pub b : f32, # [doc = \" The alpha component of the color, in the range 0.0 to 1.0\"] pub a : f32, }",
      "cfg": []
    },
    {
      "id": "gpui::color::Rgba::alpha",
      "name": "alpha",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Returns a new RGBA color with the same red, green and blue channels, but with a new alpha value.",
      "documentation": "Returns a new RGBA color with the same red, green and blue channels, but\nwith a new alpha value.\n\nExample:\n```\nuse gpui::rgba;\nlet color = rgba(0xFF0000FF);\nlet faded = color.alpha(0.25);\nassert_eq!(faded.a, 0.25);\n```\n\nThis will return a red color with 25% opacity.\n\nExample:\n```\nuse gpui::rgba;\nlet color = rgba(0x3399FFCC);\nlet transparent = color.alpha(0.0);\nassert_eq!(transparent.a, 0.0);\n```\n\nThis will return the same blue color, fully transparent.",
      "signature": "pub fn alpha (& self, a : f32) -> Self",
      "cfg": [],
      "target": "Rgba"
    },
    {
      "id": "gpui::color::Rgba::blend",
      "name": "blend",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Create a new [`Rgba`] color by blending this and another color together",
      "documentation": "Create a new [`Rgba`] color by blending this and another color together",
      "signature": "pub fn blend (& self, other : Rgba) -> Self",
      "cfg": [],
      "target": "Rgba"
    },
    {
      "id": "gpui::color::Rgba::opacity",
      "name": "opacity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Returns a new RGBA color with the same red, green, and blue channels, but with the alpha channel multiplied by the given factor.",
      "documentation": "Returns a new RGBA color with the same red, green, and blue channels,\nbut with the alpha channel multiplied by the given factor.\n\nExample:\n```\nuse gpui::rgba;\nlet color = rgba(0xFF0000FF); // Fully opaque red\nlet faded = color.opacity(0.5);\nassert_eq!(faded.a, 0.5);\n```\n\nThis will return a red color with 50% opacity.\n\nExample:\n```\nuse gpui::rgba;\nlet color = rgba(0x3399FFCC); // A light blue with 80% opacity\nlet faded = color.opacity(0.5);\nassert!((faded.a - 0.4).abs() < 1e-6);\n```\n\nThis will return the same blue color scaled down to 40% opacity.",
      "signature": "pub fn opacity (& self, factor : f32) -> Self",
      "cfg": [],
      "target": "Rgba"
    },
    {
      "id": "gpui::color::black",
      "name": "black",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Pure black in [`Hsla`]",
      "documentation": "Pure black in [`Hsla`]",
      "signature": "pub const fn black () -> Hsla",
      "cfg": []
    },
    {
      "id": "gpui::color::blue",
      "name": "blue",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "The color blue in [`Hsla`]",
      "documentation": "The color blue in [`Hsla`]",
      "signature": "pub const fn blue () -> Hsla",
      "cfg": []
    },
    {
      "id": "gpui::color::checkerboard",
      "name": "checkerboard",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Creates a checkerboard pattern background",
      "documentation": "Creates a checkerboard pattern background",
      "signature": "pub fn checkerboard (color : impl Into<Hsla>, size : f32) -> Background",
      "cfg": []
    },
    {
      "id": "gpui::color::conic_gradient",
      "name": "conic_gradient",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Creates a conic gradient between two color stops.",
      "documentation": "Creates a conic gradient between two color stops.\n\n`start_angle` uses CSS gradient geometry: zero degrees starts at the top and\nincreasing values rotate clockwise. `center` is expressed as fractions of\nthe painted bounds and may lie outside them.",
      "signature": "pub fn conic_gradient (start_angle : f32, center : Point<f32>, from : impl Into<LinearColorStop>, to : impl Into<LinearColorStop>,) -> Background",
      "cfg": []
    },
    {
      "id": "gpui::color::conic_gradient_stops",
      "name": "conic_gradient_stops",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Creates a conic gradient from two through eight color stops.",
      "documentation": "Creates a conic gradient from two through eight color stops.",
      "signature": "pub fn conic_gradient_stops<S> (start_angle : f32, center : Point<f32>, stops : impl IntoIterator<Item = S>,) -> Background where S : Into<LinearColorStop>,",
      "cfg": []
    },
    {
      "id": "gpui::color::green",
      "name": "green",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "The color green in [`Hsla`]",
      "documentation": "The color green in [`Hsla`]",
      "signature": "pub const fn green () -> Hsla",
      "cfg": []
    },
    {
      "id": "gpui::color::hsla",
      "name": "hsla",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Construct an [`Hsla`] object from plain values",
      "documentation": "Construct an [`Hsla`] object from plain values",
      "signature": "pub const fn hsla (h : f32, s : f32, l : f32, a : f32) -> Hsla",
      "cfg": []
    },
    {
      "id": "gpui::color::linear_color_stop",
      "name": "linear_color_stop",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Creates a new linear color stop.",
      "documentation": "Creates a new linear color stop.\n\nThe percentage of the gradient, in the range 0.0 to 1.0.",
      "signature": "pub fn linear_color_stop (color : impl Into<Hsla>, percentage : f32) -> LinearColorStop",
      "cfg": []
    },
    {
      "id": "gpui::color::linear_gradient",
      "name": "linear_gradient",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Creates a LinearGradient background color.",
      "documentation": "Creates a LinearGradient background color.\n\nThe gradient line's angle of direction. A value of `0.` is equivalent to top; increasing values rotate clockwise from there.\n\nThe `angle` is in degrees value in the range 0.0 to 360.0.\n\n<https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/linear-gradient>",
      "signature": "pub fn linear_gradient (angle : f32, from : impl Into<LinearColorStop>, to : impl Into<LinearColorStop>,) -> Background",
      "cfg": []
    },
    {
      "id": "gpui::color::linear_gradient_stops",
      "name": "linear_gradient_stops",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Creates a linear-gradient background from two through eight color stops.",
      "documentation": "Creates a linear-gradient background from two through eight color stops.\n\nStops must be finite, lie in `0.0..=1.0`, and appear in non-decreasing\norder. Equal percentages create a hard color transition. The bounded stop\ncount is part of the renderer primitive contract rather than a limitation\ncallers need to reproduce with adjacent elements.",
      "signature": "pub fn linear_gradient_stops<S> (angle : f32, stops : impl IntoIterator<Item = S>) -> Background where S : Into<LinearColorStop>,",
      "cfg": []
    },
    {
      "id": "gpui::color::opaque_grey",
      "name": "opaque_grey",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Opaque grey in [`Hsla`], values will be clamped to the range [0, 1]",
      "documentation": "Opaque grey in [`Hsla`], values will be clamped to the range [0, 1]",
      "signature": "pub const fn opaque_grey (lightness : f32, opacity : f32) -> Hsla",
      "cfg": []
    },
    {
      "id": "gpui::color::pattern_slash",
      "name": "pattern_slash",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Creates a hash pattern background",
      "documentation": "Creates a hash pattern background",
      "signature": "pub fn pattern_slash (color : impl Into<Hsla>, width : f32, interval : f32) -> Background",
      "cfg": []
    },
    {
      "id": "gpui::color::radial_gradient",
      "name": "radial_gradient",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Creates an elliptical radial gradient between two color stops.",
      "documentation": "Creates an elliptical radial gradient between two color stops.\n\n`center` and `radius` are fractions of the painted bounds. A center of\n`(0.5, 0.5)` and radius of `(0.5, 0.5)` reaches the midpoint of every side;\nunequal radii produce an ellipse. Centers may lie outside the bounds, while\nboth radii must be finite and greater than zero.",
      "signature": "pub fn radial_gradient (center : Point<f32>, radius : Point<f32>, from : impl Into<LinearColorStop>, to : impl Into<LinearColorStop>,) -> Background",
      "cfg": []
    },
    {
      "id": "gpui::color::radial_gradient_stops",
      "name": "radial_gradient_stops",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Creates an elliptical radial gradient from two through eight color stops.",
      "documentation": "Creates an elliptical radial gradient from two through eight color stops.",
      "signature": "pub fn radial_gradient_stops<S> (center : Point<f32>, radius : Point<f32>, stops : impl IntoIterator<Item = S>,) -> Background where S : Into<LinearColorStop>,",
      "cfg": []
    },
    {
      "id": "gpui::color::red",
      "name": "red",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "The color red in [`Hsla`]",
      "documentation": "The color red in [`Hsla`]",
      "signature": "pub const fn red () -> Hsla",
      "cfg": []
    },
    {
      "id": "gpui::color::rgb",
      "name": "rgb",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Convert an RGB hex color code number to a color type",
      "documentation": "Convert an RGB hex color code number to a color type",
      "signature": "pub fn rgb (hex : u32) -> Rgba",
      "cfg": []
    },
    {
      "id": "gpui::color::rgba",
      "name": "rgba",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Convert an RGBA hex color code number to [`Rgba`]",
      "documentation": "Convert an RGBA hex color code number to [`Rgba`]",
      "signature": "pub fn rgba (hex : u32) -> Rgba",
      "cfg": []
    },
    {
      "id": "gpui::color::solid_background",
      "name": "solid_background",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Creates a solid background color.",
      "documentation": "Creates a solid background color.",
      "signature": "pub fn solid_background (color : impl Into<Hsla>) -> Background",
      "cfg": []
    },
    {
      "id": "gpui::color::swap_rgba_pa_to_bgra",
      "name": "swap_rgba_pa_to_bgra",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Swap from RGBA with premultiplied alpha to BGRA",
      "documentation": "Swap from RGBA with premultiplied alpha to BGRA",
      "signature": "pub fn swap_rgba_pa_to_bgra (color : & mut [u8])",
      "cfg": []
    },
    {
      "id": "gpui::color::transparent_black",
      "name": "transparent_black",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Transparent black in [`Hsla`]",
      "documentation": "Transparent black in [`Hsla`]",
      "signature": "pub const fn transparent_black () -> Hsla",
      "cfg": []
    },
    {
      "id": "gpui::color::transparent_white",
      "name": "transparent_white",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Transparent white in [`Hsla`]",
      "documentation": "Transparent white in [`Hsla`]",
      "signature": "pub const fn transparent_white () -> Hsla",
      "cfg": []
    },
    {
      "id": "gpui::color::white",
      "name": "white",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "Pure white in [`Hsla`]",
      "documentation": "Pure white in [`Hsla`]",
      "signature": "pub const fn white () -> Hsla",
      "cfg": []
    },
    {
      "id": "gpui::color::yellow",
      "name": "yellow",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "color",
      "path": "gpui::color",
      "source": "crates/gpui/src/color.rs",
      "summary": "The color yellow in [`Hsla`]",
      "documentation": "The color yellow in [`Hsla`]",
      "signature": "pub const fn yellow () -> Hsla",
      "cfg": []
    },
    {
      "id": "gpui::colors::Colors",
      "name": "Colors",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "colors",
      "path": "gpui::colors",
      "source": "crates/gpui/src/colors.rs",
      "summary": "The default set of colors for gpui.",
      "documentation": "The default set of colors for gpui.\n\nThese are used for styling base components, examples and more.",
      "signature": "# [doc = \" The default set of colors for gpui.\"] # [doc = \"\"] # [doc = \" These are used for styling base components, examples and more.\"] # [derive (Clone, Debug)] pub struct Colors { # [doc = \" Text color\"] pub text : Rgba, # [doc = \" Selected text color\"] pub selected_text : Rgba, # [doc = \" Background color\"] pub background : Rgba, # [doc = \" Disabled color\"] pub disabled : Rgba, # [doc = \" Selected color\"] pub selected : Rgba, # [doc = \" Border color\"] pub border : Rgba, # [doc = \" Separator color\"] pub separator : Rgba, # [doc = \" Container color\"] pub container : Rgba, }",
      "cfg": []
    },
    {
      "id": "gpui::colors::Colors::dark",
      "name": "dark",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "colors",
      "path": "gpui::colors",
      "source": "crates/gpui/src/colors.rs",
      "summary": "Returns the default dark colors.",
      "documentation": "Returns the default dark colors.",
      "signature": "pub fn dark () -> Self",
      "cfg": [],
      "target": "Colors"
    },
    {
      "id": "gpui::colors::Colors::for_appearance",
      "name": "for_appearance",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "colors",
      "path": "gpui::colors",
      "source": "crates/gpui/src/colors.rs",
      "summary": "Returns the default colors for the given window appearance.",
      "documentation": "Returns the default colors for the given window appearance.",
      "signature": "pub fn for_appearance (window : & Window) -> Self",
      "cfg": [],
      "target": "Colors"
    },
    {
      "id": "gpui::colors::Colors::get_global",
      "name": "get_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "colors",
      "path": "gpui::colors",
      "source": "crates/gpui/src/colors.rs",
      "summary": "Get [Colors] from the global state",
      "documentation": "Get [Colors] from the global state",
      "signature": "pub fn get_global (cx : & App) -> & Arc<Colors>",
      "cfg": [],
      "target": "Colors"
    },
    {
      "id": "gpui::colors::Colors::light",
      "name": "light",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "colors",
      "path": "gpui::colors",
      "source": "crates/gpui/src/colors.rs",
      "summary": "Returns the default light colors.",
      "documentation": "Returns the default light colors.",
      "signature": "pub fn light () -> Self",
      "cfg": [],
      "target": "Colors"
    },
    {
      "id": "gpui::colors::DefaultAppearance",
      "name": "DefaultAppearance",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "colors",
      "path": "gpui::colors",
      "source": "crates/gpui/src/colors.rs",
      "summary": "The appearance of the base GPUI colors, used to style GPUI elements",
      "documentation": "The appearance of the base GPUI colors, used to style GPUI elements\n\nVaries based on the system's current [`WindowAppearance`].",
      "signature": "# [doc = \" The appearance of the base GPUI colors, used to style GPUI elements\"] # [doc = \"\"] # [doc = \" Varies based on the system's current [`WindowAppearance`].\"] # [derive (Debug, Default, Clone, Copy, PartialEq, Eq)] pub enum DefaultAppearance { # [doc = \" Use the set of colors for light appearances.\"] # [default] Light, # [doc = \" Use the set of colors for dark appearances.\"] Dark, }",
      "cfg": []
    },
    {
      "id": "gpui::colors::DefaultColors",
      "name": "DefaultColors",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "colors",
      "path": "gpui::colors",
      "source": "crates/gpui/src/colors.rs",
      "summary": "Implement this trait to allow global [Colors] access via `cx.default_colors()`.",
      "documentation": "Implement this trait to allow global [Colors] access via `cx.default_colors()`.",
      "signature": "# [doc = \" Implement this trait to allow global [Colors] access via `cx.default_colors()`.\"] pub trait DefaultColors { # [doc = \" Returns the default [`Colors`]\"] fn default_colors (& self) -> & Arc<Colors>; }",
      "cfg": []
    },
    {
      "id": "gpui::colors::GlobalColors",
      "name": "GlobalColors",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "colors",
      "path": "gpui::colors",
      "source": "crates/gpui/src/colors.rs",
      "summary": "Get [Colors] from the global state",
      "documentation": "Get [Colors] from the global state",
      "signature": "# [doc = \" Get [Colors] from the global state\"] # [derive (Clone, Debug)] pub struct GlobalColors (pub Arc<Colors>);",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer",
      "name": "EditBuffer",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "One control's editable value.",
      "documentation": "One control's editable value.",
      "signature": "# [doc = \" One control's editable value.\"] # [derive (Debug)] pub struct EditBuffer { text : EditSnapshot, # [doc = \" A caret is an empty selection, so one range describes both.\"] selection : Range<usize>, reversed : bool, # [doc = \" Primary anchor/head affinity, independent of normalized range order.\"] affinities : [TextAffinity; 2], secondary : Vec<(Range<usize>, bool)>, # [doc = \" The range an input method is composing, underlined and replaced whole\"] # [doc = \" as composition continues.\"] marked : Option<Range<usize>>, history : EditHistory, rules : EditRules, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::can_redo",
      "name": "can_redo",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Returns whether an undone edit can be replayed.",
      "documentation": "Returns whether an undone edit can be replayed.",
      "signature": "pub fn can_redo (& self) -> bool",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::can_undo",
      "name": "can_undo",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Returns whether an edit can be undone.",
      "documentation": "Returns whether an edit can be undone.",
      "signature": "pub fn can_undo (& self) -> bool",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::cancel_composition",
      "name": "cancel_composition",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Rolls back only the active IME composition, restoring its original primary affinities and secondary selection set. Unlike undo, this is available for secret fields and retains no completed text history.",
      "documentation": "Rolls back only the active IME composition, restoring its original\nprimary affinities and secondary selection set. Unlike undo, this is\navailable for secret fields and retains no completed text history.",
      "signature": "pub fn cancel_composition (& mut self) -> bool",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::delete_ranges",
      "name": "delete_ranges",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Deletes primary-first ranges as one transaction, merging overlaps and clamping to graphemes. Undo restores the selections before expansion.",
      "documentation": "Deletes primary-first ranges as one transaction, merging overlaps and\nclamping to graphemes. Undo restores the selections before expansion.",
      "signature": "pub fn delete_ranges (& mut self, ranges : impl IntoIterator<Item = Range<usize>>) -> EditOutcome",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::delete_selections",
      "name": "delete_selections",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Deletes selections, extending empty carets by one grapheme. Overlapping deletion spans merge, so shared text is deleted only once. Undo restores the original primary-first selections, not the expanded deletion spans.",
      "documentation": "Deletes selections, extending empty carets by one grapheme. Overlapping\ndeletion spans merge, so shared text is deleted only once. Undo restores\nthe original primary-first selections, not the expanded deletion spans.",
      "signature": "pub fn delete_selections (& mut self, backward : bool) -> EditOutcome",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::end_composition",
      "name": "end_composition",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Closes a composition, recording the whole run as one step.",
      "documentation": "Closes a composition, recording the whole run as one step.",
      "signature": "pub fn end_composition (& mut self)",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::extend_selection",
      "name": "extend_selection",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Moves the end that is moving, keeping the other one anchored.",
      "documentation": "Moves the end that is moving, keeping the other one anchored.",
      "signature": "pub fn extend_selection (& mut self, offset : usize)",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::forbid_history",
      "name": "forbid_history",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Stops recording, permanently.",
      "documentation": "Stops recording, permanently.\n\nA credential that could be undone back into view would outlive the\nmoment it was replaced, so a secret field never has a history rather\nthan having one it clears.",
      "signature": "pub fn forbid_history (& mut self)",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::has_multiple_selections",
      "name": "has_multiple_selections",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Returns whether secondary selections accompany the primary selection.",
      "documentation": "Returns whether secondary selections accompany the primary selection.",
      "signature": "pub fn has_multiple_selections (& self) -> bool",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Returns whether the current value is empty.",
      "documentation": "Returns whether the current value is empty.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::is_reversed",
      "name": "is_reversed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Returns whether the selection focus precedes its anchor.",
      "documentation": "Returns whether the selection focus precedes its anchor.",
      "signature": "pub fn is_reversed (& self) -> bool",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::marked",
      "name": "marked",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Returns the UTF-8 range currently owned by an input composition.",
      "documentation": "Returns the UTF-8 range currently owned by an input composition.",
      "signature": "pub fn marked (& self) -> Option<Range<usize>>",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::native_selection",
      "name": "native_selection",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "The atomic UTF-16 primary selection, including both visual affinities. Secondary selections retain their existing logical-only policy.",
      "documentation": "The atomic UTF-16 primary selection, including both visual affinities.\nSecondary selections retain their existing logical-only policy.",
      "signature": "pub fn native_selection (& self) -> NativeTextSelection",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Creates an empty editable value governed by `rules`.",
      "documentation": "Creates an empty editable value governed by `rules`.",
      "signature": "pub fn new (rules : EditRules) -> Self",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::redo",
      "name": "redo",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Applies the last undone transaction forwards.",
      "documentation": "Applies the last undone transaction forwards.",
      "signature": "pub fn redo (& mut self) -> bool",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::replace",
      "name": "replace",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Replaces `range` with `text`, recording it as `cause` requires.",
      "documentation": "Replaces `range` with `text`, recording it as `cause` requires.\n\nThe insertion is normalised and trimmed to the control's rules first,\nso what is recorded is what was actually kept rather than what was\noffered.",
      "signature": "pub fn replace (& mut self, range : Range<usize>, text : & str, cause : EditCause) -> EditOutcome",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::replace_and_mark",
      "name": "replace_and_mark",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Replaces `range` with `text` and marks the result as composing.",
      "documentation": "Replaces `range` with `text` and marks the result as composing.\n\nThe composition is not a step of its own until it ends; see\n[`EditBuffer::end_composition`].",
      "signature": "pub fn replace_and_mark (& mut self, range : Range<usize>, text : & str, selection_in_insertion : Option<Range<usize>>,) -> EditOutcome",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::replace_many",
      "name": "replace_many",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Applies original-document replacements as one undo transaction. Invalid grapheme boundaries, overlaps and duplicate insertions are refused before mutation. Each edit produces a caret; the first is primary.",
      "documentation": "Applies original-document replacements as one undo transaction. Invalid\ngrapheme boundaries, overlaps and duplicate insertions are refused\nbefore mutation. Each edit produces a caret; the first is primary.",
      "signature": "pub fn replace_many (& mut self, edits : impl IntoIterator<Item = (Range<usize>, SharedString)>, cause : EditCause,) -> Option<EditOutcome>",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::replace_selections",
      "name": "replace_selections",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Replaces all selections atomically in original source coordinates. One call is one undo transaction; single-caret typing keeps its normal coalescing. Each insertion follows the control's ordinary edit rules.",
      "documentation": "Replaces all selections atomically in original source coordinates.\nOne call is one undo transaction; single-caret typing keeps its normal\ncoalescing. Each insertion follows the control's ordinary edit rules.",
      "signature": "pub fn replace_selections (& mut self, text : & str, cause : EditCause) -> EditOutcome",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::rules_mut",
      "name": "rules_mut",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Returns the limits applied to subsequent replacements.",
      "documentation": "Returns the limits applied to subsequent replacements.",
      "signature": "pub fn rules_mut (& mut self) -> & mut EditRules",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::selection",
      "name": "selection",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Returns the current normalized UTF-8 selection range.",
      "documentation": "Returns the current normalized UTF-8 selection range.",
      "signature": "pub fn selection (& self) -> Range<usize>",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::selections",
      "name": "selections",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Selections in primary-first order. Secondary ranges do not overlap.",
      "documentation": "Selections in primary-first order. Secondary ranges do not overlap.",
      "signature": "pub fn selections (& self) -> Vec<(Range<usize>, bool)>",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::set_caret",
      "name": "set_caret",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Collapses the selection to the nearest valid offset at or before `offset`.",
      "documentation": "Collapses the selection to the nearest valid offset at or before `offset`.",
      "signature": "pub fn set_caret (& mut self, offset : usize)",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::set_marked",
      "name": "set_marked",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Replaces the marked-composition range without changing text.",
      "documentation": "Replaces the marked-composition range without changing text.",
      "signature": "pub fn set_marked (& mut self, marked : Option<Range<usize>>)",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::set_native_selection",
      "name": "set_native_selection",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Validates both UTF-16 endpoints as complete grapheme boundaries before changing anything. Successful native selection clears secondary cursors, just like set_selection, but retains both primary endpoint affinities. This does not end an active composition or create an undo transaction.",
      "documentation": "Validates both UTF-16 endpoints as complete grapheme boundaries before\nchanging anything. Successful native selection clears secondary cursors,\njust like set_selection, but retains both primary endpoint affinities.\nThis does not end an active composition or create an undo transaction.",
      "signature": "pub fn set_native_selection (& mut self, selection : NativeTextSelection) -> bool",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::set_selection",
      "name": "set_selection",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Sets a normalized selection and which endpoint carries focus.",
      "documentation": "Sets a normalized selection and which endpoint carries focus.",
      "signature": "pub fn set_selection (& mut self, range : Range<usize>, reversed : bool)",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::set_selections",
      "name": "set_selections",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Sets primary-first selections, clamped to graphemes. Overlaps and duplicate carets merge, preserving primary direction. Empty input is refused.",
      "documentation": "Sets primary-first selections, clamped to graphemes. Overlaps and\nduplicate carets merge, preserving primary direction. Empty input is refused.",
      "signature": "pub fn set_selections (& mut self, selections : impl IntoIterator<Item = (Range<usize>, bool)>,) -> bool",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::set_text",
      "name": "set_text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Puts a value in place without it becoming a step the reader can walk back through, and forgets the steps that described the old one.",
      "documentation": "Puts a value in place without it becoming a step the reader can walk\nback through, and forgets the steps that described the old one.",
      "signature": "pub fn set_text (& mut self, text : & str) -> EditOutcome",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::snapshot",
      "name": "snapshot",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Shares the current document without copying its bytes. Indexed line and range access on this snapshot does not materialize a contiguous value.",
      "documentation": "Shares the current document without copying its bytes. Indexed line and\nrange access on this snapshot does not materialize a contiguous value.",
      "signature": "pub fn snapshot (& self) -> EditSnapshot",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Returns the current UTF-8 value.",
      "documentation": "Returns the current UTF-8 value.",
      "signature": "pub fn text (& self) -> & SharedString",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditBuffer::undo",
      "name": "undo",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "Applies the last transaction backwards. Returns whether anything moved. Native composition cancellation uses cancel_composition instead.",
      "documentation": "Applies the last transaction backwards. Returns whether anything moved.\nNative composition cancellation uses cancel_composition instead.",
      "signature": "pub fn undo (& mut self) -> bool",
      "cfg": [],
      "target": "EditBuffer"
    },
    {
      "id": "gpui::editable_text::buffer::EditOutcome",
      "name": "EditOutcome",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "The result of an edit: what actually happened, for the caller to report.",
      "documentation": "The result of an edit: what actually happened, for the caller to report.",
      "signature": "# [doc = \" The result of an edit: what actually happened, for the caller to report.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub struct EditOutcome { # [doc = \" Whether the text is different from what it was.\"] pub changed : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::buffer::EditRules",
      "name": "EditRules",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::buffer",
      "path": "gpui::editable_text::buffer",
      "source": "crates/gpui/src/editable_text/buffer.rs",
      "summary": "What a particular control accepts.",
      "documentation": "What a particular control accepts.",
      "signature": "# [doc = \" What a particular control accepts.\"] # [derive (Clone, Copy, Debug, Default)] pub struct EditRules { # [doc = \" A byte limit, applied by trimming an over-long insertion rather than\"] # [doc = \" refusing it.\"] pub max_length : Option<usize>, # [doc = \" A limit in user-perceived characters, for a field whose slots are\"] # [doc = \" graphemes rather than bytes.\"] pub max_graphemes : Option<usize>, # [doc = \" True for a field that holds one line, where a newline arriving from a\"] # [doc = \" paste becomes a space rather than a second line nobody can see.\"] pub single_line : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::document::EditDifference",
      "name": "EditDifference",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "An exact scalar-aligned replacement between two persistent snapshots.",
      "documentation": "An exact scalar-aligned replacement between two persistent snapshots.",
      "signature": "# [doc = \" An exact scalar-aligned replacement between two persistent snapshots.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct EditDifference { # [doc = \" Bytes replaced in the preceding snapshot.\"] pub replaced : Range<usize>, # [doc = \" Only the replacement bytes are copied.\"] pub inserted : String, # [doc = \" Bytes actually compared when shared chunk identity did not suffice.\"] pub compared_bytes : usize, # [doc = \" Equal bytes skipped by live shared-chunk identity.\"] pub shared_bytes : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot",
      "name": "EditSnapshot",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "An immutable, cheap-to-clone document revision with indexed hard lines.",
      "documentation": "An immutable, cheap-to-clone document revision with indexed hard lines.",
      "signature": "# [doc = \" An immutable, cheap-to-clone document revision with indexed hard lines.\"] # [derive (Clone, Default)] pub struct EditSnapshot { rope : Rope, contiguous : OnceLock<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::byte_chunks",
      "name": "byte_chunks",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Borrows byte chunks intersecting a range, clipped to document bounds. Chunks concatenate to that exact byte range without allocating or flattening. Byte boundaries need not be UTF-8 scalar boundaries, which lets incremental parsers request input at arbitrary decoder offsets.",
      "documentation": "Borrows byte chunks intersecting a range, clipped to document bounds.\nChunks concatenate to that exact byte range without allocating or\nflattening. Byte boundaries need not be UTF-8 scalar boundaries, which\nlets incremental parsers request input at arbitrary decoder offsets.",
      "signature": "pub fn byte_chunks (& self, range : Range<usize>) -> impl Iterator<Item = & [u8]>",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::difference_from",
      "name": "difference_from",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Computes one exact replacement without flattening either snapshot. Shared chunks skip byte comparisons. Separate equal documents still require linear comparison; widely separated edits include intervening unchanged text in this single replacement.",
      "documentation": "Computes one exact replacement without flattening either snapshot.\nShared chunks skip byte comparisons. Separate equal documents still\nrequire linear comparison; widely separated edits include intervening\nunchanged text in this single replacement.",
      "signature": "pub fn difference_from (& self, before : & Self) -> EditDifference",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Whether there are no bytes (an empty document still has one line).",
      "documentation": "Whether there are no bytes (an empty document still has one line).",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "UTF-8 byte length, without flattening the rope.",
      "documentation": "UTF-8 byte length, without flattening the rope.",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::line_at",
      "name": "line_at",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Zero-based hard line containing the clamped byte offset.",
      "documentation": "Zero-based hard line containing the clamped byte offset.",
      "signature": "pub fn line_at (& self, offset : usize) -> usize",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::line_count",
      "name": "line_count",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Number of LF-delimited lines, including an empty trailing line.",
      "documentation": "Number of LF-delimited lines, including an empty trailing line.",
      "signature": "pub fn line_count (& self) -> usize",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::line_range",
      "name": "line_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Byte range of a zero-based hard line, including its LF if present.",
      "documentation": "Byte range of a zero-based hard line, including its LF if present.",
      "signature": "pub fn line_range (& self, line : usize) -> Option<Range<usize>>",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::materialized_bytes",
      "name": "materialized_bytes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Bytes held by this snapshot's optional contiguous compatibility cache. Reading this counter never materializes text.",
      "documentation": "Bytes held by this snapshot's optional contiguous compatibility cache.\nReading this counter never materializes text.",
      "signature": "pub fn materialized_bytes (& self) -> usize",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::next_grapheme_boundary",
      "name": "next_grapheme_boundary",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Next extended-grapheme boundary, without materializing a hard line.",
      "documentation": "Next extended-grapheme boundary, without materializing a hard line.",
      "signature": "pub fn next_grapheme_boundary (& self, offset : usize) -> usize",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::offset_from_utf16",
      "name": "offset_from_utf16",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Converts UTF-16 units to bytes. An offset inside a surrogate pair rounds upward to the end of that scalar, matching the existing API.",
      "documentation": "Converts UTF-16 units to bytes. An offset inside a surrogate pair\nrounds upward to the end of that scalar, matching the existing API.",
      "signature": "pub fn offset_from_utf16 (& self, offset : usize) -> usize",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::offset_to_utf16",
      "name": "offset_to_utf16",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Converts a byte offset to UTF-16 units, rounding an interior scalar offset upward, as the platform editable-text API does.",
      "documentation": "Converts a byte offset to UTF-16 units, rounding an interior scalar\noffset upward, as the platform editable-text API does.",
      "signature": "pub fn offset_to_utf16 (& self, offset : usize) -> usize",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::previous_grapheme_boundary",
      "name": "previous_grapheme_boundary",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Previous extended-grapheme boundary, traversing borrowed rope chunks.",
      "documentation": "Previous extended-grapheme boundary, traversing borrowed rope chunks.",
      "signature": "pub fn previous_grapheme_boundary (& self, offset : usize) -> usize",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::shares_storage_with",
      "name": "shares_storage_with",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Constant-time identity check for unchanged persistent storage. Equal contents constructed independently need not share storage. This does not compare or materialize document bytes.",
      "documentation": "Constant-time identity check for unchanged persistent storage. Equal\ncontents constructed independently need not share storage. This does\nnot compare or materialize document bytes.",
      "signature": "pub fn shares_storage_with (& self, other : & Self) -> bool",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::slice",
      "name": "slice",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Copies only the requested range. Invalid UTF-8 boundaries return None.",
      "documentation": "Copies only the requested range. Invalid UTF-8 boundaries return None.",
      "signature": "pub fn slice (& self, range : Range<usize>) -> Option<String>",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::document::EditSnapshot::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::document",
      "path": "gpui::editable_text::document",
      "source": "crates/gpui/src/editable_text/document.rs",
      "summary": "Compatibility snapshot. The first call in a revision copies all bytes; subsequent calls reuse that allocation. Prefer indexed slices for views.",
      "documentation": "Compatibility snapshot. The first call in a revision copies all bytes;\nsubsequent calls reuse that allocation. Prefer indexed slices for views.",
      "signature": "pub fn text (& self) -> & SharedString",
      "cfg": [],
      "target": "EditSnapshot"
    },
    {
      "id": "gpui::editable_text::history::EditCause",
      "name": "EditCause",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::history",
      "path": "gpui::editable_text::history",
      "source": "crates/gpui/src/editable_text/history.rs",
      "summary": "What the reader did, which decides whether an edit joins the step before it and whether it is remembered at all.",
      "documentation": "What the reader did, which decides whether an edit joins the step before\nit and whether it is remembered at all.",
      "signature": "# [doc = \" What the reader did, which decides whether an edit joins the step before\"] # [doc = \" it and whether it is remembered at all.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum EditCause { # [doc = \" Text the reader typed or an input method committed.\"] Typing, # [doc = \" A backspace or a delete.\"] Deleting, # [doc = \" One whole clipboard insertion, which is one step whatever its length.\"] Paste, # [doc = \" A cut, which is a deletion that also left with something.\"] Cut, # [doc = \" The value the host set. It is not the reader's edit, so it ends the\"] # [doc = \" history rather than joining it.\"] Programmatic, # [doc = \" Undo or redo replaying a transaction, which must never record one.\"] Replay, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout",
      "name": "EditableTextLayout",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The shaped geometry of one editable UTF-8 document.",
      "documentation": "The shaped geometry of one editable UTF-8 document.",
      "signature": "# [doc = \" The shaped geometry of one editable UTF-8 document.\"] # [derive (Clone)] pub struct EditableTextLayout { lines : Arc<[Arc<WrappedLine>]>, # [doc = \" Where each hard line starts in the source text.\"] starts : Arc<[usize]>, # [doc = \" The first visual row of each hard line.\"] rows : Arc<[usize]>, total_rows : usize, text_len : usize, line_height : Pixels, source : Option<Rc<SourceLines>>, paint_rows : Option<Range<usize>>, work : Option<EditableTextWork>, width : Pixels, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::bounds_for_range",
      "name": "bounds_for_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "Rectangles occupied by a logical source range, including offscreen rows.",
      "documentation": "Rectangles occupied by a logical source range, including offscreen rows.\n\nWrapped and bidirectional ranges may produce several rectangles. The\nreturned bounds are relative to `origin` and use the same alignment\nand width that the caller will pass to [`WrappedLine::paint`].",
      "signature": "pub fn bounds_for_range (& self, range : Range<usize>, origin : Point<Pixels>, align : TextAlign, align_width : Pixels,) -> Vec<Bounds<Pixels>>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::caret_bounds",
      "name": "caret_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The caret rectangle for an offset, relative to `origin`.",
      "documentation": "The caret rectangle for an offset, relative to `origin`.",
      "signature": "pub fn caret_bounds (& self, offset : usize, origin : Point<Pixels>, width : Pixels,) -> Bounds<Pixels>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::caret_bounds_aligned",
      "name": "caret_bounds_aligned",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The caret rectangle when every hard line uses the given alignment.",
      "documentation": "The caret rectangle when every hard line uses the given alignment.",
      "signature": "pub fn caret_bounds_aligned (& self, offset : usize, origin : Point<Pixels>, width : Pixels, align : TextAlign, align_width : Pixels,) -> Bounds<Pixels>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::enclosing_bounds_for_range",
      "name": "enclosing_bounds_for_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The smallest rectangle containing a logical range.",
      "documentation": "The smallest rectangle containing a logical range.\n\nInput-method and native accessibility APIs often accept one rectangle\neven though wrapped or bidirectional text occupies several. Painting\nshould use [`Self::bounds_for_range`]; this method is the explicit\nlossy projection for those single-rectangle platform boundaries.",
      "signature": "pub fn enclosing_bounds_for_range (& self, range : Range<usize>, origin : Point<Pixels>, align : TextAlign, align_width : Pixels,) -> Bounds<Pixels>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::height",
      "name": "height",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The full shaped document height.",
      "documentation": "The full shaped document height.",
      "signature": "pub fn height (& self) -> Pixels",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::horizontal_scroll_offset_to_reveal",
      "name": "horizontal_scroll_offset_to_reveal",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "A horizontal scroll offset that reveals the caret while moving no more than necessary.",
      "documentation": "A horizontal scroll offset that reveals the caret while moving no\nmore than necessary.",
      "signature": "pub fn horizontal_scroll_offset_to_reveal (& self, offset : usize, viewport_width : Pixels, current : Pixels,) -> Pixels",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "Returns whether this layout represents no source bytes.",
      "documentation": "Returns whether this layout represents no source bytes.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The UTF-8 byte length represented by this layout.",
      "documentation": "The UTF-8 byte length represented by this layout.",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::line_height",
      "name": "line_height",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The line height used to shape and paint every visual row.",
      "documentation": "The line height used to shape and paint every visual row.",
      "signature": "pub fn line_height (& self) -> Pixels",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "Builds document geometry from the shaped hard lines that will paint.",
      "documentation": "Builds document geometry from the shaped hard lines that will paint.",
      "signature": "pub fn new (text : & str, lines : Vec<WrappedLine>, line_height : Pixels) -> Self",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::offset_at_row",
      "name": "offset_at_row",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The offset at an x coordinate on one visual row.",
      "documentation": "The offset at an x coordinate on one visual row.",
      "signature": "pub fn offset_at_row (& self, row : usize, x : Pixels) -> usize",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::offset_at_row_aligned",
      "name": "offset_at_row_aligned",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The offset at an x coordinate on one aligned visual row.",
      "documentation": "The offset at an x coordinate on one aligned visual row.",
      "signature": "pub fn offset_at_row_aligned (& self, row : usize, x : Pixels, align : TextAlign, align_width : Pixels,) -> usize",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::offset_for_position",
      "name": "offset_for_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The UTF-8 offset nearest a point relative to the text origin.",
      "documentation": "The UTF-8 offset nearest a point relative to the text origin.",
      "signature": "pub fn offset_for_position (& self, position : Point<Pixels>) -> usize",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::offset_for_position_aligned",
      "name": "offset_for_position_aligned",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The offset nearest a painted point when every hard line uses the same alignment and width.",
      "documentation": "The offset nearest a painted point when every hard line uses the same\nalignment and width.",
      "signature": "pub fn offset_for_position_aligned (& self, position : Point<Pixels>, align : TextAlign, align_width : Pixels,) -> usize",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::painted_bounds_for_range",
      "name": "painted_bounds_for_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "Selection rectangles limited to rows eligible to paint. Unlike ordinary range geometry, selecting the whole document never shapes hidden rows.",
      "documentation": "Selection rectangles limited to rows eligible to paint. Unlike ordinary\nrange geometry, selecting the whole document never shapes hidden rows.",
      "signature": "pub fn painted_bounds_for_range (& self, mut range : Range<usize>, origin : Point<Pixels>, align : TextAlign, align_width : Pixels,) -> Vec<Bounds<Pixels>>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::painted_lines",
      "name": "painted_lines",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "Where each hard line should be painted relative to the text origin.",
      "documentation": "Where each hard line should be painted relative to the text origin.",
      "signature": "pub fn painted_lines (& self) -> Box<dyn Iterator<Item = (Arc<WrappedLine>, Pixels)> + '_>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::painted_source_ranges",
      "name": "painted_source_ranges",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "Source ranges eligible to paint in this layout. Accessibility geometry collectors can skip unpainted text without losing its logical content.",
      "documentation": "Source ranges eligible to paint in this layout. Accessibility geometry\ncollectors can skip unpainted text without losing its logical content.",
      "signature": "pub fn painted_source_ranges (& self) -> Vec<Range<usize>>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::position_for_offset",
      "name": "position_for_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The top-left position of a UTF-8 byte offset relative to the text origin.",
      "documentation": "The top-left position of a UTF-8 byte offset relative to the text origin.",
      "signature": "pub fn position_for_offset (& self, offset : usize) -> Point<Pixels>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::position_for_offset_aligned",
      "name": "position_for_offset_aligned",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The painted position of an offset when every hard line uses the same alignment and width.",
      "documentation": "The painted position of an offset when every hard line uses the same\nalignment and width.",
      "signature": "pub fn position_for_offset_aligned (& self, offset : usize, align : TextAlign, align_width : Pixels,) -> Point<Pixels>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::row_for_offset",
      "name": "row_for_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The visual row containing a UTF-8 byte offset.",
      "documentation": "The visual row containing a UTF-8 byte offset.",
      "signature": "pub fn row_for_offset (& self, offset : usize) -> usize",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::row_range",
      "name": "row_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The source byte range occupied by a visual row.",
      "documentation": "The source byte range occupied by a visual row.",
      "signature": "pub fn row_range (& self, row : usize) -> Range<usize>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::scroll_offset_to_reveal",
      "name": "scroll_offset_to_reveal",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "A vertical scroll offset that reveals the caret while moving no more than necessary.",
      "documentation": "A vertical scroll offset that reveals the caret while moving no more\nthan necessary.",
      "signature": "pub fn scroll_offset_to_reveal (& self, offset : usize, viewport_height : Pixels, current : Pixels,) -> Pixels",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::set_painted_rows",
      "name": "set_painted_rows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "Restricts painting and painted-range geometry to these visual rows. Logical geometry and native text remain complete. Rows are clamped to the exact index, so this can be applied after scrolling/caret reveal.",
      "documentation": "Restricts painting and painted-range geometry to these visual rows.\nLogical geometry and native text remain complete. Rows are clamped to\nthe exact index, so this can be applied after scrolling/caret reveal.",
      "signature": "pub fn set_painted_rows (& mut self, rows : Range<usize>)",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::shaping_work",
      "name": "shaping_work",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "Shaping performed so far by this layout, including on-demand queries.",
      "documentation": "Shaping performed so far by this layout, including on-demand queries.",
      "signature": "pub fn shaping_work (& self) -> EditableTextWork",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::shares_row_index_with",
      "name": "shares_row_index_with",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "Proves that two layouts share the same logical row index without enumerating source lines. False means unknown, not necessarily unequal. Viewport changes and line height do not change source row boundaries.",
      "documentation": "Proves that two layouts share the same logical row index without\nenumerating source lines. False means unknown, not necessarily unequal.\nViewport changes and line height do not change source row boundaries.",
      "signature": "pub fn shares_row_index_with (& self, other : & Self) -> bool",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::text_width",
      "name": "text_width",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "Width of the widest measured hard line. A lazy no-wrap document reports the maximum of visible and explicitly queried lines, not unseen lines.",
      "documentation": "Width of the widest measured hard line. A lazy no-wrap document reports\nthe maximum of visible and explicitly queried lines, not unseen lines.",
      "signature": "pub fn text_width (& self) -> Pixels",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::total_rows",
      "name": "total_rows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "The number of shaped visual rows, including an empty final row.",
      "documentation": "The number of shaped visual rows, including an empty final row.",
      "signature": "pub fn total_rows (& self) -> usize",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::unwrapped",
      "name": "unwrapped",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "No-wrap document layout with indexed hard lines. Only `visible` rows paint; geometry queries shape other rows lazily through the same text system and style partition, so hit testing and IME never guess widths. `painted_bounds_for_range` limits selection painting to visible rows; ordinary geometry queries address every offset. Soft wrapping uses `new`.",
      "documentation": "No-wrap document layout with indexed hard lines. Only `visible` rows\npaint; geometry queries shape other rows lazily through the same text\nsystem and style partition, so hit testing and IME never guess widths.\n`painted_bounds_for_range` limits selection painting to visible rows;\nordinary geometry queries address every offset. Soft wrapping uses `new`.",
      "signature": "pub fn unwrapped (document : EditSnapshot, text_system : Arc<WindowTextSystem>, font_size : Pixels, line_height : Pixels, runs : Vec<TextRun>, visible : Range<usize>,) -> Self",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::unwrapped_projected",
      "name": "unwrapped_projected",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "No-wrap geometry with omitted complete source lines. `visible` indexes projected rows, not source lines. Painting, hit testing, selections and IME share this mapping; omitted positions map to the preceding displayed row's end, or the first row's start when no predecessor exists. Returns None for a projection of a different source line count.",
      "documentation": "No-wrap geometry with omitted complete source lines. `visible` indexes\nprojected rows, not source lines. Painting, hit testing, selections and\nIME share this mapping; omitted positions map to the preceding displayed\nrow's end, or the first row's start when no predecessor exists. Returns\nNone for a projection of a different source line count.",
      "signature": "pub fn unwrapped_projected (document : EditSnapshot, text_system : Arc<WindowTextSystem>, font_size : Pixels, line_height : Pixels, runs : Vec<TextRun>, visible : Range<usize>, projection : EditableLineProjection,) -> Option<Self>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextLayout::visual_rows",
      "name": "visual_rows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "Source byte ranges for every shaped visual row.",
      "documentation": "Source byte ranges for every shaped visual row.\n\nThe final row of a hard line owns its line break. GPUI shapes hard\nlines separately, but selection and accessibility must retain the\nbreak as one source character on the preceding row.",
      "signature": "pub fn visual_rows (& self, text : & str) -> Vec<Range<usize>>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::EditableTextWork",
      "name": "EditableTextWork",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "Actual shaping input consumed by one layout, including on-demand geometry. Bytes count UTF-8 input, not allocation calls or a guessed glyph count.",
      "documentation": "Actual shaping input consumed by one layout, including on-demand geometry.\nBytes count UTF-8 input, not allocation calls or a guessed glyph count.",
      "signature": "# [doc = \" Actual shaping input consumed by one layout, including on-demand geometry.\"] # [doc = \" Bytes count UTF-8 input, not allocation calls or a guessed glyph count.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub struct EditableTextWork { # [doc = \" Number of hard lines actually passed to the shaper.\"] pub shaped_lines : usize, # [doc = \" Sum of UTF-8 bytes actually passed to the shaper.\"] pub shaped_bytes : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::layout::native::EditableTextLayout::native_base_writing_direction",
      "name": "native_base_writing_direction",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::native",
      "path": "gpui::editable_text::layout::native",
      "source": "crates/gpui/src/editable_text/layout/native.rs",
      "summary": "Resolves the Unicode paragraph base direction. This is a query only: the editable model has no paragraph-direction override to mutate.",
      "documentation": "Resolves the Unicode paragraph base direction. This is a query only:\nthe editable model has no paragraph-direction override to mutate.",
      "signature": "pub fn native_base_writing_direction (& self, text : & str, position : usize,) -> Option<TextWritingDirection>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::native::EditableTextLayout::native_caret_bounds",
      "name": "native_caret_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::native",
      "path": "gpui::editable_text::layout::native",
      "source": "crates/gpui/src/editable_text/layout/native.rs",
      "summary": "Actual cluster-edge caret, using downstream logical affinity at bidi and soft-wrap boundaries. Returns None for an interior ligature stop absent from the shaping result, rather than interpolating its width.",
      "documentation": "Actual cluster-edge caret, using downstream logical affinity at bidi\nand soft-wrap boundaries. Returns None for an interior ligature stop\nabsent from the shaping result, rather than interpolating its width.",
      "signature": "pub fn native_caret_bounds (& self, text : & str, position : usize, origin : Point<Pixels>, width : Pixels, align : TextAlign, align_width : Pixels,) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::native::EditableTextLayout::native_farthest_position",
      "name": "native_farthest_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::native",
      "path": "gpui::editable_text::layout::native",
      "source": "crates/gpui/src/editable_text/layout/native.rs",
      "summary": "The visual extreme among available caret stops inside a UTF-8 range.",
      "documentation": "The visual extreme among available caret stops inside a UTF-8 range.",
      "signature": "pub fn native_farthest_position (& self, text : & str, range : Range<usize>, direction : TextNavigationDirection, align : TextAlign, align_width : Pixels,) -> Option<usize>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::native::EditableTextLayout::native_selection_rects",
      "name": "native_selection_rects",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::native",
      "path": "gpui::editable_text::layout::native",
      "source": "crates/gpui/src/editable_text/layout/native.rs",
      "summary": "Annotated visual fragments for UTF-8 offsets in the exact painted text. Fragments are ordered top-to-bottom, then left-to-right, and never merged across a direction boundary. Partial shaping clusters occupy their complete painted cell; no font ligature caret is fabricated.",
      "documentation": "Annotated visual fragments for UTF-8 offsets in the exact painted text.\nFragments are ordered top-to-bottom, then left-to-right, and never\nmerged across a direction boundary. Partial shaping clusters occupy\ntheir complete painted cell; no font ligature caret is fabricated.",
      "signature": "pub fn native_selection_rects (& self, text : & str, range : Range<usize>, origin : Point<Pixels>, align : TextAlign, align_width : Pixels,) -> Vec<TextSelectionRect>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::native::EditableTextLayout::native_text_position",
      "name": "native_text_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::native",
      "path": "gpui::editable_text::layout::native",
      "source": "crates/gpui/src/editable_text/layout/native.rs",
      "summary": "Moves between actual visual cluster-edge stops, never UTF-16 units. Vertical movement addresses the layout's row index and preserves x across the entire request. Out-of-document movement returns None. This layout paints uniform-height horizontal rows; it does not claim support for a different rich-text layout's variable-height rows.",
      "documentation": "Moves between actual visual cluster-edge stops, never UTF-16 units.\nVertical movement addresses the layout's row index and preserves x\nacross the entire request. Out-of-document movement returns None.\nThis layout paints uniform-height horizontal rows; it does not claim\nsupport for a different rich-text layout's variable-height rows.",
      "signature": "pub fn native_text_position (& self, text : & str, position : usize, direction : TextNavigationDirection, offset : usize, align : TextAlign, align_width : Pixels,) -> Option<usize>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::native::TextNavigationDirection",
      "name": "TextNavigationDirection",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::native",
      "path": "gpui::editable_text::layout::native",
      "source": "crates/gpui/src/editable_text/layout/native.rs",
      "summary": "A physical direction in the painted text coordinate system.",
      "documentation": "A physical direction in the painted text coordinate system.",
      "signature": "# [doc = \" A physical direction in the painted text coordinate system.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum TextNavigationDirection { # [doc = \" Toward decreasing x.\"] Left, # [doc = \" Toward increasing x.\"] Right, # [doc = \" Toward the preceding visual row.\"] Up, # [doc = \" Toward the following visual row.\"] Down, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::layout::native::TextSelectionRect",
      "name": "TextSelectionRect",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::native",
      "path": "gpui::editable_text::layout::native",
      "source": "crates/gpui/src/editable_text/layout/native.rs",
      "summary": "One visual selection fragment in the caller's logical coordinate system.",
      "documentation": "One visual selection fragment in the caller's logical coordinate system.",
      "signature": "# [doc = \" One visual selection fragment in the caller's logical coordinate system.\"] # [derive (Clone, Copy, Debug, PartialEq)] pub struct TextSelectionRect { # [doc = \" Painted fragment bounds, without viewport clipping.\"] pub bounds : Bounds<Pixels>, # [doc = \" Resolved direction of this fragment.\"] pub writing_direction : TextWritingDirection, # [doc = \" This fragment contains the logical start of the selection.\"] pub contains_start : bool, # [doc = \" This fragment contains the logical end of the selection.\"] pub contains_end : bool, # [doc = \" Whether the text is vertically oriented (not merely on another row).\"] pub is_vertical : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::layout::native::TextWritingDirection",
      "name": "TextWritingDirection",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::native",
      "path": "gpui::editable_text::layout::native",
      "source": "crates/gpui/src/editable_text/layout/native.rs",
      "summary": "Resolved horizontal writing direction, not a request to mutate a paragraph.",
      "documentation": "Resolved horizontal writing direction, not a request to mutate a paragraph.",
      "signature": "# [doc = \" Resolved horizontal writing direction, not a request to mutate a paragraph.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum TextWritingDirection { # [doc = \" Logical text advances toward increasing x.\"] LeftToRight, # [doc = \" Logical text advances toward decreasing x.\"] RightToLeft, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::layout::native::affinity::EditableTextLayout::farthest_native_position",
      "name": "farthest_native_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::native::affinity",
      "path": "gpui::editable_text::layout::native::affinity",
      "source": "crates/gpui/src/editable_text/layout/native/affinity.rs",
      "summary": "The actual visual endpoint inside a UTF-16 range, including secondary bidi and wrap affinities omitted by the legacy offset-only projection.",
      "documentation": "The actual visual endpoint inside a UTF-16 range, including secondary\nbidi and wrap affinities omitted by the legacy offset-only projection.",
      "signature": "pub fn farthest_native_position (& self, text : & str, range : Range<usize>, direction : TextNavigationDirection, align : TextAlign, align_width : Pixels,) -> Option<NativeTextPosition>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::native::affinity::EditableTextLayout::native_position_bounds",
      "name": "native_position_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::native::affinity",
      "path": "gpui::editable_text::layout::native::affinity",
      "source": "crates/gpui/src/editable_text/layout/native/affinity.rs",
      "summary": "Resolves either incident caret at a UTF-16 native position. The text must be the exact painted value, including any masking transformation. At document endpoints the sole available edge serves both affinities. Missing intra-ligature carets remain explicitly unavailable. This paint hot path resolves only the incident hard paragraph. Lazy source layouts convert UTF-16 through their document index and never shape unrelated offscreen lines or segment the entire document.",
      "documentation": "Resolves either incident caret at a UTF-16 native position. The text\nmust be the exact painted value, including any masking transformation.\nAt document endpoints the sole available edge serves both affinities.\nMissing intra-ligature carets remain explicitly unavailable.\nThis paint hot path resolves only the incident hard paragraph. Lazy\nsource layouts convert UTF-16 through their document index and never\nshape unrelated offscreen lines or segment the entire document.",
      "signature": "pub fn native_position_bounds (& self, text : & str, position : NativeTextPosition, origin : Point<Pixels>, caret_width : Pixels, align : TextAlign, align_width : Pixels,) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::native::affinity::EditableTextLayout::native_position_for_point",
      "name": "native_position_for_point",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::native::affinity",
      "path": "gpui::editable_text::layout::native::affinity",
      "source": "crates/gpui/src/editable_text/layout/native/affinity.rs",
      "summary": "Nearest actual caret to a point relative to the painted text origin. Optional bounds are UTF-16 offsets in the exact painted text. Candidates are restricted before hit testing; logical clamping after a bidi hit would choose an unrelated visual location. Rows take precedence over horizontal distance. Coincident bidi aliases use the incident cell under the pointer, then downstream affinity as the deterministic tie.",
      "documentation": "Nearest actual caret to a point relative to the painted text origin.\nOptional bounds are UTF-16 offsets in the exact painted text. Candidates\nare restricted before hit testing; logical clamping after a bidi hit\nwould choose an unrelated visual location. Rows take precedence over\nhorizontal distance. Coincident bidi aliases use the incident cell\nunder the pointer, then downstream affinity as the deterministic tie.",
      "signature": "pub fn native_position_for_point (& self, text : & str, position : Point<Pixels>, within_range : Option<Range<usize>>, align : TextAlign, align_width : Pixels,) -> Option<NativeTextPosition>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::native::affinity::EditableTextLayout::native_position_in_direction",
      "name": "native_position_in_direction",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::native::affinity",
      "path": "gpui::editable_text::layout::native::affinity",
      "source": "crates/gpui/src/editable_text/layout/native/affinity.rs",
      "summary": "Moves through physical caret edges while retaining bidi and soft-wrap affinity. Horizontal steps cross one distinct visual location; aliases at the same location do not consume a step. The arriving cluster's edge determines the result affinity, so opposite travel can select different logical aliases at a bidi boundary. Vertical steps preserve the initial x across exact visual rows. All native offsets are UTF-16, not bytes.",
      "documentation": "Moves through physical caret edges while retaining bidi and soft-wrap\naffinity. Horizontal steps cross one distinct visual location; aliases\nat the same location do not consume a step. The arriving cluster's edge\ndetermines the result affinity, so opposite travel can select different\nlogical aliases at a bidi boundary. Vertical steps preserve the initial\nx across exact visual rows. All native offsets are UTF-16, not bytes.",
      "signature": "pub fn native_position_in_direction (& self, text : & str, position : NativeTextPosition, direction : TextNavigationDirection, offset : usize, align : TextAlign, align_width : Pixels,) -> Option<NativeTextPosition>",
      "cfg": [],
      "target": "EditableTextLayout"
    },
    {
      "id": "gpui::editable_text::layout::reexport-1",
      "name": "native :: { TextNavigationDirection , TextSelectionRect , TextWritingDirection }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use native::{ TextNavigationDirection, TextSelectionRect, TextWritingDirection };",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::layout::reexport-2",
      "name": "wrapped :: EditableWrappedCache",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout",
      "path": "gpui::editable_text::layout",
      "source": "crates/gpui/src/editable_text/layout.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use wrapped::EditableWrappedCache;",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::layout::wrapped::EditableWrappedCache",
      "name": "EditableWrappedCache",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::wrapped",
      "path": "gpui::editable_text::layout::wrapped",
      "source": "crates/gpui/src/editable_text/layout/wrapped.rs",
      "summary": "Retains exact hard-paragraph layouts for one editable surface. Initial layout and width/font changes shape every paragraph; later edits shape only changed paragraphs or changed style partitions. Static/scroll updates reuse the complete row index. A text edit still rebuilds line-index metadata, and a single exceptionally long paragraph is still one shaping input.",
      "documentation": "Retains exact hard-paragraph layouts for one editable surface. Initial\nlayout and width/font changes shape every paragraph; later edits shape only\nchanged paragraphs or changed style partitions. Static/scroll updates reuse\nthe complete row index. A text edit still rebuilds line-index metadata, and\na single exceptionally long paragraph is still one shaping input.",
      "signature": "# [doc = \" Retains exact hard-paragraph layouts for one editable surface. Initial\"] # [doc = \" layout and width/font changes shape every paragraph; later edits shape only\"] # [doc = \" changed paragraphs or changed style partitions. Static/scroll updates reuse\"] # [doc = \" the complete row index. A text edit still rebuilds line-index metadata, and\"] # [doc = \" a single exceptionally long paragraph is still one shaping input.\"] # [derive (Default)] pub struct EditableWrappedCache { state : Option<State>, indexed_lines : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::layout::wrapped::EditableWrappedCache::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::wrapped",
      "path": "gpui::editable_text::layout::wrapped",
      "source": "crates/gpui/src/editable_text/layout/wrapped.rs",
      "summary": "Drops retained layouts, for example after the host changes available font faces without changing the requested font/style identities.",
      "documentation": "Drops retained layouts, for example after the host changes available\nfont faces without changing the requested font/style identities.",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "EditableWrappedCache"
    },
    {
      "id": "gpui::editable_text::layout::wrapped::EditableWrappedCache::indexed_lines",
      "name": "indexed_lines",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::wrapped",
      "path": "gpui::editable_text::layout::wrapped",
      "source": "crates/gpui/src/editable_text/layout/wrapped.rs",
      "summary": "Number of hard-line metadata entries built by the most recent update. Separate from `EditableTextLayout::shaping_work`: an edit may reuse almost every shaped paragraph while rebuilding the exact row index.",
      "documentation": "Number of hard-line metadata entries built by the most recent update.\nSeparate from `EditableTextLayout::shaping_work`: an edit may reuse\nalmost every shaped paragraph while rebuilding the exact row index.",
      "signature": "pub fn indexed_lines (& self) -> usize",
      "cfg": [],
      "target": "EditableWrappedCache"
    },
    {
      "id": "gpui::editable_text::layout::wrapped::EditableWrappedCache::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::layout::wrapped",
      "path": "gpui::editable_text::layout::wrapped",
      "source": "crates/gpui/src/editable_text/layout/wrapped.rs",
      "summary": "Updates exact wrapping with the same text system and byte-style partition used to paint. Viewport restriction is applied afterward via `EditableTextLayout::set_painted_rows`, including after caret reveal.",
      "documentation": "Updates exact wrapping with the same text system and byte-style\npartition used to paint. Viewport restriction is applied afterward via\n`EditableTextLayout::set_painted_rows`, including after caret reveal.",
      "signature": "pub fn update (& mut self, document : EditSnapshot, text_system : Arc<WindowTextSystem>, font_size : Pixels, line_height : Pixels, runs : Vec<TextRun>, width : Pixels,) -> EditableTextLayout",
      "cfg": [],
      "target": "EditableWrappedCache"
    },
    {
      "id": "gpui::editable_text::native_position::NativeTextPosition",
      "name": "NativeTextPosition",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::native_position",
      "path": "gpui::editable_text::native_position",
      "source": "crates/gpui/src/editable_text/native_position.rs",
      "summary": "A UTF-16 position and its visual affinity. Offsets alone do not identify a unique painted caret at bidi and soft-wrap boundaries.",
      "documentation": "A UTF-16 position and its visual affinity. Offsets alone do not identify\na unique painted caret at bidi and soft-wrap boundaries.",
      "signature": "# [doc = \" A UTF-16 position and its visual affinity. Offsets alone do not identify\"] # [doc = \" a unique painted caret at bidi and soft-wrap boundaries.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq, Hash)] pub struct NativeTextPosition { # [doc = \" UTF-16 code units from the beginning of the caller's text.\"] pub utf16_offset : usize, # [doc = \" Incident logical edge used for this caret.\"] pub affinity : TextAffinity, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::native_position::NativeTextSelection",
      "name": "NativeTextSelection",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::native_position",
      "path": "gpui::editable_text::native_position",
      "source": "crates/gpui/src/editable_text/native_position.rs",
      "summary": "Atomic primary selection, retaining both visual endpoints even when their logical offsets coincide. Secondary cursors use the legacy logical policy.",
      "documentation": "Atomic primary selection, retaining both visual endpoints even when their\nlogical offsets coincide. Secondary cursors use the legacy logical policy.",
      "signature": "# [doc = \" Atomic primary selection, retaining both visual endpoints even when their\"] # [doc = \" logical offsets coincide. Secondary cursors use the legacy logical policy.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub struct NativeTextSelection { # [doc = \" The fixed endpoint of the primary selection.\"] pub anchor : NativeTextPosition, # [doc = \" The moving endpoint of the primary selection.\"] pub head : NativeTextPosition, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::native_position::TextAffinity",
      "name": "TextAffinity",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::native_position",
      "path": "gpui::editable_text::native_position",
      "source": "crates/gpui/src/editable_text/native_position.rs",
      "summary": "Which incident logical text owns a caret at a bidi or soft-wrap boundary.",
      "documentation": "Which incident logical text owns a caret at a bidi or soft-wrap boundary.",
      "signature": "# [doc = \" Which incident logical text owns a caret at a bidi or soft-wrap boundary.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq, Hash)] pub enum TextAffinity { # [doc = \" The trailing edge of the preceding logical text.\"] Upstream, # [doc = \" The leading edge of the following logical text. Legacy offset-only\"] # [doc = \" APIs use this affinity explicitly.\"] # [default] Downstream, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::next_grapheme_boundary",
      "name": "next_grapheme_boundary",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "Returns the following extended-grapheme boundary.",
      "documentation": "Returns the following extended-grapheme boundary.",
      "signature": "pub fn next_grapheme_boundary (text : & str, offset : usize) -> usize",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::next_word_boundary",
      "name": "next_word_boundary",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "Returns the end of the following non-whitespace word segment.",
      "documentation": "Returns the end of the following non-whitespace word segment.",
      "signature": "pub fn next_word_boundary (text : & str, offset : usize) -> usize",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::normalize_multiline",
      "name": "normalize_multiline",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "Normalizes CRLF and CR hard breaks to line feeds.",
      "documentation": "Normalizes CRLF and CR hard breaks to line feeds.",
      "signature": "pub fn normalize_multiline (text : & str) -> String",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::normalize_single_line",
      "name": "normalize_single_line",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "Normalizes hard breaks to spaces for a one-line editable value.",
      "documentation": "Normalizes hard breaks to spaces for a one-line editable value.",
      "signature": "pub fn normalize_single_line (text : & str) -> String",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::offset_from_utf16",
      "name": "offset_from_utf16",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "Converts a UTF-16 code-unit offset to a UTF-8 byte offset.",
      "documentation": "Converts a UTF-16 code-unit offset to a UTF-8 byte offset.",
      "signature": "pub fn offset_from_utf16 (text : & str, offset : usize) -> usize",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::offset_to_utf16",
      "name": "offset_to_utf16",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "Converts a UTF-8 byte offset to a UTF-16 code-unit offset.",
      "documentation": "Converts a UTF-8 byte offset to a UTF-16 code-unit offset.",
      "signature": "pub fn offset_to_utf16 (text : & str, offset : usize) -> usize",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::paragraph_at",
      "name": "paragraph_at",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "The paragraph surrounding an offset: everything between two hard breaks.",
      "documentation": "The paragraph surrounding an offset: everything between two hard breaks.",
      "signature": "pub fn paragraph_at (text : & str, offset : usize) -> Range<usize>",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::previous_grapheme_boundary",
      "name": "previous_grapheme_boundary",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "Returns the preceding extended-grapheme boundary.",
      "documentation": "Returns the preceding extended-grapheme boundary.",
      "signature": "pub fn previous_grapheme_boundary (text : & str, offset : usize) -> usize",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::previous_word_boundary",
      "name": "previous_word_boundary",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "Returns the beginning of the preceding non-whitespace word segment.",
      "documentation": "Returns the beginning of the preceding non-whitespace word segment.",
      "signature": "pub fn previous_word_boundary (text : & str, offset : usize) -> usize",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::projection::EditableLineProjection",
      "name": "EditableLineProjection",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::projection",
      "path": "gpui::editable_text::projection",
      "source": "crates/gpui/src/editable_text/projection.rs",
      "summary": "An immutable source-line ↔ displayed-row mapping. Omitted source remains in the document; this changes geometry, never editing coordinates or text.",
      "documentation": "An immutable source-line ↔ displayed-row mapping. Omitted source remains\nin the document; this changes geometry, never editing coordinates or text.",
      "signature": "# [doc = \" An immutable source-line ↔ displayed-row mapping. Omitted source remains\"] # [doc = \" in the document; this changes geometry, never editing coordinates or text.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct EditableLineProjection { source_lines : usize, rows : usize, spans : Arc<[Span]>, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::projection::EditableLineProjection::contains",
      "name": "contains",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::projection",
      "path": "gpui::editable_text::projection",
      "source": "crates/gpui/src/editable_text/projection.rs",
      "summary": "Whether a source line has its own displayed row.",
      "documentation": "Whether a source line has its own displayed row.",
      "signature": "pub fn contains (& self, line : usize) -> bool",
      "cfg": [],
      "target": "EditableLineProjection"
    },
    {
      "id": "gpui::editable_text::projection::EditableLineProjection::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::projection",
      "path": "gpui::editable_text::projection",
      "source": "crates/gpui/src/editable_text/projection.rs",
      "summary": "Builds an identity or omitted-line projection. Ranges are zero-based, half-open source-line indices. Overlap/nesting is unioned. Invalid bounds, an empty document line index, or hiding every line are refused.",
      "documentation": "Builds an identity or omitted-line projection. Ranges are zero-based,\nhalf-open source-line indices. Overlap/nesting is unioned. Invalid\nbounds, an empty document line index, or hiding every line are refused.",
      "signature": "pub fn new (source_lines : usize, omitted : impl IntoIterator<Item = Range<usize>>,) -> Option<Self>",
      "cfg": [],
      "target": "EditableLineProjection"
    },
    {
      "id": "gpui::editable_text::projection::EditableLineProjection::row",
      "name": "row",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::projection",
      "path": "gpui::editable_text::projection",
      "source": "crates/gpui/src/editable_text/projection.rs",
      "summary": "Displayed row for a source line. Omitted lines map to the preceding displayed row, or row zero when the omitted range precedes all content.",
      "documentation": "Displayed row for a source line. Omitted lines map to the preceding\ndisplayed row, or row zero when the omitted range precedes all content.",
      "signature": "pub fn row (& self, line : usize) -> usize",
      "cfg": [],
      "target": "EditableLineProjection"
    },
    {
      "id": "gpui::editable_text::projection::EditableLineProjection::rows",
      "name": "rows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::projection",
      "path": "gpui::editable_text::projection",
      "source": "crates/gpui/src/editable_text/projection.rs",
      "summary": "Number of displayed hard rows after omissions.",
      "documentation": "Number of displayed hard rows after omissions.",
      "signature": "pub fn rows (& self) -> usize",
      "cfg": [],
      "target": "EditableLineProjection"
    },
    {
      "id": "gpui::editable_text::projection::EditableLineProjection::source_line",
      "name": "source_line",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::projection",
      "path": "gpui::editable_text::projection",
      "source": "crates/gpui/src/editable_text/projection.rs",
      "summary": "Source line for a displayed row, clamped at the last displayed row.",
      "documentation": "Source line for a displayed row, clamped at the last displayed row.",
      "signature": "pub fn source_line (& self, row : usize) -> usize",
      "cfg": [],
      "target": "EditableLineProjection"
    },
    {
      "id": "gpui::editable_text::projection::EditableLineProjection::source_lines",
      "name": "source_lines",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::projection",
      "path": "gpui::editable_text::projection",
      "source": "crates/gpui/src/editable_text/projection.rs",
      "summary": "Number of source hard lines, including an empty final line.",
      "documentation": "Number of source hard lines, including an empty final line.",
      "signature": "pub fn source_lines (& self) -> usize",
      "cfg": [],
      "target": "EditableLineProjection"
    },
    {
      "id": "gpui::editable_text::range_from_utf16",
      "name": "range_from_utf16",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "Converts a UTF-16 code-unit range to UTF-8 byte offsets.",
      "documentation": "Converts a UTF-16 code-unit range to UTF-8 byte offsets.",
      "signature": "pub fn range_from_utf16 (text : & str, range_utf16 : & Range<usize>) -> Range<usize>",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::range_to_utf16",
      "name": "range_to_utf16",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "Converts a UTF-8 byte range to UTF-16 code-unit offsets.",
      "documentation": "Converts a UTF-8 byte range to UTF-16 code-unit offsets.",
      "signature": "pub fn range_to_utf16 (text : & str, range : & Range<usize>) -> Range<usize>",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::reexport-1",
      "name": "buffer :: { EditBuffer , EditOutcome , EditRules }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use buffer::{ EditBuffer, EditOutcome, EditRules };",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::reexport-2",
      "name": "document :: { EditDifference , EditSnapshot }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use document::{ EditDifference, EditSnapshot };",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::reexport-3",
      "name": "history :: EditCause",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use history::EditCause;",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::reexport-4",
      "name": "layout :: { EditableTextLayout , EditableTextWork , EditableWrappedCache , TextNavigationDirection , TextSelectionRect , TextWritingDirection , }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use layout::{ EditableTextLayout, EditableTextWork, EditableWrappedCache, TextNavigationDirection, TextSelectionRect, TextWritingDirection, };",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::reexport-5",
      "name": "native_position :: { NativeTextPosition , NativeTextSelection , TextAffinity }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use native_position::{ NativeTextPosition, NativeTextSelection, TextAffinity };",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::reexport-6",
      "name": "projection :: EditableLineProjection",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use projection::EditableLineProjection;",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::reexport-7",
      "name": "style_runs :: { EditableStyleRun , EditableStyleRuns }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use style_runs::{ EditableStyleRun, EditableStyleRuns };",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::style_runs::EditableStyleRun",
      "name": "EditableStyleRun",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::style_runs",
      "path": "gpui::editable_text::style_runs",
      "source": "crates/gpui/src/editable_text/style_runs.rs",
      "summary": "One contiguous style run. Its length is measured in UTF-8 bytes.",
      "documentation": "One contiguous style run. Its length is measured in UTF-8 bytes.",
      "signature": "# [doc = \" One contiguous style run. Its length is measured in UTF-8 bytes.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct EditableStyleRun<S> { # [doc = \" The number of source bytes carrying this style.\"] pub len : usize, # [doc = \" Product-neutral style metadata owned by the caller.\"] pub style : S, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::style_runs::EditableStyleRuns",
      "name": "EditableStyleRuns",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::style_runs",
      "path": "gpui::editable_text::style_runs",
      "source": "crates/gpui/src/editable_text/style_runs.rs",
      "summary": "Complete, normalized style coverage for an editable UTF-8 string.",
      "documentation": "Complete, normalized style coverage for an editable UTF-8 string.\n\nRuns never overlap, adjacent equal styles are merged, and their lengths\nalways sum to the associated text length. The collection does not own the\ntext or decide what a style means; rich text, syntax highlighting, and\ndiagnostics can each supply their own style vocabulary.",
      "signature": "# [doc = \" Complete, normalized style coverage for an editable UTF-8 string.\"] # [doc = \"\"] # [doc = \" Runs never overlap, adjacent equal styles are merged, and their lengths\"] # [doc = \" always sum to the associated text length. The collection does not own the\"] # [doc = \" text or decide what a style means; rich text, syntax highlighting, and\"] # [doc = \" diagnostics can each supply their own style vocabulary.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct EditableStyleRuns<S> { default_style : S, len : usize, runs : Vec<EditableStyleRun<S>>, }",
      "cfg": []
    },
    {
      "id": "gpui::editable_text::style_runs::EditableStyleRuns::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::style_runs",
      "path": "gpui::editable_text::style_runs",
      "source": "crates/gpui/src/editable_text/style_runs.rs",
      "summary": "Returns whether the associated text is empty.",
      "documentation": "Returns whether the associated text is empty.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "EditableStyleRuns<S>"
    },
    {
      "id": "gpui::editable_text::style_runs::EditableStyleRuns::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::style_runs",
      "path": "gpui::editable_text::style_runs",
      "source": "crates/gpui/src/editable_text/style_runs.rs",
      "summary": "The UTF-8 byte length covered by these runs.",
      "documentation": "The UTF-8 byte length covered by these runs.",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "EditableStyleRuns<S>"
    },
    {
      "id": "gpui::editable_text::style_runs::EditableStyleRuns::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::style_runs",
      "path": "gpui::editable_text::style_runs",
      "source": "crates/gpui/src/editable_text/style_runs.rs",
      "summary": "Covers `text` with one initial style.",
      "documentation": "Covers `text` with one initial style.",
      "signature": "pub fn new (text : & str, style : S) -> Self",
      "cfg": [],
      "target": "EditableStyleRuns<S>"
    },
    {
      "id": "gpui::editable_text::style_runs::EditableStyleRuns::replace",
      "name": "replace",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::style_runs",
      "path": "gpui::editable_text::style_runs",
      "source": "crates/gpui/src/editable_text/style_runs.rs",
      "summary": "Follows one grapheme-safe replacement from `text_before` to the text obtained by inserting `replacement` at `range`.",
      "documentation": "Follows one grapheme-safe replacement from `text_before` to the text\nobtained by inserting `replacement` at `range`.\n\nInserted text inherits the style at the replacement start, or the\npreceding style when appending. An empty document uses its remembered\ndefault style, including a style set at an empty caret.",
      "signature": "pub fn replace (& mut self, text_before : & str, range : Range<usize>, replacement : & str)",
      "cfg": [],
      "target": "EditableStyleRuns<S>"
    },
    {
      "id": "gpui::editable_text::style_runs::EditableStyleRuns::runs",
      "name": "runs",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::style_runs",
      "path": "gpui::editable_text::style_runs",
      "source": "crates/gpui/src/editable_text/style_runs.rs",
      "summary": "The normalized runs in source order.",
      "documentation": "The normalized runs in source order.",
      "signature": "pub fn runs (& self) -> & [EditableStyleRun<S>]",
      "cfg": [],
      "target": "EditableStyleRuns<S>"
    },
    {
      "id": "gpui::editable_text::style_runs::EditableStyleRuns::set",
      "name": "set",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::style_runs",
      "path": "gpui::editable_text::style_runs",
      "source": "crates/gpui/src/editable_text/style_runs.rs",
      "summary": "Applies a style to a grapheme-safe source range.",
      "documentation": "Applies a style to a grapheme-safe source range.",
      "signature": "pub fn set (& mut self, text : & str, range : Range<usize>, style : S)",
      "cfg": [],
      "target": "EditableStyleRuns<S>"
    },
    {
      "id": "gpui::editable_text::style_runs::EditableStyleRuns::style_at",
      "name": "style_at",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text::style_runs",
      "path": "gpui::editable_text::style_runs",
      "source": "crates/gpui/src/editable_text/style_runs.rs",
      "summary": "The style at a source offset, preferring the preceding character at the end of the document.",
      "documentation": "The style at a source offset, preferring the preceding character at\nthe end of the document.",
      "signature": "pub fn style_at (& self, offset : usize) -> & S",
      "cfg": [],
      "target": "EditableStyleRuns<S>"
    },
    {
      "id": "gpui::editable_text::word_at",
      "name": "word_at",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "editable_text",
      "path": "gpui::editable_text",
      "source": "crates/gpui/src/editable_text/mod.rs",
      "summary": "The word surrounding an offset, for a double click.",
      "documentation": "The word surrounding an offset, for a double click.\n\nAn offset that falls on whitespace selects that whitespace run, which is\nwhat a double click between two words does elsewhere.",
      "signature": "pub fn word_at (text : & str, offset : usize) -> Range<usize>",
      "cfg": []
    },
    {
      "id": "gpui::effect_owner::App::current_effect_owner",
      "name": "current_effect_owner",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "The explicitly scoped owner, never inferred from focus or current view.",
      "documentation": "The explicitly scoped owner, never inferred from focus or current view.",
      "signature": "pub fn current_effect_owner (& self) -> Option<EffectOwner>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::effect_owner::App::set_clipboard_policy",
      "name": "set_clipboard_policy",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "Installs host policy. Missing owners fail closed; native gestures do not bypass it. Ordinary apps without policy keep platform behavior.",
      "documentation": "Installs host policy. Missing owners fail closed; native gestures do\nnot bypass it. Ordinary apps without policy keep platform behavior.",
      "signature": "pub fn set_clipboard_policy (& mut self, policy : impl Fn (EffectOwner, ClipboardOperation) -> bool + 'static,)",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::effect_owner::App::try_read_from_clipboard",
      "name": "try_read_from_clipboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "Reads the clipboard, distinguishing refusal from an empty value.",
      "documentation": "Reads the clipboard, distinguishing refusal from an empty value.",
      "signature": "pub fn try_read_from_clipboard (& self) -> Result<Option<ClipboardItem>, ClipboardDenied>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::effect_owner::App::try_read_from_find_pasteboard",
      "name": "try_read_from_find_pasteboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "Reads the find pasteboard, distinguishing refusal from empty.",
      "documentation": "Reads the find pasteboard, distinguishing refusal from empty.",
      "signature": "pub fn try_read_from_find_pasteboard (& self) -> Result<Option<ClipboardItem>, ClipboardDenied>",
      "cfg": [
        "cfg (target_os = \"macos\")"
      ],
      "target": "App"
    },
    {
      "id": "gpui::effect_owner::App::try_read_from_primary",
      "name": "try_read_from_primary",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "Reads primary selection, distinguishing refusal from empty.",
      "documentation": "Reads primary selection, distinguishing refusal from empty.",
      "signature": "pub fn try_read_from_primary (& self) -> Result<Option<ClipboardItem>, ClipboardDenied>",
      "cfg": [
        "cfg (any (target_os = \"linux\", target_os = \"freebsd\"))"
      ],
      "target": "App"
    },
    {
      "id": "gpui::effect_owner::App::try_write_to_clipboard",
      "name": "try_write_to_clipboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "Writes only if the current owner's host policy permits the operation.",
      "documentation": "Writes only if the current owner's host policy permits the operation.",
      "signature": "pub fn try_write_to_clipboard (& self, item : ClipboardItem) -> Result<(), ClipboardDenied>",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::effect_owner::App::try_write_to_find_pasteboard",
      "name": "try_write_to_find_pasteboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "Writes the find pasteboard only after host permission.",
      "documentation": "Writes the find pasteboard only after host permission.",
      "signature": "pub fn try_write_to_find_pasteboard (& self, item : ClipboardItem) -> Result<(), ClipboardDenied>",
      "cfg": [
        "cfg (target_os = \"macos\")"
      ],
      "target": "App"
    },
    {
      "id": "gpui::effect_owner::App::try_write_to_primary",
      "name": "try_write_to_primary",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "Writes primary selection only after host permission.",
      "documentation": "Writes primary selection only after host permission.",
      "signature": "pub fn try_write_to_primary (& self, item : ClipboardItem) -> Result<(), ClipboardDenied>",
      "cfg": [
        "cfg (any (target_os = \"linux\", target_os = \"freebsd\"))"
      ],
      "target": "App"
    },
    {
      "id": "gpui::effect_owner::App::with_effect_owner",
      "name": "with_effect_owner",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "Runs a synchronous scope with an explicit owner (or without authority). Restores the previous context even when the callback unwinds.",
      "documentation": "Runs a synchronous scope with an explicit owner (or without authority).\nRestores the previous context even when the callback unwinds.",
      "signature": "pub fn with_effect_owner<R> (& mut self, owner : Option<EffectOwner>, f : impl FnOnce (& mut App) -> R,) -> R",
      "cfg": [],
      "target": "App"
    },
    {
      "id": "gpui::effect_owner::ClipboardDenied",
      "name": "ClipboardDenied",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "A host refused access; distinct from an empty clipboard.",
      "documentation": "A host refused access; distinct from an empty clipboard.",
      "signature": "# [doc = \" A host refused access; distinct from an empty clipboard.\"] # [derive (Clone, Copy, Debug, Eq, PartialEq, thiserror::Error)] pub enum ClipboardDenied { # [doc = \" Policy is enabled but no owner was explicitly retained.\"] # [error (\"clipboard operation has no effect owner\")] MissingOwner, # [doc = \" The host refused the owner's operation, including stale identities.\"] # [error (\"clipboard operation denied by host\")] Denied, }",
      "cfg": []
    },
    {
      "id": "gpui::effect_owner::ClipboardOperation",
      "name": "ClipboardOperation",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "The clipboard effect requested by a native component.",
      "documentation": "The clipboard effect requested by a native component.",
      "signature": "# [doc = \" The clipboard effect requested by a native component.\"] # [derive (Clone, Copy, Debug, Eq, PartialEq, Hash)] pub enum ClipboardOperation { # [doc = \" Read the ordinary clipboard.\"] Read, # [doc = \" Write the ordinary clipboard.\"] Write, # [doc = \" Read the primary selection (Linux/FreeBSD).\"] ReadPrimary, # [doc = \" Write the primary selection (Linux/FreeBSD).\"] WritePrimary, # [doc = \" Read the find pasteboard (macOS).\"] ReadFind, # [doc = \" Write the find pasteboard (macOS).\"] WriteFind, }",
      "cfg": []
    },
    {
      "id": "gpui::effect_owner::EffectOwner",
      "name": "EffectOwner",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "Opaque host identity. A fresh token never reuses an earlier generation.",
      "documentation": "Opaque host identity. A fresh token never reuses an earlier generation.",
      "signature": "# [doc = \" Opaque host identity. A fresh token never reuses an earlier generation.\"] # [derive (Clone, Copy, Debug, Eq, PartialEq, Hash)] pub struct EffectOwner (u64);",
      "cfg": []
    },
    {
      "id": "gpui::effect_owner::EffectOwner::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "Allocates a fresh identity. Keep it for the lifetime of one host owner.",
      "documentation": "Allocates a fresh identity. Keep it for the lifetime of one host owner.",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "EffectOwner"
    },
    {
      "id": "gpui::effect_owner::EffectOwnerElement",
      "name": "EffectOwnerElement",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "An inherited authority boundary with no layout or semantic identity of its own.",
      "documentation": "An inherited authority boundary with no layout or semantic identity of its own.",
      "signature": "# [doc = \" An inherited authority boundary with no layout or semantic identity of its own.\"] pub struct EffectOwnerElement { owner : Option<EffectOwner>, child : AnyElement, }",
      "cfg": []
    },
    {
      "id": "gpui::effect_owner::EffectScoped",
      "name": "EffectScoped",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "A typed child whose owner survives container transformations until render.",
      "documentation": "A typed child whose owner survives container transformations until render.\n\nContainers retain this wrapper instead of erasing a child into an element\nearly. Transform a child's options with `map`; inspect them with `as_ref`.\nPlain values converted with `From` inherit the eventual parent's context.",
      "signature": "# [doc = \" A typed child whose owner survives container transformations until render.\"] # [doc = \"\"] # [doc = \" Containers retain this wrapper instead of erasing a child into an element\"] # [doc = \" early. Transform a child's options with `map`; inspect them with `as_ref`.\"] # [doc = \" Plain values converted with `From` inherit the eventual parent's context.\"] # [derive (Clone, Debug)] pub struct EffectScoped<T> { owner : Option<EffectOwner>, value : T, }",
      "cfg": []
    },
    {
      "id": "gpui::effect_owner::EffectScoped::map",
      "name": "map",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "Transforms a typed value without discarding its scope.",
      "documentation": "Transforms a typed value without discarding its scope.",
      "signature": "pub fn map<U> (self, transform : impl FnOnce (T) -> U) -> EffectScoped<U>",
      "cfg": [],
      "target": "EffectScoped<T>"
    },
    {
      "id": "gpui::effect_owner::EffectScoped::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "Attributes the child's eventual element lifecycle to this mount owner.",
      "documentation": "Attributes the child's eventual element lifecycle to this mount owner.",
      "signature": "pub fn new (owner : EffectOwner, value : T) -> Self",
      "cfg": [],
      "target": "EffectScoped<T>"
    },
    {
      "id": "gpui::effect_owner::effect_owner",
      "name": "effect_owner",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "effect_owner",
      "path": "gpui::effect_owner",
      "source": "crates/gpui/src/effect_owner.rs",
      "summary": "Attributes a subtree's native effects to the host-supplied opaque owner.",
      "documentation": "Attributes a subtree's native effects to the host-supplied opaque owner.",
      "signature": "pub fn effect_owner (owner : EffectOwner, child : impl IntoElement) -> EffectOwnerElement",
      "cfg": []
    },
    {
      "id": "gpui::element::AccessibilityRelationship",
      "name": "AccessibilityRelationship",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "A non-topological relationship between two accessibility nodes.",
      "documentation": "A non-topological relationship between two accessibility nodes.\n\nThe referenced [`ElementId`] must identify exactly one role-bearing element\nin the active window. Unlike layout parentage, relationships are resolved\nafter every ordinary and deferred subtree has prepainted, so either endpoint\nmay appear first. An absent or ambiguous endpoint omits the relationship for\nthat frame instead of retaining a stale node id.",
      "signature": "# [doc = \" A non-topological relationship between two accessibility nodes.\"] # [doc = \"\"] # [doc = \" The referenced [`ElementId`] must identify exactly one role-bearing element\"] # [doc = \" in the active window. Unlike layout parentage, relationships are resolved\"] # [doc = \" after every ordinary and deferred subtree has prepainted, so either endpoint\"] # [doc = \" may appear first. An absent or ambiguous endpoint omits the relationship for\"] # [doc = \" that frame instead of retaining a stale node id.\"] # [derive (Clone, Debug, Eq, PartialEq)] pub enum AccessibilityRelationship { # [doc = \" The current node is named by the referenced node.\"] LabelledBy (ElementId), # [doc = \" The current node is described by the referenced node.\"] DescribedBy (ElementId), # [doc = \" The current node names the referenced node.\"] Labels (ElementId), # [doc = \" The current node describes the referenced node.\"] Describes (ElementId), # [doc = \" The current node is the active descendant of the referenced focused\"] # [doc = \" composite, even when an overlay places the two in separate subtrees.\"] ActiveDescendantOf (ElementId), }",
      "cfg": []
    },
    {
      "id": "gpui::element::AnyElement",
      "name": "AnyElement",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "A dynamically typed element that can be used to store any element type.",
      "documentation": "A dynamically typed element that can be used to store any element type.",
      "signature": "# [doc = \" A dynamically typed element that can be used to store any element type.\"] pub struct AnyElement (ArenaBox<dyn ElementObject>);",
      "cfg": []
    },
    {
      "id": "gpui::element::AnyElement::downcast_mut",
      "name": "downcast_mut",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "Attempt to downcast a reference to the boxed element to a specific type.",
      "documentation": "Attempt to downcast a reference to the boxed element to a specific type.",
      "signature": "pub fn downcast_mut<T : 'static> (& mut self) -> Option<& mut T>",
      "cfg": [],
      "target": "AnyElement"
    },
    {
      "id": "gpui::element::AnyElement::layout_as_root",
      "name": "layout_as_root",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "Performs layout for this element within the given available space and returns its size.",
      "documentation": "Performs layout for this element within the given available space and returns its size.",
      "signature": "pub fn layout_as_root (& mut self, available_space : Size<AvailableSpace>, window : & mut Window, cx : & mut App,) -> Size<Pixels>",
      "cfg": [],
      "target": "AnyElement"
    },
    {
      "id": "gpui::element::AnyElement::layout_as_root_with_size",
      "name": "layout_as_root_with_size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "Lay out this root with assigned border-box dimensions, independently of available space. For this invocation, authored root width, height, min/max size and aspect ratio are overridden; descendants reflow using their normal styles. Subsequent natural measurement restores the authored root style, including within the same frame.",
      "documentation": "Lay out this root with assigned border-box dimensions, independently\nof available space. For this invocation, authored root width, height,\nmin/max size and aspect ratio are overridden; descendants reflow using\ntheir normal styles. Subsequent natural measurement restores the authored\nroot style, including within the same frame.\n\nDimensions must be finite and nonnegative. Padding and borders are not\nremoved: if they cannot fit, the layout engine may enlarge the box.\nThe return value is the actual laid-out size, including device-pixel\nrounding, not a promise that impossible dimensions were honored.",
      "signature": "pub fn layout_as_root_with_size (& mut self, available_space : Size<AvailableSpace>, assigned_size : Size<Pixels>, window : & mut Window, cx : & mut App,) -> Size<Pixels>",
      "cfg": [],
      "target": "AnyElement"
    },
    {
      "id": "gpui::element::AnyElement::paint",
      "name": "paint",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "Paints the element stored in this `AnyElement`.",
      "documentation": "Paints the element stored in this `AnyElement`.",
      "signature": "pub fn paint (& mut self, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "AnyElement"
    },
    {
      "id": "gpui::element::AnyElement::prepaint",
      "name": "prepaint",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "Prepares the element to be painted by storing its bounds, giving it a chance to draw hitboxes and request autoscroll before the final paint pass is confirmed.",
      "documentation": "Prepares the element to be painted by storing its bounds, giving it a chance to draw hitboxes and\nrequest autoscroll before the final paint pass is confirmed.",
      "signature": "pub fn prepaint (& mut self, window : & mut Window, cx : & mut App) -> Option<FocusHandle>",
      "cfg": [],
      "target": "AnyElement"
    },
    {
      "id": "gpui::element::AnyElement::prepaint_as_root",
      "name": "prepaint_as_root",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "Performs layout on this element in the available space, then prepaints it at the given absolute origin. If any element in the subtree beneath this element is focused, its FocusHandle is returned.",
      "documentation": "Performs layout on this element in the available space, then prepaints it at the given absolute origin.\nIf any element in the subtree beneath this element is focused, its FocusHandle is returned.",
      "signature": "pub fn prepaint_as_root (& mut self, origin : Point<Pixels>, available_space : Size<AvailableSpace>, window : & mut Window, cx : & mut App,) -> Option<FocusHandle>",
      "cfg": [],
      "target": "AnyElement"
    },
    {
      "id": "gpui::element::AnyElement::prepaint_as_root_with_size",
      "name": "prepaint_as_root_with_size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "Lay out using [`Self::layout_as_root_with_size`] then prepaint at the given origin. Paint, hitboxes and accessibility use actual layout bounds.",
      "documentation": "Lay out using [`Self::layout_as_root_with_size`] then prepaint at the\ngiven origin. Paint, hitboxes and accessibility use actual layout bounds.",
      "signature": "pub fn prepaint_as_root_with_size (& mut self, origin : Point<Pixels>, available_space : Size<AvailableSpace>, assigned_size : Size<Pixels>, window : & mut Window, cx : & mut App,) -> Option<FocusHandle>",
      "cfg": [],
      "target": "AnyElement"
    },
    {
      "id": "gpui::element::AnyElement::prepaint_at",
      "name": "prepaint_at",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "Prepaints this element at the given absolute origin. If any element in the subtree beneath this element is focused, its FocusHandle is returned.",
      "documentation": "Prepaints this element at the given absolute origin.\nIf any element in the subtree beneath this element is focused, its FocusHandle is returned.",
      "signature": "pub fn prepaint_at (& mut self, origin : Point<Pixels>, window : & mut Window, cx : & mut App,) -> Option<FocusHandle>",
      "cfg": [],
      "target": "AnyElement"
    },
    {
      "id": "gpui::element::AnyElement::request_layout",
      "name": "request_layout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "Request the layout ID of the element stored in this `AnyElement`. Used for laying out child elements in a parent element.",
      "documentation": "Request the layout ID of the element stored in this `AnyElement`.\nUsed for laying out child elements in a parent element.",
      "signature": "pub fn request_layout (& mut self, window : & mut Window, cx : & mut App) -> LayoutId",
      "cfg": [],
      "target": "AnyElement"
    },
    {
      "id": "gpui::element::Drawable",
      "name": "Drawable",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "A wrapper around an implementer of [`Element`] that allows it to be drawn in a window.",
      "documentation": "A wrapper around an implementer of [`Element`] that allows it to be drawn in a window.",
      "signature": "# [doc = \" A wrapper around an implementer of [`Element`] that allows it to be drawn in a window.\"] pub struct Drawable<E : Element> { # [doc = \" The drawn element.\"] pub element : E, phase : ElementDrawPhase<E::RequestLayoutState, E::PrepaintState>, }",
      "cfg": []
    },
    {
      "id": "gpui::element::Element",
      "name": "Element",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "Implemented by types that participate in laying out and painting the contents of a window. Elements form a tree and are laid out according to web-based layout rules, as implemented by Taffy. You can create custom elements by implementing this trait, see the module-level documentation for more details.",
      "documentation": "Implemented by types that participate in laying out and painting the contents of a window.\nElements form a tree and are laid out according to web-based layout rules, as implemented by Taffy.\nYou can create custom elements by implementing this trait, see the module-level documentation\nfor more details.",
      "signature": "# [doc = \" Implemented by types that participate in laying out and painting the contents of a window.\"] # [doc = \" Elements form a tree and are laid out according to web-based layout rules, as implemented by Taffy.\"] # [doc = \" You can create custom elements by implementing this trait, see the module-level documentation\"] # [doc = \" for more details.\"] pub trait Element : 'static + IntoElement { # [doc = \" The type of state returned from [`Element::request_layout`]. A mutable reference to this state is subsequently\"] # [doc = \" provided to [`Element::prepaint`] and [`Element::paint`].\"] type RequestLayoutState : 'static; # [doc = \" The type of state returned from [`Element::prepaint`]. A mutable reference to this state is subsequently\"] # [doc = \" provided to [`Element::paint`].\"] type PrepaintState : 'static; # [doc = \" If this element has a unique identifier, return it here. This is used to track elements across frames, and\"] # [doc = \" will cause a GlobalElementId to be passed to the request_layout, prepaint, and paint methods.\"] # [doc = \"\"] # [doc = \" The global id can in turn be used to access state that's connected to an element with the same id across\"] # [doc = \" frames. This id must be unique among children of the first containing element with an id.\"] fn id (& self) -> Option<ElementId>; # [doc = \" Source location where this element was constructed, used to disambiguate elements in the\"] # [doc = \" inspector and navigate to their source code.\"] fn source_location (& self) -> Option<& 'static panic::Location<'static>>; # [doc = \" Before an element can be painted, we need to know where it's going to be and how big it is.\"] # [doc = \" Use this method to request a layout from Taffy and initialize the element's state.\"] fn request_layout (& mut self, id : Option<& GlobalElementId>, inspector_id : Option<& InspectorElementId>, window : & mut Window, cx : & mut App,) -> (LayoutId, Self::RequestLayoutState); # [doc = \" After laying out an element, we need to commit its bounds to the current frame for hitbox\"] # [doc = \" purposes. The state argument is the same state that was returned from [`Element::request_layout()`].\"] fn prepaint (& mut self, id : Option<& GlobalElementId>, inspector_id : Option<& InspectorElementId>, bounds : Bounds<Pixels>, request_layout : & mut Self::RequestLayoutState, window : & mut Window, cx : & mut App,) -> Self::PrepaintState; # [doc = \" Once layout has been completed, this method will be called to paint the element to the screen.\"] # [doc = \" The state argument is the same state that was returned from [`Element::request_layout()`].\"] # [allow (clippy::too_many_arguments)] fn paint (& mut self, id : Option<& GlobalElementId>, inspector_id : Option<& InspectorElementId>, bounds : Bounds<Pixels>, request_layout : & mut Self::RequestLayoutState, prepaint : & mut Self::PrepaintState, window : & mut Window, cx : & mut App,); # [doc = \" Returns the accessible role for this element, if any.\"] # [doc = \" Elements that return `None` are not included in the accessibility tree.\"] # [doc = \"\"] # [doc = \" Note: inclusion in accessibility tree requires non-`None` [`id`][Element::id].\"] # [doc = \"\"] # [doc = \" See the [accessibility guide](crate::_accessibility) for an overview.\"] fn a11y_role (& self) -> Option<accesskit::Role> { None } # [doc = \" Write accessibility properties to the given node.\"] # [doc = \" Called only when `a11y_role()` returns `Some`.\"] # [doc = \"\"] # [doc = \" See the [accessibility guide](crate::_accessibility) for an overview.\"] fn write_a11y_info (& self, _node : & mut accesskit::Node) { } # [doc = \" Writes properties while optionally supplying the complete value as\"] # [doc = \" shared storage. GPUI materializes it only when the final node changes;\"] # [doc = \" this is native-node retention, not an abbreviated accessible value.\"] # [doc = \" Implementations returning a value must omit it from `node` here.\"] # [doc = \" The ordinary `write_a11y_info` contract remains fully materialized.\"] fn write_a11y_info_shared (& self, node : & mut accesskit::Node) -> Option<crate::SharedString> { self . write_a11y_info (node); None } # [doc = \" Returns this element's non-topological accessibility relationships.\"] # [doc = \"\"] # [doc = \" Called only when [`Element::a11y_role`] returns `Some`. GPUI resolves\"] # [doc = \" the referenced element identities after deferred prepaint completes.\"] fn a11y_relationships (& self) -> & [AccessibilityRelationship] { & [] } # [doc = \" Add synthetic child nodes to an [`Element`] that has an\"] # [doc = \" [`.id()`][Element::id] and a [`.role()`][Element::a11y_role].\"] # [doc = \"\"] # [doc = \" Some elements may want to inject accessibility nodes that do not\"] # [doc = \" correspond to any GPUI element. For example, a custom text field element\"] # [doc = \" may want to inject synthetic child nodes for the text content.\"] # [doc = \"\"] # [doc = \" See [Synthetic children](crate::_accessibility#synthetic-children) in\"] # [doc = \" the accessibility guide for more detail.\"] fn a11y_synthetic_children (& mut self, _prepaint : & mut Self::PrepaintState, _builder : & mut A11ySubtreeBuilder,) { } # [doc = \" Convert this element into a dynamically-typed [`AnyElement`].\"] fn into_any (self) -> AnyElement { AnyElement::new (self) } }",
      "cfg": []
    },
    {
      "id": "gpui::element::Empty",
      "name": "Empty",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "The empty element, which renders nothing.",
      "documentation": "The empty element, which renders nothing.",
      "signature": "# [doc = \" The empty element, which renders nothing.\"] pub struct Empty;",
      "cfg": []
    },
    {
      "id": "gpui::element::GlobalElementId",
      "name": "GlobalElementId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "A globally unique identifier for an element, used to track state across frames.",
      "documentation": "A globally unique identifier for an element, used to track state across frames.",
      "signature": "# [doc = \" A globally unique identifier for an element, used to track state across frames.\"] # [derive (Deref, DerefMut, Clone, Default, Debug, Eq, PartialEq, Hash)] pub struct GlobalElementId (pub (crate) Arc<[ElementId]>);",
      "cfg": []
    },
    {
      "id": "gpui::element::IntoElement",
      "name": "IntoElement",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "Implemented by any type that can be converted into an element.",
      "documentation": "Implemented by any type that can be converted into an element.",
      "signature": "# [doc = \" Implemented by any type that can be converted into an element.\"] pub trait IntoElement : Sized { # [doc = \" The specific type of element into which the implementing type is converted.\"] # [doc = \" Useful for converting other types into elements automatically, like Strings\"] type Element : Element; # [doc = \" Convert self into a type that implements [`Element`].\"] fn into_element (self) -> Self::Element; # [doc = \" Convert self into a dynamically-typed [`AnyElement`].\"] fn into_any_element (self) -> AnyElement { self . into_element () . into_any () } }",
      "cfg": []
    },
    {
      "id": "gpui::element::ParentElement",
      "name": "ParentElement",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "This is a helper trait to provide a uniform interface for constructing elements that can accept any number of any kind of child elements",
      "documentation": "This is a helper trait to provide a uniform interface for constructing elements that\ncan accept any number of any kind of child elements",
      "signature": "# [doc = \" This is a helper trait to provide a uniform interface for constructing elements that\"] # [doc = \" can accept any number of any kind of child elements\"] pub trait ParentElement { # [doc = \" Extend this element's children with the given child elements.\"] fn extend (& mut self, elements : impl IntoIterator<Item = AnyElement>); # [doc = \" Add a single child element to this element.\"] fn child (mut self, child : impl IntoElement) -> Self where Self : Sized, { self . extend (std::iter::once (child . into_element () . into_any ())); self } # [doc = \" Add multiple child elements to this element.\"] fn children (mut self, children : impl IntoIterator<Item = impl IntoElement>) -> Self where Self : Sized, { self . extend (children . into_iter () . map (| child | child . into_any_element ())); self } }",
      "cfg": []
    },
    {
      "id": "gpui::element::Render",
      "name": "Render",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "An object that can be drawn to the screen. This is the trait that distinguishes \"views\" from other entities. Views are `Entity`'s which `impl Render` and drawn to the screen.",
      "documentation": "An object that can be drawn to the screen. This is the trait that distinguishes \"views\" from\nother entities. Views are `Entity`'s which `impl Render` and drawn to the screen.",
      "signature": "# [doc = \" An object that can be drawn to the screen. This is the trait that distinguishes \\\"views\\\" from\"] # [doc = \" other entities. Views are `Entity`'s which `impl Render` and drawn to the screen.\"] pub trait Render : 'static + Sized { # [doc = \" Render this view into an element tree.\"] fn render (& mut self, window : & mut Window, cx : & mut Context<Self>) -> impl IntoElement; }",
      "cfg": []
    },
    {
      "id": "gpui::element::RenderOnce",
      "name": "RenderOnce",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "element",
      "path": "gpui::element",
      "source": "crates/gpui/src/element.rs",
      "summary": "You can derive [`IntoElement`] on any type that implements this trait. It is used to construct reusable `components` out of plain data. Think of components as a recipe for a certain pattern of elements. RenderOnce allows you to invoke this pattern, without breaking the fluent builder pattern of the element APIs.",
      "documentation": "You can derive [`IntoElement`] on any type that implements this trait.\nIt is used to construct reusable `components` out of plain data. Think of\ncomponents as a recipe for a certain pattern of elements. RenderOnce allows\nyou to invoke this pattern, without breaking the fluent builder pattern of\nthe element APIs.",
      "signature": "# [doc = \" You can derive [`IntoElement`] on any type that implements this trait.\"] # [doc = \" It is used to construct reusable `components` out of plain data. Think of\"] # [doc = \" components as a recipe for a certain pattern of elements. RenderOnce allows\"] # [doc = \" you to invoke this pattern, without breaking the fluent builder pattern of\"] # [doc = \" the element APIs.\"] pub trait RenderOnce : 'static { # [doc = \" Render this component into an element tree. Note that this method\"] # [doc = \" takes ownership of self, as compared to [`Render::render()`] method\"] # [doc = \" which takes a mutable reference.\"] fn render (self, window : & mut Window, cx : & mut App) -> impl IntoElement; }",
      "cfg": []
    },
    {
      "id": "gpui::elements::anchored::Anchored",
      "name": "Anchored",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::anchored",
      "path": "gpui::elements::anchored",
      "source": "crates/gpui/src/elements/anchored.rs",
      "summary": "An anchored element that can be used to display UI that will avoid overflowing the window bounds.",
      "documentation": "An anchored element that can be used to display UI that\nwill avoid overflowing the window bounds.",
      "signature": "# [doc = \" An anchored element that can be used to display UI that\"] # [doc = \" will avoid overflowing the window bounds.\"] pub struct Anchored { children : SmallVec<[AnyElement; 2]>, anchor : Anchor, fit_mode : AnchoredFitMode, anchor_position : Option<Point<Pixels>>, position_mode : AnchoredPositionMode, offset : Option<Point<Pixels>>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::anchored::Anchored::anchor",
      "name": "anchor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::anchored",
      "path": "gpui::elements::anchored",
      "source": "crates/gpui/src/elements/anchored.rs",
      "summary": "Sets which corner of the anchored element should be anchored to the current position.",
      "documentation": "Sets which corner of the anchored element should be anchored to the current position.",
      "signature": "pub fn anchor (mut self, anchor : Anchor) -> Self",
      "cfg": [],
      "target": "Anchored"
    },
    {
      "id": "gpui::elements::anchored::Anchored::offset",
      "name": "offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::anchored",
      "path": "gpui::elements::anchored",
      "source": "crates/gpui/src/elements/anchored.rs",
      "summary": "Offset the final position by this amount. Useful when you want to anchor to an element but offset from it, such as in PopoverMenu.",
      "documentation": "Offset the final position by this amount.\nUseful when you want to anchor to an element but offset from it, such as in PopoverMenu.",
      "signature": "pub fn offset (mut self, offset : Point<Pixels>) -> Self",
      "cfg": [],
      "target": "Anchored"
    },
    {
      "id": "gpui::elements::anchored::Anchored::position",
      "name": "position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::anchored",
      "path": "gpui::elements::anchored",
      "source": "crates/gpui/src/elements/anchored.rs",
      "summary": "Sets the position in window coordinates (otherwise the location the anchored element is rendered is used) Under a visual scale this remains layout-space. Inverse-map a displayed caret/selection anchor using the captured transform before supplying it.",
      "documentation": "Sets the position in window coordinates\n(otherwise the location the anchored element is rendered is used)\nUnder a visual scale this remains layout-space. Inverse-map a displayed\ncaret/selection anchor using the captured transform before supplying it.",
      "signature": "pub fn position (mut self, anchor : Point<Pixels>) -> Self",
      "cfg": [],
      "target": "Anchored"
    },
    {
      "id": "gpui::elements::anchored::Anchored::position_mode",
      "name": "position_mode",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::anchored",
      "path": "gpui::elements::anchored",
      "source": "crates/gpui/src/elements/anchored.rs",
      "summary": "Sets the position mode for this anchored element. Local will have this interpret its [`Anchored::position`] as relative to the parent element. While Window will have it interpret the position as relative to the window.",
      "documentation": "Sets the position mode for this anchored element. Local will have this\ninterpret its [`Anchored::position`] as relative to the parent element.\nWhile Window will have it interpret the position as relative to the window.",
      "signature": "pub fn position_mode (mut self, mode : AnchoredPositionMode) -> Self",
      "cfg": [],
      "target": "Anchored"
    },
    {
      "id": "gpui::elements::anchored::Anchored::snap_to_window",
      "name": "snap_to_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::anchored",
      "path": "gpui::elements::anchored",
      "source": "crates/gpui/src/elements/anchored.rs",
      "summary": "Snap to window edge instead of switching anchor corner when an overflow would occur.",
      "documentation": "Snap to window edge instead of switching anchor corner when an overflow would occur.",
      "signature": "pub fn snap_to_window (mut self) -> Self",
      "cfg": [],
      "target": "Anchored"
    },
    {
      "id": "gpui::elements::anchored::Anchored::snap_to_window_with_margin",
      "name": "snap_to_window_with_margin",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::anchored",
      "path": "gpui::elements::anchored",
      "source": "crates/gpui/src/elements/anchored.rs",
      "summary": "Snap to window edge and leave some margins.",
      "documentation": "Snap to window edge and leave some margins.",
      "signature": "pub fn snap_to_window_with_margin (mut self, edges : impl Into<Edges<Pixels>>) -> Self",
      "cfg": [],
      "target": "Anchored"
    },
    {
      "id": "gpui::elements::anchored::AnchoredFitMode",
      "name": "AnchoredFitMode",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::anchored",
      "path": "gpui::elements::anchored",
      "source": "crates/gpui/src/elements/anchored.rs",
      "summary": "Which algorithm to use when fitting the anchored element to be inside the window.",
      "documentation": "Which algorithm to use when fitting the anchored element to be inside the window.",
      "signature": "# [doc = \" Which algorithm to use when fitting the anchored element to be inside the window.\"] # [derive (Copy, Clone, PartialEq)] pub enum AnchoredFitMode { # [doc = \" Snap the anchored element to the window edge.\"] SnapToWindow, # [doc = \" Snap to window edge and leave some margins.\"] SnapToWindowWithMargin (Edges<Pixels>), # [doc = \" Switch which corner anchor this anchored element is attached to.\"] SwitchAnchor, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::anchored::AnchoredPositionMode",
      "name": "AnchoredPositionMode",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::anchored",
      "path": "gpui::elements::anchored",
      "source": "crates/gpui/src/elements/anchored.rs",
      "summary": "Which algorithm to use when positioning the anchored element.",
      "documentation": "Which algorithm to use when positioning the anchored element.",
      "signature": "# [doc = \" Which algorithm to use when positioning the anchored element.\"] # [derive (Copy, Clone, PartialEq)] pub enum AnchoredPositionMode { # [doc = \" Position the anchored element relative to the window.\"] Window, # [doc = \" Position the anchored element relative to its parent.\"] Local, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::anchored::AnchoredState",
      "name": "AnchoredState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::anchored",
      "path": "gpui::elements::anchored",
      "source": "crates/gpui/src/elements/anchored.rs",
      "summary": "The state that the anchored element element uses to track its children.",
      "documentation": "The state that the anchored element element uses to track its children.",
      "signature": "# [doc = \" The state that the anchored element element uses to track its children.\"] pub struct AnchoredState { child_layout_ids : SmallVec<[LayoutId; 4]>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::anchored::anchored",
      "name": "anchored",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::anchored",
      "path": "gpui::elements::anchored",
      "source": "crates/gpui/src/elements/anchored.rs",
      "summary": "anchored gives you an element that will avoid overflowing the window bounds. Its children should have no margin to avoid measurement issues.",
      "documentation": "anchored gives you an element that will avoid overflowing the window bounds.\nIts children should have no margin to avoid measurement issues.",
      "signature": "pub fn anchored () -> Anchored",
      "cfg": []
    },
    {
      "id": "gpui::elements::animation::Animation",
      "name": "Animation",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::animation",
      "path": "gpui::elements::animation",
      "source": "crates/gpui/src/elements/animation.rs",
      "summary": "An animation that can be applied to an element.",
      "documentation": "An animation that can be applied to an element.",
      "signature": "# [doc = \" An animation that can be applied to an element.\"] # [derive (Clone)] pub struct Animation { # [doc = \" The amount of time for which this animation should run\"] pub duration : Duration, # [doc = \" Whether to repeat this animation when it finishes\"] pub oneshot : bool, # [doc = \" A function that maps normalized time to an animated value.\"] # [doc = \" The result may exceed 0..1 for easing functions that overshoot.\"] pub easing : Rc<dyn Fn (f32) -> f32>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::animation::Animation::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::animation",
      "path": "gpui::elements::animation",
      "source": "crates/gpui/src/elements/animation.rs",
      "summary": "Create a new animation with the given duration. By default the animation will only run once and will use a linear easing function.",
      "documentation": "Create a new animation with the given duration.\nBy default the animation will only run once and will use a linear easing function.",
      "signature": "pub fn new (duration : Duration) -> Self",
      "cfg": [],
      "target": "Animation"
    },
    {
      "id": "gpui::elements::animation::Animation::repeat",
      "name": "repeat",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::animation",
      "path": "gpui::elements::animation",
      "source": "crates/gpui/src/elements/animation.rs",
      "summary": "Set the animation to loop when it finishes.",
      "documentation": "Set the animation to loop when it finishes.",
      "signature": "pub fn repeat (mut self) -> Self",
      "cfg": [],
      "target": "Animation"
    },
    {
      "id": "gpui::elements::animation::Animation::with_easing",
      "name": "with_easing",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::animation",
      "path": "gpui::elements::animation",
      "source": "crates/gpui/src/elements/animation.rs",
      "summary": "Sets the easing function used to map normalized time to an animated value.",
      "documentation": "Sets the easing function used to map normalized time to an animated value.\n\nThe output is not clamped, allowing physical easing functions such as\nsprings to overshoot.",
      "signature": "pub fn with_easing (mut self, easing : impl Fn (f32) -> f32 + 'static) -> Self",
      "cfg": [],
      "target": "Animation"
    },
    {
      "id": "gpui::elements::animation::AnimationElement",
      "name": "AnimationElement",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::animation",
      "path": "gpui::elements::animation",
      "source": "crates/gpui/src/elements/animation.rs",
      "summary": "A GPUI element that applies an animation to another element",
      "documentation": "A GPUI element that applies an animation to another element",
      "signature": "# [doc = \" A GPUI element that applies an animation to another element\"] pub struct AnimationElement<E> { id : ElementId, element : Option<E>, animations : SmallVec<[Animation; 1]>, animator : Box<dyn Fn (E, usize, f32) -> E + 'static>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::animation::AnimationElement::map_element",
      "name": "map_element",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::animation",
      "path": "gpui::elements::animation",
      "source": "crates/gpui/src/elements/animation.rs",
      "summary": "Returns a new [`AnimationElement<E>`] after applying the given function to the element being animated.",
      "documentation": "Returns a new [`AnimationElement<E>`] after applying the given function\nto the element being animated.",
      "signature": "pub fn map_element (mut self, f : impl FnOnce (E) -> E) -> AnimationElement<E>",
      "cfg": [],
      "target": "AnimationElement<E>"
    },
    {
      "id": "gpui::elements::animation::AnimationExt",
      "name": "AnimationExt",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::animation",
      "path": "gpui::elements::animation",
      "source": "crates/gpui/src/elements/animation.rs",
      "summary": "An extension trait for adding the animation wrapper to both Elements and Components",
      "documentation": "An extension trait for adding the animation wrapper to both Elements and Components\n\nAnimations rendered through this trait automatically respect\n[`App::reduce_motion`](crate::App::reduce_motion): when it is set,\nthe element is rendered in a static state (the end state for oneshot\nanimations, the start state for repeating ones) and no animation frames are\nscheduled.",
      "signature": "# [doc = \" An extension trait for adding the animation wrapper to both Elements and Components\"] # [doc = \"\"] # [doc = \" Animations rendered through this trait automatically respect\"] # [doc = \" [`App::reduce_motion`](crate::App::reduce_motion): when it is set,\"] # [doc = \" the element is rendered in a static state (the end state for oneshot\"] # [doc = \" animations, the start state for repeating ones) and no animation frames are\"] # [doc = \" scheduled.\"] pub trait AnimationExt { # [doc = \" Render this component or element with an animation\"] fn with_animation (self, id : impl Into<ElementId>, animation : Animation, animator : impl Fn (Self, f32) -> Self + 'static,) -> AnimationElement<Self> where Self : Sized, { AnimationElement { id : id . into (), element : Some (self), animator : Box::new (move | this, _, value | animator (this, value)), animations : smallvec::smallvec ! [animation], } } # [doc = \" Render this component or element with a chain of animations\"] fn with_animations (self, id : impl Into<ElementId>, animations : Vec<Animation>, animator : impl Fn (Self, usize, f32) -> Self + 'static,) -> AnimationElement<Self> where Self : Sized, { AnimationElement { id : id . into (), element : Some (self), animator : Box::new (animator), animations : animations . into (), } } # [doc = \" Renders this component or element at the value produced by a spring.\"] # [doc = \"\"] # [doc = \" The element ID preserves position and velocity across target changes.\"] # [doc = \" A newly mounted spring starts at its target unless configured with\"] # [doc = \" [`SpringAnimation::from`].\"] fn with_spring<T> (self, id : impl Into<ElementId>, animation : SpringAnimation<T>, animator : impl FnOnce (Self, T::Output) -> Self + 'static,) -> SpringAnimationElement<Self> where Self : Sized, T : SpringTarget, T::Output : 'static, { let SpringAnimation { config, target, epsilon, initial, playback, } = animation; let scalar_target = target . target (); SpringAnimationElement { id : id . into (), element : Some (self), config, target : scalar_target, epsilon, initial, playback, animator : Some (Box::new (move | this, value | { animator (this, target . resolve (value)) })), } } }",
      "cfg": []
    },
    {
      "id": "gpui::elements::animation::SpringAnimationElement",
      "name": "SpringAnimationElement",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::animation",
      "path": "gpui::elements::animation",
      "source": "crates/gpui/src/elements/animation.rs",
      "summary": "A GPUI element driven by a stateful spring.",
      "documentation": "A GPUI element driven by a stateful spring.",
      "signature": "# [doc = \" A GPUI element driven by a stateful spring.\"] pub struct SpringAnimationElement<E> { id : ElementId, element : Option<E>, config : SpringConfig, target : f32, epsilon : f32, initial : Option<f32>, playback : SpringPlayback, animator : Option<Box<dyn FnOnce (E, f32) -> E + 'static>>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::animation::SpringAnimationElement::map_element",
      "name": "map_element",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::animation",
      "path": "gpui::elements::animation",
      "source": "crates/gpui/src/elements/animation.rs",
      "summary": "Returns a new [`SpringAnimationElement<E>`] after applying the given function to the element being animated.",
      "documentation": "Returns a new [`SpringAnimationElement<E>`] after applying the given function\nto the element being animated.",
      "signature": "pub fn map_element (mut self, f : impl FnOnce (E) -> E) -> SpringAnimationElement<E>",
      "cfg": [],
      "target": "SpringAnimationElement<E>"
    },
    {
      "id": "gpui::elements::animation::reexport-1",
      "name": "easing :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::animation",
      "path": "gpui::elements::animation",
      "source": "crates/gpui/src/elements/animation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use easing::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::canvas::Canvas",
      "name": "Canvas",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::canvas",
      "path": "gpui::elements::canvas",
      "source": "crates/gpui/src/elements/canvas.rs",
      "summary": "A canvas element, meant for accessing the low level paint API without defining a whole custom element",
      "documentation": "A canvas element, meant for accessing the low level paint API without defining a whole\ncustom element",
      "signature": "# [doc = \" A canvas element, meant for accessing the low level paint API without defining a whole\"] # [doc = \" custom element\"] pub struct Canvas<T> { prepaint : Option<Box<dyn FnOnce (Bounds<Pixels>, & mut Window, & mut App) -> T>>, paint : Option<Box<dyn FnOnce (Bounds<Pixels>, T, & mut Window, & mut App)>>, style : StyleRefinement, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::canvas::canvas",
      "name": "canvas",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::canvas",
      "path": "gpui::elements::canvas",
      "source": "crates/gpui/src/elements/canvas.rs",
      "summary": "Construct a canvas element with the given paint callback. Useful for adding short term custom drawing to a view.",
      "documentation": "Construct a canvas element with the given paint callback.\nUseful for adding short term custom drawing to a view.",
      "signature": "pub fn canvas<T> (prepaint : impl 'static + FnOnce (Bounds<Pixels>, & mut Window, & mut App) -> T, paint : impl 'static + FnOnce (Bounds<Pixels>, T, & mut Window, & mut App),) -> Canvas<T>",
      "cfg": []
    },
    {
      "id": "gpui::elements::container_query::ContainerQuery",
      "name": "ContainerQuery",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::container_query",
      "path": "gpui::elements::container_query",
      "source": "crates/gpui/src/elements/container_query.rs",
      "summary": "A container query element, created with [`container_query`].",
      "documentation": "A container query element, created with [`container_query`].",
      "signature": "# [doc = \" A container query element, created with [`container_query`].\"] pub struct ContainerQuery { render : Option<Box<dyn FnOnce (Size<Pixels>, & mut Window, & mut App) -> AnyElement>>, style : StyleRefinement, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::container_query::container_query",
      "name": "container_query",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::container_query",
      "path": "gpui::elements::container_query",
      "source": "crates/gpui/src/elements/container_query.rs",
      "summary": "Construct a container query element with the given render callback. The callback receives the size the element was assigned during layout and returns the contents to display within it.",
      "documentation": "Construct a container query element with the given render callback.\nThe callback receives the size the element was assigned during layout and\nreturns the contents to display within it.\n\nBy default the element fills its parent (equivalent to `.size_full()`);\nuse the [`Styled`] methods to size it differently. Because the contents\ndon't exist until after layout, they cannot influence the element's size.\n\n# Example\n\n```\n# use gpui::{container_query, div, px, IntoElement, ParentElement};\ncontainer_query(|size, _window, _cx| {\nif size.width < px(240.) {\ndiv().child(\"Narrow layout\")\n} else {\ndiv().child(\"Wide layout\")\n}\n});\n```",
      "signature": "pub fn container_query<E> (render : impl 'static + FnOnce (Size<Pixels>, & mut Window, & mut App) -> E,) -> ContainerQuery where E : IntoElement,",
      "cfg": []
    },
    {
      "id": "gpui::elements::deferred::Deferred",
      "name": "Deferred",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::deferred",
      "path": "gpui::elements::deferred",
      "source": "crates/gpui/src/elements/deferred.rs",
      "summary": "An element which delays the painting of its child until after all of its ancestors, while keeping its layout as part of the current element tree.",
      "documentation": "An element which delays the painting of its child until after all of\nits ancestors, while keeping its layout as part of the current element tree.",
      "signature": "# [doc = \" An element which delays the painting of its child until after all of\"] # [doc = \" its ancestors, while keeping its layout as part of the current element tree.\"] pub struct Deferred { child : Option<AnyElement>, priority : usize, preserve_accessibility : bool, unclipped : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::deferred::Deferred::preserve_accessibility",
      "name": "preserve_accessibility",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::deferred",
      "path": "gpui::elements::deferred",
      "source": "crates/gpui/src/elements/deferred.rs",
      "summary": "Retains logical accessibility ancestry and reading order for inline content. By default, deferred overlay surfaces attach to the window root.",
      "documentation": "Retains logical accessibility ancestry and reading order for inline\ncontent. By default, deferred overlay surfaces attach to the window root.",
      "signature": "pub fn preserve_accessibility (mut self) -> Self",
      "cfg": [],
      "target": "Deferred"
    },
    {
      "id": "gpui::elements::deferred::Deferred::priority",
      "name": "priority",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::deferred",
      "path": "gpui::elements::deferred",
      "source": "crates/gpui/src/elements/deferred.rs",
      "summary": "Sets a priority for the element. A higher priority conceptually means painting the element on top of deferred draws with a lower priority (i.e. closer to the viewer).",
      "documentation": "Sets a priority for the element. A higher priority conceptually means painting the element\non top of deferred draws with a lower priority (i.e. closer to the viewer).",
      "signature": "pub fn priority (mut self, priority : usize) -> Self",
      "cfg": [],
      "target": "Deferred"
    },
    {
      "id": "gpui::elements::deferred::Deferred::unclipped",
      "name": "unclipped",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::deferred",
      "path": "gpui::elements::deferred",
      "source": "crates/gpui/src/elements/deferred.rs",
      "summary": "Escapes inherited content masks when scheduling this subtree. Its own masks still apply. The inherited visual transform and logical layout coordinates are preserved, not reset to window-root coordinates. Accessibility ancestry is independent; combine with [`Self::preserve_accessibility`] for inline logical ownership. Without this opt-in, deferred clipping behavior is unchanged.",
      "documentation": "Escapes inherited content masks when scheduling this subtree. Its own\nmasks still apply. The inherited visual transform and logical layout\ncoordinates are preserved, not reset to window-root coordinates.\nAccessibility ancestry is independent; combine with\n[`Self::preserve_accessibility`] for inline logical ownership.\nWithout this opt-in, deferred clipping behavior is unchanged.",
      "signature": "pub fn unclipped (mut self) -> Self",
      "cfg": [],
      "target": "Deferred"
    },
    {
      "id": "gpui::elements::deferred::Deferred::with_priority",
      "name": "with_priority",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::deferred",
      "path": "gpui::elements::deferred",
      "source": "crates/gpui/src/elements/deferred.rs",
      "summary": "Sets the `priority` value of the `deferred` element, which determines the drawing order relative to other deferred elements, with higher values being drawn on top.",
      "documentation": "Sets the `priority` value of the `deferred` element, which\ndetermines the drawing order relative to other deferred elements,\nwith higher values being drawn on top.",
      "signature": "pub fn with_priority (mut self, priority : usize) -> Self",
      "cfg": [],
      "target": "Deferred"
    },
    {
      "id": "gpui::elements::deferred::deferred",
      "name": "deferred",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::deferred",
      "path": "gpui::elements::deferred",
      "source": "crates/gpui/src/elements/deferred.rs",
      "summary": "Builds a `Deferred` element, which delays the layout and paint of its child.",
      "documentation": "Builds a `Deferred` element, which delays the layout and paint of its child.",
      "signature": "pub fn deferred (child : impl IntoElement) -> Deferred",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::Div",
      "name": "Div",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "A [`Div`] element, the all-in-one element for building complex UIs in GPUI",
      "documentation": "A [`Div`] element, the all-in-one element for building complex UIs in GPUI",
      "signature": "# [doc = \" A [`Div`] element, the all-in-one element for building complex UIs in GPUI\"] pub struct Div { interactivity : Interactivity, children : SmallVec<[StackSafe<AnyElement>; 2]>, prepaint_listener : Option<Box<dyn Fn (Vec<Bounds<Pixels>>, & mut Window, & mut App) + 'static>>, image_cache : Option<Box<dyn ImageCacheProvider>>, prepaint_order_fn : Option<Box<dyn Fn (& mut Window, & mut App) -> SmallVec<[usize; 8]>>>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::Div::image_cache",
      "name": "image_cache",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Add an image cache at the location of this div in the element tree.",
      "documentation": "Add an image cache at the location of this div in the element tree.",
      "signature": "pub fn image_cache (mut self, cache : impl ImageCacheProvider) -> Self",
      "cfg": [],
      "target": "Div"
    },
    {
      "id": "gpui::elements::div::Div::on_children_prepainted",
      "name": "on_children_prepainted",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Add a listener to be called when the children of this `Div` are prepainted. This allows you to store the [`Bounds`] of the children for later use.",
      "documentation": "Add a listener to be called when the children of this `Div` are prepainted.\nThis allows you to store the [`Bounds`] of the children for later use.",
      "signature": "pub fn on_children_prepainted (mut self, listener : impl Fn (Vec<Bounds<Pixels>>, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Div"
    },
    {
      "id": "gpui::elements::div::Div::with_dynamic_prepaint_order",
      "name": "with_dynamic_prepaint_order",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Specify a function that determines the order in which children are prepainted.",
      "documentation": "Specify a function that determines the order in which children are prepainted.\n\nThe function is called at prepaint time and should return a vector of child indices\nin the desired prepaint order. Each index should appear exactly once.\n\nThis is useful when the prepaint of one child affects state that another child reads.\nFor example, in split editor views, the editor with an autoscroll request should\nbe prepainted first so its scroll position update is visible to the other editor.",
      "signature": "pub fn with_dynamic_prepaint_order (mut self, order_fn : impl Fn (& mut Window, & mut App) -> SmallVec<[usize; 8]> + 'static,) -> Self",
      "cfg": [],
      "target": "Div"
    },
    {
      "id": "gpui::elements::div::DivFrameState",
      "name": "DivFrameState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "A frame state for a `Div` element, which contains layout IDs for its children.",
      "documentation": "A frame state for a `Div` element, which contains layout IDs for its children.\n\nThis struct is used internally by the `Div` element to manage the layout state of its children\nduring the UI update cycle. It holds a small vector of `LayoutId` values, each corresponding to\na child element of the `Div`. These IDs are used to query the layout engine for the computed\nbounds of the children after the layout phase is complete.",
      "signature": "# [doc = \" A frame state for a `Div` element, which contains layout IDs for its children.\"] # [doc = \"\"] # [doc = \" This struct is used internally by the `Div` element to manage the layout state of its children\"] # [doc = \" during the UI update cycle. It holds a small vector of `LayoutId` values, each corresponding to\"] # [doc = \" a child element of the `Div`. These IDs are used to query the layout engine for the computed\"] # [doc = \" bounds of the children after the layout phase is complete.\"] pub struct DivFrameState { child_layout_ids : SmallVec<[LayoutId; 2]>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::DivInspectorState",
      "name": "DivInspectorState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Interactivity state displayed an manipulated in the inspector.",
      "documentation": "Interactivity state displayed an manipulated in the inspector.",
      "signature": "# [doc = \" Interactivity state displayed an manipulated in the inspector.\"] # [derive (Clone)] pub struct DivInspectorState { # [doc = \" The inspected element's base style. This is used for both inspecting and modifying the\"] # [doc = \" state. In the future it will make sense to separate the read and write, possibly tracking\"] # [doc = \" the modifications.\"] # [cfg (any (feature = \"inspector\", debug_assertions))] pub base_style : Box<StyleRefinement>, # [doc = \" Inspects the bounds of the element.\"] pub bounds : Bounds<Pixels>, # [doc = \" Size of the children of the element, or `bounds.size` if it has no children.\"] pub content_size : Size<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::DragMoveEvent",
      "name": "DragMoveEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "An event for when a drag is moving over this element, with the given state type.",
      "documentation": "An event for when a drag is moving over this element, with the given state type.",
      "signature": "# [doc = \" An event for when a drag is moving over this element, with the given state type.\"] pub struct DragMoveEvent<T> { # [doc = \" The mouse move event that triggered this drag move event.\"] pub event : MouseMoveEvent, # [doc = \" The bounds of this element.\"] pub bounds : Bounds<Pixels>, drag : PhantomData<T>, dragged_item : Arc<dyn Any>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::DragMoveEvent::drag",
      "name": "drag",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Returns the drag state for this event.",
      "documentation": "Returns the drag state for this event.",
      "signature": "pub fn drag<'b> (& self, cx : & 'b App) -> & 'b T",
      "cfg": [],
      "target": "DragMoveEvent<T>"
    },
    {
      "id": "gpui::elements::div::DragMoveEvent::dragged_item",
      "name": "dragged_item",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "An item that is about to be dropped.",
      "documentation": "An item that is about to be dropped.",
      "signature": "pub fn dragged_item (& self) -> & dyn Any",
      "cfg": [],
      "target": "DragMoveEvent<T>"
    },
    {
      "id": "gpui::elements::div::ElementClickedState",
      "name": "ElementClickedState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Whether or not the element or a group that contains it is clicked by the mouse.",
      "documentation": "Whether or not the element or a group that contains it is clicked by the mouse.",
      "signature": "# [doc = \" Whether or not the element or a group that contains it is clicked by the mouse.\"] # [derive (Copy, Clone, Default, Eq, PartialEq)] pub struct ElementClickedState { # [doc = \" True if this element's group has been clicked, false otherwise\"] pub group : bool, # [doc = \" True if this element has been clicked, false otherwise\"] pub element : bool, # [doc = \" The button owning the current pressed appearance, if any.\"] pub button : Option<MouseButton>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::ElementHoverState",
      "name": "ElementHoverState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Whether or not the element or a group that contains it is hovered.",
      "documentation": "Whether or not the element or a group that contains it is hovered.",
      "signature": "# [doc = \" Whether or not the element or a group that contains it is hovered.\"] # [derive (Copy, Clone, Default, Eq, PartialEq)] pub struct ElementHoverState { # [doc = \" True if this element's group is hovered, false otherwise\"] pub group : bool, # [doc = \" True if this element is hovered, false otherwise\"] pub element : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::GroupHitboxes::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (name : & SharedString, cx : & mut App) -> Option<HitboxId>",
      "cfg": [],
      "target": "GroupHitboxes"
    },
    {
      "id": "gpui::elements::div::GroupHitboxes::pop",
      "name": "pop",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn pop (name : & SharedString, cx : & mut App)",
      "cfg": [],
      "target": "GroupHitboxes"
    },
    {
      "id": "gpui::elements::div::GroupHitboxes::push",
      "name": "push",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn push (name : SharedString, hitbox_id : HitboxId, cx : & mut App)",
      "cfg": [],
      "target": "GroupHitboxes"
    },
    {
      "id": "gpui::elements::div::GroupStyle",
      "name": "GroupStyle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "The styling information for a given group.",
      "documentation": "The styling information for a given group.",
      "signature": "# [doc = \" The styling information for a given group.\"] pub struct GroupStyle { # [doc = \" The identifier for this group.\"] pub group : SharedString, # [doc = \" The specific style refinement that this group would apply\"] # [doc = \" to its children.\"] pub style : Box<StyleRefinement>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::InteractiveElement",
      "name": "InteractiveElement",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "A trait for elements that want to use the standard GPUI event handlers that don't require any state.",
      "documentation": "A trait for elements that want to use the standard GPUI event handlers that don't\nrequire any state.",
      "signature": "# [doc = \" A trait for elements that want to use the standard GPUI event handlers that don't\"] # [doc = \" require any state.\"] pub trait InteractiveElement : Sized { # [doc = \" Retrieve the interactivity state associated with this element\"] fn interactivity (& mut self) -> & mut Interactivity; # [doc = \" Assign this element to a group of elements that can be styled together\"] fn group (mut self, group : impl Into<SharedString>) -> Self { self . interactivity () . group = Some (group . into ()); self } # [doc = \" Assign this element an ID, so that it can be used with interactivity\"] fn id (mut self, id : impl Into<ElementId>) -> Stateful<Self> { self . interactivity () . element_id = Some (id . into ()); Stateful { element : self } } # [doc = \" Track the focus state of the given focus handle on this element.\"] # [doc = \" If the focus handle is focused by the application, this element will\"] # [doc = \" apply its focused styles.\"] fn track_focus (mut self, focus_handle : & FocusHandle) -> Self { self . interactivity () . focusable = true; self . interactivity () . tracked_focus_handle = Some (focus_handle . clone ()); self } # [doc = \" Observe this element after its subtree has prepainted, with the exact\"] # [doc = \" focus handle GPUI resolved for it during layout.\"] # [doc = \"\"] # [doc = \" The handle is `None` when the element is not focusable. This keeps\"] # [doc = \" framework integrations on the same focus authority used for event\"] # [doc = \" dispatch and platform accessibility without creating another handle.\"] # [doc = \" Bounds are displayed window coordinates after inherited visual scale,\"] # [doc = \" not layout coordinates. They are not intersected with content clips.\"] fn on_focus_resolved (mut self, listener : impl Fn (Bounds<Pixels>, Option<& FocusHandle>, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . focus_resolved_listener = Some (Box::new (listener)); self } # [doc = \" Reveal this element inside `scroll_handle` whenever it receives focus.\"] # [doc = \"\"] # [doc = \" `insets` reserves physical viewport edges occupied by overlays such as\"] # [doc = \" frozen columns. Revealing moves only axes that actually overflow and by\"] # [doc = \" only the distance needed to expose the focused bounds.\"] fn reveal_on_focus (mut self, scroll_handle : & ScrollHandle, insets : impl Into<Edges<Pixels>>,) -> Self { self . interactivity () . focus_reveal = Some ((scroll_handle . clone (), insets . into ())); self } # [doc = \" Set whether this element is a tab stop.\"] # [doc = \"\"] # [doc = \" When false, the element remains in tab-index order but cannot be reached via keyboard navigation.\"] # [doc = \" Useful for container elements: focus the container, then call `window.focus_next(cx)` to focus\"] # [doc = \" the first tab stop inside it while having the container element itself be unreachable via the keyboard.\"] # [doc = \" Should only be used with `tab_index`.\"] fn tab_stop (mut self, tab_stop : bool) -> Self { self . interactivity () . tab_stop = tab_stop; self } # [doc = \" Set index of the tab stop order, and set this node as a tab stop.\"] # [doc = \" This will default the element to being a tab stop. See [`Self::tab_stop`] for more information.\"] # [doc = \" This should only be used in conjunction with `tab_group`\"] # [doc = \" in order to not interfere with the tab index of other elements.\"] fn tab_index (mut self, index : isize) -> Self { self . interactivity () . focusable = true; self . interactivity () . tab_index = Some (index); self . interactivity () . tab_stop = true; self } # [doc = \" Designate this div as a \\\"tab group\\\". Tab groups have their own location in the tab-index order,\"] # [doc = \" but for children of the tab group, the tab index is reset to 0. This can be useful for swapping\"] # [doc = \" the order of tab stops within the group, without having to renumber all the tab stops in the whole\"] # [doc = \" application.\"] fn tab_group (mut self) -> Self { self . interactivity () . tab_group = true; if self . interactivity () . tab_index . is_none () { self . interactivity () . tab_index = Some (0); } self } # [doc = \" Set the keymap context for this element. This will be used to determine\"] # [doc = \" which action to dispatch from the keymap.\"] fn key_context<C, E> (mut self, key_context : C) -> Self where C : TryInto<KeyContext, Error = E>, E : std::fmt::Display, { if let Some (key_context) = key_context . try_into () . log_err () { self . interactivity () . key_context = Some (key_context); } self } # [doc = \" Apply the given style to this element when the mouse hovers over it\"] fn hover (mut self, f : impl FnOnce (StyleRefinement) -> StyleRefinement) -> Self { debug_assert ! (self . interactivity () . hover_style . is_none (), \"hover style already set\"); self . interactivity () . hover_style = Some (Box::new (f (StyleRefinement::default ()))); self } # [doc = \" Apply the given style to this element when the mouse hovers over a group member\"] fn group_hover (mut self, group_name : impl Into<SharedString>, f : impl FnOnce (StyleRefinement) -> StyleRefinement,) -> Self { self . interactivity () . group_hover_style = Some (GroupStyle { group : group_name . into (), style : Box::new (f (StyleRefinement::default ())), }); self } # [doc = \" Bind the given callback to the mouse down event for the given mouse button.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_mouse_down`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to the view state from this callback.\"] fn on_mouse_down (mut self, button : MouseButton, listener : impl Fn (& MouseDownEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_mouse_down (button, listener); self } # [doc = \" Bind the given callback to the mouse down event for the given mouse button, and capture\"] # [doc = \" the pointer for this element until that button is released or cancelled.\"] # [doc = \"\"] # [doc = \" While captured, mouse move and mouse up listeners on this element continue to receive\"] # [doc = \" events when the pointer is outside its bounds. The pointer is captured before `listener`\"] # [doc = \" runs and [`Window`] releases it automatically after dispatching the mouse up event.\"] # [doc = \" Give the element an id to preserve capture when the gesture redraws the window.\"] # [doc = \"\"] # [doc = \" The fluent API equivalent of [`Interactivity::on_mouse_down_with_pointer_capture`].\"] fn on_mouse_down_with_pointer_capture (mut self, button : MouseButton, listener : impl Fn (& MouseDownEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_mouse_down_with_pointer_capture (button, listener); self } # [cfg (any (test, feature = \"test-support\"))] # [doc = \" Set a key that can be used to look up this element's bounds\"] # [doc = \" with `VisualTestContext::debug_bounds`.\"] # [doc = \" This is a noop in release builds\"] fn debug_selector (mut self, f : impl FnOnce () -> String) -> Self { self . interactivity () . debug_selector = Some (f ()); self } # [cfg (not (any (test, feature = \"test-support\")))] # [doc = \" Set a key that can be used to look up this element's bounds\"] # [doc = \" with `VisualTestContext::debug_bounds`.\"] # [doc = \" This is a noop in release builds\"] # [inline] fn debug_selector (self, _ : impl FnOnce () -> String) -> Self { self } # [doc = \" Bind the given callback to the mouse down event for any button, during the capture phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::capture_any_mouse_down`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn capture_any_mouse_down (mut self, listener : impl Fn (& MouseDownEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . capture_any_mouse_down (listener); self } # [doc = \" Bind the given callback to the mouse down event for any button, during the capture phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_any_mouse_down`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_any_mouse_down (mut self, listener : impl Fn (& MouseDownEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_any_mouse_down (listener); self } # [doc = \" Bind the given callback to the mouse up event for the given button, during the bubble phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_mouse_up`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_mouse_up (mut self, button : MouseButton, listener : impl Fn (& MouseUpEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_mouse_up (button, listener); self } # [doc = \" Bind the given callback to the mouse up event for any button, during the capture phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::capture_any_mouse_up`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn capture_any_mouse_up (mut self, listener : impl Fn (& MouseUpEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . capture_any_mouse_up (listener); self } # [doc = \" Bind the given callback to the mouse pressure event, during the bubble phase\"] # [doc = \" the fluent API equivalent to [`Interactivity::on_mouse_pressure`]\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_mouse_pressure (mut self, listener : impl Fn (& MousePressureEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_mouse_pressure (listener); self } # [doc = \" Bind the given callback to the mouse pressure event, during the capture phase\"] # [doc = \" the fluent API equivalent to [`Interactivity::on_mouse_pressure`]\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn capture_mouse_pressure (mut self, listener : impl Fn (& MousePressureEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . capture_mouse_pressure (listener); self } # [doc = \" Bind the given callback to the mouse down event, on any button, during the capture phase,\"] # [doc = \" when the mouse is outside of the bounds of this element.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_mouse_down_out`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_mouse_down_out (mut self, listener : impl Fn (& MouseDownEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_mouse_down_out (listener); self } # [doc = \" Bind the given callback to the mouse up event, for the given button, during the capture phase,\"] # [doc = \" when the mouse is outside of the bounds of this element.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_mouse_up_out`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_mouse_up_out (mut self, button : MouseButton, listener : impl Fn (& MouseUpEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_mouse_up_out (button, listener); self } # [doc = \" Bind the given callback to the mouse move event, during the bubble phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_mouse_move`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_mouse_move (mut self, listener : impl Fn (& MouseMoveEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_mouse_move (listener); self } # [doc = \" Bind the given callback to the mouse exit event, during the bubble phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_mouse_exit`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_mouse_exit (mut self, listener : impl Fn (& MouseExitEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_mouse_exit (listener); self } # [doc = \" Bind the given callback to the mouse drag event of the given type. Note that this\"] # [doc = \" will be called for all move events, inside or outside of this element, as long as the\"] # [doc = \" drag was started with this element under the mouse. Useful for implementing draggable\"] # [doc = \" UIs that don't conform to a drag and drop style interaction, like resizing.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_drag_move`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_drag_move<T : 'static> (mut self, listener : impl Fn (& DragMoveEvent<T>, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_drag_move (listener); self } # [doc = \" Bind the given callback to scroll wheel events during the bubble phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_scroll_wheel`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_scroll_wheel (mut self, listener : impl Fn (& ScrollWheelEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_scroll_wheel (listener); self } # [doc = \" Bind the given callback to pinch gesture events during the bubble phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_pinch`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_pinch (mut self, listener : impl Fn (& PinchEvent, & mut Window, & mut App) + 'static) -> Self { self . interactivity () . on_pinch (listener); self } # [doc = \" Bind the given callback to pinch gesture events during the capture phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::capture_pinch`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn capture_pinch (mut self, listener : impl Fn (& PinchEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . capture_pinch (listener); self } # [doc = \" Capture the given action, before normal action dispatch can fire.\"] # [doc = \" The fluent API equivalent to [`Interactivity::capture_action`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn capture_action<A : Action> (mut self, listener : impl Fn (& A, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . capture_action (listener); self } # [doc = \" Bind the given callback to an action dispatch during the bubble phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_action`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] # [track_caller] fn on_action<A : Action> (mut self, listener : impl Fn (& A, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_action (listener); self } # [doc = \" Bind the given callback to an action dispatch, based on a dynamic action parameter\"] # [doc = \" instead of a type parameter. Useful for component libraries that want to expose\"] # [doc = \" action bindings to their users.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_boxed_action`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_boxed_action (mut self, action : & dyn Action, listener : impl Fn (& dyn Action, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_boxed_action (action, listener); self } # [doc = \" Bind the given callback to key down events during the bubble phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_key_down`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_key_down (mut self, listener : impl Fn (& KeyDownEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_key_down (listener); self } # [doc = \" Bind the given callback to key down events during the capture phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::capture_key_down`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn capture_key_down (mut self, listener : impl Fn (& KeyDownEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . capture_key_down (listener); self } # [doc = \" Bind the given callback to key up events during the bubble phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_key_up`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_key_up (mut self, listener : impl Fn (& KeyUpEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_key_up (listener); self } # [doc = \" Bind the given callback to key up events during the capture phase.\"] # [doc = \" The fluent API equivalent to [`Interactivity::capture_key_up`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn capture_key_up (mut self, listener : impl Fn (& KeyUpEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . capture_key_up (listener); self } # [doc = \" Bind the given callback to modifiers changing events.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_modifiers_changed`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_modifiers_changed (mut self, listener : impl Fn (& ModifiersChangedEvent, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_modifiers_changed (listener); self } # [doc = \" Apply the given style when the given data type is dragged over this element\"] fn drag_over<S : 'static> (mut self, f : impl 'static + Fn (StyleRefinement, & S, & mut Window, & mut App) -> StyleRefinement,) -> Self { self . interactivity () . drag_over_styles . push ((TypeId::of::< S> (), Box::new (move | currently_dragged : & dyn Any, window, cx | { f (StyleRefinement::default (), currently_dragged . downcast_ref::< S> () . expect (\"required framework invariant must hold\"), window, cx,) }),)); self } # [doc = \" Apply the given style when the given data type is dragged over this element's group\"] fn group_drag_over<S : 'static> (mut self, group_name : impl Into<SharedString>, f : impl FnOnce (StyleRefinement) -> StyleRefinement,) -> Self { self . interactivity () . group_drag_over_styles . push ((TypeId::of::< S> (), GroupStyle { group : group_name . into (), style : Box::new (f (StyleRefinement::default ())), },)); self } # [doc = \" Bind the given callback to drop events of the given type, whether or not the drag started on this element.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_drop`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_drop<T : 'static> (mut self, listener : impl Fn (& T, & mut Window, & mut App) + 'static,) -> Self { self . interactivity () . on_drop (listener); self } # [doc = \" Use the given predicate to determine whether or not a drop event should be dispatched to this element.\"] # [doc = \" The fluent API equivalent to [`Interactivity::can_drop`].\"] fn can_drop (mut self, predicate : impl Fn (& dyn Any, & mut Window, & mut App) -> bool + 'static,) -> Self { self . interactivity () . can_drop (predicate); self } # [doc = \" Block the mouse from all interactions with elements behind this element's hitbox. Typically\"] # [doc = \" `block_mouse_except_scroll` should be preferred.\"] # [doc = \" The fluent API equivalent to [`Interactivity::occlude_mouse`].\"] fn occlude (mut self) -> Self { self . interactivity () . occlude_mouse (); self } # [doc = \" Set the bounds of this element as a window control area for the platform window.\"] # [doc = \" The fluent API equivalent to [`Interactivity::window_control_area`].\"] fn window_control_area (mut self, area : WindowControlArea) -> Self { self . interactivity () . window_control_area (area); self } # [doc = \" Block non-scroll mouse interactions with elements behind this element's hitbox.\"] # [doc = \" The fluent API equivalent to [`Interactivity::block_mouse_except_scroll`].\"] # [doc = \"\"] # [doc = \" See [`Hitbox::is_hovered`] for details.\"] fn block_mouse_except_scroll (mut self) -> Self { self . interactivity () . block_mouse_except_scroll (); self } # [doc = \" Set the given styles to be applied when this element, specifically, is focused.\"] # [doc = \" Requires that the element is focusable. Elements can be made focusable using [`InteractiveElement::track_focus`].\"] fn focus (mut self, f : impl FnOnce (StyleRefinement) -> StyleRefinement) -> Self where Self : Sized, { self . interactivity () . focus_style = Some (Box::new (f (StyleRefinement::default ()))); self } # [doc = \" Set the given styles to be applied when this element is inside another element that is focused.\"] # [doc = \" Requires that the element is focusable. Elements can be made focusable using [`InteractiveElement::track_focus`].\"] fn in_focus (mut self, f : impl FnOnce (StyleRefinement) -> StyleRefinement) -> Self where Self : Sized, { self . interactivity () . in_focus_style = Some (Box::new (f (StyleRefinement::default ()))); self } # [doc = \" Set the given styles to be applied when this element's focus is worth\"] # [doc = \" pointing out. This is CSS's `:focus-visible` pseudo-class: it applies\"] # [doc = \" when the element is focused and a pointer press is not what put focus\"] # [doc = \" there, so a tab stop, an action, or a dialog moving focus here shows,\"] # [doc = \" while clicking the element itself does not.\"] # [doc = \" Requires that the element is focusable. Elements can be made focusable using [`InteractiveElement::track_focus`].\"] fn focus_visible (mut self, f : impl FnOnce (StyleRefinement) -> StyleRefinement) -> Self where Self : Sized, { self . interactivity () . focus_visible_style = Some (Box::new (f (StyleRefinement::default ()))); self } }",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::InteractiveElementState",
      "name": "InteractiveElementState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "The per-frame state of an interactive element. Used for tracking stateful interactions like clicks and scroll offsets.",
      "documentation": "The per-frame state of an interactive element. Used for tracking stateful interactions like clicks\nand scroll offsets.",
      "signature": "# [doc = \" The per-frame state of an interactive element. Used for tracking stateful interactions like clicks\"] # [doc = \" and scroll offsets.\"] # [derive (Default)] pub struct InteractiveElementState { pub (crate) focus_handle : Option<FocusHandle>, pub (crate) clicked_state : Option<Rc<RefCell<ElementClickedState>>>, pub (crate) hover_state : Option<Rc<RefCell<ElementHoverState>>>, pub (crate) hover_listener_state : Option<Rc<RefCell<bool>>>, pub (crate) pending_mouse_down : Option<Rc<RefCell<Option<MouseDownEvent>>>>, # [doc = \" Set to the window's [`focus_generation`](crate::Window::focus_generation)\"] # [doc = \" when an Enter/Space keydown is received while this element is focused,\"] # [doc = \" recording that we are waiting for the matching keyup to fire a keyboard\"] # [doc = \" click. On keyup the click only fires if the stored generation still\"] # [doc = \" matches the window's current one, i.e. focus never moved during the\"] # [doc = \" press (mirroring the browser clearing a control's pressed state on\"] # [doc = \" blur). `None` means no activation key is pending.\"] pub (crate) pending_keyboard_down : Option<Rc<RefCell<Option<u64>>>>, pub (crate) scroll_offset : Option<Rc<RefCell<Point<Pixels>>>>, ongoing_scroll : Option<Rc<RefCell<OngoingScroll>>>, pub (crate) active_tooltip : Option<Rc<RefCell<Option<ActiveTooltip>>>>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::Interactivity",
      "name": "Interactivity",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "The interactivity struct. Powers all of the general-purpose interactivity in the `Div` element.",
      "documentation": "The interactivity struct. Powers all of the general-purpose\ninteractivity in the `Div` element.",
      "signature": "# [doc = \" The interactivity struct. Powers all of the general-purpose\"] # [doc = \" interactivity in the `Div` element.\"] # [derive (Default)] pub struct Interactivity { # [doc = \" The element ID of the element. In id is required to support a stateful subset of the interactivity such as on_click.\"] pub element_id : Option<ElementId>, # [doc = \" Whether the element was clicked. This will only be present after layout.\"] pub active : Option<bool>, # [doc = \" Whether the element was hovered. This will only be present after paint if an hitbox\"] # [doc = \" was created for the interactive element.\"] pub hovered : Option<bool>, pub (crate) tooltip_id : Option<TooltipId>, pub (crate) content_size : Size<Pixels>, pub (crate) key_context : Option<KeyContext>, pub (crate) focusable : bool, pub (crate) tracked_focus_handle : Option<FocusHandle>, pub (crate) focus_resolved_listener : Option<FocusResolvedListener>, pub (crate) focus_reveal : Option<(ScrollHandle, Edges<Pixels>)>, pub (crate) tracked_scroll_handle : Option<ScrollHandle>, pub (crate) scroll_anchor : Option<ScrollAnchor>, pub (crate) scroll_offset : Option<Rc<RefCell<Point<Pixels>>>>, pub (crate) ongoing_scroll : Option<Rc<RefCell<OngoingScroll>>>, pub (crate) group : Option<SharedString>, # [doc = \" The base style of the element, before any modifications are applied\"] # [doc = \" by focus, active, etc.\"] pub base_style : Box<StyleRefinement>, pub (crate) focus_style : Option<Box<StyleRefinement>>, pub (crate) in_focus_style : Option<Box<StyleRefinement>>, pub (crate) focus_visible_style : Option<Box<StyleRefinement>>, pub (crate) hover_style : Option<Box<StyleRefinement>>, pub (crate) group_hover_style : Option<GroupStyle>, pub (crate) active_style : Option<Box<StyleRefinement>>, pub (crate) group_active_style : Option<GroupStyle>, pub (crate) drag_over_styles : Vec<(TypeId, Box<dyn Fn (& dyn Any, & mut Window, & mut App) -> StyleRefinement>,)>, pub (crate) group_drag_over_styles : Vec<(TypeId, GroupStyle)>, pub (crate) mouse_down_listeners : Vec<MouseDownListener>, pub (crate) mouse_up_listeners : Vec<MouseUpListener>, pub (crate) mouse_pressure_listeners : Vec<MousePressureListener>, pub (crate) mouse_move_listeners : Vec<MouseMoveListener>, pub (crate) mouse_exit_listeners : Vec<MouseExitListener>, pub (crate) scroll_wheel_listeners : Vec<ScrollWheelListener>, pub (crate) pinch_listeners : Vec<PinchListener>, pub (crate) key_down_listeners : Vec<KeyDownListener>, pub (crate) key_up_listeners : Vec<KeyUpListener>, pub (crate) modifiers_changed_listeners : Vec<ModifiersChangedListener>, pub (crate) action_listeners : Vec<(TypeId, ActionListener)>, pub (crate) drop_listeners : Vec<(TypeId, DropListener)>, pub (crate) can_drop_predicate : Option<CanDropPredicate>, pub (crate) click_listeners : Vec<ClickListener>, pub (crate) aux_click_listeners : Vec<ClickListener>, pub (crate) drag_listener : Option<DragListener>, pub (crate) hover_listener : Option<Box<dyn Fn (& bool, & mut Window, & mut App)>>, pub (crate) tooltip_builder : Option<TooltipBuilder>, pub (crate) tooltip_show_delay : Option<Duration>, pub (crate) window_control : Option<WindowControlArea>, pub (crate) hitbox_behavior : HitboxBehavior, pub (crate) tab_index : Option<isize>, pub (crate) tab_group : bool, pub (crate) tab_stop : bool, pub (crate) a11y_action_listeners : Vec<(accesskit::Action, crate::window::a11y::A11yActionListener)>, pub (crate) a11y_synthetic_children : Option<Box<dyn FnOnce (& mut crate::A11ySubtreeBuilder)>>, pub (crate) report_active_descendant_focus : bool, pub (crate) override_role : Option<accesskit::Role>, pub (crate) aria : AriaProperties, # [cfg (any (feature = \"inspector\", debug_assertions))] pub (crate) source_location : Option<& 'static core::panic::Location<'static>>, # [cfg (any (test, feature = \"test-support\"))] pub (crate) debug_selector : Option<String>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::Interactivity::block_mouse_except_scroll",
      "name": "block_mouse_except_scroll",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Block non-scroll mouse interactions with elements behind this element's hitbox. The imperative API equivalent to [`InteractiveElement::block_mouse_except_scroll`].",
      "documentation": "Block non-scroll mouse interactions with elements behind this element's hitbox.\nThe imperative API equivalent to [`InteractiveElement::block_mouse_except_scroll`].\n\nSee [`Hitbox::is_hovered`] for details.",
      "signature": "pub fn block_mouse_except_scroll (& mut self)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::can_drop",
      "name": "can_drop",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Use the given predicate to determine whether or not a drop event should be dispatched to this element. The imperative API equivalent to [`InteractiveElement::can_drop`].",
      "documentation": "Use the given predicate to determine whether or not a drop event should be dispatched to this element.\nThe imperative API equivalent to [`InteractiveElement::can_drop`].",
      "signature": "pub fn can_drop (& mut self, predicate : impl Fn (& dyn Any, & mut Window, & mut App) -> bool + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::capture_action",
      "name": "capture_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to an action dispatch during the capture phase. The imperative API equivalent to [`InteractiveElement::capture_action`].",
      "documentation": "Bind the given callback to an action dispatch during the capture phase.\nThe imperative API equivalent to [`InteractiveElement::capture_action`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn capture_action<A : Action> (& mut self, listener : impl Fn (& A, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::capture_any_mouse_down",
      "name": "capture_any_mouse_down",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse down event for any button, during the capture phase. The imperative API equivalent of [`InteractiveElement::capture_any_mouse_down`].",
      "documentation": "Bind the given callback to the mouse down event for any button, during the capture phase.\nThe imperative API equivalent of [`InteractiveElement::capture_any_mouse_down`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn capture_any_mouse_down (& mut self, listener : impl Fn (& MouseDownEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::capture_any_mouse_up",
      "name": "capture_any_mouse_up",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse up event for any button, during the capture phase. The imperative API equivalent to [`InteractiveElement::capture_any_mouse_up`].",
      "documentation": "Bind the given callback to the mouse up event for any button, during the capture phase.\nThe imperative API equivalent to [`InteractiveElement::capture_any_mouse_up`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn capture_any_mouse_up (& mut self, listener : impl Fn (& MouseUpEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::capture_key_down",
      "name": "capture_key_down",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to key down events during the capture phase. The imperative API equivalent to [`InteractiveElement::capture_key_down`].",
      "documentation": "Bind the given callback to key down events during the capture phase.\nThe imperative API equivalent to [`InteractiveElement::capture_key_down`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn capture_key_down (& mut self, listener : impl Fn (& KeyDownEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::capture_key_up",
      "name": "capture_key_up",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to key up events during the capture phase. The imperative API equivalent to [`InteractiveElement::on_key_up`].",
      "documentation": "Bind the given callback to key up events during the capture phase.\nThe imperative API equivalent to [`InteractiveElement::on_key_up`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn capture_key_up (& mut self, listener : impl Fn (& KeyUpEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::capture_mouse_pressure",
      "name": "capture_mouse_pressure",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse pressure event, during the capture phase the imperative API equivalent to [`InteractiveElement::on_mouse_pressure`].",
      "documentation": "Bind the given callback to the mouse pressure event, during the capture phase\nthe imperative API equivalent to [`InteractiveElement::on_mouse_pressure`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn capture_mouse_pressure (& mut self, listener : impl Fn (& MousePressureEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::capture_pinch",
      "name": "capture_pinch",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to pinch gesture events during the capture phase.",
      "documentation": "Bind the given callback to pinch gesture events during the capture phase.\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn capture_pinch (& mut self, listener : impl Fn (& PinchEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::compute_style",
      "name": "compute_style",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Compute the visual style for this element, based on the current bounds and the element's state.",
      "documentation": "Compute the visual style for this element, based on the current bounds and the element's state.",
      "signature": "pub fn compute_style (& self, global_id : Option<& GlobalElementId>, hitbox : Option<& Hitbox>, window : & mut Window, cx : & mut App,) -> Style",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::external_drag_payload",
      "name": "external_drag_payload",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Registers a callback resolving a payload to offer the platform if a drag started by this element leaves the window. It is invoked at most once per drag gesture, when the pointer exits the viewport. Must be called after [`Self::on_drag`], with the same dragged value type `T`.",
      "documentation": "Registers a callback resolving a payload to offer the platform if a drag started by this\nelement leaves the window. It is invoked at most once per drag gesture, when the pointer\nexits the viewport. Must be called after [`Self::on_drag`], with the same dragged value\ntype `T`.",
      "signature": "pub fn external_drag_payload<T> (& mut self, resolver : impl Fn (& T, & mut Window, & mut App) -> Option<ExternalDragPayload> + 'static,) where Self : Sized, T : 'static,",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::focus_handle",
      "name": "focus_handle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Returns the focus handle GPUI resolved for this element in the current draw.",
      "documentation": "Returns the focus handle GPUI resolved for this element in the current\ndraw.\n\nA handle passed to [`InteractiveElement::track_focus`] is available as\nsoon as it is attached. For an implicitly focusable element, such as\none configured with [`InteractiveElement::tab_index`], the generated\nhandle becomes available after the element requests layout.",
      "signature": "pub fn focus_handle (& self) -> Option<& FocusHandle>",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::hoverable_tooltip",
      "name": "hoverable_tooltip",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Use the given callback to construct a new tooltip view when the mouse hovers over this element. The tooltip itself is also hoverable and won't disappear when the user moves the mouse into the tooltip. The imperative API equivalent to [`StatefulInteractiveElement::hoverable_tooltip`].",
      "documentation": "Use the given callback to construct a new tooltip view when the mouse hovers over this element.\nThe tooltip itself is also hoverable and won't disappear when the user moves the mouse into\nthe tooltip. The imperative API equivalent to [`StatefulInteractiveElement::hoverable_tooltip`].",
      "signature": "pub fn hoverable_tooltip (& mut self, build_tooltip : impl Fn (& mut Window, & mut App) -> AnyView + 'static,) where Self : Sized,",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "summary": "Create an `Interactivity`, capturing the caller location in debug mode.",
      "declarations": [
        {
          "source": "crates/gpui/src/elements/div.rs",
          "documentation": "Create an `Interactivity`, capturing the caller location in debug mode.",
          "signature": "pub fn new () -> Interactivity",
          "cfg": [
            "cfg (any (feature = \"inspector\", debug_assertions))"
          ],
          "target": "Interactivity"
        },
        {
          "source": "crates/gpui/src/elements/div.rs",
          "documentation": "Create an `Interactivity`, capturing the caller location in debug mode.",
          "signature": "pub fn new () -> Interactivity",
          "cfg": [
            "cfg (not (any (feature = \"inspector\", debug_assertions)))"
          ],
          "target": "Interactivity"
        }
      ]
    },
    {
      "id": "gpui::elements::div::Interactivity::occlude_mouse",
      "name": "occlude_mouse",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Block the mouse from all interactions with elements behind this element's hitbox. Typically `block_mouse_except_scroll` should be preferred.",
      "documentation": "Block the mouse from all interactions with elements behind this element's hitbox. Typically\n`block_mouse_except_scroll` should be preferred.\n\nThe imperative API equivalent to [`InteractiveElement::occlude`]",
      "signature": "pub fn occlude_mouse (& mut self)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_action",
      "name": "on_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to an action dispatch during the bubble phase. The imperative API equivalent to [`InteractiveElement::on_action`].",
      "documentation": "Bind the given callback to an action dispatch during the bubble phase.\nThe imperative API equivalent to [`InteractiveElement::on_action`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_action<A : Action> (& mut self, listener : impl Fn (& A, & mut Window, & mut App) + 'static)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_any_mouse_down",
      "name": "on_any_mouse_down",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse down event for any button, during the bubble phase. The imperative API equivalent to [`InteractiveElement::on_any_mouse_down`].",
      "documentation": "Bind the given callback to the mouse down event for any button, during the bubble phase.\nThe imperative API equivalent to [`InteractiveElement::on_any_mouse_down`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_any_mouse_down (& mut self, listener : impl Fn (& MouseDownEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_any_mouse_up",
      "name": "on_any_mouse_up",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse up event for any button, during the bubble phase. The imperative API equivalent to [`Interactivity::on_any_mouse_up`].",
      "documentation": "Bind the given callback to the mouse up event for any button, during the bubble phase.\nThe imperative API equivalent to [`Interactivity::on_any_mouse_up`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_any_mouse_up (& mut self, listener : impl Fn (& MouseUpEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_aux_click",
      "name": "on_aux_click",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to non-primary click events of this element. The imperative API equivalent to [`StatefulInteractiveElement::on_aux_click`].",
      "documentation": "Bind the given callback to non-primary click events of this element.\nThe imperative API equivalent to [`StatefulInteractiveElement::on_aux_click`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_aux_click (& mut self, listener : impl Fn (& ClickEvent, & mut Window, & mut App) + 'static) where Self : Sized,",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_boxed_action",
      "name": "on_boxed_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to an action dispatch, based on a dynamic action parameter instead of a type parameter. Useful for component libraries that want to expose action bindings to their users. The imperative API equivalent to [`InteractiveElement::on_boxed_action`].",
      "documentation": "Bind the given callback to an action dispatch, based on a dynamic action parameter\ninstead of a type parameter. Useful for component libraries that want to expose\naction bindings to their users.\nThe imperative API equivalent to [`InteractiveElement::on_boxed_action`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_boxed_action (& mut self, action : & dyn Action, listener : impl Fn (& dyn Action, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_click",
      "name": "on_click",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to click events of this element. The imperative API equivalent to [`StatefulInteractiveElement::on_click`].",
      "documentation": "Bind the given callback to click events of this element.\nThe imperative API equivalent to [`StatefulInteractiveElement::on_click`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_click (& mut self, listener : impl Fn (& ClickEvent, & mut Window, & mut App) + 'static) where Self : Sized,",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_drag",
      "name": "on_drag",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "On drag initiation, this callback will be used to create a new view to render the dragged value for a drag and drop operation. This API should also be used as the equivalent of 'on drag start' with the [`Self::on_drag_move`] API. The imperative API equivalent to [`StatefulInteractiveElement::on_drag`].",
      "documentation": "On drag initiation, this callback will be used to create a new view to render the dragged value for a\ndrag and drop operation. This API should also be used as the equivalent of 'on drag start' with\nthe [`Self::on_drag_move`] API.\nThe imperative API equivalent to [`StatefulInteractiveElement::on_drag`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_drag<T, W> (& mut self, value : T, constructor : impl Fn (& T, Point<Pixels>, & mut Window, & mut App) -> Entity<W> + 'static,) where Self : Sized, T : 'static, W : 'static + Render,",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_drag_move",
      "name": "on_drag_move",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse drag event of the given type. Note that this will be called for all move events, inside or outside of this element, as long as the drag was started with this element under the mouse. Useful for implementing draggable UIs that don't conform to a drag and drop style interaction, like resizing. The imperative API equivalent to [`InteractiveElement::on_drag_move`].",
      "documentation": "Bind the given callback to the mouse drag event of the given type. Note that this\nwill be called for all move events, inside or outside of this element, as long as the\ndrag was started with this element under the mouse. Useful for implementing draggable\nUIs that don't conform to a drag and drop style interaction, like resizing.\nThe imperative API equivalent to [`InteractiveElement::on_drag_move`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_drag_move<T> (& mut self, listener : impl Fn (& DragMoveEvent<T>, & mut Window, & mut App) + 'static,) where T : 'static,",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_drop",
      "name": "on_drop",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to drop events of the given type, whether or not the drag started on this element. The imperative API equivalent to [`InteractiveElement::on_drop`].",
      "documentation": "Bind the given callback to drop events of the given type, whether or not the drag started on this element.\nThe imperative API equivalent to [`InteractiveElement::on_drop`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_drop<T : 'static> (& mut self, listener : impl Fn (& T, & mut Window, & mut App) + 'static)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_hover",
      "name": "on_hover",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback on the hover start and end events of this element. Note that the boolean passed to the callback is true when the hover starts and false when it ends. The imperative API equivalent to [`StatefulInteractiveElement::on_hover`].",
      "documentation": "Bind the given callback on the hover start and end events of this element. Note that the boolean\npassed to the callback is true when the hover starts and false when it ends.\nThe imperative API equivalent to [`StatefulInteractiveElement::on_hover`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_hover (& mut self, listener : impl Fn (& bool, & mut Window, & mut App) + 'static) where Self : Sized,",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_key_down",
      "name": "on_key_down",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to key down events during the bubble phase. The imperative API equivalent to [`InteractiveElement::on_key_down`].",
      "documentation": "Bind the given callback to key down events during the bubble phase.\nThe imperative API equivalent to [`InteractiveElement::on_key_down`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_key_down (& mut self, listener : impl Fn (& KeyDownEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_key_up",
      "name": "on_key_up",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to key up events during the bubble phase. The imperative API equivalent to [`InteractiveElement::on_key_up`].",
      "documentation": "Bind the given callback to key up events during the bubble phase.\nThe imperative API equivalent to [`InteractiveElement::on_key_up`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_key_up (& mut self, listener : impl Fn (& KeyUpEvent, & mut Window, & mut App) + 'static)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_modifiers_changed",
      "name": "on_modifiers_changed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to modifiers changing events. The imperative API equivalent to [`InteractiveElement::on_modifiers_changed`].",
      "documentation": "Bind the given callback to modifiers changing events.\nThe imperative API equivalent to [`InteractiveElement::on_modifiers_changed`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_modifiers_changed (& mut self, listener : impl Fn (& ModifiersChangedEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_mouse_down",
      "name": "on_mouse_down",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse down event for the given mouse button, during the bubble phase. The imperative API equivalent of [`InteractiveElement::on_mouse_down`].",
      "documentation": "Bind the given callback to the mouse down event for the given mouse button, during the bubble phase.\nThe imperative API equivalent of [`InteractiveElement::on_mouse_down`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to the view state from this callback.",
      "signature": "pub fn on_mouse_down (& mut self, button : MouseButton, listener : impl Fn (& MouseDownEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_mouse_down_out",
      "name": "on_mouse_down_out",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse down event, on any button, during the capture phase, when the mouse is outside of the bounds of this element. The imperative API equivalent to [`InteractiveElement::on_mouse_down_out`].",
      "documentation": "Bind the given callback to the mouse down event, on any button, during the capture phase,\nwhen the mouse is outside of the bounds of this element.\nThe imperative API equivalent to [`InteractiveElement::on_mouse_down_out`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_mouse_down_out (& mut self, listener : impl Fn (& MouseDownEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_mouse_down_with_pointer_capture",
      "name": "on_mouse_down_with_pointer_capture",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse down event for the given mouse button, and capture the pointer for this element until that button is released or cancelled.",
      "documentation": "Bind the given callback to the mouse down event for the given mouse button, and capture\nthe pointer for this element until that button is released or cancelled.\n\nWhile captured, mouse move and mouse up listeners on this element continue to receive\nevents when the pointer is outside its bounds. The pointer is captured before `listener`\nruns and [`Window`] releases it automatically after dispatching the mouse up event.\nGive the element an id to preserve capture when the gesture redraws the window.\n\nThe imperative API equivalent of\n[`InteractiveElement::on_mouse_down_with_pointer_capture`].",
      "signature": "pub fn on_mouse_down_with_pointer_capture (& mut self, button : MouseButton, listener : impl Fn (& MouseDownEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_mouse_exit",
      "name": "on_mouse_exit",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse exit event, during the bubble phase. The imperative API equivalent to [`InteractiveElement::on_mouse_exit`].",
      "documentation": "Bind the given callback to the mouse exit event, during the bubble phase.\nThe imperative API equivalent to [`InteractiveElement::on_mouse_exit`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_mouse_exit (& mut self, listener : impl Fn (& MouseExitEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_mouse_move",
      "name": "on_mouse_move",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse move event, during the bubble phase. The imperative API equivalent to [`InteractiveElement::on_mouse_move`].",
      "documentation": "Bind the given callback to the mouse move event, during the bubble phase.\nThe imperative API equivalent to [`InteractiveElement::on_mouse_move`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_mouse_move (& mut self, listener : impl Fn (& MouseMoveEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_mouse_pressure",
      "name": "on_mouse_pressure",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse pressure event, during the bubble phase the imperative API equivalent to [`InteractiveElement::on_mouse_pressure`].",
      "documentation": "Bind the given callback to the mouse pressure event, during the bubble phase\nthe imperative API equivalent to [`InteractiveElement::on_mouse_pressure`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_mouse_pressure (& mut self, listener : impl Fn (& MousePressureEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_mouse_up",
      "name": "on_mouse_up",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse up event for the given button, during the bubble phase. The imperative API equivalent to [`InteractiveElement::on_mouse_up`].",
      "documentation": "Bind the given callback to the mouse up event for the given button, during the bubble phase.\nThe imperative API equivalent to [`InteractiveElement::on_mouse_up`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_mouse_up (& mut self, button : MouseButton, listener : impl Fn (& MouseUpEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_mouse_up_out",
      "name": "on_mouse_up_out",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to the mouse up event, for the given button, during the capture phase, when the mouse is outside of the bounds of this element. The imperative API equivalent to [`InteractiveElement::on_mouse_up_out`].",
      "documentation": "Bind the given callback to the mouse up event, for the given button, during the capture phase,\nwhen the mouse is outside of the bounds of this element.\nThe imperative API equivalent to [`InteractiveElement::on_mouse_up_out`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_mouse_up_out (& mut self, button : MouseButton, listener : impl Fn (& MouseUpEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_pinch",
      "name": "on_pinch",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to pinch gesture events during the bubble phase.",
      "documentation": "Bind the given callback to pinch gesture events during the bubble phase.\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_pinch (& mut self, listener : impl Fn (& PinchEvent, & mut Window, & mut App) + 'static)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::on_scroll_wheel",
      "name": "on_scroll_wheel",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Bind the given callback to scroll wheel events during the bubble phase. The imperative API equivalent to [`InteractiveElement::on_scroll_wheel`].",
      "documentation": "Bind the given callback to scroll wheel events during the bubble phase.\nThe imperative API equivalent to [`InteractiveElement::on_scroll_wheel`].\n\nSee [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.",
      "signature": "pub fn on_scroll_wheel (& mut self, listener : impl Fn (& ScrollWheelEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::paint",
      "name": "paint",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Paint this element according to this interactivity state's configured styles and bind the element's mouse and keyboard events.",
      "documentation": "Paint this element according to this interactivity state's configured styles\nand bind the element's mouse and keyboard events.\n\ncontent_size is the size of the content of the element, which may be larger than the\nelement's bounds if the element is scrollable.\n\nthe final computed style will be passed to the provided function, along\nwith the current scroll offset",
      "signature": "pub fn paint (& mut self, global_id : Option<& GlobalElementId>, _inspector_id : Option<& InspectorElementId>, bounds : Bounds<Pixels>, hitbox : Option<& Hitbox>, window : & mut Window, cx : & mut App, f : impl FnOnce (& Style, & mut Window, & mut App),)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::prepaint",
      "name": "prepaint",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Commit the bounds of this element according to this interactivity state's configured styles.",
      "documentation": "Commit the bounds of this element according to this interactivity state's configured styles.",
      "signature": "pub fn prepaint<R> (& mut self, global_id : Option<& GlobalElementId>, _inspector_id : Option<& InspectorElementId>, bounds : Bounds<Pixels>, content_size : Size<Pixels>, window : & mut Window, cx : & mut App, f : impl FnOnce (& Style, Point<Pixels>, Option<Hitbox>, & mut Window, & mut App) -> R,) -> R",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::request_layout",
      "name": "request_layout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Layout this element according to this interactivity state's configured styles",
      "documentation": "Layout this element according to this interactivity state's configured styles",
      "signature": "pub fn request_layout (& mut self, global_id : Option<& GlobalElementId>, _inspector_id : Option<& InspectorElementId>, window : & mut Window, cx : & mut App, f : impl FnOnce (Style, & mut Window, & mut App) -> LayoutId,) -> LayoutId",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::source_location",
      "name": "source_location",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Gets the source location of construction. Returns `None` when not in debug mode.",
      "documentation": "Gets the source location of construction. Returns `None` when not in debug mode.",
      "signature": "pub fn source_location (& self) -> Option<& 'static std::panic::Location<'static>>",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::tooltip",
      "name": "tooltip",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Use the given callback to construct a new tooltip view when the mouse hovers over this element. The imperative API equivalent to [`StatefulInteractiveElement::tooltip`].",
      "documentation": "Use the given callback to construct a new tooltip view when the mouse hovers over this element.\nThe imperative API equivalent to [`StatefulInteractiveElement::tooltip`].",
      "signature": "pub fn tooltip (& mut self, build_tooltip : impl Fn (& mut Window, & mut App) -> AnyView + 'static) where Self : Sized,",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::tooltip_show_delay",
      "name": "tooltip_show_delay",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Set the delay before this element's tooltip is shown. The imperative API equivalent to [`StatefulInteractiveElement::tooltip_show_delay`].",
      "documentation": "Set the delay before this element's tooltip is shown.\nThe imperative API equivalent to [`StatefulInteractiveElement::tooltip_show_delay`].",
      "signature": "pub fn tooltip_show_delay (& mut self, delay : Duration)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::Interactivity::window_control_area",
      "name": "window_control_area",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Set the bounds of this element as a window control area for the platform window. The imperative API equivalent to [`InteractiveElement::window_control_area`]",
      "documentation": "Set the bounds of this element as a window control area for the platform window.\nThe imperative API equivalent to [`InteractiveElement::window_control_area`]",
      "signature": "pub fn window_control_area (& mut self, area : WindowControlArea)",
      "cfg": [],
      "target": "Interactivity"
    },
    {
      "id": "gpui::elements::div::ScrollAnchor",
      "name": "ScrollAnchor",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Represents an element that can be scrolled *to* in its parent element. Contrary to `ScrollHandle::scroll_to_active_item`, an anchored element does not have to be an immediate child of the parent.",
      "documentation": "Represents an element that can be scrolled *to* in its parent element.\nContrary to `ScrollHandle::scroll_to_active_item`, an anchored element does\nnot have to be an immediate child of the parent.",
      "signature": "# [doc = \" Represents an element that can be scrolled *to* in its parent element.\"] # [doc = \" Contrary to `ScrollHandle::scroll_to_active_item`, an anchored element does\"] # [doc = \" not have to be an immediate child of the parent.\"] # [derive (Clone)] pub struct ScrollAnchor { handle : ScrollHandle, last_origin : Rc<RefCell<Point<Pixels>>>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::ScrollAnchor::for_handle",
      "name": "for_handle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Creates a [ScrollAnchor] associated with a given [ScrollHandle].",
      "documentation": "Creates a [ScrollAnchor] associated with a given [ScrollHandle].",
      "signature": "pub fn for_handle (handle : ScrollHandle) -> Self",
      "cfg": [],
      "target": "ScrollAnchor"
    },
    {
      "id": "gpui::elements::div::ScrollAnchor::scroll_to",
      "name": "scroll_to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Request scroll to this item on the next frame.",
      "documentation": "Request scroll to this item on the next frame.",
      "signature": "pub fn scroll_to (& self, window : & mut Window, _cx : & mut App)",
      "cfg": [],
      "target": "ScrollAnchor"
    },
    {
      "id": "gpui::elements::div::ScrollHandle",
      "name": "ScrollHandle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "A handle to the scrollable aspects of an element. Used for accessing scroll state, like the current scroll offset, and for mutating the scroll state, like scrolling to a specific child.",
      "documentation": "A handle to the scrollable aspects of an element.\nUsed for accessing scroll state, like the current scroll offset,\nand for mutating the scroll state, like scrolling to a specific child.",
      "signature": "# [doc = \" A handle to the scrollable aspects of an element.\"] # [doc = \" Used for accessing scroll state, like the current scroll offset,\"] # [doc = \" and for mutating the scroll state, like scrolling to a specific child.\"] # [derive (Clone, Debug)] pub struct ScrollHandle (Rc<RefCell<ScrollHandleState>>);",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::ScrollHandle::bottom_item",
      "name": "bottom_item",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Get the bottom child that's scrolled into view.",
      "documentation": "Get the bottom child that's scrolled into view.",
      "signature": "pub fn bottom_item (& self) -> usize",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::bounds",
      "name": "bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Return the bounds into which this child is painted",
      "documentation": "Return the bounds into which this child is painted",
      "signature": "pub fn bounds (& self) -> Bounds<Pixels>",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::bounds_for_item",
      "name": "bounds_for_item",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Get the bounds for a specific child.",
      "documentation": "Get the bounds for a specific child.",
      "signature": "pub fn bounds_for_item (& self, ix : usize) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::children_count",
      "name": "children_count",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Get the count of children for scrollable item.",
      "documentation": "Get the count of children for scrollable item.",
      "signature": "pub fn children_count (& self) -> usize",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::logical_scroll_bottom",
      "name": "logical_scroll_bottom",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Get the logical scroll bottom, based on a child index and a pixel offset.",
      "documentation": "Get the logical scroll bottom, based on a child index and a pixel offset.",
      "signature": "pub fn logical_scroll_bottom (& self) -> (usize, Pixels)",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::logical_scroll_top",
      "name": "logical_scroll_top",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Get the logical scroll top, based on a child index and a pixel offset.",
      "documentation": "Get the logical scroll top, based on a child index and a pixel offset.",
      "signature": "pub fn logical_scroll_top (& self) -> (usize, Pixels)",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::max_offset",
      "name": "max_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Get the maximum scroll offset.",
      "documentation": "Get the maximum scroll offset.",
      "signature": "pub fn max_offset (& self) -> Point<Pixels>",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Construct a new scroll handle.",
      "documentation": "Construct a new scroll handle.",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::offset",
      "name": "offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Get the current scroll offset.",
      "documentation": "Get the current scroll offset.",
      "signature": "pub fn offset (& self) -> Point<Pixels>",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::reveal_bounds",
      "name": "reveal_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Moves the minimum distance needed to reveal `bounds` inside this handle's viewport, after reserving physical `insets` for content drawn over the viewport.",
      "documentation": "Moves the minimum distance needed to reveal `bounds` inside this\nhandle's viewport, after reserving physical `insets` for content drawn\nover the viewport.\n\nBounds are the element's current painted bounds, including the current\nscroll offset. Returns whether the offset changed.",
      "signature": "pub fn reveal_bounds (& self, bounds : Bounds<Pixels>, insets : impl Into<Edges<Pixels>>) -> bool",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::scroll_to_bottom",
      "name": "scroll_to_bottom",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Scrolls to the bottom.",
      "documentation": "Scrolls to the bottom.",
      "signature": "pub fn scroll_to_bottom (& self)",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::scroll_to_item",
      "name": "scroll_to_item",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Update the scroll handle's active item for scrolling to in prepaint.",
      "documentation": "Update the scroll handle's active item for scrolling to in prepaint.",
      "signature": "pub fn scroll_to_item (& self, ix : usize)",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::scroll_to_top_of_item",
      "name": "scroll_to_top_of_item",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Update the scroll handle's active item for scrolling to in prepaint. This scrolls the minimal amount to ensure that the child is the first visible element.",
      "documentation": "Update the scroll handle's active item for scrolling to in prepaint.\nThis scrolls the minimal amount to ensure that the child is the first visible element.",
      "signature": "pub fn scroll_to_top_of_item (& self, ix : usize)",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::set_measured_for_test",
      "name": "set_measured_for_test",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Pretend a frame has been laid out, so a test can ask a handle where it is without building a window to scroll.",
      "documentation": "Pretend a frame has been laid out, so a test can ask a handle where it\nis without building a window to scroll.",
      "signature": "pub fn set_measured_for_test (& self, bounds : Bounds<Pixels>, max_offset : Point<Pixels>)",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::set_offset",
      "name": "set_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Set the offset explicitly. The offset is the distance from the top left of the parent container to the top left of the first child. As you scroll further down the offset becomes more negative.",
      "documentation": "Set the offset explicitly. The offset is the distance from the top left of the\nparent container to the top left of the first child.\nAs you scroll further down the offset becomes more negative.",
      "signature": "pub fn set_offset (& self, mut position : Point<Pixels>)",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::ScrollHandle::top_item",
      "name": "top_item",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Get the top child that's scrolled into view.",
      "documentation": "Get the top child that's scrolled into view.",
      "signature": "pub fn top_item (& self) -> usize",
      "cfg": [],
      "target": "ScrollHandle"
    },
    {
      "id": "gpui::elements::div::Stateful",
      "name": "Stateful",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "A wrapper around an element that can store state, produced after assigning an ElementId.",
      "documentation": "A wrapper around an element that can store state, produced after assigning an ElementId.",
      "signature": "# [doc = \" A wrapper around an element that can store state, produced after assigning an ElementId.\"] pub struct Stateful<E> { pub (crate) element : E, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::StatefulInteractiveElement",
      "name": "StatefulInteractiveElement",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "A trait for elements that want to use the standard GPUI interactivity features that require state.",
      "documentation": "A trait for elements that want to use the standard GPUI interactivity features\nthat require state.",
      "signature": "# [doc = \" A trait for elements that want to use the standard GPUI interactivity features\"] # [doc = \" that require state.\"] pub trait StatefulInteractiveElement : InteractiveElement { # [doc = \" Set the accessible role for this element.\"] # [doc = \"\"] # [doc = \" See the [accessibility guide](crate::_accessibility) for an overview.\"] fn role (mut self, role : accesskit::Role) -> Self { debug_assert ! (role != accesskit::Role::GenericContainer, \"GenericContainer is filtered out of the a11y tree and has no effect\"); self . interactivity () . override_role = Some (role); self } # [doc = \" Set the accessible label for this element.\"] fn aria_label (mut self, label : impl Into<SharedString>) -> Self { self . interactivity () . aria . label = Some (label . into ()); self } # [doc = \" Set the accessible description for this element. Unlike the label (which\"] # [doc = \" names the element), the description provides supplementary information\"] # [doc = \" that assistive technology announces after the name, role, and value -\"] # [doc = \" for example a settings subtitle or a hint.\"] fn aria_description (mut self, description : impl Into<SharedString>) -> Self { self . interactivity () . aria . description = Some (description . into ()); self } # [doc = \" Name this element with another role-bearing element in the same\"] # [doc = \" window. The target id must resolve uniquely for the active frame.\"] fn aria_labelled_by (mut self, target : impl Into<ElementId>) -> Self { self . interactivity () . aria . relationships . push (crate::AccessibilityRelationship::LabelledBy (target . into ())); self } # [doc = \" Describe this element with another role-bearing element in the same\"] # [doc = \" window. The target id must resolve uniquely for the active frame.\"] fn aria_described_by (mut self, target : impl Into<ElementId>) -> Self { self . interactivity () . aria . relationships . push (crate::AccessibilityRelationship::DescribedBy (target . into ())); self } # [doc = \" Use this element as a label for another role-bearing element in the\"] # [doc = \" same window. This inverse form lets a label declare the relationship\"] # [doc = \" without rebuilding the control it names.\"] fn aria_labels (mut self, target : impl Into<ElementId>) -> Self { self . interactivity () . aria . relationships . push (crate::AccessibilityRelationship::Labels (target . into ())); self } # [doc = \" Use this element as a description for another role-bearing element in\"] # [doc = \" the same window. This inverse form supports deferred tooltips and help\"] # [doc = \" text rendered outside the control's element subtree.\"] fn aria_describes (mut self, target : impl Into<ElementId>) -> Self { self . interactivity () . aria . relationships . push (crate::AccessibilityRelationship::Describes (target . into ())); self } # [doc = \" Set the keyboard shortcut(s) that activate this element, announced by\"] # [doc = \" assistive technology (maps to AccessKit's `keyboard_shortcut`).\"] # [doc = \"\"] # [doc = \" Note that this does not create a keymap. It simply instructs assistive\"] # [doc = \" technology what the keymap is.\"] fn aria_keyshortcuts (mut self, keyshortcuts : impl Into<SharedString>) -> Self { self . interactivity () . aria . keyshortcuts = Some (keyshortcuts . into ()); self } # [doc = \" Report this element as the focused node in the accessibility tree,\"] # [doc = \" overriding the element that holds real keyboard focus — but only while\"] # [doc = \" one of its ancestors actually holds focus.\"] # [doc = \"\"] # [doc = \" This implements the `aria-activedescendant` pattern for composite\"] # [doc = \" widgets that keep keyboard focus on a container (e.g. a menu or\"] # [doc = \" listbox) while a child is \\\"selected\\\": set this on the selected child so\"] # [doc = \" assistive technology announces and highlights it as focused.\"] # [doc = \"\"] # [doc = \" The element must also have a [`role`][Self::role] (and an id) so it\"] # [doc = \" produces an accessibility node. Unlike the web's container-side\"] # [doc = \" `aria-activedescendant`, this is set on the descendant; GPUI honors it\"] # [doc = \" only when a focused ancestor is present in the tree, so it is safe to\"] # [doc = \" set unconditionally on the selected child — if the container isn't\"] # [doc = \" focused, the claim is ignored.\"] fn aria_active_descendant (mut self) -> Self { self . interactivity () . report_active_descendant_focus = true; self } # [doc = \" Report this element as the active descendant of a focused role-bearing\"] # [doc = \" element elsewhere in the same window.\"] # [doc = \"\"] # [doc = \" This is the deferred-overlay form of [`Self::aria_active_descendant`].\"] # [doc = \" The referenced id must resolve uniquely, and must own GPUI keyboard\"] # [doc = \" focus in the current frame; otherwise the claim is ignored. It does not\"] # [doc = \" reparent either accessibility node.\"] fn aria_active_descendant_of (mut self, owner : impl Into<ElementId>) -> Self { self . interactivity () . aria . relationships . push (crate::AccessibilityRelationship::ActiveDescendantOf (owner . into ()),); self } # [doc = \" Contribute synthetic accessibility nodes — nodes that don't correspond\"] # [doc = \" to any element — as children of this element's a11y node. For example,\"] # [doc = \" text runs describing an editor's text content.\"] # [doc = \"\"] # [doc = \" The closure is called after this element is prepainted, and only if it\"] # [doc = \" contributed a node to the accessibility tree (i.e. it has an id and a\"] # [doc = \" [`role`][StatefulInteractiveElement::role]).\"] # [doc = \"\"] # [doc = \" See [`Element::a11y_synthetic_children`] for details.\"] fn a11y_synthetic_children (mut self, f : impl FnOnce (& mut crate::A11ySubtreeBuilder) + 'static,) -> Self { self . interactivity () . a11y_synthetic_children = Some (Box::new (f)); self } # [doc = \" Set the selected state for this element.\"] fn aria_selected (mut self, selected : bool) -> Self { self . interactivity () . aria . selected = Some (selected); self } # [doc = \" Set the expanded state for this element.\"] fn aria_expanded (mut self, expanded : bool) -> Self { self . interactivity () . aria . expanded = Some (expanded); self } # [doc = \" Set whether this element is unavailable for interaction.\"] fn aria_disabled (mut self, disabled : bool) -> Self { self . interactivity () . aria . disabled = disabled; self } # [doc = \" Set whether this element exposes text that cannot be edited.\"] fn aria_read_only (mut self, read_only : bool) -> Self { self . interactivity () . aria . read_only = read_only; self } # [doc = \" Set whether this element is a modal surface.\"] fn aria_modal (mut self, modal : bool) -> Self { self . interactivity () . aria . modal = modal; self } # [doc = \" Set whether this element's value is invalid.\"] fn aria_invalid (mut self, invalid : bool) -> Self { self . interactivity () . aria . invalid = invalid; self } # [doc = \" Set whether this element requires a value.\"] fn aria_required (mut self, required : bool) -> Self { self . interactivity () . aria . required = required; self } # [doc = \" Set whether this element is currently being updated.\"] fn aria_busy (mut self, busy : bool) -> Self { self . interactivity () . aria . busy = busy; self } # [doc = \" Set how updates to this element should be announced.\"] fn aria_live (mut self, politeness : accesskit::Live) -> Self { self . interactivity () . aria . live = Some (politeness); self } # [doc = \" Set whether a live-region update should announce the whole region.\"] fn aria_live_atomic (mut self, atomic : bool) -> Self { self . interactivity () . aria . live_atomic = atomic; self } # [doc = \" Set the toggled state for this element.\"] fn aria_toggled (mut self, toggled : accesskit::Toggled) -> Self { self . interactivity () . aria . toggled = Some (toggled); self } # [doc = \" Set the numeric value for this element.\"] fn aria_numeric_value (mut self, value : f64) -> Self { self . interactivity () . aria . numeric_value = Some (value); self } # [doc = \" Set the step by which assistive technology should expect the numeric\"] # [doc = \" value of this element to change (e.g. when incrementing a spin button).\"] fn aria_numeric_value_step (mut self, step : f64) -> Self { self . interactivity () . aria . numeric_value_step = Some (step); self } # [doc = \" Set the string value of this element, e.g. the text content of a simple\"] # [doc = \" text input.\"] fn aria_value (mut self, value : impl Into<SharedString>) -> Self { self . interactivity () . aria . value = Some (value . into ()); self } # [doc = \" Set the placeholder text reported to assistive technology for this\"] # [doc = \" element, shown when a text input is empty.\"] fn aria_placeholder (mut self, placeholder : impl Into<SharedString>) -> Self { self . interactivity () . aria . placeholder = Some (placeholder . into ()); self } # [doc = \" Set the minimum numeric value for this element.\"] fn aria_min_numeric_value (mut self, value : f64) -> Self { self . interactivity () . aria . min_numeric_value = Some (value); self } # [doc = \" Set the maximum numeric value for this element.\"] fn aria_max_numeric_value (mut self, value : f64) -> Self { self . interactivity () . aria . max_numeric_value = Some (value); self } # [doc = \" Set the orientation of this element.\"] fn aria_orientation (mut self, orientation : accesskit::Orientation) -> Self { self . interactivity () . aria . orientation = Some (orientation); self } # [doc = \" Set the heading level of this element.\"] fn aria_level (mut self, level : usize) -> Self { self . interactivity () . aria . level = Some (level); self } # [doc = \" Set the position in set of this element.\"] fn aria_position_in_set (mut self, position : usize) -> Self { self . interactivity () . aria . position_in_set = Some (position); self } # [doc = \" Set the size of set for this element.\"] fn aria_size_of_set (mut self, size : usize) -> Self { self . interactivity () . aria . size_of_set = Some (size); self } # [doc = \" Set the row index for this element.\"] fn aria_row_index (mut self, index : usize) -> Self { self . interactivity () . aria . row_index = Some (index); self } # [doc = \" Set the column index for this element.\"] fn aria_column_index (mut self, index : usize) -> Self { self . interactivity () . aria . column_index = Some (index); self } # [doc = \" Set the row count for this element.\"] fn aria_row_count (mut self, count : usize) -> Self { self . interactivity () . aria . row_count = Some (count); self } # [doc = \" Set the column count for this element.\"] fn aria_column_count (mut self, count : usize) -> Self { self . interactivity () . aria . column_count = Some (count); self } # [doc = \" Register a handler for an accessibility action on this element.\"] # [doc = \" The handler is called when a screen reader requests the given action.\"] # [doc = \"\"] # [doc = \" See the [accessibility guide](crate::_accessibility) for an overview.\"] fn on_a11y_action (mut self, action : accesskit::Action, listener : impl FnMut (Option<& accesskit::ActionData>, & mut crate::Window, & mut crate::App) + 'static,) -> Self { self . interactivity () . a11y_action_listeners . push ((action, Box::new (listener))); self } # [doc = \" Set this element to focusable.\"] fn focusable (mut self) -> Self { self . interactivity () . focusable = true; self } # [doc = \" Set the overflow x and y to scroll.\"] fn overflow_scroll (mut self) -> Self { self . interactivity () . base_style . overflow . x = Some (Overflow::Scroll); self . interactivity () . base_style . overflow . y = Some (Overflow::Scroll); self } # [doc = \" Set the overflow x to scroll.\"] fn overflow_x_scroll (mut self) -> Self { self . interactivity () . base_style . overflow . x = Some (Overflow::Scroll); self } # [doc = \" Set the overflow y to scroll.\"] fn overflow_y_scroll (mut self) -> Self { self . interactivity () . base_style . overflow . y = Some (Overflow::Scroll); self } # [doc = \" Restrict scrolling of this element to the axis of the input gesture.\"] # [doc = \"\"] # [doc = \" See [`Style::restrict_scroll_to_axis`](crate::Style::restrict_scroll_to_axis) for details.\"] fn restrict_scroll_to_axis (mut self) -> Self { self . interactivity () . base_style . restrict_scroll_to_axis = Some (true); self } # [doc = \" Track the scroll state of this element with the given handle.\"] fn track_scroll (mut self, scroll_handle : & ScrollHandle) -> Self { self . interactivity () . tracked_scroll_handle = Some (scroll_handle . clone ()); self } # [doc = \" Track the scroll state of this element with the given handle.\"] fn anchor_scroll (mut self, scroll_anchor : Option<ScrollAnchor>) -> Self { self . interactivity () . scroll_anchor = scroll_anchor; self } # [doc = \" Set the given styles to be applied when this element is active.\"] fn active (mut self, f : impl FnOnce (StyleRefinement) -> StyleRefinement) -> Self where Self : Sized, { self . interactivity () . active_style = Some (Box::new (f (StyleRefinement::default ()))); self } # [doc = \" Set the given styles to be applied when this element's group is active.\"] fn group_active (mut self, group_name : impl Into<SharedString>, f : impl FnOnce (StyleRefinement) -> StyleRefinement,) -> Self where Self : Sized, { self . interactivity () . group_active_style = Some (GroupStyle { group : group_name . into (), style : Box::new (f (StyleRefinement::default ())), }); self } # [doc = \" Bind the given callback to click events of this element.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_click`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_click (mut self, listener : impl Fn (& ClickEvent, & mut Window, & mut App) + 'static) -> Self where Self : Sized, { self . interactivity () . on_click (listener); self } # [doc = \" Bind the given callback to non-primary click events of this element.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_aux_click`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_aux_click (mut self, listener : impl Fn (& ClickEvent, & mut Window, & mut App) + 'static,) -> Self where Self : Sized, { self . interactivity () . on_aux_click (listener); self } # [doc = \" On drag initiation, this callback will be used to create a new view to render the dragged value for a\"] # [doc = \" drag and drop operation. This API should also be used as the equivalent of 'on drag start' with\"] # [doc = \" the [`InteractiveElement::on_drag_move`] API.\"] # [doc = \" The callback also has access to the offset of triggering click from the origin of parent element.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_drag`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_drag<T, W> (mut self, value : T, constructor : impl Fn (& T, Point<Pixels>, & mut Window, & mut App) -> Entity<W> + 'static,) -> Self where Self : Sized, T : 'static, W : 'static + Render, { self . interactivity () . on_drag (value, constructor); self } # [doc = \" Registers a callback resolving a payload to offer the platform if a drag started by this\"] # [doc = \" element leaves the window. It is invoked at most once per drag gesture, when the pointer\"] # [doc = \" exits the viewport. Must be called after [`Self::on_drag`], with the same dragged value\"] # [doc = \" type `T`.\"] # [doc = \" The fluent API equivalent to [`Interactivity::external_drag_payload`].\"] fn external_drag_payload<T> (mut self, resolver : impl Fn (& T, & mut Window, & mut App) -> Option<ExternalDragPayload> + 'static,) -> Self where Self : Sized, T : 'static, { self . interactivity () . external_drag_payload (resolver); self } # [doc = \" Bind the given callback on the hover start and end events of this element. Note that the boolean\"] # [doc = \" passed to the callback is true when the hover starts and false when it ends.\"] # [doc = \" The fluent API equivalent to [`Interactivity::on_hover`].\"] # [doc = \"\"] # [doc = \" See [`Context::listener`](crate::Context::listener) to get access to a view's state from this callback.\"] fn on_hover (mut self, listener : impl Fn (& bool, & mut Window, & mut App) + 'static) -> Self where Self : Sized, { self . interactivity () . on_hover (listener); self } # [doc = \" Use the given callback to construct a new tooltip view when the mouse hovers over this element.\"] # [doc = \" The fluent API equivalent to [`Interactivity::tooltip`].\"] fn tooltip (mut self, build_tooltip : impl Fn (& mut Window, & mut App) -> AnyView + 'static) -> Self where Self : Sized, { self . interactivity () . tooltip (build_tooltip); self } # [doc = \" Use the given callback to construct a new tooltip view when the mouse hovers over this element.\"] # [doc = \" The tooltip itself is also hoverable and won't disappear when the user moves the mouse into\"] # [doc = \" the tooltip. The fluent API equivalent to [`Interactivity::hoverable_tooltip`].\"] fn hoverable_tooltip (mut self, build_tooltip : impl Fn (& mut Window, & mut App) -> AnyView + 'static,) -> Self where Self : Sized, { self . interactivity () . hoverable_tooltip (build_tooltip); self } # [doc = \" Set the delay before this element's tooltip is shown.\"] # [doc = \" The fluent API equivalent to [`Interactivity::tooltip_show_delay`].\"] fn tooltip_show_delay (mut self, delay : Duration) -> Self where Self : Sized, { self . interactivity () . tooltip_show_delay (delay); self } }",
      "cfg": []
    },
    {
      "id": "gpui::elements::div::div",
      "name": "div",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::div",
      "path": "gpui::elements::div",
      "source": "crates/gpui/src/elements/div.rs",
      "summary": "Construct a new [`Div`] element",
      "documentation": "Construct a new [`Div`] element",
      "signature": "pub fn div () -> Div",
      "cfg": []
    },
    {
      "id": "gpui::elements::document_selection::DocumentSelectionState",
      "name": "DocumentSelectionState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "The document selection of one window.",
      "documentation": "The document selection of one window.\n\nThis lives on [`Window`](crate::Window) rather than in a global, so it\nfollows the window's own lifetime and a closed window leaves nothing\nbehind.",
      "signature": "# [doc = \" The document selection of one window.\"] # [doc = \"\"] # [doc = \" This lives on [`Window`](crate::Window) rather than in a global, so it\"] # [doc = \" follows the window's own lifetime and a closed window leaves nothing\"] # [doc = \" behind.\"] # [derive (Clone, Debug, Default)] pub struct DocumentSelectionState { scope : SelectionScopeId, anchor : Option<SelectionEndpoint>, focus : Option<SelectionEndpoint>, dragging : bool, drag_origin : Option<SelectionContentKey>, drag_unit : Option<(SelectionContentKey, u64, Range<usize>)>, drag_kind : SelectionUnit, autoscroll : Point<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::document_selection::DocumentSelectionState::anchor",
      "name": "anchor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "The end the selection was started from.",
      "documentation": "The end the selection was started from.",
      "signature": "pub fn anchor (& self) -> Option<& SelectionEndpoint>",
      "cfg": [],
      "target": "DocumentSelectionState"
    },
    {
      "id": "gpui::elements::document_selection::DocumentSelectionState::autoscroll_delta",
      "name": "autoscroll_delta",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "How far a host should scroll to keep a drag that left the mounted content moving, in logical pixels per frame.",
      "documentation": "How far a host should scroll to keep a drag that left the mounted\ncontent moving, in logical pixels per frame.\n\nZero whenever no drag is in progress. GPUI reports the overflow and\nscrolls nothing itself, because it does not own the container.",
      "signature": "pub fn autoscroll_delta (& self) -> Point<Pixels>",
      "cfg": [],
      "target": "DocumentSelectionState"
    },
    {
      "id": "gpui::elements::document_selection::DocumentSelectionState::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Forgets the selection entirely.",
      "documentation": "Forgets the selection entirely.",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "DocumentSelectionState"
    },
    {
      "id": "gpui::elements::document_selection::DocumentSelectionState::focus",
      "name": "focus",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "The end the selection currently reaches.",
      "documentation": "The end the selection currently reaches.",
      "signature": "pub fn focus (& self) -> Option<& SelectionEndpoint>",
      "cfg": [],
      "target": "DocumentSelectionState"
    },
    {
      "id": "gpui::elements::document_selection::DocumentSelectionState::is_dragging",
      "name": "is_dragging",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Whether a pointer drag is extending the selection right now.",
      "documentation": "Whether a pointer drag is extending the selection right now.",
      "signature": "pub fn is_dragging (& self) -> bool",
      "cfg": [],
      "target": "DocumentSelectionState"
    },
    {
      "id": "gpui::elements::document_selection::DocumentSelectionState::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Whether anything at all is selected.",
      "documentation": "Whether anything at all is selected.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "DocumentSelectionState"
    },
    {
      "id": "gpui::elements::document_selection::DocumentSelectionState::ordered",
      "name": "ordered",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "The two ends in reading order, low first.",
      "documentation": "The two ends in reading order, low first.",
      "signature": "pub fn ordered (& self) -> Option<(& SelectionEndpoint, & SelectionEndpoint)>",
      "cfg": [],
      "target": "DocumentSelectionState"
    },
    {
      "id": "gpui::elements::document_selection::DocumentSelectionState::owns_drag",
      "name": "owns_drag",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Whether `key` is the participant that owns the drag in progress.",
      "documentation": "Whether `key` is the participant that owns the drag in progress.\n\nExactly one participant answers a pointer move, so a drag that has left\nthe text it started in still has one owner rather than as many opinions\nas there are mounted paragraphs.",
      "signature": "pub fn owns_drag (& self, key : & SelectionContentKey) -> bool",
      "cfg": [],
      "target": "DocumentSelectionState"
    },
    {
      "id": "gpui::elements::document_selection::DocumentSelectionState::range_for",
      "name": "range_for",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "The byte range of one participant that this selection covers.",
      "documentation": "The byte range of one participant that this selection covers.\n\nReturns `None` when the participant lies outside the selection or in\nanother scope. A participant strictly between the two ends is covered\nin full without needing to have been registered when the ends were\nplaced.",
      "signature": "pub fn range_for (& self, key : & SelectionContentKey, scope : SelectionScopeId, order : u64, text_len : usize,) -> Option<Range<usize>>",
      "cfg": [],
      "target": "DocumentSelectionState"
    },
    {
      "id": "gpui::elements::document_selection::DocumentSelectionState::scope",
      "name": "scope",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "The scope the current selection belongs to.",
      "documentation": "The scope the current selection belongs to.",
      "signature": "pub fn scope (& self) -> SelectionScopeId",
      "cfg": [],
      "target": "DocumentSelectionState"
    },
    {
      "id": "gpui::elements::document_selection::SelectionContentKey",
      "name": "SelectionContentKey",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "The stable identity of one participant in a document selection.",
      "documentation": "The stable identity of one participant in a document selection.\n\nA key states what the content *is*. Deriving one from a row index makes a\nselection follow the viewport instead of the text, which is the failure this\ntype exists to prevent.",
      "signature": "# [doc = \" The stable identity of one participant in a document selection.\"] # [doc = \"\"] # [doc = \" A key states what the content *is*. Deriving one from a row index makes a\"] # [doc = \" selection follow the viewport instead of the text, which is the failure this\"] # [doc = \" type exists to prevent.\"] # [derive (Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct SelectionContentKey (SharedString);",
      "cfg": []
    },
    {
      "id": "gpui::elements::document_selection::SelectionContentKey::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "The identity as it was declared.",
      "documentation": "The identity as it was declared.",
      "signature": "pub fn as_str (& self) -> & str",
      "cfg": [],
      "target": "SelectionContentKey"
    },
    {
      "id": "gpui::elements::document_selection::SelectionContentKey::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Names one participant by its business identity.",
      "documentation": "Names one participant by its business identity.",
      "signature": "pub fn new (id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SelectionContentKey"
    },
    {
      "id": "gpui::elements::document_selection::SelectionCopy",
      "name": "SelectionCopy",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "The result of copying a document selection.",
      "documentation": "The result of copying a document selection.",
      "signature": "# [doc = \" The result of copying a document selection.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct SelectionCopy { # [doc = \" The selected text of every participant the copy could see, joined in\"] # [doc = \" reading order.\"] pub text : String, # [doc = \" How many participants contributed.\"] pub participants : usize, # [doc = \" Whether the copy could prove it saw the whole span.\"] # [doc = \"\"] # [doc = \" `false` means content was selected that GPUI could not read: an\"] # [doc = \" endpoint is no longer mounted, or the span crosses a participant that\"] # [doc = \" declared itself [`SelectionCoverage::Virtualized`]. The text is still\"] # [doc = \" what was actually read, never a guess.\"] pub complete : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::document_selection::SelectionCoverage",
      "name": "SelectionCoverage",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "How much of its content a participant can vouch for.",
      "documentation": "How much of its content a participant can vouch for.",
      "signature": "# [doc = \" How much of its content a participant can vouch for.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub enum SelectionCoverage { # [doc = \" Every participant of this content is mounted whenever any of it is, so\"] # [doc = \" a span that crosses it has been seen in full.\"] # [default] Complete, # [doc = \" This participant is one mounted window onto a longer run. It can report\"] # [doc = \" its own text and nothing about its neighbours.\"] Virtualized, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::document_selection::SelectionEndpoint",
      "name": "SelectionEndpoint",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "One end of a document selection.",
      "documentation": "One end of a document selection.\n\nThe endpoint retains the reading order it was placed at, so resolving a\nrange never requires the participant at the other end to still be mounted.",
      "signature": "# [doc = \" One end of a document selection.\"] # [doc = \"\"] # [doc = \" The endpoint retains the reading order it was placed at, so resolving a\"] # [doc = \" range never requires the participant at the other end to still be mounted.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct SelectionEndpoint { # [doc = \" Which participant the end sits in.\"] pub key : SelectionContentKey, # [doc = \" That participant's reading order when the end was placed.\"] pub order : u64, # [doc = \" The byte offset within that participant's text.\"] pub offset : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::document_selection::SelectionParticipant",
      "name": "SelectionParticipant",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "What one participant reports about itself for one frame.",
      "documentation": "What one participant reports about itself for one frame.",
      "signature": "# [doc = \" What one participant reports about itself for one frame.\"] # [derive (Clone)] pub struct SelectionParticipant { key : SelectionContentKey, scope : SelectionScopeId, order : u64, bounds : Bounds<Pixels>, text : SharedString, rows : Vec<Range<usize>>, coverage : SelectionCoverage, sensitive : bool, resolve : Option<SelectionResolver>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::document_selection::SelectionParticipant::is_sensitive",
      "name": "is_sensitive",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Whether this participant declined to take part.",
      "documentation": "Whether this participant declined to take part.",
      "signature": "pub fn is_sensitive (& self) -> bool",
      "cfg": [],
      "target": "SelectionParticipant"
    },
    {
      "id": "gpui::elements::document_selection::SelectionParticipant::key",
      "name": "key",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "The identity this participant declared.",
      "documentation": "The identity this participant declared.",
      "signature": "pub fn key (& self) -> & SelectionContentKey",
      "cfg": [],
      "target": "SelectionParticipant"
    },
    {
      "id": "gpui::elements::document_selection::SelectionParticipant::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Declares a participant at a position in reading order.",
      "documentation": "Declares a participant at a position in reading order.",
      "signature": "pub fn new (key : impl Into<SelectionContentKey>, order : u64, bounds : Bounds<Pixels>) -> Self",
      "cfg": [],
      "target": "SelectionParticipant"
    },
    {
      "id": "gpui::elements::document_selection::SelectionParticipant::resolver",
      "name": "resolver",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Supplies the mapping from a window position to a byte offset.",
      "documentation": "Supplies the mapping from a window position to a byte offset.\n\nWithout one, a drag reaching this participant lands at its start or its\nend rather than inside it.",
      "signature": "pub fn resolver (mut self, resolve : SelectionResolver) -> Self",
      "cfg": [],
      "target": "SelectionParticipant"
    },
    {
      "id": "gpui::elements::document_selection::SelectionParticipant::rows",
      "name": "rows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "The visual rows a triple click selects by.",
      "documentation": "The visual rows a triple click selects by.",
      "signature": "pub fn rows (mut self, rows : Vec<Range<usize>>) -> Self",
      "cfg": [],
      "target": "SelectionParticipant"
    },
    {
      "id": "gpui::elements::document_selection::SelectionParticipant::scope",
      "name": "scope",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Places the participant in an isolated scope.",
      "documentation": "Places the participant in an isolated scope.",
      "signature": "pub fn scope (mut self, scope : SelectionScopeId) -> Self",
      "cfg": [],
      "target": "SelectionParticipant"
    },
    {
      "id": "gpui::elements::document_selection::SelectionParticipant::sensitive",
      "name": "sensitive",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Refuses registration entirely.",
      "documentation": "Refuses registration entirely.\n\nA sensitive participant takes no part in a document selection and its\nbytes never reach the aggregate copy path.",
      "signature": "pub fn sensitive (mut self, sensitive : bool) -> Self",
      "cfg": [],
      "target": "SelectionParticipant"
    },
    {
      "id": "gpui::elements::document_selection::SelectionParticipant::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "The text this participant projects selection offsets onto.",
      "documentation": "The text this participant projects selection offsets onto.",
      "signature": "pub fn text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SelectionParticipant"
    },
    {
      "id": "gpui::elements::document_selection::SelectionParticipant::virtualized",
      "name": "virtualized",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "States that this participant is one mounted window onto a longer run, so a span crossing it cannot be reported as a complete copy.",
      "documentation": "States that this participant is one mounted window onto a longer run,\nso a span crossing it cannot be reported as a complete copy.",
      "signature": "pub fn virtualized (mut self) -> Self",
      "cfg": [],
      "target": "SelectionParticipant"
    },
    {
      "id": "gpui::elements::document_selection::SelectionResolver",
      "name": "SelectionResolver",
      "kind": "type",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Maps a window position to a byte offset in one participant's text.",
      "documentation": "Maps a window position to a byte offset in one participant's text.\n\nThe participant that owns a drag needs this to place the far end of a\nselection inside a participant it has no layout for.",
      "signature": "# [doc = \" Maps a window position to a byte offset in one participant's text.\"] # [doc = \"\"] # [doc = \" The participant that owns a drag needs this to place the far end of a\"] # [doc = \" selection inside a participant it has no layout for.\"] pub type SelectionResolver = Rc<dyn Fn (Point<Pixels>) -> usize>;",
      "cfg": []
    },
    {
      "id": "gpui::elements::document_selection::SelectionScope",
      "name": "SelectionScope",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Draws its child inside an isolated text-selection scope.",
      "documentation": "Draws its child inside an isolated text-selection scope.\n\nA drag started inside the scope never reaches text outside it, and text\noutside never joins a selection started within, which is what keeps a\ndialog mounted over a document from being selected together with it.",
      "signature": "# [doc = \" Draws its child inside an isolated text-selection scope.\"] # [doc = \"\"] # [doc = \" A drag started inside the scope never reaches text outside it, and text\"] # [doc = \" outside never joins a selection started within, which is what keeps a\"] # [doc = \" dialog mounted over a document from being selected together with it.\"] pub struct SelectionScope { scope : SelectionScopeId, child : Option<crate::AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::document_selection::SelectionScopeId",
      "name": "SelectionScopeId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "An opaque isolation boundary within one window.",
      "documentation": "An opaque isolation boundary within one window.\n\nTwo participants in different scopes are never part of the same selection,\nwhatever their reading order says.",
      "signature": "# [doc = \" An opaque isolation boundary within one window.\"] # [doc = \"\"] # [doc = \" Two participants in different scopes are never part of the same selection,\"] # [doc = \" whatever their reading order says.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct SelectionScopeId (u64);",
      "cfg": []
    },
    {
      "id": "gpui::elements::document_selection::SelectionScopeId::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Derives a stable scope from anything a caller already identifies an isolated surface by, such as a dialog's element id.",
      "documentation": "Derives a stable scope from anything a caller already identifies an\nisolated surface by, such as a dialog's element id.",
      "signature": "pub fn new (seed : impl Hash) -> Self",
      "cfg": [],
      "target": "SelectionScopeId"
    },
    {
      "id": "gpui::elements::document_selection::SelectionUnit",
      "name": "SelectionUnit",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Which selection gesture a pointer press opened.",
      "documentation": "Which selection gesture a pointer press opened.",
      "signature": "# [doc = \" Which selection gesture a pointer press opened.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub enum SelectionUnit { # [doc = \" One insertion point, extended by graphemes.\"] # [default] Caret, # [doc = \" A word, extended a word at a time.\"] Word, # [doc = \" A visual row, extended a row at a time.\"] Row, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::document_selection::selection_scope",
      "name": "selection_scope",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::document_selection",
      "path": "gpui::elements::document_selection",
      "source": "crates/gpui/src/elements/document_selection.rs",
      "summary": "Isolates `child` in its own text-selection scope, seeded by `seed`.",
      "documentation": "Isolates `child` in its own text-selection scope, seeded by `seed`.",
      "signature": "pub fn selection_scope (seed : impl Hash, child : impl crate::IntoElement) -> SelectionScope",
      "cfg": []
    },
    {
      "id": "gpui::elements::image_cache::AnyImageCache",
      "name": "AnyImageCache",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "A dynamically typed image cache, which can be used to store any image cache",
      "documentation": "A dynamically typed image cache, which can be used to store any image cache",
      "signature": "# [doc = \" A dynamically typed image cache, which can be used to store any image cache\"] # [derive (Clone)] pub struct AnyImageCache { image_cache : AnyEntity, load_fn : fn (image_cache : & AnyEntity, resource : & Resource, window : & mut Window, cx : & mut App,) -> Option<Result<Arc<RenderImage>, ImageCacheError>>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::image_cache::AnyImageCache::load",
      "name": "load",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "Load an image given a resource returns the result of loading the image if it has finished loading, or None if it is still loading",
      "documentation": "Load an image given a resource\nreturns the result of loading the image if it has finished loading, or None if it is still loading",
      "signature": "pub fn load (& self, resource : & Resource, window : & mut Window, cx : & mut App,) -> Option<Result<Arc<RenderImage>, ImageCacheError>>",
      "cfg": [],
      "target": "AnyImageCache"
    },
    {
      "id": "gpui::elements::image_cache::ImageCache",
      "name": "ImageCache",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "An object that can handle the caching and unloading of images. Implementations of this trait should ensure that images are removed from all windows when they are no longer needed.",
      "documentation": "An object that can handle the caching and unloading of images.\nImplementations of this trait should ensure that images are removed from all windows when they are no longer needed.",
      "signature": "# [doc = \" An object that can handle the caching and unloading of images.\"] # [doc = \" Implementations of this trait should ensure that images are removed from all windows when they are no longer needed.\"] pub trait ImageCache : 'static { # [doc = \" Load an image given a resource\"] # [doc = \" returns the result of loading the image if it has finished loading, or None if it is still loading\"] fn load (& mut self, resource : & Resource, window : & mut Window, cx : & mut App,) -> Option<Result<Arc<RenderImage>, ImageCacheError>>; }",
      "cfg": []
    },
    {
      "id": "gpui::elements::image_cache::ImageCacheElement",
      "name": "ImageCacheElement",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "An image cache element.",
      "documentation": "An image cache element.",
      "signature": "# [doc = \" An image cache element.\"] pub struct ImageCacheElement { image_cache_provider : Box<dyn ImageCacheProvider>, style : StyleRefinement, children : SmallVec<[AnyElement; 2]>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::image_cache::ImageCacheItem",
      "name": "ImageCacheItem",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "An image cache item",
      "documentation": "An image cache item",
      "signature": "# [doc = \" An image cache item\"] pub enum ImageCacheItem { # [doc = \" The associated image is currently loading\"] Loading (ImageLoadingTask), # [doc = \" This item has loaded an image.\"] Loaded (Result<Arc<RenderImage>, ImageCacheError>), }",
      "cfg": []
    },
    {
      "id": "gpui::elements::image_cache::ImageCacheItem::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "Attempt to get the image from the cache item.",
      "documentation": "Attempt to get the image from the cache item.",
      "signature": "pub fn get (& mut self) -> Option<Result<Arc<RenderImage>, ImageCacheError>>",
      "cfg": [],
      "target": "ImageCacheItem"
    },
    {
      "id": "gpui::elements::image_cache::ImageCacheProvider",
      "name": "ImageCacheProvider",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "An object that can create an ImageCache during the render phase. See the ImageCache trait for more information.",
      "documentation": "An object that can create an ImageCache during the render phase.\nSee the ImageCache trait for more information.",
      "signature": "# [doc = \" An object that can create an ImageCache during the render phase.\"] # [doc = \" See the ImageCache trait for more information.\"] pub trait ImageCacheProvider : 'static { # [doc = \" Called during the request_layout phase to create an ImageCache.\"] fn provide (& mut self, _window : & mut Window, _cx : & mut App) -> AnyImageCache; }",
      "cfg": []
    },
    {
      "id": "gpui::elements::image_cache::ImageLoadingTask",
      "name": "ImageLoadingTask",
      "kind": "type",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "An image loading task associated with an image cache.",
      "documentation": "An image loading task associated with an image cache.",
      "signature": "# [doc = \" An image loading task associated with an image cache.\"] pub type ImageLoadingTask = Shared<Task<Result<Arc<RenderImage>, ImageCacheError>>>;",
      "cfg": []
    },
    {
      "id": "gpui::elements::image_cache::RetainAllImageCache",
      "name": "RetainAllImageCache",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "An implementation of ImageCache, that uses an LRU caching strategy to unload images when the cache is full",
      "documentation": "An implementation of ImageCache, that uses an LRU caching strategy to unload images when the cache is full",
      "signature": "# [doc = \" An implementation of ImageCache, that uses an LRU caching strategy to unload images when the cache is full\"] pub struct RetainAllImageCache (HashMap<u64, ImageCacheItem>);",
      "cfg": []
    },
    {
      "id": "gpui::elements::image_cache::RetainAllImageCache::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "Clear the image cache.",
      "documentation": "Clear the image cache.",
      "signature": "pub fn clear (& mut self, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "RetainAllImageCache"
    },
    {
      "id": "gpui::elements::image_cache::RetainAllImageCache::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "Returns true if the cache is empty.",
      "documentation": "Returns true if the cache is empty.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "RetainAllImageCache"
    },
    {
      "id": "gpui::elements::image_cache::RetainAllImageCache::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "Returns the number of images in the cache.",
      "documentation": "Returns the number of images in the cache.",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "RetainAllImageCache"
    },
    {
      "id": "gpui::elements::image_cache::RetainAllImageCache::load",
      "name": "load",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "Load an image from the given source.",
      "documentation": "Load an image from the given source.\n\nReturns `None` if the image is loading.",
      "signature": "pub fn load (& mut self, source : & Resource, window : & mut Window, cx : & mut App,) -> Option<Result<Arc<RenderImage>, ImageCacheError>>",
      "cfg": [],
      "target": "RetainAllImageCache"
    },
    {
      "id": "gpui::elements::image_cache::RetainAllImageCache::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "Create a new image cache.",
      "documentation": "Create a new image cache.",
      "signature": "pub fn new (cx : & mut App) -> Entity<Self>",
      "cfg": [],
      "target": "RetainAllImageCache"
    },
    {
      "id": "gpui::elements::image_cache::RetainAllImageCache::remove",
      "name": "remove",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "Remove the image from the cache by the given source.",
      "documentation": "Remove the image from the cache by the given source.",
      "signature": "pub fn remove (& mut self, source : & Resource, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "RetainAllImageCache"
    },
    {
      "id": "gpui::elements::image_cache::RetainAllImageCacheProvider",
      "name": "RetainAllImageCacheProvider",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "A provider struct for creating a retain-all image cache inline",
      "documentation": "A provider struct for creating a retain-all image cache inline",
      "signature": "# [doc = \" A provider struct for creating a retain-all image cache inline\"] pub struct RetainAllImageCacheProvider { id : ElementId, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::image_cache::image_cache",
      "name": "image_cache",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "An image cache element, all its child img elements will use the cache specified by this element. Note that this could as simple as passing an `Entity<T: ImageCache>`",
      "documentation": "An image cache element, all its child img elements will use the cache specified by this element.\nNote that this could as simple as passing an `Entity<T: ImageCache>`",
      "signature": "pub fn image_cache (image_cache_provider : impl ImageCacheProvider) -> ImageCacheElement",
      "cfg": []
    },
    {
      "id": "gpui::elements::image_cache::retain_all",
      "name": "retain_all",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::image_cache",
      "path": "gpui::elements::image_cache",
      "source": "crates/gpui/src/elements/image_cache.rs",
      "summary": "Constructs a retain-all image cache that uses the element state associated with the given ID.",
      "documentation": "Constructs a retain-all image cache that uses the element state associated with the given ID.",
      "signature": "pub fn retain_all (id : impl Into<ElementId>) -> RetainAllImageCacheProvider",
      "cfg": []
    },
    {
      "id": "gpui::elements::img::ImageAssetLoader",
      "name": "ImageAssetLoader",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "An image loader for the GPUI asset system",
      "documentation": "An image loader for the GPUI asset system",
      "signature": "# [doc = \" An image loader for the GPUI asset system\"] # [derive (Clone)] pub enum ImageAssetLoader { }",
      "cfg": []
    },
    {
      "id": "gpui::elements::img::ImageCacheError",
      "name": "ImageCacheError",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "An error that can occur when interacting with the image cache.",
      "documentation": "An error that can occur when interacting with the image cache.",
      "signature": "# [doc = \" An error that can occur when interacting with the image cache.\"] # [derive (Debug, Error, Clone)] pub enum ImageCacheError { # [doc = \" Some other kind of error occurred\"] # [error (\"error: {0}\")] Other (# [from] Arc<anyhow::Error>), # [doc = \" An error that occurred while reading the image from disk.\"] # [error (\"IO error: {0}\")] Io (Arc<std::io::Error>), # [doc = \" An error that occurred while processing an image.\"] # [error (\"unexpected http status for {uri}: {status}, body: {body}\")] BadStatus { # [doc = \" The URI of the image.\"] uri : SharedUri, # [doc = \" The HTTP status code.\"] status : http_client::StatusCode, # [doc = \" The HTTP response body.\"] body : String, }, # [doc = \" An error that occurred while processing an asset.\"] # [error (\"asset error: {0}\")] Asset (SharedString), # [doc = \" An error that occurred while processing an image.\"] # [error (\"image error: {0}\")] Image (Arc<ImageError>), # [doc = \" An error that occurred while processing an SVG.\"] # [error (\"svg error: {0}\")] Usvg (Arc<usvg::Error>), }",
      "cfg": []
    },
    {
      "id": "gpui::elements::img::ImageSource",
      "name": "ImageSource",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "A source of image content.",
      "documentation": "A source of image content.",
      "signature": "# [doc = \" A source of image content.\"] # [derive (Clone)] pub enum ImageSource { # [doc = \" The image content will be loaded from some resource location\"] Resource (Resource), # [doc = \" Cached image data\"] Render (Arc<RenderImage>), # [doc = \" Cached image data\"] Image (Arc<Image>), # [doc = \" A custom loading function to use\"] Custom (Arc<dyn Fn (& mut Window, & mut App) -> Option<Result<Arc<RenderImage>, ImageCacheError>>>), }",
      "cfg": []
    },
    {
      "id": "gpui::elements::img::ImageSource::is_asset_cached",
      "name": "is_asset_cached",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "Check whether this image source is present in the asset system (loading or loaded), without fetching it.",
      "documentation": "Check whether this image source is present in the asset system (loading\nor loaded), without fetching it.",
      "signature": "pub fn is_asset_cached (& self, cx : & App) -> bool",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "ImageSource"
    },
    {
      "id": "gpui::elements::img::ImageSource::remove_asset",
      "name": "remove_asset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "Remove this image source from the asset system",
      "documentation": "Remove this image source from the asset system",
      "signature": "pub fn remove_asset (& self, cx : & mut App)",
      "cfg": [],
      "target": "ImageSource"
    },
    {
      "id": "gpui::elements::img::ImageStyle",
      "name": "ImageStyle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "The style of an image element.",
      "documentation": "The style of an image element.",
      "signature": "# [doc = \" The style of an image element.\"] pub struct ImageStyle { grayscale : bool, object_fit : ObjectFit, loading : Option<Box<dyn Fn () -> AnyElement>>, fallback : Option<Box<dyn Fn () -> AnyElement>>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::img::Img",
      "name": "Img",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "An image element.",
      "documentation": "An image element.",
      "signature": "# [doc = \" An image element.\"] pub struct Img { interactivity : Interactivity, source : ImageSource, style : ImageStyle, image_cache : Option<AnyImageCache>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::img::Img::extensions",
      "name": "extensions",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "A list of all format extensions currently supported by this img element",
      "documentation": "A list of all format extensions currently supported by this img element",
      "signature": "pub fn extensions () -> & 'static [& 'static str]",
      "cfg": [],
      "target": "Img"
    },
    {
      "id": "gpui::elements::img::Img::image_cache",
      "name": "image_cache",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "Sets the image cache for the current node.",
      "documentation": "Sets the image cache for the current node.\n\nIf the `image_cache` is not explicitly provided, the function will determine the image cache by:\n\n1. Checking if any ancestor node of the current node contains an `ImageCacheElement`, If such a node exists, the image cache specified by that ancestor will be used.\n2. If no ancestor node contains an `ImageCacheElement`, the global image cache will be used as a fallback.\n\nThis mechanism provides a flexible way to manage image caching, allowing precise control when needed,\nwhile ensuring a default behavior when no cache is explicitly specified.",
      "signature": "pub fn image_cache<I : ImageCache> (self, image_cache : & Entity<I>) -> Self",
      "cfg": [],
      "target": "Img"
    },
    {
      "id": "gpui::elements::img::ImgLayoutState",
      "name": "ImgLayoutState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "The image layout state between frames",
      "documentation": "The image layout state between frames",
      "signature": "# [doc = \" The image layout state between frames\"] pub struct ImgLayoutState { frame_index : usize, replacement : Option<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::img::ImgResourceLoader",
      "name": "ImgResourceLoader",
      "kind": "type",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "A type alias to the resource loader that the `img()` element uses.",
      "documentation": "A type alias to the resource loader that the `img()` element uses.\n\nNote: that this is only for Resources, like URLs or file paths.\nCustom loaders, or external images will not use this asset loader",
      "signature": "# [doc = \" A type alias to the resource loader that the `img()` element uses.\"] # [doc = \"\"] # [doc = \" Note: that this is only for Resources, like URLs or file paths.\"] # [doc = \" Custom loaders, or external images will not use this asset loader\"] pub type ImgResourceLoader = AssetLogger<ImageAssetLoader>;",
      "cfg": []
    },
    {
      "id": "gpui::elements::img::LOADING_DELAY",
      "name": "LOADING_DELAY",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "The delay before showing the loading state.",
      "documentation": "The delay before showing the loading state.",
      "signature": "pub const LOADING_DELAY: Duration",
      "cfg": []
    },
    {
      "id": "gpui::elements::img::StyledImage",
      "name": "StyledImage",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "Style an image element.",
      "documentation": "Style an image element.",
      "signature": "# [doc = \" Style an image element.\"] pub trait StyledImage : Sized { # [doc = \" Get a mutable [ImageStyle] from the element.\"] fn image_style (& mut self) -> & mut ImageStyle; # [doc = \" Set the image to be displayed in grayscale.\"] fn grayscale (mut self, grayscale : bool) -> Self { self . image_style () . grayscale = grayscale; self } # [doc = \" Set the object fit for the image.\"] fn object_fit (mut self, object_fit : ObjectFit) -> Self { self . image_style () . object_fit = object_fit; self } # [doc = \" Set a fallback function that will be invoked to render an error view should\"] # [doc = \" the image fail to load.\"] fn with_fallback (mut self, fallback : impl Fn () -> AnyElement + 'static) -> Self { self . image_style () . fallback = Some (Box::new (fallback)); self } # [doc = \" Set a fallback function that will be invoked to render a view while the image\"] # [doc = \" is still being loaded.\"] fn with_loading (mut self, loading : impl Fn () -> AnyElement + 'static) -> Self { self . image_style () . loading = Some (Box::new (loading)); self } }",
      "cfg": []
    },
    {
      "id": "gpui::elements::img::img",
      "name": "img",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::img",
      "path": "gpui::elements::img",
      "source": "crates/gpui/src/elements/img.rs",
      "summary": "Create a new image element.",
      "documentation": "Create a new image element.",
      "signature": "pub fn img (source : impl Into<ImageSource>) -> Img",
      "cfg": []
    },
    {
      "id": "gpui::elements::list::FollowMode",
      "name": "FollowMode",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Controls whether the list automatically follows new content at the end.",
      "documentation": "Controls whether the list automatically follows new content at the end.",
      "signature": "# [doc = \" Controls whether the list automatically follows new content at the end.\"] # [derive (Clone, Copy, Debug, Default, Eq, PartialEq)] pub enum FollowMode { # [doc = \" Normal scrolling — no automatic following.\"] # [default] Normal, # [doc = \" The list should auto-scroll along with the tail, when scrolled to bottom.\"] Tail, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::list::List",
      "name": "List",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "A list element",
      "documentation": "A list element",
      "signature": "# [doc = \" A list element\"] pub struct List { state : ListState, render_item : Box<RenderItemFn>, style : StyleRefinement, sizing_behavior : ListSizingBehavior, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::list::List::with_sizing_behavior",
      "name": "with_sizing_behavior",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Set the sizing behavior for the list.",
      "documentation": "Set the sizing behavior for the list.",
      "signature": "pub fn with_sizing_behavior (mut self, behavior : ListSizingBehavior) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui::elements::list::ListAlignment",
      "name": "ListAlignment",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Whether the list is scrolling from top to bottom or bottom to top.",
      "documentation": "Whether the list is scrolling from top to bottom or bottom to top.",
      "signature": "# [doc = \" Whether the list is scrolling from top to bottom or bottom to top.\"] # [derive (Clone, Copy, Debug, Eq, PartialEq)] pub enum ListAlignment { # [doc = \" The list is scrolling from top to bottom, like most lists.\"] Top, # [doc = \" The list is scrolling from bottom to top, like a chat log.\"] Bottom, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::list::ListHorizontalSizingBehavior",
      "name": "ListHorizontalSizingBehavior",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "The horizontal sizing behavior to apply during layout.",
      "documentation": "The horizontal sizing behavior to apply during layout.",
      "signature": "# [doc = \" The horizontal sizing behavior to apply during layout.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum ListHorizontalSizingBehavior { # [doc = \" List items' width can never exceed the width of the list.\"] # [default] FitList, # [doc = \" List items' width may go over the width of the list, if any item is wider.\"] Unconstrained, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::list::ListMeasuringBehavior",
      "name": "ListMeasuringBehavior",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "The measuring behavior to apply during layout.",
      "documentation": "The measuring behavior to apply during layout.",
      "signature": "# [doc = \" The measuring behavior to apply during layout.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum ListMeasuringBehavior { # [doc = \" Measure all items in the list.\"] # [doc = \" Note: This can be expensive for the first frame in a large list.\"] Measure (bool), # [doc = \" Only measure visible items\"] # [default] Visible, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::list::ListOffset",
      "name": "ListOffset",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "An offset into the list's items, in terms of the item index and the number of pixels off the top left of the item.",
      "documentation": "An offset into the list's items, in terms of the item index and the number\nof pixels off the top left of the item.",
      "signature": "# [doc = \" An offset into the list's items, in terms of the item index and the number\"] # [doc = \" of pixels off the top left of the item.\"] # [derive (Debug, Clone, Copy, Default)] pub struct ListOffset { # [doc = \" The index of an item in the list\"] pub item_ix : usize, # [doc = \" The number of pixels to offset from the item index.\"] pub offset_in_item : Pixels, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::list::ListOffset::remap",
      "name": "remap",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Maps an anchor through an identity edit shared by fixed- and variable- height lists. Entries name unique previous indices, or `None` for new rows. Preserves the pixel remainder of a survivor; removal chooses the nearest surviving old-order successor, then predecessor, at offset zero. An explicit end sentinel maps to the new end. No survivors map to zero. Runs in linear time in the old and new row counts, without rendering.",
      "documentation": "Maps an anchor through an identity edit shared by fixed- and variable-\nheight lists. Entries name unique previous indices, or `None` for new\nrows. Preserves the pixel remainder of a survivor; removal chooses the\nnearest surviving old-order successor, then predecessor, at offset zero.\nAn explicit end sentinel maps to the new end. No survivors map to zero.\nRuns in linear time in the old and new row counts, without rendering.",
      "signature": "pub fn remap (self, previous_indices : & [Option<usize>], previous_count : usize) -> Self",
      "cfg": [],
      "target": "ListOffset"
    },
    {
      "id": "gpui::elements::list::ListPrepaintState",
      "name": "ListPrepaintState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Frame state used by the [List] element after layout.",
      "documentation": "Frame state used by the [List] element after layout.",
      "signature": "# [doc = \" Frame state used by the [List] element after layout.\"] pub struct ListPrepaintState { hitbox : Hitbox, layout : LayoutItemsResponse, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::list::ListScrollEvent",
      "name": "ListScrollEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "A scroll event that has been converted to be in terms of the list's items.",
      "documentation": "A scroll event that has been converted to be in terms of the list's items.",
      "signature": "# [doc = \" A scroll event that has been converted to be in terms of the list's items.\"] pub struct ListScrollEvent { # [doc = \" Actual clamped wheel movement in pixels, positive toward the end.\"] # [doc = \" Layout changes and programmatic scrolling do not emit this event.\"] pub scroll_delta : Pixels, # [doc = \" The range of items currently visible in the list, after applying the scroll event.\"] pub visible_range : Range<usize>, # [doc = \" The number of items that are currently visible in the list, after applying the scroll event.\"] pub count : usize, # [doc = \" Whether the list has been scrolled.\"] pub is_scrolled : bool, # [doc = \" Whether the list is currently in follow-tail mode (auto-scrolling to end).\"] pub is_following_tail : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::list::ListSizingBehavior",
      "name": "ListSizingBehavior",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "The sizing behavior to apply during layout.",
      "documentation": "The sizing behavior to apply during layout.",
      "signature": "# [doc = \" The sizing behavior to apply during layout.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum ListSizingBehavior { # [doc = \" The list should calculate its size based on the size of its items.\"] Infer, # [doc = \" The list should not calculate a fixed size.\"] # [default] Auto, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::list::ListState",
      "name": "ListState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "The list state that views must hold on behalf of the list element.",
      "documentation": "The list state that views must hold on behalf of the list element.",
      "signature": "# [doc = \" The list state that views must hold on behalf of the list element.\"] # [derive (Clone)] pub struct ListState (Rc<RefCell<StateInner>>);",
      "cfg": []
    },
    {
      "id": "gpui::elements::list::ListState::bounds_for_item",
      "name": "bounds_for_item",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Get the bounds for the given item in window coordinates, if it's been rendered.",
      "documentation": "Get the bounds for the given item in window coordinates, if it's\nbeen rendered.",
      "signature": "pub fn bounds_for_item (& self, ix : usize) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::is_following_tail",
      "name": "is_following_tail",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Returns whether the list is currently actively following the tail (snapping to the end on each layout).",
      "documentation": "Returns whether the list is currently actively following the\ntail (snapping to the end on each layout).",
      "signature": "pub fn is_following_tail (& self) -> bool",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::is_scrollbar_dragging",
      "name": "is_scrollbar_dragging",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Returns `true` if the scrollbar is currently being dragged.",
      "documentation": "Returns `true` if the scrollbar is currently being dragged.\n\nThis is set between [`scrollbar_drag_started`](Self::scrollbar_drag_started)\nand [`scrollbar_drag_ended`](Self::scrollbar_drag_ended) calls. Useful for\nconsumers that need to distinguish scrollbar drags from wheel/trackpad scrolls,\ne.g. to suppress auto-scroll behavior during manual positioning.",
      "signature": "pub fn is_scrollbar_dragging (& self) -> bool",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::is_scrolled_to_end",
      "name": "is_scrolled_to_end",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Whether the list is scrolled to the end, or `None` if the list is not scrollable or the total content height is not yet known.",
      "documentation": "Whether the list is scrolled to the end, or `None` if the list is\nnot scrollable or the total content height is not yet known.",
      "signature": "pub fn is_scrolled_to_end (& self) -> Option<bool>",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::item_count",
      "name": "item_count",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "The number of items in this list.",
      "documentation": "The number of items in this list.",
      "signature": "pub fn item_count (& self) -> usize",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::item_is_above_viewport",
      "name": "item_is_above_viewport",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Returns whether the item is entirely above the viewport, or `None` if the list has not measured enough layout to know.",
      "documentation": "Returns whether the item is entirely above the viewport, or `None` if\nthe list has not measured enough layout to know.\n\nA zero-height viewport still yields a definitive answer: callers may\nsize sibling UI based on this query (potentially squeezing the list\nitself to zero height), so returning `None` in that case would make\nthe answer oscillate from frame to frame.",
      "signature": "pub fn item_is_above_viewport (& self, ix : usize) -> Option<bool>",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::item_is_below_viewport",
      "name": "item_is_below_viewport",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Returns whether the item is entirely below the viewport, or `None` if the list has not measured enough layout to know.",
      "documentation": "Returns whether the item is entirely below the viewport, or `None` if\nthe list has not measured enough layout to know.\n\nSee [`Self::item_is_above_viewport`] for why a zero-height viewport\nstill yields a definitive answer.",
      "signature": "pub fn item_is_below_viewport (& self, ix : usize) -> Option<bool>",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::logical_scroll_top",
      "name": "logical_scroll_top",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Get the current scroll offset, in terms of the list's items.",
      "documentation": "Get the current scroll offset, in terms of the list's items.",
      "signature": "pub fn logical_scroll_top (& self) -> ListOffset",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::max_offset_for_scrollbar",
      "name": "max_offset_for_scrollbar",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Returns the maximum scroll offset according to the items we have measured. This value remains constant while dragging to prevent the scrollbar from moving away unexpectedly.",
      "documentation": "Returns the maximum scroll offset according to the items we have measured.\nThis value remains constant while dragging to prevent the scrollbar from moving away unexpectedly.",
      "signature": "pub fn max_offset_for_scrollbar (& self) -> Point<Pixels>",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::measure_all",
      "name": "measure_all",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Set the list to measure all items in the list in the first layout phase.",
      "documentation": "Set the list to measure all items in the list in the first layout phase.\n\nThis is useful for ensuring that the scrollbar size is correct instead of based on only rendered elements.",
      "signature": "pub fn measure_all (self) -> Self",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Construct a new list state, for storage on a view.",
      "documentation": "Construct a new list state, for storage on a view.\n\nThe overdraw parameter controls how much extra space is rendered\nabove and below the visible area. Elements within this area will\nbe measured even though they are not visible. This can help ensure\nthat the list doesn't flicker or pop in when scrolling.",
      "signature": "pub fn new (item_count : usize, alignment : ListAlignment, overdraw : Pixels) -> Self",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::remap_items",
      "name": "remap_items",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Reconciles row identity without discarding surviving measurements or focus handles. Each entry names that row's previous index; `None` creates an unmeasured row. Indices must be unique and in bounds.",
      "documentation": "Reconciles row identity without discarding surviving measurements or\nfocus handles. Each entry names that row's previous index; `None`\ncreates an unmeasured row. Indices must be unique and in bounds.\n\nThe anchored row retains its absolute within-row pixel offset, even\nacross arbitrary reorder. If removed, the nearest surviving successor\nin old order wins, then the nearest predecessor, with zero offset.\nNo survivor anchors the first new row. End-aligned following remains\nend-aligned. Callers own business IDs and revision invalidation.",
      "signature": "pub fn remap_items (& self, previous_indices : & [Option<usize>])",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::remeasure",
      "name": "remeasure",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Remeasure all items while preserving proportional scroll position.",
      "documentation": "Remeasure all items while preserving proportional scroll position.\n\nUse this when item heights may have changed (e.g., font size changes)\nbut the number and identity of items remains the same.",
      "signature": "pub fn remeasure (& self)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::remeasure_items",
      "name": "remeasure_items",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Mark items in `range` as needing remeasurement while preserving the current scroll position. Unlike [`Self::splice`], this does not change the number of items or blow away `logical_scroll_top`.",
      "documentation": "Mark items in `range` as needing remeasurement while preserving\nthe current scroll position. Unlike [`Self::splice`], this does\nnot change the number of items or blow away `logical_scroll_top`.\n\nUse this when an item's content has changed and its rendered\nheight may be different (e.g., streaming text, tool results\nloading), but the item itself still exists at the same index.",
      "signature": "pub fn remeasure_items (& self, range : Range<usize>)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::reset",
      "name": "reset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Reset this instantiation of the list state.",
      "documentation": "Reset this instantiation of the list state.\n\nNote that this will cause scroll events to be dropped until the next paint.",
      "signature": "pub fn reset (& self, element_count : usize)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::reset_with_uniform_height",
      "name": "reset_with_uniform_height",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Reset the list to `element_count` items, pre-populating every item with a uniform height hint so the scrollbar thumb is correctly sized from the first frame even for off-screen items.",
      "documentation": "Reset the list to `element_count` items, pre-populating every item with a\nuniform height hint so the scrollbar thumb is correctly sized from the first\nframe even for off-screen items.",
      "signature": "pub fn reset_with_uniform_height (& self, element_count : usize, height : Pixels)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::scroll_by",
      "name": "scroll_by",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Scroll the list by the given offset",
      "documentation": "Scroll the list by the given offset",
      "signature": "pub fn scroll_by (& self, distance : Pixels)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::scroll_px_offset_for_scrollbar",
      "name": "scroll_px_offset_for_scrollbar",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Returns the current scroll offset adjusted for the scrollbar.",
      "documentation": "Returns the current scroll offset adjusted for the scrollbar.\n\nThe returned offset has a negative `y` component representing\nhow far the content has scrolled.",
      "signature": "pub fn scroll_px_offset_for_scrollbar (& self) -> Point<Pixels>",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::scroll_to",
      "name": "scroll_to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Scroll the list to the given offset",
      "documentation": "Scroll the list to the given offset",
      "signature": "pub fn scroll_to (& self, mut scroll_top : ListOffset)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::scroll_to_end",
      "name": "scroll_to_end",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Scroll the list to the very end (past the last item).",
      "documentation": "Scroll the list to the very end (past the last item).\n\nUnlike [`Self::scroll_to_reveal_item`], this uses the total item count as\nthe anchor, so the list's layout pass will walk backwards from the end\nand always show the bottom of the last item — even when that item is\nstill growing (e.g. during streaming).",
      "signature": "pub fn scroll_to_end (& self)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::scroll_to_reveal_item",
      "name": "scroll_to_reveal_item",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Scroll the list to the given item, such that the item is fully visible.",
      "documentation": "Scroll the list to the given item, such that the item is fully visible.",
      "signature": "pub fn scroll_to_reveal_item (& self, ix : usize)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::scrollbar_drag_ended",
      "name": "scrollbar_drag_ended",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Called when the user stops dragging the scrollbar.",
      "documentation": "Called when the user stops dragging the scrollbar.\n\nSee `scrollbar_drag_started`.",
      "signature": "pub fn scrollbar_drag_ended (& self)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::scrollbar_drag_started",
      "name": "scrollbar_drag_started",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Call this method when the user starts dragging the scrollbar.",
      "documentation": "Call this method when the user starts dragging the scrollbar.\n\nThis will prevent the height reported to the scrollbar from changing during the drag\nas items in the overdraw get measured, and help offset scroll position changes accordingly.",
      "signature": "pub fn scrollbar_drag_started (& self)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::set_follow_mode",
      "name": "set_follow_mode",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Set the follow mode for the list. In `Tail` mode, the list will auto-scroll to the end and re-engage after the user scrolls back to the bottom. In `Normal` mode, no automatic following occurs.",
      "documentation": "Set the follow mode for the list. In `Tail` mode, the list\nwill auto-scroll to the end and re-engage after the user\nscrolls back to the bottom. In `Normal` mode, no automatic\nfollowing occurs.",
      "signature": "pub fn set_follow_mode (& self, mode : FollowMode)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::set_offset_from_scrollbar",
      "name": "set_offset_from_scrollbar",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Set the offset from the scrollbar",
      "documentation": "Set the offset from the scrollbar",
      "signature": "pub fn set_offset_from_scrollbar (& self, point : Point<Pixels>)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::set_scroll_handler",
      "name": "set_scroll_handler",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Set a handler that will be called when the list is scrolled.",
      "documentation": "Set a handler that will be called when the list is scrolled.",
      "signature": "pub fn set_scroll_handler (& self, handler : impl FnMut (& ListScrollEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::splice",
      "name": "splice",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Inform the list state that the items in `old_range` have been replaced by `count` new items that must be recalculated.",
      "documentation": "Inform the list state that the items in `old_range` have been replaced\nby `count` new items that must be recalculated.",
      "signature": "pub fn splice (& self, old_range : Range<usize>, count : usize)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::splice_focusable",
      "name": "splice_focusable",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Register with the list state that the items in `old_range` have been replaced by new items. As opposed to [`Self::splice`], this method allows an iterator of optional focus handles to be supplied to properly integrate with items in the list that can be focused. If a focused item is scrolled out of view, the list will continue to render it to allow keyboard interaction.",
      "documentation": "Register with the list state that the items in `old_range` have been replaced\nby new items. As opposed to [`Self::splice`], this method allows an iterator of optional focus handles\nto be supplied to properly integrate with items in the list that can be focused. If a focused item\nis scrolled out of view, the list will continue to render it to allow keyboard interaction.",
      "signature": "pub fn splice_focusable (& self, old_range : Range<usize>, focus_handles : impl IntoIterator<Item = Option<FocusHandle>>,)",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::viewport_bounds",
      "name": "viewport_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Return the bounds of the viewport in pixels.",
      "documentation": "Return the bounds of the viewport in pixels.",
      "signature": "pub fn viewport_bounds (& self) -> Bounds<Pixels>",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::ListState::with_uniform_item_height",
      "name": "with_uniform_item_height",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Pre-populate every unmeasured item with a uniform height hint so the scrollbar thumb is correctly sized from the first frame, without measuring all items up front.",
      "documentation": "Pre-populate every unmeasured item with a uniform height hint so the scrollbar thumb\nis correctly sized from the first frame, without measuring all items up front.\n\nAs items are actually rendered their real heights replace the hint, so the scrollbar\nconverges to the exact size over time. This is a cheaper alternative to [`Self::measure_all`]\nfor lists where items have roughly uniform heights (e.g. table rows).",
      "signature": "pub fn with_uniform_item_height (self, height : Pixels) -> Self",
      "cfg": [],
      "target": "ListState"
    },
    {
      "id": "gpui::elements::list::list",
      "name": "list",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::list",
      "path": "gpui::elements::list",
      "source": "crates/gpui/src/elements/list.rs",
      "summary": "Construct a new list element",
      "documentation": "Construct a new list element",
      "signature": "pub fn list (state : ListState, render_item : impl FnMut (usize, & mut Window, & mut App) -> AnyElement + 'static,) -> List",
      "cfg": []
    },
    {
      "id": "gpui::elements::platform_view::PlatformView",
      "name": "PlatformView",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::platform_view",
      "path": "gpui::elements::platform_view",
      "source": "crates/gpui/src/elements/platform_view.rs",
      "summary": "An element that gives a natively hosted view a place in GPUI's layout.",
      "documentation": "An element that gives a natively hosted view a place in GPUI's layout.\n\nSee [`platform_view`].",
      "signature": "# [doc = \" An element that gives a natively hosted view a place in GPUI's layout.\"] # [doc = \"\"] # [doc = \" See [`platform_view`].\"] pub struct PlatformView { handle : PlatformViewHandle, style : StyleRefinement, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::platform_view::platform_view",
      "name": "platform_view",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::platform_view",
      "path": "gpui::elements::platform_view",
      "source": "crates/gpui/src/elements/platform_view.rs",
      "summary": "Hosts a native platform view — an `NSView` on macOS or a child `HWND` on Windows or an X11 child on Linux — at the bounds this element is laid out at.",
      "documentation": "Hosts a native platform view — an `NSView` on macOS or a child `HWND` on\nWindows or an X11 child on Linux — at the bounds this element is laid out at.\n\nThe element itself paints nothing. Size it the way you would size any other\nelement; GPUI owns the native view's frame from then on and repositions it\nafter every frame it is painted in. A frame that does not paint the element\nhides and detaches the view, so unmounting is just not rendering it.\n\n# Stacking\n\nThe hosted view is ordered above GPUI's root scene. Content drawn on that\nsame base surface does not composite over the native view. When the window's\nscene overlay is enabled, deferred and window-level overlay content is drawn\non a separate surface above hosted views on macOS and Windows. X11 has no\nscene overlay above native children; hide the child before showing a GPUI\noverlay in its area. Rotation, scale, rounded masks and opacity are not\nnative-child composition operations and must not be applied to this element.\n`Window::with_visual_scale` explicitly panics when a native child is painted\nwith a nonidentity inherited mapping. Resizing a native frame is not an\nequivalent raster transform; host it outside that scope or supply a snapshot.\n\n# Clipping\n\nGPUI keeps the native view at its full layout bounds and applies the current\nrectangular content mask separately. Scrolling therefore crops the native\ncontent instead of resizing and reflowing it. A fully clipped view is\ndetached for that frame.\n\n# Platforms\n\nmacOS, Windows and Linux X11 host native views. Native Wayland and headless\nbackends reserve layout space only. Hosts must reject unsupported backends\nbefore constructing a native child rather than present empty space as success.",
      "signature": "pub fn platform_view (handle : PlatformViewHandle) -> PlatformView",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-1",
      "name": "anchored :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use anchored::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-10",
      "name": "list :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use list::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-11",
      "name": "platform_view :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use platform_view::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-12",
      "name": "reveal :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use reveal::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-13",
      "name": "scroll_target :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use scroll_target::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-14",
      "name": "selectable_text :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use selectable_text::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-15",
      "name": "sticky :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use sticky::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-16",
      "name": "surface :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use surface::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-17",
      "name": "svg :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use svg::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-18",
      "name": "text :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use text::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-19",
      "name": "uniform_list :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use uniform_list::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-2",
      "name": "animation :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use animation::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-3",
      "name": "canvas :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use canvas::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-4",
      "name": "container_query :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use container_query::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-5",
      "name": "deferred :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use deferred::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-6",
      "name": "div :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use div::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-7",
      "name": "document_selection :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use document_selection::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-8",
      "name": "image_cache :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use image_cache::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reexport-9",
      "name": "img :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements",
      "path": "gpui::elements",
      "source": "crates/gpui/src/elements/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use img::*;",
      "cfg": []
    },
    {
      "id": "gpui::elements::reveal::Reveal",
      "name": "Reveal",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::reveal",
      "path": "gpui::elements::reveal",
      "source": "crates/gpui/src/elements/reveal.rs",
      "summary": "A measured subtree revealed along one physical axis.",
      "documentation": "A measured subtree revealed along one physical axis.",
      "signature": "# [doc = \" A measured subtree revealed along one physical axis.\"] pub struct Reveal { id : ElementId, progress : f32, axis : Axis, from_end : bool, child : AnyElement, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::reveal::Reveal::axis",
      "name": "axis",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::reveal",
      "path": "gpui::elements::reveal",
      "source": "crates/gpui/src/elements/reveal.rs",
      "summary": "Reveal along `axis`. The default is [`Axis::Vertical`].",
      "documentation": "Reveal along `axis`. The default is [`Axis::Vertical`].",
      "signature": "pub fn axis (mut self, axis : Axis) -> Self",
      "cfg": [],
      "target": "Reveal"
    },
    {
      "id": "gpui::elements::reveal::Reveal::from_end",
      "name": "from_end",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::reveal",
      "path": "gpui::elements::reveal",
      "source": "crates/gpui/src/elements/reveal.rs",
      "summary": "Anchor the natural child to the physical bottom or right edge instead of the top or left edge while it is partially revealed.",
      "documentation": "Anchor the natural child to the physical bottom or right edge instead\nof the top or left edge while it is partially revealed.",
      "signature": "pub fn from_end (mut self) -> Self",
      "cfg": [],
      "target": "Reveal"
    },
    {
      "id": "gpui::elements::reveal::reveal",
      "name": "reveal",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::reveal",
      "path": "gpui::elements::reveal",
      "source": "crates/gpui/src/elements/reveal.rs",
      "summary": "Measures `child` at its natural extent, contributes `progress` of that extent to layout, and clips the subtree to the contributed bounds.",
      "documentation": "Measures `child` at its natural extent, contributes `progress` of that\nextent to layout, and clips the subtree to the contributed bounds.\n\n`Reveal` owns geometry, clipping, hit testing, and accessibility bounds; it\nowns no clock or easing policy. The caller supplies a normalized progress\nvalue on each frame. Values outside `0..=1` are clamped, and a non-finite\nvalue is treated as zero.\n\nThe primary axis is measured without a maximum so the child does not chase\nthe shrinking frame around it. Cross-axis constraints still come from the\nparent. At zero progress the child is measured but is neither prepainted nor\naddressable. During a partial reveal the child keeps its natural size under\na content mask, so visible pixels, hitboxes, and accessibility bounds agree.\nA stable `id` retains the latest natural measurement across frames; when\nthat measurement changes, `Reveal` requests one ordinary refresh.",
      "signature": "pub fn reveal (id : impl Into<ElementId>, progress : f32, child : impl IntoElement) -> Reveal",
      "cfg": []
    },
    {
      "id": "gpui::elements::scroll_target::ScrollTarget",
      "name": "ScrollTarget",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::scroll_target",
      "path": "gpui::elements::scroll_target",
      "source": "crates/gpui/src/elements/scroll_target.rs",
      "summary": "Something that scrolls, and can say where it is and how much further it could go.",
      "documentation": "Something that scrolls, and can say where it is and how much further it\ncould go.",
      "signature": "# [doc = \" Something that scrolls, and can say where it is and how much further it\"] # [doc = \" could go.\"] pub trait ScrollTarget { # [doc = \" The distance from the viewport to the start of the content: zero at the\"] # [doc = \" start, negative once the reader has moved down or to the right.\"] fn scroll_offset (& self) -> Point<Pixels>; # [doc = \" How much further the content reaches beyond the viewport, in each axis.\"] # [doc = \" Zero on an axis means there is nothing more that way.\"] fn max_scroll_offset (& self) -> Point<Pixels>; # [doc = \" The region the content is seen through.\"] # [doc = \"\"] # [doc = \" A target that has not been laid out yet reports a zero-sized bounds,\"] # [doc = \" which is the honest answer: it does not know, and it is not scrolled.\"] fn scroll_viewport (& self) -> Bounds<Pixels>; # [doc = \" Puts the content at `offset`, in the sign [`Self::scroll_offset`]\"] # [doc = \" reports.\"] fn set_scroll_offset (& self, offset : Point<Pixels>); # [doc = \" Notes that a scrollbar drag has begun or ended.\"] # [doc = \"\"] # [doc = \" A target that measures lazily holds the height it reports still while\"] # [doc = \" this is true, so the thumb stays under the pointer that is dragging it.\"] fn set_scroll_dragging (& self, _dragging : bool) { } }",
      "cfg": []
    },
    {
      "id": "gpui::elements::scroll_target::scroll_progress",
      "name": "scroll_progress",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::scroll_target",
      "path": "gpui::elements::scroll_target",
      "source": "crates/gpui/src/elements/scroll_target.rs",
      "summary": "How far along a target is, from `0.0` at the start to `1.0` at the end.",
      "documentation": "How far along a target is, from `0.0` at the start to `1.0` at the end.\n\nA target with nothing to scroll is at the start, not at the end: there is\nno content below, but the reader has not gone anywhere either.",
      "signature": "pub fn scroll_progress (target : & dyn ScrollTarget) -> Point<f32>",
      "cfg": []
    },
    {
      "id": "gpui::elements::selectable_text::AccessibleTextCache",
      "name": "AccessibleTextCache",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::selectable_text",
      "path": "gpui::elements::selectable_text",
      "source": "crates/gpui/src/elements/selectable_text.rs",
      "summary": "Revision-keyed logical text publication. Offscreen unchanged leaves are retained in AccessKit; visible and previously visible leaves refresh their geometry. Own one cache per text surface, never share it between windows.",
      "documentation": "Revision-keyed logical text publication. Offscreen unchanged leaves are\nretained in AccessKit; visible and previously visible leaves refresh their\ngeometry. Own one cache per text surface, never share it between windows.",
      "signature": "# [doc = \" Revision-keyed logical text publication. Offscreen unchanged leaves are\"] # [doc = \" retained in AccessKit; visible and previously visible leaves refresh their\"] # [doc = \" geometry. Own one cache per text surface, never share it between windows.\"] # [derive (Default)] pub struct AccessibleTextCache { source : SharedString, revision : u64, parent : Option<accesskit::NodeId>, direction : Option<accesskit::TextDirection>, rows : Vec<Range<usize>>, runs : Arc<[AccessibleRun]>, ids : Arc<[accesskit::NodeId]>, published : Option<PublishedAccessibleText>, visible : Vec<Range<usize>>, visible_nodes : collections::FxHashMap<accesskit::NodeId, accesskit::Node>, clip : Option<accesskit::Rect>, transform : crate::TransformationMatrix, document : Option<EditSnapshot>, representation : Option<(SharedString, bool)>, work : AccessibleTextWork, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::selectable_text::AccessibleTextCache::is_representable",
      "name": "is_representable",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::selectable_text",
      "path": "gpui::elements::selectable_text",
      "source": "crates/gpui/src/elements/selectable_text.rs",
      "summary": "Caches the complete grapheme representability check by immutable source storage. This does not suppress native Value for unrepresentable runs.",
      "documentation": "Caches the complete grapheme representability check by immutable source\nstorage. This does not suppress native Value for unrepresentable runs.",
      "signature": "pub fn is_representable (& mut self, text : & SharedString) -> bool",
      "cfg": [],
      "target": "AccessibleTextCache"
    },
    {
      "id": "gpui::elements::selectable_text::AccessibleTextCache::publish",
      "name": "publish",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::selectable_text",
      "path": "gpui::elements::selectable_text",
      "source": "crates/gpui/src/elements/selectable_text.rs",
      "summary": "Publishes current selection and viewport geometry without rebuilding unchanged logical runs. `visible` must cover every byte whose geometry callback can return cells. Text/row/direction changes invalidate the logical cache; clipping and viewport changes refresh visible leaves.",
      "documentation": "Publishes current selection and viewport geometry without rebuilding\nunchanged logical runs. `visible` must cover every byte whose geometry\ncallback can return cells. Text/row/direction changes invalidate the\nlogical cache; clipping and viewport changes refresh visible leaves.",
      "signature": "pub fn publish (& mut self, builder : & mut A11ySubtreeBuilder, text : & str, anchor : usize, focus : usize, direction : accesskit::TextDirection, rows : & [Range<usize>], revision : u64, visible : Range<usize>, scale : f32, geometry : impl Fn (Range<usize>) -> Vec<Bounds<Pixels>>,) -> Option<PublishedAccessibleText>",
      "cfg": [],
      "target": "AccessibleTextCache"
    },
    {
      "id": "gpui::elements::selectable_text::AccessibleTextCache::publish_document",
      "name": "publish_document",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::selectable_text",
      "path": "gpui::elements::selectable_text",
      "source": "crates/gpui/src/elements/selectable_text.rs",
      "summary": "Publishes a persistent document, resegmenting only changed LF-delimited paragraphs when rows and direction outside the edit remain unchanged. LF is a Unicode bidi/word reset boundary; arbitrary visual rows are not. Source snapshots and run metadata remain complete, including offscreen paragraphs. Native actions are still checked against the exact revision.",
      "documentation": "Publishes a persistent document, resegmenting only changed LF-delimited\nparagraphs when rows and direction outside the edit remain unchanged.\nLF is a Unicode bidi/word reset boundary; arbitrary visual rows are not.\nSource snapshots and run metadata remain complete, including offscreen\nparagraphs. Native actions are still checked against the exact revision.",
      "signature": "pub fn publish_document (& mut self, builder : & mut A11ySubtreeBuilder, document : & EditSnapshot, anchor : usize, focus : usize, direction : accesskit::TextDirection, rows : & [Range<usize>], revision : u64, visible : Range<usize>, scale : f32, geometry : impl Fn (Range<usize>) -> Vec<Bounds<Pixels>>,) -> Option<PublishedAccessibleText>",
      "cfg": [],
      "target": "AccessibleTextCache"
    },
    {
      "id": "gpui::elements::selectable_text::AccessibleTextCache::publish_document_regions",
      "name": "publish_document_regions",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::selectable_text",
      "path": "gpui::elements::selectable_text",
      "source": "crates/gpui/src/elements/selectable_text.rs",
      "summary": "Publishes disjoint painted regions without treating omitted source gaps as visible. Logical text remains complete, including folded paragraphs.",
      "documentation": "Publishes disjoint painted regions without treating omitted source gaps\nas visible. Logical text remains complete, including folded paragraphs.",
      "signature": "pub fn publish_document_regions (& mut self, builder : & mut A11ySubtreeBuilder, document : & EditSnapshot, anchor : usize, focus : usize, direction : accesskit::TextDirection, rows : & [Range<usize>], revision : u64, visible : Vec<Range<usize>>, scale : f32, geometry : impl Fn (Range<usize>) -> Vec<Bounds<Pixels>>,) -> Option<PublishedAccessibleText>",
      "cfg": [],
      "target": "AccessibleTextCache"
    },
    {
      "id": "gpui::elements::selectable_text::AccessibleTextCache::work",
      "name": "work",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::selectable_text",
      "path": "gpui::elements::selectable_text",
      "source": "crates/gpui/src/elements/selectable_text.rs",
      "summary": "Work performed in the last publication, not cumulative totals.",
      "documentation": "Work performed in the last publication, not cumulative totals.",
      "signature": "pub fn work (& self) -> AccessibleTextWork",
      "cfg": [],
      "target": "AccessibleTextCache"
    },
    {
      "id": "gpui::elements::selectable_text::AccessibleTextWork",
      "name": "AccessibleTextWork",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::selectable_text",
      "path": "gpui::elements::selectable_text",
      "source": "crates/gpui/src/elements/selectable_text.rs",
      "summary": "Actual text work in the most recent accessible publication. Metadata and parent child-id lists are separate, still linear work; these counters do not claim an allocation bound for the entire AccessKit update.",
      "documentation": "Actual text work in the most recent accessible publication. Metadata and\nparent child-id lists are separate, still linear work; these counters do\nnot claim an allocation bound for the entire AccessKit update.",
      "signature": "# [doc = \" Actual text work in the most recent accessible publication. Metadata and\"] # [doc = \" parent child-id lists are separate, still linear work; these counters do\"] # [doc = \" not claim an allocation bound for the entire AccessKit update.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub struct AccessibleTextWork { # [doc = \" Bytes inspected by the last explicit representability check. Unchanged\"] # [doc = \" shared source storage requires zero; a new value is scanned once.\"] pub representability_bytes : usize, # [doc = \" UTF-8 bytes passed to Unicode segmentation and bidi resolution.\"] pub segmented_bytes : usize, # [doc = \" Actual persistent-snapshot byte comparisons used to locate the edit.\"] pub compared_bytes : usize, # [doc = \" TextRun payloads transmitted in this update.\"] pub published_runs : usize, # [doc = \" UTF-8 value bytes transmitted in TextRun payloads.\"] pub published_text_bytes : usize, # [doc = \" Existing TextRuns connected without retransmitting their payloads.\"] pub retained_runs : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::selectable_text::PublishedAccessibleText",
      "name": "PublishedAccessibleText",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::selectable_text",
      "path": "gpui::elements::selectable_text",
      "source": "crates/gpui/src/elements/selectable_text.rs",
      "summary": "A snapshot of the text runs most recently published to AccessKit.",
      "documentation": "A snapshot of the text runs most recently published to AccessKit.\n\nKeep this beside the text revision that produced it. Accessibility actions\nmay arrive after a new frame, so positions from a stale tree must not be\ninterpreted against different text.",
      "signature": "# [doc = \" A snapshot of the text runs most recently published to AccessKit.\"] # [doc = \"\"] # [doc = \" Keep this beside the text revision that produced it. Accessibility actions\"] # [doc = \" may arrive after a new frame, so positions from a stale tree must not be\"] # [doc = \" interpreted against different text.\"] # [derive (Clone, Debug)] pub struct PublishedAccessibleText { source : SharedString, revision : u64, runs : Arc<[PublishedRun]>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::selectable_text::accessible_text_is_representable",
      "name": "accessible_text_is_representable",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::selectable_text",
      "path": "gpui::elements::selectable_text",
      "source": "crates/gpui/src/elements/selectable_text.rs",
      "summary": "Returns whether every selectable grapheme can be represented by AccessKit.",
      "documentation": "Returns whether every selectable grapheme can be represented by AccessKit.",
      "signature": "pub fn accessible_text_is_representable (text : & str) -> bool",
      "cfg": []
    },
    {
      "id": "gpui::elements::selectable_text::byte_offset_for_published_position",
      "name": "byte_offset_for_published_position",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::selectable_text",
      "path": "gpui::elements::selectable_text",
      "source": "crates/gpui/src/elements/selectable_text.rs",
      "summary": "Resolves an AccessKit text position only against the exact value and revision for which its synthetic run ids were published.",
      "documentation": "Resolves an AccessKit text position only against the exact value and\nrevision for which its synthetic run ids were published.",
      "signature": "pub fn byte_offset_for_published_position (current_text : & str, current_revision : u64, published : & PublishedAccessibleText, position : accesskit::TextPosition,) -> Option<usize>",
      "cfg": []
    },
    {
      "id": "gpui::elements::selectable_text::publish_accessible_text",
      "name": "publish_accessible_text",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::selectable_text",
      "path": "gpui::elements::selectable_text",
      "source": "crates/gpui/src/elements/selectable_text.rs",
      "summary": "Publishes logical text runs and the current selection below an accessible text element.",
      "documentation": "Publishes logical text runs and the current selection below an accessible\ntext element.\n\n`visual_rows` contains UTF-8 ranges in visual row order. Runs are split at\nbidirectional boundaries and AccessKit's 255-character run limit.",
      "signature": "pub fn publish_accessible_text (builder : & mut A11ySubtreeBuilder, text : & str, anchor_byte : usize, focus_byte : usize, fallback_direction : accesskit::TextDirection, visual_rows : & [Range<usize>], revision : u64,) -> Option<PublishedAccessibleText>",
      "cfg": []
    },
    {
      "id": "gpui::elements::selectable_text::publish_accessible_text_with_geometry",
      "name": "publish_accessible_text_with_geometry",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::selectable_text",
      "path": "gpui::elements::selectable_text",
      "source": "crates/gpui/src/elements/selectable_text.rs",
      "summary": "Publishes selectable text with per-grapheme geometry.",
      "documentation": "Publishes selectable text with per-grapheme geometry.\n\nBounds returned by `bounds_for_range` are in GPUI logical pixels. They are\nscaled here to the physical coordinates used by the parent AccessKit node.",
      "signature": "pub fn publish_accessible_text_with_geometry (builder : & mut A11ySubtreeBuilder, text : & str, anchor_byte : usize, focus_byte : usize, fallback_direction : accesskit::TextDirection, visual_rows : & [Range<usize>], revision : u64, scale_factor : f32, bounds_for_range : impl Fn (Range<usize>) -> Vec<Bounds<Pixels>>,) -> Option<PublishedAccessibleText>",
      "cfg": []
    },
    {
      "id": "gpui::elements::sticky::Sticky",
      "name": "Sticky",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::sticky",
      "path": "gpui::elements::sticky",
      "source": "crates/gpui/src/elements/sticky.rs",
      "summary": "An element held against one horizontal physical edge of the current clipped viewport.",
      "documentation": "An element held against one horizontal physical edge of the current clipped\nviewport.",
      "signature": "# [doc = \" An element held against one horizontal physical edge of the current clipped\"] # [doc = \" viewport.\"] pub struct Sticky { edge : StickyEdge, child : Option<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::sticky::StickyEdge",
      "name": "StickyEdge",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::sticky",
      "path": "gpui::elements::sticky",
      "source": "crates/gpui/src/elements/sticky.rs",
      "summary": "A horizontal physical viewport edge that can hold a [`Sticky`] element in place.",
      "documentation": "A horizontal physical viewport edge that can hold a [`Sticky`] element in\nplace.",
      "signature": "# [doc = \" A horizontal physical viewport edge that can hold a [`Sticky`] element in\"] # [doc = \" place.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum StickyEdge { # [doc = \" The left edge of the current content mask.\"] Left, # [doc = \" The right edge of the current content mask.\"] Right, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::sticky::sticky",
      "name": "sticky",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::sticky",
      "path": "gpui::elements::sticky",
      "source": "crates/gpui/src/elements/sticky.rs",
      "summary": "Keeps `child` against `edge` while its normal layout position crosses the current clipped viewport.",
      "documentation": "Keeps `child` against `edge` while its normal layout position crosses the\ncurrent clipped viewport.\n\nThe child still participates in ordinary layout. During prepaint its whole\nsubtree is translated to the held position and deferred above scrolling\nsiblings, while retaining the content mask that established the viewport.\nPaint, hit testing, and accessibility bounds therefore use the same\ntranslated geometry. The edge is physical; callers implementing reading\ndirection choose left or right explicitly.",
      "signature": "pub fn sticky (edge : StickyEdge, child : impl IntoElement) -> Sticky",
      "cfg": []
    },
    {
      "id": "gpui::elements::surface::Surface",
      "name": "Surface",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::surface",
      "path": "gpui::elements::surface",
      "source": "crates/gpui/src/elements/surface.rs",
      "summary": "A surface element.",
      "documentation": "A surface element.",
      "signature": "# [doc = \" A surface element.\"] pub struct Surface { source : SurfaceSource, object_fit : ObjectFit, style : StyleRefinement, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::surface::Surface::object_fit",
      "name": "object_fit",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::surface",
      "path": "gpui::elements::surface",
      "source": "crates/gpui/src/elements/surface.rs",
      "summary": "Set the object fit for the image.",
      "documentation": "Set the object fit for the image.",
      "signature": "pub fn object_fit (mut self, object_fit : ObjectFit) -> Self",
      "cfg": [],
      "target": "Surface"
    },
    {
      "id": "gpui::elements::surface::SurfaceSource",
      "name": "SurfaceSource",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::surface",
      "path": "gpui::elements::surface",
      "source": "crates/gpui/src/elements/surface.rs",
      "summary": "A source of a surface's content.",
      "documentation": "A source of a surface's content.",
      "signature": "# [doc = \" A source of a surface's content.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub enum SurfaceSource { # [doc = \" A macOS image buffer from CoreVideo\"] # [cfg (target_os = \"macos\")] Surface (CVPixelBuffer), }",
      "cfg": []
    },
    {
      "id": "gpui::elements::surface::surface",
      "name": "surface",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::surface",
      "path": "gpui::elements::surface",
      "source": "crates/gpui/src/elements/surface.rs",
      "summary": "Create a new surface element.",
      "documentation": "Create a new surface element.",
      "signature": "pub fn surface (source : impl Into<SurfaceSource>) -> Surface",
      "cfg": [
        "cfg (target_os = \"macos\")"
      ]
    },
    {
      "id": "gpui::elements::svg::Svg",
      "name": "Svg",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::svg",
      "path": "gpui::elements::svg",
      "source": "crates/gpui/src/elements/svg.rs",
      "summary": "An SVG element.",
      "documentation": "An SVG element.",
      "signature": "# [doc = \" An SVG element.\"] pub struct Svg { interactivity : Interactivity, transformation : Option<Transformation>, path : Option<SharedString>, external_path : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::svg::Svg::external_path",
      "name": "external_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::svg",
      "path": "gpui::elements::svg",
      "source": "crates/gpui/src/elements/svg.rs",
      "summary": "Set the path to the SVG file for this element.",
      "documentation": "Set the path to the SVG file for this element.",
      "signature": "pub fn external_path (mut self, path : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Svg"
    },
    {
      "id": "gpui::elements::svg::Svg::path",
      "name": "path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::svg",
      "path": "gpui::elements::svg",
      "source": "crates/gpui/src/elements/svg.rs",
      "summary": "Set the path to the SVG file for this element.",
      "documentation": "Set the path to the SVG file for this element.",
      "signature": "pub fn path (mut self, path : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Svg"
    },
    {
      "id": "gpui::elements::svg::Svg::with_transformation",
      "name": "with_transformation",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::svg",
      "path": "gpui::elements::svg",
      "source": "crates/gpui/src/elements/svg.rs",
      "summary": "Transform the SVG element with the given transformation. Note that this won't effect the hitbox or layout of the element, only the rendering.",
      "documentation": "Transform the SVG element with the given transformation.\nNote that this won't effect the hitbox or layout of the element, only the rendering.",
      "signature": "pub fn with_transformation (mut self, transformation : Transformation) -> Self",
      "cfg": [],
      "target": "Svg"
    },
    {
      "id": "gpui::elements::svg::Transformation",
      "name": "Transformation",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::svg",
      "path": "gpui::elements::svg",
      "source": "crates/gpui/src/elements/svg.rs",
      "summary": "A transformation to apply to an SVG element.",
      "documentation": "A transformation to apply to an SVG element.",
      "signature": "# [doc = \" A transformation to apply to an SVG element.\"] # [derive (Clone, Copy, Debug, PartialEq)] pub struct Transformation { scale : Size<f32>, translate : Point<Pixels>, rotate : Radians, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::svg::Transformation::rotate",
      "name": "rotate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::svg",
      "path": "gpui::elements::svg",
      "source": "crates/gpui/src/elements/svg.rs",
      "summary": "Create a new Transformation with the specified rotation in radians.",
      "documentation": "Create a new Transformation with the specified rotation in radians.",
      "signature": "pub fn rotate (rotate : impl Into<Radians>) -> Self",
      "cfg": [],
      "target": "Transformation"
    },
    {
      "id": "gpui::elements::svg::Transformation::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::svg",
      "path": "gpui::elements::svg",
      "source": "crates/gpui/src/elements/svg.rs",
      "summary": "Create a new Transformation with the specified scale along each axis.",
      "documentation": "Create a new Transformation with the specified scale along each axis.",
      "signature": "pub fn scale (scale : Size<f32>) -> Self",
      "cfg": [],
      "target": "Transformation"
    },
    {
      "id": "gpui::elements::svg::Transformation::translate",
      "name": "translate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::svg",
      "path": "gpui::elements::svg",
      "source": "crates/gpui/src/elements/svg.rs",
      "summary": "Create a new Transformation with the specified translation.",
      "documentation": "Create a new Transformation with the specified translation.",
      "signature": "pub fn translate (translate : Point<Pixels>) -> Self",
      "cfg": [],
      "target": "Transformation"
    },
    {
      "id": "gpui::elements::svg::Transformation::with_rotation",
      "name": "with_rotation",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::svg",
      "path": "gpui::elements::svg",
      "source": "crates/gpui/src/elements/svg.rs",
      "summary": "Update the rotation angle of this transformation.",
      "documentation": "Update the rotation angle of this transformation.",
      "signature": "pub fn with_rotation (mut self, rotate : impl Into<Radians>) -> Self",
      "cfg": [],
      "target": "Transformation"
    },
    {
      "id": "gpui::elements::svg::Transformation::with_scaling",
      "name": "with_scaling",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::svg",
      "path": "gpui::elements::svg",
      "source": "crates/gpui/src/elements/svg.rs",
      "summary": "Update the scaling factor of this transformation.",
      "documentation": "Update the scaling factor of this transformation.",
      "signature": "pub fn with_scaling (mut self, scale : Size<f32>) -> Self",
      "cfg": [],
      "target": "Transformation"
    },
    {
      "id": "gpui::elements::svg::Transformation::with_translation",
      "name": "with_translation",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::svg",
      "path": "gpui::elements::svg",
      "source": "crates/gpui/src/elements/svg.rs",
      "summary": "Update the translation value of this transformation.",
      "documentation": "Update the translation value of this transformation.",
      "signature": "pub fn with_translation (mut self, translate : Point<Pixels>) -> Self",
      "cfg": [],
      "target": "Transformation"
    },
    {
      "id": "gpui::elements::svg::svg",
      "name": "svg",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::svg",
      "path": "gpui::elements::svg",
      "source": "crates/gpui/src/elements/svg.rs",
      "summary": "Create a new SVG element.",
      "documentation": "Create a new SVG element.",
      "signature": "pub fn svg () -> Svg",
      "cfg": []
    },
    {
      "id": "gpui::elements::text::InteractiveText",
      "name": "InteractiveText",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "A text element that can be interacted with.",
      "documentation": "A text element that can be interacted with.",
      "signature": "# [doc = \" A text element that can be interacted with.\"] pub struct InteractiveText { element_id : ElementId, text : StyledText, click_listener : Option<Box<dyn Fn (& [Range<usize>], InteractiveTextClickEvent, & mut Window, & mut App)>>, hover_listener : Option<Box<dyn Fn (Option<usize>, MouseMoveEvent, & mut Window, & mut App)>>, tooltip_builder : Option<Rc<dyn Fn (usize, & mut Window, & mut App) -> Option<AnyView>>>, tooltip_id : Option<TooltipId>, clickable_ranges : Vec<Range<usize>>, selectable : bool, document : Option<DocumentParticipation>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::text::InteractiveText::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Creates a new InteractiveText from the given text.",
      "documentation": "Creates a new InteractiveText from the given text.",
      "signature": "pub fn new (id : impl Into<ElementId>, text : StyledText) -> Self",
      "cfg": [],
      "target": "InteractiveText"
    },
    {
      "id": "gpui::elements::text::InteractiveText::on_click",
      "name": "on_click",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "on_click is called when the user clicks on one of the given ranges, passing the index of the clicked range.",
      "documentation": "on_click is called when the user clicks on one of the given ranges, passing the index of\nthe clicked range.",
      "signature": "pub fn on_click (mut self, ranges : Vec<Range<usize>>, listener : impl Fn (usize, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "InteractiveText"
    },
    {
      "id": "gpui::elements::text::InteractiveText::on_hover",
      "name": "on_hover",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "on_hover is called when the mouse moves over a character within the text, passing the index of the hovered character, or None if the mouse leaves the text.",
      "documentation": "on_hover is called when the mouse moves over a character within the text, passing the\nindex of the hovered character, or None if the mouse leaves the text.",
      "signature": "pub fn on_hover (mut self, listener : impl Fn (Option<usize>, MouseMoveEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "InteractiveText"
    },
    {
      "id": "gpui::elements::text::InteractiveText::selectable",
      "name": "selectable",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Enable native read-only text selection.",
      "documentation": "Enable native read-only text selection.\n\nSelection is grapheme-safe, continues beyond the element while the\npointer is captured, supports Copy and Select All, and is exposed as\nAccessKit text runs. Existing clickable ranges still activate on a\nclick, but not when the same gesture selected text.",
      "signature": "pub fn selectable (mut self) -> Self",
      "cfg": [],
      "target": "InteractiveText"
    },
    {
      "id": "gpui::elements::text::InteractiveText::selectable_in_document",
      "name": "selectable_in_document",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Joins this element to its window's document selection.",
      "documentation": "Joins this element to its window's document selection.\n\nOne drag then spans every participating element between its two ends,\nin the reading order they declare, rather than stopping at whichever\nvalue happened to be mounted first. `key` is business identity and\n`order` is reading order; neither may be a list position, because a\nselection that follows the viewport instead of the text is the bug this\nreplaces.\n\nA document participant does not also keep a private selection: the two\nwould disagree about the same drag.",
      "signature": "pub fn selectable_in_document (mut self, key : impl Into<SelectionContentKey>, order : u64,) -> Self",
      "cfg": [],
      "target": "InteractiveText"
    },
    {
      "id": "gpui::elements::text::InteractiveText::sensitive_participant",
      "name": "sensitive_participant",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Refuses to take part in the document selection at all.",
      "documentation": "Refuses to take part in the document selection at all.\n\nA sensitive value is never registered, so it cannot reach the aggregate\ncopy path by being mounted beside content that can.",
      "signature": "pub fn sensitive_participant (mut self, sensitive : bool) -> Self",
      "cfg": [],
      "target": "InteractiveText"
    },
    {
      "id": "gpui::elements::text::InteractiveText::tooltip",
      "name": "tooltip",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "tooltip lets you specify a tooltip for a given character index in the string.",
      "documentation": "tooltip lets you specify a tooltip for a given character index in the string.",
      "signature": "pub fn tooltip (mut self, builder : impl Fn (usize, & mut Window, & mut App) -> Option<AnyView> + 'static,) -> Self",
      "cfg": [],
      "target": "InteractiveText"
    },
    {
      "id": "gpui::elements::text::InteractiveText::virtualized_participant",
      "name": "virtualized_participant",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "States that this participant is one mounted window onto a longer run, such as a virtualized log or diff.",
      "documentation": "States that this participant is one mounted window onto a longer run,\nsuch as a virtualized log or diff.\n\nA copy whose span crosses it reports itself incomplete, because the\nrows in between were never rendered and GPUI will not invent them.",
      "signature": "pub fn virtualized_participant (mut self, virtualized : bool) -> Self",
      "cfg": [],
      "target": "InteractiveText"
    },
    {
      "id": "gpui::elements::text::InteractiveTextPrepaintState",
      "name": "InteractiveTextPrepaintState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] pub struct InteractiveTextPrepaintState { hitbox : Hitbox, selection_quads : Vec<PaintQuad>, selection : Rc<RefCell<TextSelectionState>>, fallback_direction : accesskit::TextDirection, text_align : TextAlign, scale_factor : f32, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::text::InteractiveTextState",
      "name": "InteractiveTextState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] # [derive (Default)] pub struct InteractiveTextState { mouse_down_index : Rc<Cell<Option<usize>>>, hovered_index : Rc<Cell<Option<usize>>>, active_tooltip : Rc<RefCell<Option<ActiveTooltip>>>, selection : Rc<RefCell<TextSelectionState>>, focus_handle : Option<FocusHandle>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::text::StyledText",
      "name": "StyledText",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Renders text with runs of different styles.",
      "documentation": "Renders text with runs of different styles.\n\nCallers are responsible for setting the correct style for each run.\nFor text with a uniform style, you can usually avoid calling this constructor\nand just pass text directly.",
      "signature": "# [doc = \" Renders text with runs of different styles.\"] # [doc = \"\"] # [doc = \" Callers are responsible for setting the correct style for each run.\"] # [doc = \" For text with a uniform style, you can usually avoid calling this constructor\"] # [doc = \" and just pass text directly.\"] pub struct StyledText { text : SharedString, runs : Option<Vec<TextRun>>, delayed_highlights : Option<Vec<(Range<usize>, HighlightStyle)>>, delayed_font_family_overrides : Option<Vec<(Range<usize>, SharedString)>>, layout : TextLayout, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::text::StyledText::layout",
      "name": "layout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Get the layout for this element. This can be used to map indices to pixels and vice versa.",
      "documentation": "Get the layout for this element. This can be used to map indices to pixels and vice versa.",
      "signature": "pub fn layout (& self) -> & TextLayout",
      "cfg": [],
      "target": "StyledText"
    },
    {
      "id": "gpui::elements::text::StyledText::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Construct a new styled text element from the given string.",
      "documentation": "Construct a new styled text element from the given string.",
      "signature": "pub fn new (text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "StyledText"
    },
    {
      "id": "gpui::elements::text::StyledText::selectable",
      "name": "selectable",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Make this styled text selectable with standard pointer, keyboard, clipboard, and accessibility behavior.",
      "documentation": "Make this styled text selectable with standard pointer, keyboard,\nclipboard, and accessibility behavior.\n\nThe id retains the transient selection and focus state across frames.",
      "signature": "pub fn selectable (self, id : impl Into<ElementId>) -> InteractiveText",
      "cfg": [],
      "target": "StyledText"
    },
    {
      "id": "gpui::elements::text::StyledText::selectable_in_document",
      "name": "selectable_in_document",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Make this styled text part of its window's document selection, so one drag reaches every participating element between its two ends.",
      "documentation": "Make this styled text part of its window's document selection, so one\ndrag reaches every participating element between its two ends.\n\n`key` is business identity and `order` is reading order. See\n[`InteractiveText::selectable_in_document`].",
      "signature": "pub fn selectable_in_document (self, id : impl Into<ElementId>, key : impl Into<SelectionContentKey>, order : u64,) -> InteractiveText",
      "cfg": [],
      "target": "StyledText"
    },
    {
      "id": "gpui::elements::text::StyledText::with_default_highlights",
      "name": "with_default_highlights",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Set the styling attributes for the given text, as well as as any ranges of text that have had their style customized.",
      "documentation": "Set the styling attributes for the given text, as well as\nas any ranges of text that have had their style customized.",
      "signature": "pub fn with_default_highlights (mut self, default_style : & TextStyle, highlights : impl IntoIterator<Item = (Range<usize>, HighlightStyle)>,) -> Self",
      "cfg": [],
      "target": "StyledText"
    },
    {
      "id": "gpui::elements::text::StyledText::with_font_family_overrides",
      "name": "with_font_family_overrides",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Override the font family for specific byte ranges of the text.",
      "documentation": "Override the font family for specific byte ranges of the text.\n\nThis is resolved lazily at layout time, so the overrides are applied\non top of the inherited text style from the parent element.\nCan be combined with [`with_highlights`](Self::with_highlights).\n\nThe overrides must be sorted by range start and non-overlapping.\nEach override range must fall on character boundaries.",
      "signature": "pub fn with_font_family_overrides (mut self, overrides : impl IntoIterator<Item = (Range<usize>, SharedString)>,) -> Self",
      "cfg": [],
      "target": "StyledText"
    },
    {
      "id": "gpui::elements::text::StyledText::with_highlights",
      "name": "with_highlights",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Set the styling attributes for the given text, as well as as any ranges of text that have had their style customized.",
      "documentation": "Set the styling attributes for the given text, as well as\nas any ranges of text that have had their style customized.",
      "signature": "pub fn with_highlights (mut self, highlights : impl IntoIterator<Item = (Range<usize>, HighlightStyle)>,) -> Self",
      "cfg": [],
      "target": "StyledText"
    },
    {
      "id": "gpui::elements::text::StyledText::with_runs",
      "name": "with_runs",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Set the text runs for this piece of text.",
      "documentation": "Set the text runs for this piece of text.",
      "signature": "pub fn with_runs (mut self, runs : Vec<TextRun>) -> Self",
      "cfg": [],
      "target": "StyledText"
    },
    {
      "id": "gpui::elements::text::Text",
      "name": "Text",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "An [`Element`] that renders text.",
      "documentation": "An [`Element`] that renders text.\n\nIn general, [`Text`] objects should be created via the\n[`text!`](crate::text!) macro:\n```rust\n# use gpui::*;\n# fn render() -> impl IntoElement {\ndiv().child(text!(\"hello\"))\n# }\n```\n## IDs and Accessibility\n\n[`Text`] elements have an ID. This ID is primarily used to produce nodes in\nthe accessibility tree, which allows the text to be visible to screen\nreaders and other assistive technologies.\n\nThis ID is stable across frames. If the same text, with the same ID, is\npresent in two consecutive frames, no updates are reported to the screen\nreader. If the text changes, but the ID stays the same, then the screen\nreader will be notified that a text node's content has changed. **However**,\nif the ID changes, then the screen reader will be notified that a node has\nbeen removed, and a new node has been added.\n\nWhen using the [`text!`](crate::text!) macro, each invocation of the macro will get a\nunique ID, derived from its position in the source code (filename, line, and\ncolumn). For example:\n```rust\n# use gpui::*;\nlet x = text!(\"hello\");\nlet y = text!(\"hello\");\n// not equal, because different `text!` invocations produced them\nassert_ne!(x.id(), y.id());\n\nfn make_text(s: &str) -> Text { text!(s) }\nlet x = make_text(\"hello\");\nlet y = make_text(\"hello\");\n// equal, because the same `text!` invocation produced them\nassert_eq!(x.id(), y.id());\n```\nWhen the contents of an invocation of [`text!`](crate::text!) do not change, this\ndistinction is less relevant (with the caveat that you still need to take\ncare to ensure that duplicate IDs do not appear).\n\nHowever, when a [`text!`](crate::text!) invocation's argument *does* change, you should\nconsider whether this change should be reported as a node \"updating its\ncontents\", or an old node being destroyed and a new node being created.",
      "signature": "# [doc = \" An [`Element`] that renders text.\"] # [doc = \"\"] # [doc = \" In general, [`Text`] objects should be created via the\"] # [doc = \" [`text!`](crate::text!) macro:\"] # [doc = \" ```rust\"] # [doc = \" # use gpui::*;\"] # [doc = \" # fn render() -> impl IntoElement {\"] # [doc = \" div().child(text!(\\\"hello\\\"))\"] # [doc = \" # }\"] # [doc = \" ```\"] # [doc = \" ## IDs and Accessibility\"] # [doc = \"\"] # [doc = \" [`Text`] elements have an ID. This ID is primarily used to produce nodes in\"] # [doc = \" the accessibility tree, which allows the text to be visible to screen\"] # [doc = \" readers and other assistive technologies.\"] # [doc = \"\"] # [doc = \" This ID is stable across frames. If the same text, with the same ID, is\"] # [doc = \" present in two consecutive frames, no updates are reported to the screen\"] # [doc = \" reader. If the text changes, but the ID stays the same, then the screen\"] # [doc = \" reader will be notified that a text node's content has changed. **However**,\"] # [doc = \" if the ID changes, then the screen reader will be notified that a node has\"] # [doc = \" been removed, and a new node has been added.\"] # [doc = \"\"] # [doc = \" When using the [`text!`](crate::text!) macro, each invocation of the macro will get a\"] # [doc = \" unique ID, derived from its position in the source code (filename, line, and\"] # [doc = \" column). For example:\"] # [doc = \" ```rust\"] # [doc = \" # use gpui::*;\"] # [doc = \" let x = text!(\\\"hello\\\");\"] # [doc = \" let y = text!(\\\"hello\\\");\"] # [doc = \" // not equal, because different `text!` invocations produced them\"] # [doc = \" assert_ne!(x.id(), y.id());\"] # [doc = \"\"] # [doc = \" fn make_text(s: &str) -> Text { text!(s) }\"] # [doc = \" let x = make_text(\\\"hello\\\");\"] # [doc = \" let y = make_text(\\\"hello\\\");\"] # [doc = \" // equal, because the same `text!` invocation produced them\"] # [doc = \" assert_eq!(x.id(), y.id());\"] # [doc = \" ```\"] # [doc = \" When the contents of an invocation of [`text!`](crate::text!) do not change, this\"] # [doc = \" distinction is less relevant (with the caveat that you still need to take\"] # [doc = \" care to ensure that duplicate IDs do not appear).\"] # [doc = \"\"] # [doc = \" However, when a [`text!`](crate::text!) invocation's argument *does* change, you should\"] # [doc = \" consider whether this change should be reported as a node \\\"updating its\"] # [doc = \" contents\\\", or an old node being destroyed and a new node being created.\"] # [derive (Debug, Clone)] pub struct Text { id : Option<ElementId>, text : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::text::Text::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "The ID of this [`Text`] element.",
      "documentation": "The ID of this [`Text`] element.",
      "signature": "pub const fn id (& self) -> Option<& ElementId>",
      "cfg": [],
      "target": "Text"
    },
    {
      "id": "gpui::elements::text::Text::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Create a new [`Text`] element with a specific ID.",
      "documentation": "Create a new [`Text`] element with a specific ID.\n\nIf you want a unique ID to be assigned automatically, use the\n[`text!`](crate::text!) macro. The docs for [`Text`] have more detail\nabout choosing IDs.",
      "signature": "pub const fn new (id : ElementId, text : SharedString) -> Self",
      "cfg": [],
      "target": "Text"
    },
    {
      "id": "gpui::elements::text::Text::new_inaccessible",
      "name": "new_inaccessible",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Create a new [`Text`] element that is inaccessible to screen readers.",
      "documentation": "Create a new [`Text`] element that is inaccessible to screen readers.\n\nIn order for text to be accessible to screen readers, it must have an ID\nprovided. If you want text to be accessible, either use\n[`text!`](crate::text!) to have an ID automatically assigned, or use\n[`Text::new`] to manually assign an ID.\n\nThis function is intended for use inside custom UI components, where\naccessible properties may be set on parent containers.",
      "signature": "pub const fn new_inaccessible (text : SharedString) -> Self",
      "cfg": [],
      "target": "Text"
    },
    {
      "id": "gpui::elements::text::Text::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "The text that this [`Text`] element will display.",
      "documentation": "The text that this [`Text`] element will display.",
      "signature": "pub const fn text (& self) -> & SharedString",
      "cfg": [],
      "target": "Text"
    },
    {
      "id": "gpui::elements::text::Text::with_id",
      "name": "with_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Produce a new [`Text`] with the given `id`.",
      "documentation": "Produce a new [`Text`] with the given `id`.",
      "signature": "pub fn with_id (mut self, id : impl Into<ElementId>) -> Self",
      "cfg": [],
      "target": "Text"
    },
    {
      "id": "gpui::elements::text::TextLayout",
      "name": "TextLayout",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "The Layout for TextElement. This can be used to map indices to pixels and vice versa.",
      "documentation": "The Layout for TextElement. This can be used to map indices to pixels and vice versa.",
      "signature": "# [doc = \" The Layout for TextElement. This can be used to map indices to pixels and vice versa.\"] # [derive (Default, Clone)] pub struct TextLayout (Rc<RefCell<Option<TextLayoutInner>>>);",
      "cfg": []
    },
    {
      "id": "gpui::elements::text::TextLayout::bounds",
      "name": "bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "The bounds of this layout.",
      "documentation": "The bounds of this layout.",
      "signature": "pub fn bounds (& self) -> Bounds<Pixels>",
      "cfg": [],
      "target": "TextLayout"
    },
    {
      "id": "gpui::elements::text::TextLayout::bounds_for_range",
      "name": "bounds_for_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Returns layout-space rectangles occupied by a source byte range, suitable for painting overlays in the same scope. Unlike `position_for_index`, these are not mapped to displayed coordinates.",
      "documentation": "Returns layout-space rectangles occupied by a source byte range, suitable\nfor painting overlays in the same scope. Unlike `position_for_index`,\nthese are not mapped to displayed coordinates.\n\nThe result may contain multiple rectangles for wrapped or\nbidirectional text. The caller supplies the same alignment used to\npaint the text.",
      "signature": "pub fn bounds_for_range (& self, range : Range<usize>, align : TextAlign) -> Vec<Bounds<Pixels>>",
      "cfg": [],
      "target": "TextLayout"
    },
    {
      "id": "gpui::elements::text::TextLayout::closest_index_for_position",
      "name": "closest_index_for_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Returns the selectable byte boundary closest to a window position.",
      "documentation": "Returns the selectable byte boundary closest to a window position.\n\nPositions above or below the element clamp to the start or end. A\nposition outside a visual row clamps to that row's nearest edge, which\nkeeps pointer selection stable while dragging beyond the text bounds.",
      "signature": "pub fn closest_index_for_position (& self, position : Point<Pixels>) -> usize",
      "cfg": [],
      "target": "TextLayout"
    },
    {
      "id": "gpui::elements::text::TextLayout::index_for_position",
      "name": "index_for_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Get the byte index at a displayed window-global pixel position.",
      "documentation": "Get the byte index at a displayed window-global pixel position.",
      "signature": "pub fn index_for_position (& self, mut position : Point<Pixels>) -> Result<usize, usize>",
      "cfg": [],
      "target": "TextLayout"
    },
    {
      "id": "gpui::elements::text::TextLayout::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Returns whether the underlying text is empty.",
      "documentation": "Returns whether the underlying text is empty.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "TextLayout"
    },
    {
      "id": "gpui::elements::text::TextLayout::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "The UTF-8 length of the underlying text.",
      "documentation": "The UTF-8 length of the underlying text.",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "TextLayout"
    },
    {
      "id": "gpui::elements::text::TextLayout::line_height",
      "name": "line_height",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "The line height for this layout.",
      "documentation": "The line height for this layout.",
      "signature": "pub fn line_height (& self) -> Pixels",
      "cfg": [],
      "target": "TextLayout"
    },
    {
      "id": "gpui::elements::text::TextLayout::line_layout_for_index",
      "name": "line_layout_for_index",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Retrieve the layout for the line containing the given byte index.",
      "documentation": "Retrieve the layout for the line containing the given byte index.",
      "signature": "pub fn line_layout_for_index (& self, index : usize) -> Option<Arc<WrappedLineLayout>>",
      "cfg": [],
      "target": "TextLayout"
    },
    {
      "id": "gpui::elements::text::TextLayout::line_layouts",
      "name": "line_layouts",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Retrieve all line layouts in source order.",
      "documentation": "Retrieve all line layouts in source order.",
      "signature": "pub fn line_layouts (& self) -> SmallVec<[Arc<WrappedLineLayout>; 1]>",
      "cfg": [],
      "target": "TextLayout"
    },
    {
      "id": "gpui::elements::text::TextLayout::position_for_index",
      "name": "position_for_index",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Get the displayed window pixel position for the given byte index.",
      "documentation": "Get the displayed window pixel position for the given byte index.",
      "signature": "pub fn position_for_index (& self, index : usize) -> Option<Point<Pixels>>",
      "cfg": [],
      "target": "TextLayout"
    },
    {
      "id": "gpui::elements::text::TextLayout::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "The text for this layout.",
      "documentation": "The text for this layout.",
      "signature": "pub fn text (& self) -> String",
      "cfg": [],
      "target": "TextLayout"
    },
    {
      "id": "gpui::elements::text::TextLayout::visual_rows",
      "name": "visual_rows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Returns source byte ranges for all shaped visual rows.",
      "documentation": "Returns source byte ranges for all shaped visual rows.\n\nA hard line break belongs to the visual row before it. Soft wrapping\nintroduces a new row without introducing a source byte.",
      "signature": "pub fn visual_rows (& self) -> Vec<Range<usize>>",
      "cfg": [],
      "target": "TextLayout"
    },
    {
      "id": "gpui::elements::text::TextLayout::wrapped_text",
      "name": "wrapped_text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "The text for this layout (with soft-wraps as newlines)",
      "documentation": "The text for this layout (with soft-wraps as newlines)",
      "signature": "pub fn wrapped_text (& self) -> String",
      "cfg": [],
      "target": "TextLayout"
    },
    {
      "id": "gpui::elements::text::__hash_text_macro_location_unstable_do_not_use",
      "name": "__hash_text_macro_location_unstable_do_not_use",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Trivial hash function for the location information produced by the [`text`] macro. Not covered by semver guarantees. Performance is not particularly significant because it's only used on small strings in const contexts.",
      "documentation": "Trivial hash function for the location information produced by the [`text`]\nmacro. Not covered by semver guarantees. Performance is not particularly\nsignificant because it's only used on small strings in const contexts.",
      "signature": "pub const fn __hash_text_macro_location_unstable_do_not_use (s : & 'static str) -> u64",
      "cfg": []
    },
    {
      "id": "gpui::elements::text::text",
      "name": "text",
      "kind": "macro",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::text",
      "path": "gpui::elements::text",
      "source": "crates/gpui/src/elements/text.rs",
      "summary": "Create a new [`Text`] element.",
      "documentation": "Create a new [`Text`] element.\n\n```rust\n# use gpui::*;\nlet a = text!(\"hello\");\nlet b = text!(id = \"farewell-message\", \"hello\");\n\n```\n\nText created with this macro is *accessible*. The macro generates an ID\nbased on the source location. See the docs for [`Text`] for a more in-depth\nexplanation of the significance of the ID of a [`Text`] element.",
      "signature": "macro_rules! text",
      "cfg": []
    },
    {
      "id": "gpui::elements::uniform_list::DeferredScrollToItem",
      "name": "DeferredScrollToItem",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug)] # [allow (missing_docs)] pub struct DeferredScrollToItem { # [doc = \" The item index to scroll to\"] pub item_index : usize, # [doc = \" The scroll strategy to use\"] pub strategy : ScrollStrategy, # [doc = \" The offset in number of items\"] pub offset : usize, pub scroll_strict : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::uniform_list::ItemSize",
      "name": "ItemSize",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "The size of the item and its contents.",
      "documentation": "The size of the item and its contents.",
      "signature": "# [derive (Copy, Clone, Debug, Default)] # [doc = \" The size of the item and its contents.\"] pub struct ItemSize { # [doc = \" The size of the item.\"] pub item : Size<Pixels>, # [doc = \" The size of the item's contents, which may be larger than the item itself,\"] # [doc = \" if the item was bounded by a parent element.\"] pub contents : Size<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::uniform_list::ScrollStrategy",
      "name": "ScrollStrategy",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Where to place the element scrolled to.",
      "documentation": "Where to place the element scrolled to.",
      "signature": "# [doc = \" Where to place the element scrolled to.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum ScrollStrategy { # [doc = \" Place the element at the top of the list's viewport.\"] Top, # [doc = \" Attempt to place the element in the middle of the list's viewport.\"] # [doc = \" May not be possible if there's not enough list items above the item scrolled to:\"] # [doc = \" in this case, the element will be placed at the closest possible position.\"] Center, # [doc = \" Attempt to place the element at the bottom of the list's viewport.\"] # [doc = \" May not be possible if there's not enough list items above the item scrolled to:\"] # [doc = \" in this case, the element will be placed at the closest possible position.\"] Bottom, # [doc = \" If the element is not visible attempt to place it at:\"] # [doc = \" - The top of the list's viewport if the target element is above currently visible elements.\"] # [doc = \" - The bottom of the list's viewport if the target element is above currently visible elements.\"] Nearest, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::uniform_list::UniformList",
      "name": "UniformList",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "A list element for efficiently laying out and displaying a list of uniform-height elements.",
      "documentation": "A list element for efficiently laying out and displaying a list of uniform-height elements.",
      "signature": "# [doc = \" A list element for efficiently laying out and displaying a list of uniform-height elements.\"] pub struct UniformList { item_count : usize, item_to_measure_index : usize, render_items : Box<dyn for<'a> Fn (Range<usize>, & 'a mut Window, & 'a mut App) -> SmallVec<[AnyElement; 64]>,>, decorations : Vec<Box<dyn UniformListDecoration>>, interactivity : Interactivity, scroll_handle : Option<UniformListScrollHandle>, sizing_behavior : ListSizingBehavior, horizontal_sizing_behavior : ListHorizontalSizingBehavior, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::uniform_list::UniformList::track_scroll",
      "name": "track_scroll",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Track and render scroll state of this list with reference to the given scroll handle.",
      "documentation": "Track and render scroll state of this list with reference to the given scroll handle.",
      "signature": "pub fn track_scroll (mut self, handle : & UniformListScrollHandle) -> Self",
      "cfg": [],
      "target": "UniformList"
    },
    {
      "id": "gpui::elements::uniform_list::UniformList::with_decoration",
      "name": "with_decoration",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Adds a decoration element to the list.",
      "documentation": "Adds a decoration element to the list.",
      "signature": "pub fn with_decoration (mut self, decoration : impl UniformListDecoration + 'static) -> Self",
      "cfg": [],
      "target": "UniformList"
    },
    {
      "id": "gpui::elements::uniform_list::UniformList::with_horizontal_sizing_behavior",
      "name": "with_horizontal_sizing_behavior",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Sets the horizontal sizing behavior, controlling the way list items laid out horizontally. With [`ListHorizontalSizingBehavior::Unconstrained`] behavior, every item and the list itself will have the size of the widest item and lay out pushing the `end_slot` to the right end.",
      "documentation": "Sets the horizontal sizing behavior, controlling the way list items laid out horizontally.\nWith [`ListHorizontalSizingBehavior::Unconstrained`] behavior, every item and the list itself will\nhave the size of the widest item and lay out pushing the `end_slot` to the right end.",
      "signature": "pub fn with_horizontal_sizing_behavior (mut self, behavior : ListHorizontalSizingBehavior,) -> Self",
      "cfg": [],
      "target": "UniformList"
    },
    {
      "id": "gpui::elements::uniform_list::UniformList::with_sizing_behavior",
      "name": "with_sizing_behavior",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Sets the sizing behavior, similar to the `List` element.",
      "documentation": "Sets the sizing behavior, similar to the `List` element.",
      "signature": "pub fn with_sizing_behavior (mut self, behavior : ListSizingBehavior) -> Self",
      "cfg": [],
      "target": "UniformList"
    },
    {
      "id": "gpui::elements::uniform_list::UniformList::with_width_from_item",
      "name": "with_width_from_item",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Selects a specific list item for measurement.",
      "documentation": "Selects a specific list item for measurement.",
      "signature": "pub fn with_width_from_item (mut self, item_index : Option<usize>) -> Self",
      "cfg": [],
      "target": "UniformList"
    },
    {
      "id": "gpui::elements::uniform_list::UniformList::y_flipped",
      "name": "y_flipped",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Sets whether the list is flipped vertically, such that item 0 appears at the bottom.",
      "documentation": "Sets whether the list is flipped vertically, such that item 0 appears at the bottom.",
      "signature": "pub fn y_flipped (mut self, y_flipped : bool) -> Self",
      "cfg": [],
      "target": "UniformList"
    },
    {
      "id": "gpui::elements::uniform_list::UniformListDecoration",
      "name": "UniformListDecoration",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "A decoration for a [`UniformList`]. This can be used for various things, such as rendering indent guides, or other visual effects.",
      "documentation": "A decoration for a [`UniformList`]. This can be used for various things,\nsuch as rendering indent guides, or other visual effects.",
      "signature": "# [doc = \" A decoration for a [`UniformList`]. This can be used for various things,\"] # [doc = \" such as rendering indent guides, or other visual effects.\"] pub trait UniformListDecoration { # [doc = \" Compute the decoration element, given the visible range of list items,\"] # [doc = \" the bounds of the list, and the height of each item.\"] # [allow (clippy::too_many_arguments)] fn compute (& self, visible_range : Range<usize>, bounds : Bounds<Pixels>, scroll_offset : Point<Pixels>, item_height : Pixels, item_count : usize, window : & mut Window, cx : & mut App,) -> AnyElement; }",
      "cfg": []
    },
    {
      "id": "gpui::elements::uniform_list::UniformListFrameState",
      "name": "UniformListFrameState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Frame state used by the [UniformList].",
      "documentation": "Frame state used by the [UniformList].",
      "signature": "# [doc = \" Frame state used by the [UniformList].\"] pub struct UniformListFrameState { items : SmallVec<[AnyElement; 32]>, decorations : SmallVec<[AnyElement; 2]>, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::uniform_list::UniformListScrollHandle",
      "name": "UniformListScrollHandle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "A handle for controlling the scroll position of a uniform list. This should be stored in your view and passed to the uniform_list on each frame.",
      "documentation": "A handle for controlling the scroll position of a uniform list.\nThis should be stored in your view and passed to the uniform_list on each frame.",
      "signature": "# [doc = \" A handle for controlling the scroll position of a uniform list.\"] # [doc = \" This should be stored in your view and passed to the uniform_list on each frame.\"] # [derive (Clone, Debug, Default)] pub struct UniformListScrollHandle (pub Rc<RefCell<UniformListScrollState>>);",
      "cfg": []
    },
    {
      "id": "gpui::elements::uniform_list::UniformListScrollHandle::is_scrollable",
      "name": "is_scrollable",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Checks if the list can be scrolled vertically.",
      "documentation": "Checks if the list can be scrolled vertically.",
      "signature": "pub fn is_scrollable (& self) -> bool",
      "cfg": [],
      "target": "UniformListScrollHandle"
    },
    {
      "id": "gpui::elements::uniform_list::UniformListScrollHandle::is_scrolled_to_end",
      "name": "is_scrolled_to_end",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Whether the list is scrolled to the end, or `None` if the list is not scrollable.",
      "documentation": "Whether the list is scrolled to the end, or `None` if the list is\nnot scrollable.",
      "signature": "pub fn is_scrolled_to_end (& self) -> Option<bool>",
      "cfg": [],
      "target": "UniformListScrollHandle"
    },
    {
      "id": "gpui::elements::uniform_list::UniformListScrollHandle::logical_scroll_top_index",
      "name": "logical_scroll_top_index",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Get the index of the topmost visible child.",
      "documentation": "Get the index of the topmost visible child.",
      "signature": "pub fn logical_scroll_top_index (& self) -> usize",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "UniformListScrollHandle"
    },
    {
      "id": "gpui::elements::uniform_list::UniformListScrollHandle::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Create a new scroll handle to bind to a uniform list.",
      "documentation": "Create a new scroll handle to bind to a uniform list.",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "UniformListScrollHandle"
    },
    {
      "id": "gpui::elements::uniform_list::UniformListScrollHandle::scroll_to_bottom",
      "name": "scroll_to_bottom",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Scroll to the bottom of the list.",
      "documentation": "Scroll to the bottom of the list.",
      "signature": "pub fn scroll_to_bottom (& self)",
      "cfg": [],
      "target": "UniformListScrollHandle"
    },
    {
      "id": "gpui::elements::uniform_list::UniformListScrollHandle::scroll_to_item",
      "name": "scroll_to_item",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Scroll the list so that the given item index is visible.",
      "documentation": "Scroll the list so that the given item index is visible.\n\nThis uses non-strict scrolling: if the item is already fully visible, no scrolling occurs.\nIf the item is out of view, it scrolls the minimum amount to bring it into view according\nto the strategy.",
      "signature": "pub fn scroll_to_item (& self, ix : usize, strategy : ScrollStrategy)",
      "cfg": [],
      "target": "UniformListScrollHandle"
    },
    {
      "id": "gpui::elements::uniform_list::UniformListScrollHandle::scroll_to_item_strict",
      "name": "scroll_to_item_strict",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Scroll the list so that the given item index is at scroll strategy position.",
      "documentation": "Scroll the list so that the given item index is at scroll strategy position.\n\nThis uses strict scrolling: the item will always be scrolled to match the strategy position,\neven if it's already visible. Use this when you need precise positioning.",
      "signature": "pub fn scroll_to_item_strict (& self, ix : usize, strategy : ScrollStrategy)",
      "cfg": [],
      "target": "UniformListScrollHandle"
    },
    {
      "id": "gpui::elements::uniform_list::UniformListScrollHandle::scroll_to_item_strict_with_offset",
      "name": "scroll_to_item_strict_with_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Scroll the list so that the given item index is at the exact scroll strategy position with an offset.",
      "documentation": "Scroll the list so that the given item index is at the exact scroll strategy position with an offset.\n\nThis uses strict scrolling: the item will always be scrolled to match the strategy position,\neven if it's already visible.\n\nThe offset parameter shrinks the effective viewport by the specified number of items\nfrom the corresponding edge, then applies the scroll strategy within that reduced viewport:\n- `ScrollStrategy::Top`: Shrinks from top, positions item at the new top\n- `ScrollStrategy::Center`: Shrinks from top, centers item in the reduced viewport\n- `ScrollStrategy::Bottom`: Shrinks from bottom, positions item at the new bottom",
      "signature": "pub fn scroll_to_item_strict_with_offset (& self, ix : usize, strategy : ScrollStrategy, offset : usize,)",
      "cfg": [],
      "target": "UniformListScrollHandle"
    },
    {
      "id": "gpui::elements::uniform_list::UniformListScrollHandle::scroll_to_item_with_offset",
      "name": "scroll_to_item_with_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Scroll the list to the given item index with an offset in number of items.",
      "documentation": "Scroll the list to the given item index with an offset in number of items.\n\nThis uses non-strict scrolling: if the item is already visible within the offset region,\nno scrolling occurs.\n\nThe offset parameter shrinks the effective viewport by the specified number of items\nfrom the corresponding edge, then applies the scroll strategy within that reduced viewport:\n- `ScrollStrategy::Top`: Shrinks from top, positions item at the new top\n- `ScrollStrategy::Center`: Shrinks from top, centers item in the reduced viewport\n- `ScrollStrategy::Bottom`: Shrinks from bottom, positions item at the new bottom",
      "signature": "pub fn scroll_to_item_with_offset (& self, ix : usize, strategy : ScrollStrategy, offset : usize)",
      "cfg": [],
      "target": "UniformListScrollHandle"
    },
    {
      "id": "gpui::elements::uniform_list::UniformListScrollHandle::y_flipped",
      "name": "y_flipped",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "Check if the list is flipped vertically.",
      "documentation": "Check if the list is flipped vertically.",
      "signature": "pub fn y_flipped (& self) -> bool",
      "cfg": [],
      "target": "UniformListScrollHandle"
    },
    {
      "id": "gpui::elements::uniform_list::UniformListScrollState",
      "name": "UniformListScrollState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, Default)] # [allow (missing_docs)] pub struct UniformListScrollState { pub base_handle : ScrollHandle, pub deferred_scroll_to_item : Option<DeferredScrollToItem>, # [doc = \" Size of the item, captured during last layout.\"] pub last_item_size : Option<ItemSize>, # [doc = \" Whether the list was vertically flipped during last layout.\"] pub y_flipped : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::elements::uniform_list::uniform_list",
      "name": "uniform_list",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "elements::uniform_list",
      "path": "gpui::elements::uniform_list",
      "source": "crates/gpui/src/elements/uniform_list.rs",
      "summary": "uniform_list provides lazy rendering for a set of items that are of uniform height. When rendered into a container with overflow-y: hidden and a fixed (or max) height, uniform_list will only render the visible subset of items.",
      "documentation": "uniform_list provides lazy rendering for a set of items that are of uniform height.\nWhen rendered into a container with overflow-y: hidden and a fixed (or max) height,\nuniform_list will only render the visible subset of items.",
      "signature": "pub fn uniform_list<R> (id : impl Into<ElementId>, item_count : usize, f : impl 'static + Fn (Range<usize>, & mut Window, & mut App) -> Vec<R>,) -> UniformList where R : IntoElement,",
      "cfg": []
    },
    {
      "id": "gpui::executor::BackgroundExecutor",
      "name": "BackgroundExecutor",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "A pointer to the executor that is currently running, for spawning background tasks.",
      "documentation": "A pointer to the executor that is currently running,\nfor spawning background tasks.",
      "signature": "# [doc = \" A pointer to the executor that is currently running,\"] # [doc = \" for spawning background tasks.\"] # [derive (Clone)] pub struct BackgroundExecutor { inner : scheduler::BackgroundExecutor, dispatcher : Arc<dyn PlatformDispatcher>, }",
      "cfg": []
    },
    {
      "id": "gpui::executor::BackgroundExecutor::advance_clock",
      "name": "advance_clock",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "In tests, move time forward. This does not run any tasks, but does make `timer`s ready.",
      "documentation": "In tests, move time forward. This does not run any tasks, but does make `timer`s ready.",
      "signature": "pub fn advance_clock (& self, duration : Duration)",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::allow_parking",
      "name": "allow_parking",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "In tests, prevents `run_until_parked` from panicking if there are outstanding tasks.",
      "documentation": "In tests, prevents `run_until_parked` from panicking if there are outstanding tasks.",
      "signature": "pub fn allow_parking (& self)",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::dispatcher",
      "name": "dispatcher",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn dispatcher (& self) -> & Arc<dyn PlatformDispatcher>",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::forbid_parking",
      "name": "forbid_parking",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Undoes the effect of [`Self::allow_parking`].",
      "documentation": "Undoes the effect of [`Self::allow_parking`].",
      "signature": "pub fn forbid_parking (& self)",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::is_main_thread",
      "name": "is_main_thread",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Whether we're on the main thread.",
      "documentation": "Whether we're on the main thread.",
      "signature": "pub fn is_main_thread (& self) -> bool",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Creates a new BackgroundExecutor from the given PlatformDispatcher.",
      "documentation": "Creates a new BackgroundExecutor from the given PlatformDispatcher.",
      "signature": "pub fn new (dispatcher : Arc<dyn PlatformDispatcher>) -> Self",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::now",
      "name": "now",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Get the current time.",
      "documentation": "Get the current time.\n\nCalling this instead of `std::time::Instant::now` allows the use\nof fake timers in tests.",
      "signature": "pub fn now (& self) -> Instant",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::num_cpus",
      "name": "num_cpus",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "How many CPUs are available to the dispatcher.",
      "documentation": "How many CPUs are available to the dispatcher.",
      "signature": "pub fn num_cpus (& self) -> usize",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::rng",
      "name": "rng",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "In tests, returns the rng used by the dispatcher.",
      "documentation": "In tests, returns the rng used by the dispatcher.",
      "signature": "pub fn rng (& self) -> scheduler::SharedRng",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::run_until_parked",
      "name": "run_until_parked",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "In tests, run tasks until the scheduler would park.",
      "documentation": "In tests, run tasks until the scheduler would park.\n\nUnder the scheduler-backed test dispatcher, `tick()` will not advance the clock, so a pending\ntimer can keep `has_pending_tasks()` true even after all currently-runnable tasks have been\ndrained. To preserve the historical semantics that tests relied on (drain all work that can\nmake progress), we advance the clock to the next timer when no runnable tasks remain.",
      "signature": "pub fn run_until_parked (& self)",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::scheduler_executor",
      "name": "scheduler_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Returns the underlying scheduler::BackgroundExecutor.",
      "documentation": "Returns the underlying scheduler::BackgroundExecutor.\n\nThis is used by Ex to pass the executor to thread/worktree code.",
      "signature": "pub fn scheduler_executor (& self) -> scheduler::BackgroundExecutor",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::scoped",
      "name": "scoped",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Scoped lets you start a number of tasks and waits for all of them to complete before returning.",
      "documentation": "Scoped lets you start a number of tasks and waits\nfor all of them to complete before returning.",
      "signature": "pub async fn scoped<'scope, F> (& self, scheduler : F) where F : FnOnce (& mut Scope<'scope>),",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::scoped_priority",
      "name": "scoped_priority",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Scoped lets you start a number of tasks and waits for all of them to complete before returning.",
      "documentation": "Scoped lets you start a number of tasks and waits\nfor all of them to complete before returning.",
      "signature": "pub async fn scoped_priority<'scope, F> (& self, priority : Priority, scheduler : F) where F : FnOnce (& mut Scope<'scope>),",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::set_block_on_ticks",
      "name": "set_block_on_ticks",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Sets the range of ticks to run before timing out in block_on.",
      "documentation": "Sets the range of ticks to run before timing out in block_on.",
      "signature": "pub fn set_block_on_ticks (& self, range : std::ops::RangeInclusive<usize>)",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::set_num_cpus",
      "name": "set_num_cpus",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Override the number of CPUs reported by this executor in tests. Panics if not called on a test executor.",
      "documentation": "Override the number of CPUs reported by this executor in tests.\nPanics if not called on a test executor.",
      "signature": "pub fn set_num_cpus (& self, count : usize)",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::simulate_random_delay",
      "name": "simulate_random_delay",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "In tests, run an arbitrary number of tasks (determined by the SEED environment variable)",
      "documentation": "In tests, run an arbitrary number of tasks (determined by the SEED environment variable)",
      "signature": "pub fn simulate_random_delay (& self) -> impl Future<Output = ()> + use<>",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::spawn",
      "name": "spawn",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Enqueues the given future to be run to completion on a background thread.",
      "documentation": "Enqueues the given future to be run to completion on a background thread.",
      "signature": "pub fn spawn<R> (& self, future : impl Future<Output = R> + Send + 'static) -> Task<R> where R : Send + 'static,",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::spawn_with_priority",
      "name": "spawn_with_priority",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Enqueues the given future to be run to completion on a background thread with the given priority.",
      "documentation": "Enqueues the given future to be run to completion on a background thread with the given priority.\n\nWhen `Priority::RealtimeAudio` is used, the task runs on a dedicated thread with\nrealtime scheduling priority, suitable for audio processing.",
      "signature": "pub fn spawn_with_priority<R> (& self, priority : Priority, future : impl Future<Output = R> + Send + 'static,) -> Task<R> where R : Send + 'static,",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::tick",
      "name": "tick",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "In tests, run one task.",
      "documentation": "In tests, run one task.",
      "signature": "pub fn tick (& self) -> bool",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::BackgroundExecutor::timer",
      "name": "timer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Returns a task that will complete after the given duration. Depending on other concurrent tasks the elapsed duration may be longer than requested.",
      "documentation": "Returns a task that will complete after the given duration.\nDepending on other concurrent tasks the elapsed duration may be longer\nthan requested.",
      "signature": "pub fn timer (& self, duration : Duration) -> Task<()>",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "gpui::executor::ForegroundExecutor",
      "name": "ForegroundExecutor",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "A pointer to the executor that is currently running, for spawning tasks on the main thread.",
      "documentation": "A pointer to the executor that is currently running,\nfor spawning tasks on the main thread.",
      "signature": "# [doc = \" A pointer to the executor that is currently running,\"] # [doc = \" for spawning tasks on the main thread.\"] # [derive (Clone)] pub struct ForegroundExecutor { inner : scheduler::LocalExecutor, dispatcher : Arc<dyn PlatformDispatcher>, not_send : PhantomData<Rc<()>>, }",
      "cfg": []
    },
    {
      "id": "gpui::executor::ForegroundExecutor::block_on",
      "name": "block_on",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Block the current thread until the given future resolves. Consider using `block_with_timeout` instead.",
      "documentation": "Block the current thread until the given future resolves.\nConsider using `block_with_timeout` instead.",
      "signature": "pub fn block_on<R> (& self, future : impl Future<Output = R>) -> R",
      "cfg": [],
      "target": "ForegroundExecutor"
    },
    {
      "id": "gpui::executor::ForegroundExecutor::block_test",
      "name": "block_test",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Used by the test harness to run an async test in a synchronous fashion.",
      "documentation": "Used by the test harness to run an async test in a synchronous fashion.",
      "signature": "pub fn block_test<R> (& self, future : impl Future<Output = R>) -> R",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "ForegroundExecutor"
    },
    {
      "id": "gpui::executor::ForegroundExecutor::block_with_timeout",
      "name": "block_with_timeout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Block the current thread until the given future resolves or the timeout elapses.",
      "documentation": "Block the current thread until the given future resolves or the timeout elapses.",
      "signature": "pub fn block_with_timeout<R, Fut : Future<Output = R>> (& self, duration : Duration, future : Fut,) -> Result<R, impl Future<Output = R> + use<R, Fut>>",
      "cfg": [],
      "target": "ForegroundExecutor"
    },
    {
      "id": "gpui::executor::ForegroundExecutor::dispatcher",
      "name": "dispatcher",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn dispatcher (& self) -> & Arc<dyn PlatformDispatcher>",
      "cfg": [],
      "target": "ForegroundExecutor"
    },
    {
      "id": "gpui::executor::ForegroundExecutor::idle_time_remaining",
      "name": "idle_time_remaining",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "The time remaining in the current idle slice, when called from a task spawned via [`Self::spawn_when_idle`] on a platform that meters idle time. `None` when idle time is unmetered (or the caller is not inside an idle slice); work that must bound itself should then fall back to a budget of its own.",
      "documentation": "The time remaining in the current idle slice, when called from a task\nspawned via [`Self::spawn_when_idle`] on a platform that meters idle\ntime. `None` when idle time is unmetered (or the caller is not inside\nan idle slice); work that must bound itself should then fall back to a\nbudget of its own.",
      "signature": "pub fn idle_time_remaining (& self) -> Option<Duration>",
      "cfg": [],
      "target": "ForegroundExecutor"
    },
    {
      "id": "gpui::executor::ForegroundExecutor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Creates a new ForegroundExecutor from the given PlatformDispatcher.",
      "documentation": "Creates a new ForegroundExecutor from the given PlatformDispatcher.",
      "signature": "pub fn new (dispatcher : Arc<dyn PlatformDispatcher>) -> Self",
      "cfg": [],
      "target": "ForegroundExecutor"
    },
    {
      "id": "gpui::executor::ForegroundExecutor::scheduler_executor",
      "name": "scheduler_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn scheduler_executor (& self) -> SchedulerLocalExecutor",
      "cfg": [],
      "target": "ForegroundExecutor"
    },
    {
      "id": "gpui::executor::ForegroundExecutor::spawn",
      "name": "spawn",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Enqueues the given Task to run on the main thread.",
      "documentation": "Enqueues the given Task to run on the main thread.",
      "signature": "pub fn spawn<R> (& self, future : impl Future<Output = R> + 'static) -> Task<R> where R : 'static,",
      "cfg": [],
      "target": "ForegroundExecutor"
    },
    {
      "id": "gpui::executor::ForegroundExecutor::spawn_when_idle",
      "name": "spawn_when_idle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "On platforms with dedicated support, enqueues the given future to run on the main thread during platform idle time. Without a `timeout`, polls may be deferred indefinitely while the platform stays busy; with one, a poll still waiting after that long runs as ordinary main-thread work. Each poll occupies part of one idle slice, so long synchronous stretches should bound themselves against [`Self::idle_time_remaining`] and yield.",
      "documentation": "On platforms with dedicated support, enqueues the given future to run\non the main thread during platform idle time. Without a `timeout`,\npolls may be deferred indefinitely while the platform stays busy;\nwith one, a poll still waiting after that long runs as ordinary main-thread work.\nEach poll occupies part of one idle slice, so long synchronous stretches\nshould bound themselves against [`Self::idle_time_remaining`] and yield.\n\nOn platforms without dedicated support, schedules the given future to run\nwith a low priority, ignoring `timeout`.",
      "signature": "pub fn spawn_when_idle<R> (& self, timeout : Option<Duration>, future : impl Future<Output = R> + 'static,) -> Task<R> where R : 'static,",
      "cfg": [],
      "target": "ForegroundExecutor"
    },
    {
      "id": "gpui::executor::ForegroundExecutor::spawn_with_priority",
      "name": "spawn_with_priority",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Enqueues the given Task to run on the main thread with the given priority.",
      "documentation": "Enqueues the given Task to run on the main thread with the given priority.",
      "signature": "pub fn spawn_with_priority<R> (& self, _priority : Priority, future : impl Future<Output = R> + 'static,) -> Task<R> where R : 'static,",
      "cfg": [],
      "target": "ForegroundExecutor"
    },
    {
      "id": "gpui::executor::Scope",
      "name": "Scope",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Scope manages a set of tasks that are enqueued and waited on together. See [`BackgroundExecutor::scoped`].",
      "documentation": "Scope manages a set of tasks that are enqueued and waited on together. See [`BackgroundExecutor::scoped`].",
      "signature": "# [doc = \" Scope manages a set of tasks that are enqueued and waited on together. See [`BackgroundExecutor::scoped`].\"] pub struct Scope<'a> { executor : BackgroundExecutor, priority : Priority, futures : Vec<Pin<Box<dyn Future<Output = ()> + Send + 'static>>>, tx : Option<mpsc::Sender<()>>, rx : mpsc::Receiver<()>, lifetime : PhantomData<& 'a ()>, }",
      "cfg": []
    },
    {
      "id": "gpui::executor::Scope::num_cpus",
      "name": "num_cpus",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "How many CPUs are available to the dispatcher.",
      "documentation": "How many CPUs are available to the dispatcher.",
      "signature": "pub fn num_cpus (& self) -> usize",
      "cfg": [],
      "target": "Scope<'a>"
    },
    {
      "id": "gpui::executor::Scope::spawn",
      "name": "spawn",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Spawn a future into this scope.",
      "documentation": "Spawn a future into this scope.",
      "signature": "pub fn spawn<F> (& mut self, f : F) where F : Future<Output = ()> + Send + 'a,",
      "cfg": [],
      "target": "Scope<'a>"
    },
    {
      "id": "gpui::executor::TaskExt",
      "name": "TaskExt",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "Extension trait for `Task<Result<T, E>>` that adds `detach_and_log_err` with an `&App` context.",
      "documentation": "Extension trait for `Task<Result<T, E>>` that adds `detach_and_log_err` with an `&App` context.\n\nThis trait is automatically implemented for all `Task<Result<T, E>>` types.",
      "signature": "# [doc = \" Extension trait for `Task<Result<T, E>>` that adds `detach_and_log_err` with an `&App` context.\"] # [doc = \"\"] # [doc = \" This trait is automatically implemented for all `Task<Result<T, E>>` types.\"] pub trait TaskExt<T, E> { # [doc = \" Run the task to completion in the background and log any errors that occur.\"] fn detach_and_log_err (self, cx : & App); # [doc = \" Like [`Self::detach_and_log_err`], but uses `{:?}` formatting on failure so `anyhow::Error`\"] # [doc = \" values emit their full backtrace. Prefer `detach_and_log_err` unless a backtrace is wanted.\"] fn detach_and_log_err_with_backtrace (self, cx : & App); }",
      "cfg": []
    },
    {
      "id": "gpui::executor::reexport-1",
      "name": "scheduler :: { FallibleTask , LocalExecutor as SchedulerLocalExecutor , Priority , Task }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "executor",
      "path": "gpui::executor",
      "source": "crates/gpui/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use scheduler::{ FallibleTask, LocalExecutor as SchedulerLocalExecutor, Priority, Task };",
      "cfg": []
    },
    {
      "id": "gpui::geometry::AbsoluteLength",
      "name": "AbsoluteLength",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Represents an absolute length in pixels or rems.",
      "documentation": "Represents an absolute length in pixels or rems.\n\n`AbsoluteLength` can be either a fixed number of pixels, which is an absolute measurement not\naffected by the current font size, or a number of rems, which is relative to the font size of\nthe root element. It is used for specifying dimensions that are either independent of or\nrelated to the typographic scale.",
      "signature": "# [doc = \" Represents an absolute length in pixels or rems.\"] # [doc = \"\"] # [doc = \" `AbsoluteLength` can be either a fixed number of pixels, which is an absolute measurement not\"] # [doc = \" affected by the current font size, or a number of rems, which is relative to the font size of\"] # [doc = \" the root element. It is used for specifying dimensions that are either independent of or\"] # [doc = \" related to the typographic scale.\"] # [derive (Clone, Copy, Neg, PartialEq)] pub enum AbsoluteLength { # [doc = \" A length in pixels.\"] Pixels (Pixels), # [doc = \" A length in rems.\"] Rems (Rems), }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::AbsoluteLength::is_zero",
      "name": "is_zero",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Checks if the absolute length is zero.",
      "documentation": "Checks if the absolute length is zero.",
      "signature": "pub fn is_zero (& self) -> bool",
      "cfg": [],
      "target": "AbsoluteLength"
    },
    {
      "id": "gpui::geometry::AbsoluteLength::to_pixels",
      "name": "to_pixels",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Converts an `AbsoluteLength` to `Pixels` based on a given `rem_size`.",
      "documentation": "Converts an `AbsoluteLength` to `Pixels` based on a given `rem_size`.\n\n# Arguments\n\n* `rem_size` - The size of one rem in pixels.\n\n# Returns\n\nReturns the `AbsoluteLength` as `Pixels`.\n\n# Examples\n\n```\n# use gpui::{AbsoluteLength, Pixels, Rems};\nlet length_in_pixels = AbsoluteLength::Pixels(Pixels::from(42.0));\nlet length_in_rems = AbsoluteLength::Rems(Rems(2.0));\nlet rem_size = Pixels::from(16.0);\n\nassert_eq!(length_in_pixels.to_pixels(rem_size), Pixels::from(42.0));\nassert_eq!(length_in_rems.to_pixels(rem_size), Pixels::from(32.0));\n```",
      "signature": "pub fn to_pixels (self, rem_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "AbsoluteLength"
    },
    {
      "id": "gpui::geometry::AbsoluteLength::to_rems",
      "name": "to_rems",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Converts an `AbsoluteLength` to `Rems` based on a given `rem_size`.",
      "documentation": "Converts an `AbsoluteLength` to `Rems` based on a given `rem_size`.\n\n# Arguments\n\n* `rem_size` - The size of one rem in pixels.\n\n# Returns\n\nReturns the `AbsoluteLength` as `Pixels`.",
      "signature": "pub fn to_rems (self, rem_size : Pixels) -> Rems",
      "cfg": [],
      "target": "AbsoluteLength"
    },
    {
      "id": "gpui::geometry::Along",
      "name": "Along",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "A trait for accessing the given unit along a certain axis.",
      "documentation": "A trait for accessing the given unit along a certain axis.",
      "signature": "# [doc = \" A trait for accessing the given unit along a certain axis.\"] pub trait Along { # [doc = \" The unit associated with this type\"] type Unit; # [doc = \" Returns the unit along the given axis.\"] fn along (& self, axis : Axis) -> Self::Unit; # [doc = \" Applies the given function to the unit along the given axis and returns a new value.\"] fn apply_along (& self, axis : Axis, f : impl FnOnce (Self::Unit) -> Self::Unit) -> Self; }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Anchor",
      "name": "Anchor",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Identifies a reference point on a 2D box, used to anchor positioned elements.",
      "documentation": "Identifies a reference point on a 2D box, used to anchor positioned elements.",
      "signature": "# [doc = \" Identifies a reference point on a 2D box, used to anchor positioned elements.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum Anchor { # [doc = \" The top left corner\"] TopLeft, # [doc = \" The top right corner\"] TopRight, # [doc = \" The bottom left corner\"] BottomLeft, # [doc = \" The bottom right corner\"] BottomRight, # [doc = \" The top center position\"] TopCenter, # [doc = \" The bottom center position\"] BottomCenter, # [doc = \" The left center position\"] LeftCenter, # [doc = \" The right center position\"] RightCenter, }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Anchor::is_center",
      "name": "is_center",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns true if at the center.",
      "documentation": "Returns true if at the center.",
      "signature": "pub fn is_center (& self) -> bool",
      "cfg": [],
      "target": "Anchor"
    },
    {
      "id": "gpui::geometry::Anchor::opposite",
      "name": "opposite",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the directly opposite corner.",
      "documentation": "Returns the directly opposite corner.\n\n# Examples\n\n```\n# use gpui::Anchor;\nassert_eq!(Anchor::TopLeft.opposite(), Anchor::BottomRight);\n```",
      "signature": "pub fn opposite (self) -> Self",
      "cfg": [],
      "target": "Anchor"
    },
    {
      "id": "gpui::geometry::Anchor::other_side_along",
      "name": "other_side_along",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the corner across from this corner, moving along the specified axis.",
      "documentation": "Returns the corner across from this corner, moving along the specified axis.\n\n# Examples\n\n```\n# use gpui::{Axis, Anchor};\nlet result = Anchor::TopLeft.other_side_along(Axis::Horizontal);\nassert_eq!(result, Anchor::TopRight);\n```",
      "signature": "pub fn other_side_along (self, axis : Axis) -> Self",
      "cfg": [],
      "target": "Anchor"
    },
    {
      "id": "gpui::geometry::Axis",
      "name": "Axis",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Axis in a 2D cartesian space.",
      "documentation": "Axis in a 2D cartesian space.",
      "signature": "# [doc = \" Axis in a 2D cartesian space.\"] # [derive (Copy, Clone, PartialEq, Eq, Serialize, Deserialize, Debug)] pub enum Axis { # [doc = \" The y axis, or up and down\"] Vertical, # [doc = \" The x axis, or left and right\"] Horizontal, }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Axis::invert",
      "name": "invert",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Swap this axis to the opposite axis.",
      "documentation": "Swap this axis to the opposite axis.",
      "signature": "pub fn invert (self) -> Self",
      "cfg": [],
      "target": "Axis"
    },
    {
      "id": "gpui::geometry::Bounds",
      "name": "Bounds",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Represents a rectangular area in a 2D space with an origin point and a size.",
      "documentation": "Represents a rectangular area in a 2D space with an origin point and a size.\n\nThe `Bounds` struct is generic over a type `T` which represents the type of the coordinate system.\nThe origin is represented as a `Point<T>` which defines the top left corner of the rectangle,\nand the size is represented as a `Size<T>` which defines the width and height of the rectangle.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet origin = Point { x: 0, y: 0 };\nlet size = Size { width: 10, height: 20 };\nlet bounds = Bounds::new(origin, size);\n\nassert_eq!(bounds.origin, origin);\nassert_eq!(bounds.size, size);\n```",
      "signature": "# [doc = \" Represents a rectangular area in a 2D space with an origin point and a size.\"] # [doc = \"\"] # [doc = \" The `Bounds` struct is generic over a type `T` which represents the type of the coordinate system.\"] # [doc = \" The origin is represented as a `Point<T>` which defines the top left corner of the rectangle,\"] # [doc = \" and the size is represented as a `Size<T>` which defines the width and height of the rectangle.\"] # [doc = \"\"] # [doc = \" # Examples\"] # [doc = \"\"] # [doc = \" ```\"] # [doc = \" # use gpui::{Bounds, Point, Size};\"] # [doc = \" let origin = Point { x: 0, y: 0 };\"] # [doc = \" let size = Size { width: 10, height: 20 };\"] # [doc = \" let bounds = Bounds::new(origin, size);\"] # [doc = \"\"] # [doc = \" assert_eq!(bounds.origin, origin);\"] # [doc = \" assert_eq!(bounds.size, size);\"] # [doc = \" ```\"] # [derive (Refineable, Copy, Clone, Default, Debug, Eq, PartialEq, Serialize, Deserialize, Hash)] # [refineable (Debug)] # [repr (C)] pub struct Bounds<T : Clone + Debug + Default + PartialEq> { # [doc = \" The origin point of this area.\"] pub origin : Point<T>, # [doc = \" The size of the rectangle.\"] pub size : Size<T>, }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Bounds::bottom",
      "name": "bottom",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the bottom edge of the bounds.",
      "documentation": "Returns the bottom edge of the bounds.\n\n# Returns\n\nA value of type `T` representing the y-coordinate of the bottom edge of the bounds.",
      "signature": "pub fn bottom (& self) -> T",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::bottom_center",
      "name": "bottom_center",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the bottom center point of the bounds.",
      "documentation": "Returns the bottom center point of the bounds.",
      "signature": "pub fn bottom_center (& self) -> Point<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::bottom_left",
      "name": "bottom_left",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the bottom left corner point of the bounds.",
      "documentation": "Returns the bottom left corner point of the bounds.\n\n# Returns\n\nA `Point<T>` representing the bottom left corner of the bounds.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet bounds = Bounds {\norigin: Point { x: 0, y: 0 },\nsize: Size { width: 10, height: 20 },\n};\nlet bottom_left = bounds.bottom_left();\nassert_eq!(bottom_left, Point { x: 0, y: 20 });\n```",
      "signature": "pub fn bottom_left (& self) -> Point<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::bottom_right",
      "name": "bottom_right",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the bottom right corner point of the bounds.",
      "documentation": "Returns the bottom right corner point of the bounds.\n\n# Returns\n\nA `Point<T>` representing the bottom right corner of the bounds.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet bounds = Bounds {\norigin: Point { x: 0, y: 0 },\nsize: Size { width: 10, height: 20 },\n};\nlet bottom_right = bounds.bottom_right();\nassert_eq!(bottom_right, Point { x: 10, y: 20 });\n```",
      "signature": "pub fn bottom_right (& self) -> Point<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::center",
      "name": "center",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the center point of the bounds.",
      "documentation": "Returns the center point of the bounds.\n\nCalculates the center by taking the origin's x and y coordinates and adding half the width and height\nof the bounds, respectively. The center is represented as a `Point<T>` where `T` is the type of the\ncoordinate system.\n\n# Returns\n\nA `Point<T>` representing the center of the bounds.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet bounds = Bounds {\norigin: Point { x: 0, y: 0 },\nsize: Size { width: 10, height: 20 },\n};\nlet center = bounds.center();\nassert_eq!(center, Point { x: 5, y: 10 });\n```",
      "signature": "pub fn center (& self) -> Point<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::centered",
      "name": "centered",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Generate a centered bounds for the given display or primary display if none is provided",
      "documentation": "Generate a centered bounds for the given display or primary display if none is provided",
      "signature": "pub fn centered (display_id : Option<DisplayId>, size : Size<Pixels>, cx : & App) -> Self",
      "cfg": [],
      "target": "Bounds<Pixels>"
    },
    {
      "id": "gpui::geometry::Bounds::centered_at",
      "name": "centered_at",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Creates a new bounds centered at the given point.",
      "documentation": "Creates a new bounds centered at the given point.",
      "signature": "pub fn centered_at (center : Point<T>, size : Size<T>) -> Self",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::contains",
      "name": "contains",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Checks if the given point is within the bounds.",
      "documentation": "Checks if the given point is within the bounds.\n\nThis method determines whether a point lies inside the rectangle defined by the bounds,\nincluding the edges. The point is considered inside if its x-coordinate is greater than\nor equal to the left edge and less than or equal to the right edge, and its y-coordinate\nis greater than or equal to the top edge and less than or equal to the bottom edge of the bounds.\n\n# Arguments\n\n* `point` - A reference to a `Point<T>` that represents the point to check.\n\n# Returns\n\nReturns `true` if the point is within the bounds, `false` otherwise.\n\n# Examples\n\n```\n# use gpui::{Point, Bounds, Size};\nlet bounds = Bounds {\norigin: Point { x: 0, y: 0 },\nsize: Size { width: 10, height: 10 },\n};\nlet inside_point = Point { x: 5, y: 5 };\nlet outside_point = Point { x: 15, y: 15 };\n\nassert!(bounds.contains(&inside_point));\nassert!(!bounds.contains(&outside_point));\n```",
      "signature": "pub fn contains (& self, point : & Point<T>) -> bool",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::corner",
      "name": "corner",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the requested corner point of the bounds.",
      "documentation": "Returns the requested corner point of the bounds.\n\n# Returns\n\nA `Point<T>` representing the corner of the bounds requested by the parameter.\n\n# Examples\n\n```\nuse gpui::{Bounds, Anchor, Point, Size};\nlet bounds = Bounds {\norigin: Point { x: 0, y: 0 },\nsize: Size { width: 10, height: 20 },\n};\nlet bottom_left = bounds.corner(Anchor::BottomLeft);\nassert_eq!(bottom_left, Point { x: 0, y: 20 });\n```",
      "signature": "pub fn corner (& self, corner : Anchor) -> Point<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::dilate",
      "name": "dilate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Dilates the bounds by a specified amount in all directions.",
      "documentation": "Dilates the bounds by a specified amount in all directions.\n\nThis method expands the bounds by the given `amount`, increasing the size\nand adjusting the origin so that the bounds grow outwards equally in all directions.\nThe resulting bounds will have its width and height increased by twice the `amount`\n(since it grows in both directions), and the origin will be moved by `-amount`\nin both the x and y directions.\n\n# Arguments\n\n* `amount` - The amount by which to dilate the bounds.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet mut bounds = Bounds {\norigin: Point { x: 10, y: 10 },\nsize: Size { width: 10, height: 10 },\n};\nlet expanded_bounds = bounds.dilate(5);\nassert_eq!(expanded_bounds, Bounds {\norigin: Point { x: 5, y: 5 },\nsize: Size { width: 20, height: 20 },\n});\n```",
      "signature": "pub fn dilate (& self, amount : T) -> Bounds<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::extend",
      "name": "extend",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Extends the bounds different amounts in each direction.",
      "documentation": "Extends the bounds different amounts in each direction.",
      "signature": "pub fn extend (& self, amount : Edges<T>) -> Bounds<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::from_anchor_and_size",
      "name": "from_anchor_and_size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Constructs a `Bounds` from a corner point and size. The specified corner will be placed at the specified origin.",
      "documentation": "Constructs a `Bounds` from a corner point and size. The specified corner will be placed at\nthe specified origin.",
      "signature": "pub fn from_anchor_and_size (corner : Anchor, origin : Point<T>, size : Size<T>) -> Bounds<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::from_corners",
      "name": "from_corners",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Constructs a `Bounds` from two corner points: the top left and bottom right corners.",
      "documentation": "Constructs a `Bounds` from two corner points: the top left and bottom right corners.\n\nThis function calculates the origin and size of the `Bounds` based on the provided corner points.\nThe origin is set to the top left corner, and the size is determined by the difference between\nthe x and y coordinates of the bottom right and top left points.\n\n# Arguments\n\n* `top_left` - A `Point<T>` representing the top left corner of the rectangle.\n* `bottom_right` - A `Point<T>` representing the bottom right corner of the rectangle.\n\n# Returns\n\nReturns a `Bounds<T>` that encompasses the area defined by the two corner points.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point};\nlet top_left = Point { x: 0, y: 0 };\nlet bottom_right = Point { x: 10, y: 10 };\nlet bounds = Bounds::from_corners(top_left, bottom_right);\n\nassert_eq!(bounds.origin, top_left);\nassert_eq!(bounds.size.width, 10);\nassert_eq!(bounds.size.height, 10);\n```",
      "signature": "pub fn from_corners (top_left : Point<T>, bottom_right : Point<T>) -> Self",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::half_perimeter",
      "name": "half_perimeter",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Calculates the half perimeter of a rectangle defined by the bounds.",
      "documentation": "Calculates the half perimeter of a rectangle defined by the bounds.\n\nThe half perimeter is calculated as the sum of the width and the height of the rectangle.\nThis method is generic over the type `T` which must implement the `Sub` trait to allow\ncalculation of the width and height from the bounds' origin and size, as well as the `Add` trait\nto sum the width and height for the half perimeter.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet bounds = Bounds {\norigin: Point { x: 0, y: 0 },\nsize: Size { width: 10, height: 20 },\n};\nlet half_perimeter = bounds.half_perimeter();\nassert_eq!(half_perimeter, 30);\n```",
      "signature": "pub fn half_perimeter (& self) -> T",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::inset",
      "name": "inset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Inset the bounds by a specified amount. Equivalent to `dilate` with the amount negated.",
      "documentation": "Inset the bounds by a specified amount. Equivalent to `dilate` with the amount negated.\n\nNote that this may panic if T does not support negative values.",
      "signature": "pub fn inset (& self, amount : T) -> Self",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::intersect",
      "name": "intersect",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Calculates the intersection of two `Bounds` objects.",
      "documentation": "Calculates the intersection of two `Bounds` objects.\n\nThis method computes the overlapping region of two `Bounds`. If the bounds do not intersect,\nthe resulting `Bounds` will have a size with width and height of zero.\n\n# Arguments\n\n* `other` - A reference to another `Bounds` to intersect with.\n\n# Returns\n\nReturns a `Bounds` representing the intersection area. If there is no intersection,\nthe returned `Bounds` will have a size with width and height of zero.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet bounds1 = Bounds {\norigin: Point { x: 0, y: 0 },\nsize: Size { width: 10, height: 10 },\n};\nlet bounds2 = Bounds {\norigin: Point { x: 5, y: 5 },\nsize: Size { width: 10, height: 10 },\n};\nlet intersection = bounds1.intersect(&bounds2);\n\nassert_eq!(intersection, Bounds {\norigin: Point { x: 5, y: 5 },\nsize: Size { width: 5, height: 5 },\n});\n```",
      "signature": "pub fn intersect (& self, other : & Self) -> Self",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::intersects",
      "name": "intersects",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Checks if this `Bounds` intersects with another `Bounds`.",
      "documentation": "Checks if this `Bounds` intersects with another `Bounds`.\n\nTwo `Bounds` instances intersect if they overlap in the 2D space they occupy.\nThis method checks if there is any overlapping area between the two bounds.\n\n# Arguments\n\n* `other` - A reference to another `Bounds` to check for intersection with.\n\n# Returns\n\nReturns `true` if there is any intersection between the two bounds, `false` otherwise.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet bounds1 = Bounds {\norigin: Point { x: 0, y: 0 },\nsize: Size { width: 10, height: 10 },\n};\nlet bounds2 = Bounds {\norigin: Point { x: 5, y: 5 },\nsize: Size { width: 10, height: 10 },\n};\nlet bounds3 = Bounds {\norigin: Point { x: 20, y: 20 },\nsize: Size { width: 10, height: 10 },\n};\n\nassert_eq!(bounds1.intersects(&bounds2), true); // Overlapping bounds\nassert_eq!(bounds1.intersects(&bounds3), false); // Non-overlapping bounds\n```",
      "signature": "pub fn intersects (& self, other : & Bounds<T>) -> bool",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::is_contained_within",
      "name": "is_contained_within",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Checks if this bounds is completely contained within another bounds.",
      "documentation": "Checks if this bounds is completely contained within another bounds.\n\nThis method determines whether the current bounds is entirely enclosed by the given bounds.\nA bounds is considered to be contained within another if its origin (top-left corner) and\nits bottom-right corner are both contained within the other bounds.\n\n# Arguments\n\n* `other` - A reference to another `Bounds` that might contain this bounds.\n\n# Returns\n\nReturns `true` if this bounds is completely inside the other bounds, `false` otherwise.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet outer_bounds = Bounds {\norigin: Point { x: 0, y: 0 },\nsize: Size { width: 20, height: 20 },\n};\nlet inner_bounds = Bounds {\norigin: Point { x: 5, y: 5 },\nsize: Size { width: 10, height: 10 },\n};\nlet overlapping_bounds = Bounds {\norigin: Point { x: 15, y: 15 },\nsize: Size { width: 10, height: 10 },\n};\n\nassert!(inner_bounds.is_contained_within(&outer_bounds));\nassert!(!overlapping_bounds.is_contained_within(&outer_bounds));\n```",
      "signature": "pub fn is_contained_within (& self, other : & Self) -> bool",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Checks if the bounds represent an empty area.",
      "documentation": "Checks if the bounds represent an empty area.\n\n# Returns\n\nReturns `true` if either the width or the height of the bounds is less than or equal to zero, indicating an empty area.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::left",
      "name": "left",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the left edge of the bounds.",
      "documentation": "Returns the left edge of the bounds.\n\n# Returns\n\nA value of type `T` representing the x-coordinate of the left edge of the bounds.",
      "signature": "pub fn left (& self) -> T",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::left_center",
      "name": "left_center",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the left center point of the bounds.",
      "documentation": "Returns the left center point of the bounds.",
      "signature": "pub fn left_center (& self) -> Point<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::localize",
      "name": "localize",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Convert a point to the coordinate space defined by this Bounds",
      "documentation": "Convert a point to the coordinate space defined by this Bounds",
      "signature": "pub fn localize (& self, point : & Point<T>) -> Option<Point<T>>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::map",
      "name": "map",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Applies a function to the origin and size of the bounds, producing a new `Bounds<U>`.",
      "documentation": "Applies a function to the origin and size of the bounds, producing a new `Bounds<U>`.\n\nThis method allows for converting a `Bounds<T>` to a `Bounds<U>` by specifying a closure\nthat defines how to convert between the two types. The closure is applied to the `origin` and\n`size` fields, resulting in new bounds of the desired type.\n\n# Arguments\n\n* `f` - A closure that takes a value of type `T` and returns a value of type `U`.\n\n# Returns\n\nReturns a new `Bounds<U>` with the origin and size mapped by the provided function.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet bounds = Bounds {\norigin: Point { x: 10.0, y: 10.0 },\nsize: Size { width: 10.0, height: 20.0 },\n};\nlet new_bounds = bounds.map(|value| value as f64 * 1.5);\n\nassert_eq!(new_bounds, Bounds {\norigin: Point { x: 15.0, y: 15.0 },\nsize: Size { width: 15.0, height: 30.0 },\n});\n```",
      "signature": "pub fn map<U> (& self, f : impl Fn (T) -> U) -> Bounds<U> where U : Clone + Debug + Default + PartialEq,",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::map_origin",
      "name": "map_origin",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Applies a function to the origin  of the bounds, producing a new `Bounds` with the new origin",
      "documentation": "Applies a function to the origin  of the bounds, producing a new `Bounds` with the new origin\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet bounds = Bounds {\norigin: Point { x: 10.0, y: 10.0 },\nsize: Size { width: 10.0, height: 20.0 },\n};\nlet new_bounds = bounds.map_origin(|value| value * 1.5);\n\nassert_eq!(new_bounds, Bounds {\norigin: Point { x: 15.0, y: 15.0 },\nsize: Size { width: 10.0, height: 20.0 },\n});\n```",
      "signature": "pub fn map_origin (self, f : impl Fn (T) -> T) -> Bounds<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::map_size",
      "name": "map_size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Applies a function to the origin  of the bounds, producing a new `Bounds` with the new origin",
      "documentation": "Applies a function to the origin  of the bounds, producing a new `Bounds` with the new origin\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet bounds = Bounds {\norigin: Point { x: 10.0, y: 10.0 },\nsize: Size { width: 10.0, height: 20.0 },\n};\nlet new_bounds = bounds.map_size(|value| value * 1.5);\n\nassert_eq!(new_bounds, Bounds {\norigin: Point { x: 10.0, y: 10.0 },\nsize: Size { width: 15.0, height: 30.0 },\n});\n```",
      "signature": "pub fn map_size (self, f : impl Fn (T) -> T) -> Bounds<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::maximized",
      "name": "maximized",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Generate maximized bounds for the given display or primary display if none is provided",
      "documentation": "Generate maximized bounds for the given display or primary display if none is provided",
      "signature": "pub fn maximized (display_id : Option<DisplayId>, cx : & App) -> Self",
      "cfg": [],
      "target": "Bounds<Pixels>"
    },
    {
      "id": "gpui::geometry::Bounds::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Creates a new `Bounds` with the specified origin and size.",
      "documentation": "Creates a new `Bounds` with the specified origin and size.\n\n# Arguments\n\n* `origin` - A `Point<T>` representing the origin of the bounds.\n* `size` - A `Size<T>` representing the size of the bounds.\n\n# Returns\n\nReturns a `Bounds<T>` that has the given origin and size.",
      "signature": "pub fn new (origin : Point<T>, size : Size<T>) -> Self",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::right",
      "name": "right",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the right edge of the bounds.",
      "documentation": "Returns the right edge of the bounds.\n\n# Returns\n\nA value of type `T` representing the x-coordinate of the right edge of the bounds.",
      "signature": "pub fn right (& self) -> T",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::right_center",
      "name": "right_center",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the right center point of the bounds.",
      "documentation": "Returns the right center point of the bounds.",
      "signature": "pub fn right_center (& self) -> Point<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Scales the bounds by a given factor, typically used to adjust for display scaling.",
      "documentation": "Scales the bounds by a given factor, typically used to adjust for display scaling.\n\nThis method multiplies the origin and size of the bounds by the provided scaling factor,\nresulting in a new `Bounds<ScaledPixels>` that is proportionally larger or smaller\ndepending on the scaling factor. This can be used to ensure that the bounds are properly\nscaled for different display densities.\n\n# Arguments\n\n* `factor` - The scaling factor to apply to the origin and size, typically the display's scaling factor.\n\n# Returns\n\nReturns a new `Bounds<ScaledPixels>` that represents the scaled bounds.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size, Pixels, ScaledPixels, DevicePixels};\nlet bounds = Bounds {\norigin: Point { x: Pixels::from(10.0), y: Pixels::from(20.0) },\nsize: Size { width: Pixels::from(30.0), height: Pixels::from(40.0) },\n};\nlet display_scale_factor = 2.0;\nlet scaled_bounds = bounds.scale(display_scale_factor);\nassert_eq!(scaled_bounds, Bounds {\norigin: Point {\nx: ScaledPixels::from(20.0),\ny: ScaledPixels::from(40.0),\n},\nsize: Size {\nwidth: ScaledPixels::from(60.0),\nheight: ScaledPixels::from(80.0)\n},\n});\n```",
      "signature": "pub fn scale (& self, factor : f32) -> Bounds<ScaledPixels>",
      "cfg": [],
      "target": "Bounds<Pixels>"
    },
    {
      "id": "gpui::geometry::Bounds::space_within",
      "name": "space_within",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Computes the space available within outer bounds.",
      "documentation": "Computes the space available within outer bounds.",
      "signature": "pub fn space_within (& self, outer : & Self) -> Edges<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::to_device_pixels",
      "name": "to_device_pixels",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Convert the bounds from logical pixels to physical pixels",
      "documentation": "Convert the bounds from logical pixels to physical pixels",
      "signature": "pub fn to_device_pixels (self, factor : f32) -> Bounds<DevicePixels>",
      "cfg": [],
      "target": "Bounds<Pixels>"
    },
    {
      "id": "gpui::geometry::Bounds::to_pixels",
      "name": "to_pixels",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Convert the bounds from physical pixels to logical pixels",
      "documentation": "Convert the bounds from physical pixels to logical pixels",
      "signature": "pub fn to_pixels (self, scale_factor : f32) -> Bounds<Pixels>",
      "cfg": [],
      "target": "Bounds<DevicePixels>"
    },
    {
      "id": "gpui::geometry::Bounds::top",
      "name": "top",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the top edge of the bounds.",
      "documentation": "Returns the top edge of the bounds.\n\n# Returns\n\nA value of type `T` representing the y-coordinate of the top edge of the bounds.",
      "signature": "pub fn top (& self) -> T",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::top_center",
      "name": "top_center",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the top center point of the bounds.",
      "documentation": "Returns the top center point of the bounds.",
      "signature": "pub fn top_center (& self) -> Point<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::top_right",
      "name": "top_right",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the top right corner point of the bounds.",
      "documentation": "Returns the top right corner point of the bounds.\n\n# Returns\n\nA `Point<T>` representing the top right corner of the bounds.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet bounds = Bounds {\norigin: Point { x: 0, y: 0 },\nsize: Size { width: 10, height: 20 },\n};\nlet top_right = bounds.top_right();\nassert_eq!(top_right, Point { x: 10, y: 0 });\n```",
      "signature": "pub fn top_right (& self) -> Point<T>",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Bounds::union",
      "name": "union",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Computes the union of two `Bounds`.",
      "documentation": "Computes the union of two `Bounds`.\n\nThis method calculates the smallest `Bounds` that contains both the current `Bounds` and the `other` `Bounds`.\nThe resulting `Bounds` will have an origin that is the minimum of the origins of the two `Bounds`,\nand a size that encompasses the furthest extents of both `Bounds`.\n\n# Arguments\n\n* `other` - A reference to another `Bounds` to create a union with.\n\n# Returns\n\nReturns a `Bounds` representing the union of the two `Bounds`.\n\n# Examples\n\n```\n# use gpui::{Bounds, Point, Size};\nlet bounds1 = Bounds {\norigin: Point { x: 0, y: 0 },\nsize: Size { width: 10, height: 10 },\n};\nlet bounds2 = Bounds {\norigin: Point { x: 5, y: 5 },\nsize: Size { width: 15, height: 15 },\n};\nlet union_bounds = bounds1.union(&bounds2);\n\nassert_eq!(union_bounds, Bounds {\norigin: Point { x: 0, y: 0 },\nsize: Size { width: 20, height: 20 },\n});\n```",
      "signature": "pub fn union (& self, other : & Self) -> Self",
      "cfg": [],
      "target": "Bounds<T>"
    },
    {
      "id": "gpui::geometry::Corners",
      "name": "Corners",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Represents the corners of a box in a 2D space, such as border radius.",
      "documentation": "Represents the corners of a box in a 2D space, such as border radius.\n\nEach field represents the size of the corner on one side of the box: `top_left`, `top_right`, `bottom_right`, and `bottom_left`.",
      "signature": "# [doc = \" Represents the corners of a box in a 2D space, such as border radius.\"] # [doc = \"\"] # [doc = \" Each field represents the size of the corner on one side of the box: `top_left`, `top_right`, `bottom_right`, and `bottom_left`.\"] # [derive (Refineable, Clone, Default, Debug, Eq, PartialEq)] # [refineable (Debug, PartialEq, Serialize, Deserialize, JsonSchema)] # [repr (C)] pub struct Corners<T : Clone + Debug + Default + PartialEq> { # [doc = \" The value associated with the top left corner.\"] pub top_left : T, # [doc = \" The value associated with the top right corner.\"] pub top_right : T, # [doc = \" The value associated with the bottom right corner.\"] pub bottom_right : T, # [doc = \" The value associated with the bottom left corner.\"] pub bottom_left : T, }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Corners::all",
      "name": "all",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Constructs `Corners` where all sides are set to the same specified value.",
      "documentation": "Constructs `Corners` where all sides are set to the same specified value.\n\nThis function creates a `Corners` instance with the `top_left`, `top_right`, `bottom_right`, and `bottom_left` fields all initialized\nto the same value provided as an argument. This is useful when you want to have uniform corners around a box,\nsuch as a uniform border radius on a rectangle.\n\n# Arguments\n\n* `value` - The value to set for all four corners.\n\n# Returns\n\nAn `Corners` instance with all corners set to the given value.\n\n# Examples\n\n```\n# use gpui::Corners;\nlet uniform_corners = Corners::all(5.0);\nassert_eq!(uniform_corners.top_left, 5.0);\nassert_eq!(uniform_corners.top_right, 5.0);\nassert_eq!(uniform_corners.bottom_right, 5.0);\nassert_eq!(uniform_corners.bottom_left, 5.0);\n```",
      "signature": "pub fn all (value : T) -> Self",
      "cfg": [],
      "target": "Corners<T>"
    },
    {
      "id": "gpui::geometry::Corners::clamp_radii_for_quad_size",
      "name": "clamp_radii_for_quad_size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Clamps corner radii to be less than or equal to half the shortest side of a quad.",
      "documentation": "Clamps corner radii to be less than or equal to half the shortest side of a quad.\n\n# Arguments\n\n* `size` - The size of the quad which limits the size of the corner radii.\n\n# Returns\n\nAnchor radii values clamped to fit.",
      "signature": "pub fn clamp_radii_for_quad_size (self, size : Size<T>) -> Corners<T>",
      "cfg": [],
      "target": "Corners<T>"
    },
    {
      "id": "gpui::geometry::Corners::corner",
      "name": "corner",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the requested corner value, supporting all eight corner positions.",
      "documentation": "Returns the requested corner value, supporting all eight corner positions.\n\nFor the four basic corners (TopLeft, TopRight, BottomLeft, BottomRight),\nthis returns the corresponding field value directly.\n\nFor the center positions (TopCenter, BottomCenter, LeftCenter, RightCenter),\nthis calculates the average of the two adjacent corners.\n\n# Returns\n\nA value of type `T` representing the corner requested by the parameter.\n\n# Examples\n\nBasic corner positions:\n\n```\n# use gpui::{Anchor, Corners};\nlet corners = Corners {\ntop_left: 10,\ntop_right: 20,\nbottom_left: 30,\nbottom_right: 40\n};\nassert_eq!(corners.corner(Anchor::TopLeft), 10);\nassert_eq!(corners.corner(Anchor::BottomRight), 40);\n```\n\nCenter positions (calculated as average of adjacent corners):\n\n```\n# use gpui::{Anchor, Corners};\nlet corners = Corners {\ntop_left: 10,\ntop_right: 20,\nbottom_left: 30,\nbottom_right: 40\n};\nassert_eq!(corners.corner(Anchor::TopCenter), 15);\nassert_eq!(corners.corner(Anchor::BottomCenter), 35);\nassert_eq!(corners.corner(Anchor::LeftCenter), 20);\nassert_eq!(corners.corner(Anchor::RightCenter), 30);\n```",
      "signature": "pub fn corner (& self, corner : Anchor) -> T",
      "cfg": [],
      "target": "Corners<T>"
    },
    {
      "id": "gpui::geometry::Corners::map",
      "name": "map",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Applies a function to each field of the `Corners`, producing a new `Corners<U>`.",
      "documentation": "Applies a function to each field of the `Corners`, producing a new `Corners<U>`.\n\nThis method allows for converting a `Corners<T>` to a `Corners<U>` by specifying a closure\nthat defines how to convert between the two types. The closure is applied to each field\n(`top_left`, `top_right`, `bottom_right`, `bottom_left`), resulting in new corners of the desired type.\n\n# Arguments\n\n* `f` - A closure that takes a reference to a value of type `T` and returns a value of type `U`.\n\n# Returns\n\nReturns a new `Corners<U>` with each field mapped by the provided function.\n\n# Examples\n\n```\n# use gpui::{Corners, Pixels, Rems};\nlet corners = Corners {\ntop_left: Pixels::from(10.0),\ntop_right: Pixels::from(20.0),\nbottom_right: Pixels::from(30.0),\nbottom_left: Pixels::from(40.0),\n};\nlet corners_in_rems = corners.map(|&px| Rems(f32::from(px) / 16.0));\nassert_eq!(corners_in_rems, Corners {\ntop_left: Rems(0.625),\ntop_right: Rems(1.25),\nbottom_right: Rems(1.875),\nbottom_left: Rems(2.5),\n});\n```",
      "signature": "pub fn map<U> (& self, f : impl Fn (& T) -> U) -> Corners<U> where U : Clone + Debug + Default + PartialEq,",
      "cfg": [],
      "target": "Corners<T>"
    },
    {
      "id": "gpui::geometry::Corners::max",
      "name": "max",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the maximum value of any corner.",
      "documentation": "Returns the maximum value of any corner.\n\n# Returns\n\nThe maximum `Pixels` value among all four corners.",
      "signature": "pub fn max (& self) -> Pixels",
      "cfg": [],
      "target": "Corners<Pixels>"
    },
    {
      "id": "gpui::geometry::Corners::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Scales the `Corners<Pixels>` by a given factor, returning `Corners<ScaledPixels>`.",
      "documentation": "Scales the `Corners<Pixels>` by a given factor, returning `Corners<ScaledPixels>`.\n\nThis method is typically used for adjusting the corner sizes for different display densities or scaling factors.\n\n# Arguments\n\n* `factor` - The scaling factor to apply to each corner.\n\n# Returns\n\nReturns a new `Corners<ScaledPixels>` where each corner is the result of scaling the original corner by the given factor.\n\n# Examples\n\n```\n# use gpui::{Corners, Pixels, ScaledPixels};\nlet corners = Corners {\ntop_left: Pixels::from(10.0),\ntop_right: Pixels::from(20.0),\nbottom_right: Pixels::from(30.0),\nbottom_left: Pixels::from(40.0),\n};\nlet scaled_corners = corners.scale(2.0);\nassert_eq!(scaled_corners.top_left, ScaledPixels::from(20.0));\nassert_eq!(scaled_corners.top_right, ScaledPixels::from(40.0));\nassert_eq!(scaled_corners.bottom_right, ScaledPixels::from(60.0));\nassert_eq!(scaled_corners.bottom_left, ScaledPixels::from(80.0));\n```",
      "signature": "pub fn scale (& self, factor : f32) -> Corners<ScaledPixels>",
      "cfg": [],
      "target": "Corners<Pixels>"
    },
    {
      "id": "gpui::geometry::Corners::to_pixels",
      "name": "to_pixels",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Converts the `AbsoluteLength` to `Pixels` based on the provided rem size.",
      "documentation": "Converts the `AbsoluteLength` to `Pixels` based on the provided rem size.\n\n# Arguments\n\n* `rem_size` - The size of one REM unit in pixels, used for conversion if the `AbsoluteLength` is in REMs.\n\n# Returns\n\nReturns a `Corners<Pixels>` instance with each corner's length converted to pixels.\n\n# Examples\n\n```\n# use gpui::{Corners, AbsoluteLength, Pixels, Rems, Size};\nlet corners = Corners {\ntop_left: AbsoluteLength::Pixels(Pixels::from(15.0)),\ntop_right: AbsoluteLength::Rems(Rems(1.0)),\nbottom_right: AbsoluteLength::Pixels(Pixels::from(30.0)),\nbottom_left: AbsoluteLength::Rems(Rems(2.0)),\n};\nlet rem_size = Pixels::from(16.0);\nlet corners_in_pixels = corners.to_pixels(rem_size);\n\nassert_eq!(corners_in_pixels.top_left, Pixels::from(15.0));\nassert_eq!(corners_in_pixels.top_right, Pixels::from(16.0)); // 1 rem converted to pixels\nassert_eq!(corners_in_pixels.bottom_right, Pixels::from(30.0));\nassert_eq!(corners_in_pixels.bottom_left, Pixels::from(32.0)); // 2 rems converted to pixels\n```",
      "signature": "pub fn to_pixels (self, rem_size : Pixels) -> Corners<Pixels>",
      "cfg": [],
      "target": "Corners<AbsoluteLength>"
    },
    {
      "id": "gpui::geometry::DefiniteLength",
      "name": "DefiniteLength",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "A non-auto length that can be defined in pixels, rems, or percent of parent.",
      "documentation": "A non-auto length that can be defined in pixels, rems, or percent of parent.\n\nThis enum represents lengths that have a specific value, as opposed to lengths that are automatically\ndetermined by the context. It includes absolute lengths in pixels or rems, and relative lengths as a\nfraction of the parent's size.",
      "signature": "# [doc = \" A non-auto length that can be defined in pixels, rems, or percent of parent.\"] # [doc = \"\"] # [doc = \" This enum represents lengths that have a specific value, as opposed to lengths that are automatically\"] # [doc = \" determined by the context. It includes absolute lengths in pixels or rems, and relative lengths as a\"] # [doc = \" fraction of the parent's size.\"] # [derive (Clone, Copy, Neg, PartialEq)] pub enum DefiniteLength { # [doc = \" An absolute length specified in pixels or rems.\"] Absolute (AbsoluteLength), # [doc = \" A relative length specified as a fraction of the parent's size, between 0 and 1.\"] Fraction (f32), }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::DefiniteLength::to_pixels",
      "name": "to_pixels",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Converts the `DefiniteLength` to `Pixels` based on a given `base_size` and `rem_size`.",
      "documentation": "Converts the `DefiniteLength` to `Pixels` based on a given `base_size` and `rem_size`.\n\nIf the `DefiniteLength` is an absolute length, it will be directly converted to `Pixels`.\nIf it is a fraction, the fraction will be multiplied by the `base_size` to get the length in pixels.\n\n# Arguments\n\n* `base_size` - The base size in `AbsoluteLength` to which the fraction will be applied.\n* `rem_size` - The size of one rem in pixels, used to convert rems to pixels.\n\n# Returns\n\nReturns the `DefiniteLength` as `Pixels`.\n\n# Examples\n\n```\n# use gpui::{DefiniteLength, AbsoluteLength, Pixels, px, rems};\nlet length_in_pixels = DefiniteLength::Absolute(AbsoluteLength::Pixels(px(42.0)));\nlet length_in_rems = DefiniteLength::Absolute(AbsoluteLength::Rems(rems(2.0)));\nlet length_as_fraction = DefiniteLength::Fraction(0.5);\nlet base_size = AbsoluteLength::Pixels(px(100.0));\nlet rem_size = px(16.0);\n\nassert_eq!(length_in_pixels.to_pixels(base_size, rem_size), Pixels::from(42.0));\nassert_eq!(length_in_rems.to_pixels(base_size, rem_size), Pixels::from(32.0));\nassert_eq!(length_as_fraction.to_pixels(base_size, rem_size), Pixels::from(50.0));\n```",
      "signature": "pub fn to_pixels (self, base_size : AbsoluteLength, rem_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "DefiniteLength"
    },
    {
      "id": "gpui::geometry::DevicePixels",
      "name": "DevicePixels",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Represents physical pixels on the display.",
      "documentation": "Represents physical pixels on the display.\n\n`DevicePixels` is a unit of measurement that refers to the actual pixels on a device's screen.\nThis type is used when precise pixel manipulation is required, such as rendering graphics or\ninterfacing with hardware that operates on the pixel level. Unlike logical pixels that may be\naffected by the device's scale factor, `DevicePixels` always correspond to real pixels on the\ndisplay.",
      "signature": "# [doc = \" Represents physical pixels on the display.\"] # [doc = \"\"] # [doc = \" `DevicePixels` is a unit of measurement that refers to the actual pixels on a device's screen.\"] # [doc = \" This type is used when precise pixel manipulation is required, such as rendering graphics or\"] # [doc = \" interfacing with hardware that operates on the pixel level. Unlike logical pixels that may be\"] # [doc = \" affected by the device's scale factor, `DevicePixels` always correspond to real pixels on the\"] # [doc = \" display.\"] # [derive (Add, AddAssign, Clone, Copy, Default, Div, Eq, Hash, Ord, PartialEq, PartialOrd, Sub, SubAssign, Serialize, Deserialize,)] # [repr (transparent)] pub struct DevicePixels (pub i32);",
      "cfg": []
    },
    {
      "id": "gpui::geometry::DevicePixels::to_bytes",
      "name": "to_bytes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Converts the `DevicePixels` value to the number of bytes needed to represent it in memory.",
      "documentation": "Converts the `DevicePixels` value to the number of bytes needed to represent it in memory.\n\nThis function is useful when working with graphical data that needs to be stored in a buffer,\nsuch as images or framebuffers, where each pixel may be represented by a specific number of bytes.\n\n# Arguments\n\n* `bytes_per_pixel` - The number of bytes used to represent a single pixel.\n\n# Returns\n\nThe number of bytes required to represent the `DevicePixels` value in memory.\n\n# Examples\n\n```\n# use gpui::DevicePixels;\nlet pixels = DevicePixels(10); // 10 device pixels\nlet bytes_per_pixel = 4; // Assume each pixel is represented by 4 bytes (e.g., RGBA)\nlet total_bytes = pixels.to_bytes(bytes_per_pixel);\nassert_eq!(total_bytes, 40); // 10 pixels * 4 bytes/pixel = 40 bytes\n```",
      "signature": "pub fn to_bytes (self, bytes_per_pixel : u8) -> u32",
      "cfg": [],
      "target": "DevicePixels"
    },
    {
      "id": "gpui::geometry::Edges",
      "name": "Edges",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Represents the edges of a box in a 2D space, such as padding or margin.",
      "documentation": "Represents the edges of a box in a 2D space, such as padding or margin.\n\nEach field represents the size of the edge on one side of the box: `top`, `right`, `bottom`, and `left`.\n\n# Examples\n\n```\n# use gpui::Edges;\nlet edges = Edges {\ntop: 10.0,\nright: 20.0,\nbottom: 30.0,\nleft: 40.0,\n};\n\nassert_eq!(edges.top, 10.0);\nassert_eq!(edges.right, 20.0);\nassert_eq!(edges.bottom, 30.0);\nassert_eq!(edges.left, 40.0);\n```",
      "signature": "# [doc = \" Represents the edges of a box in a 2D space, such as padding or margin.\"] # [doc = \"\"] # [doc = \" Each field represents the size of the edge on one side of the box: `top`, `right`, `bottom`, and `left`.\"] # [doc = \"\"] # [doc = \" # Examples\"] # [doc = \"\"] # [doc = \" ```\"] # [doc = \" # use gpui::Edges;\"] # [doc = \" let edges = Edges {\"] # [doc = \" top: 10.0,\"] # [doc = \" right: 20.0,\"] # [doc = \" bottom: 30.0,\"] # [doc = \" left: 40.0,\"] # [doc = \" };\"] # [doc = \"\"] # [doc = \" assert_eq!(edges.top, 10.0);\"] # [doc = \" assert_eq!(edges.right, 20.0);\"] # [doc = \" assert_eq!(edges.bottom, 30.0);\"] # [doc = \" assert_eq!(edges.left, 40.0);\"] # [doc = \" ```\"] # [derive (Refineable, Clone, Default, Debug, Eq, PartialEq)] # [refineable (Debug, PartialEq, Serialize, Deserialize, JsonSchema)] # [repr (C)] pub struct Edges<T : Clone + Debug + Default + PartialEq> { # [doc = \" The size of the top edge.\"] pub top : T, # [doc = \" The size of the right edge.\"] pub right : T, # [doc = \" The size of the bottom edge.\"] pub bottom : T, # [doc = \" The size of the left edge.\"] pub left : T, }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Edges::all",
      "name": "all",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Constructs `Edges` where all sides are set to the same specified value.",
      "documentation": "Constructs `Edges` where all sides are set to the same specified value.\n\nThis function creates an `Edges` instance with the `top`, `right`, `bottom`, and `left` fields all initialized\nto the same value provided as an argument. This is useful when you want to have uniform edges around a box,\nsuch as padding or margin with the same size on all sides.\n\n# Arguments\n\n* `value` - The value to set for all four sides of the edges.\n\n# Returns\n\nAn `Edges` instance with all sides set to the given value.\n\n# Examples\n\n```\n# use gpui::Edges;\nlet uniform_edges = Edges::all(10.0);\nassert_eq!(uniform_edges.top, 10.0);\nassert_eq!(uniform_edges.right, 10.0);\nassert_eq!(uniform_edges.bottom, 10.0);\nassert_eq!(uniform_edges.left, 10.0);\n```",
      "signature": "pub fn all (value : T) -> Self",
      "cfg": [],
      "target": "Edges<T>"
    },
    {
      "id": "gpui::geometry::Edges::any",
      "name": "any",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Checks if any of the edges satisfy a given predicate.",
      "documentation": "Checks if any of the edges satisfy a given predicate.\n\nThis method applies a predicate function to each field of the `Edges` and returns `true` if any field satisfies the predicate.\n\n# Arguments\n\n* `predicate` - A closure that takes a reference to a value of type `T` and returns a `bool`.\n\n# Returns\n\nReturns `true` if the predicate returns `true` for any of the edge values, `false` otherwise.\n\n# Examples\n\n```\n# use gpui::Edges;\nlet edges = Edges {\ntop: 10,\nright: 0,\nbottom: 5,\nleft: 0,\n};\n\nassert!(edges.any(|value| *value == 0));\nassert!(edges.any(|value| *value > 0));\nassert!(!edges.any(|value| *value > 10));\n```",
      "signature": "pub fn any<F : Fn (& T) -> bool> (& self, predicate : F) -> bool",
      "cfg": [],
      "target": "Edges<T>"
    },
    {
      "id": "gpui::geometry::Edges::auto",
      "name": "auto",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Sets the edges of the `Edges` struct to `auto`, which is a special value that allows the layout engine to automatically determine the size of the edges.",
      "documentation": "Sets the edges of the `Edges` struct to `auto`, which is a special value that allows the layout engine to automatically determine the size of the edges.\n\nThis is typically used in layout contexts where the exact size of the edges is not important, or when the size should be calculated based on the content or container.\n\n# Returns\n\nReturns an `Edges<Length>` with all edges set to `Length::Auto`.\n\n# Examples\n\n```\n# use gpui::{Edges, Length};\nlet auto_edges = Edges::auto();\nassert_eq!(auto_edges.top, Length::Auto);\nassert_eq!(auto_edges.right, Length::Auto);\nassert_eq!(auto_edges.bottom, Length::Auto);\nassert_eq!(auto_edges.left, Length::Auto);\n```",
      "signature": "pub fn auto () -> Self",
      "cfg": [],
      "target": "Edges<Length>"
    },
    {
      "id": "gpui::geometry::Edges::map",
      "name": "map",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Applies a function to each field of the `Edges`, producing a new `Edges<U>`.",
      "documentation": "Applies a function to each field of the `Edges`, producing a new `Edges<U>`.\n\nThis method allows for converting an `Edges<T>` to an `Edges<U>` by specifying a closure\nthat defines how to convert between the two types. The closure is applied to each field\n(`top`, `right`, `bottom`, `left`), resulting in new edges of the desired type.\n\n# Arguments\n\n* `f` - A closure that takes a reference to a value of type `T` and returns a value of type `U`.\n\n# Returns\n\nReturns a new `Edges<U>` with each field mapped by the provided function.\n\n# Examples\n\n```\n# use gpui::Edges;\nlet edges = Edges { top: 10, right: 20, bottom: 30, left: 40 };\nlet edges_float = edges.map(|&value| value as f32 * 1.1);\nassert_eq!(edges_float, Edges { top: 11.0, right: 22.0, bottom: 33.0, left: 44.0 });\n```",
      "signature": "pub fn map<U> (& self, f : impl Fn (& T) -> U) -> Edges<U> where U : Clone + Debug + Default + PartialEq,",
      "cfg": [],
      "target": "Edges<T>"
    },
    {
      "id": "gpui::geometry::Edges::max",
      "name": "max",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the maximum value of any edge.",
      "documentation": "Returns the maximum value of any edge.\n\n# Returns\n\nThe maximum `Pixels` value among all four edges.",
      "signature": "pub fn max (& self) -> Pixels",
      "cfg": [],
      "target": "Edges<Pixels>"
    },
    {
      "id": "gpui::geometry::Edges::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Scales the `Edges<Pixels>` by a given factor, returning `Edges<ScaledPixels>`.",
      "documentation": "Scales the `Edges<Pixels>` by a given factor, returning `Edges<ScaledPixels>`.\n\nThis method is typically used for adjusting the edge sizes for different display densities or scaling factors.\n\n# Arguments\n\n* `factor` - The scaling factor to apply to each edge.\n\n# Returns\n\nReturns a new `Edges<ScaledPixels>` where each edge is the result of scaling the original edge by the given factor.\n\n# Examples\n\n```\n# use gpui::{Edges, Pixels, ScaledPixels};\nlet edges = Edges {\ntop: Pixels::from(10.0),\nright: Pixels::from(20.0),\nbottom: Pixels::from(30.0),\nleft: Pixels::from(40.0),\n};\nlet scaled_edges = edges.scale(2.0);\nassert_eq!(scaled_edges.top, ScaledPixels::from(20.0));\nassert_eq!(scaled_edges.right, ScaledPixels::from(40.0));\nassert_eq!(scaled_edges.bottom, ScaledPixels::from(60.0));\nassert_eq!(scaled_edges.left, ScaledPixels::from(80.0));\n```",
      "signature": "pub fn scale (& self, factor : f32) -> Edges<ScaledPixels>",
      "cfg": [],
      "target": "Edges<Pixels>"
    },
    {
      "id": "gpui::geometry::Edges::to_pixels",
      "name": "to_pixels",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "summary": "Converts the `AbsoluteLength` to `Pixels` based on the `rem_size`.",
      "declarations": [
        {
          "source": "crates/gpui/src/geometry.rs",
          "documentation": "Converts the `AbsoluteLength` to `Pixels` based on the `rem_size`.\n\nIf the `AbsoluteLength` is already in pixels, it simply returns the corresponding `Pixels` value.\nIf the `AbsoluteLength` is in rems, it multiplies the number of rems by the `rem_size` to convert it to pixels.\n\n# Arguments\n\n* `rem_size` - The size of one rem unit in pixels.\n\n# Returns\n\nReturns an `Edges<Pixels>` representing the edges with lengths converted to pixels.\n\n# Examples\n\n```\n# use gpui::{Edges, AbsoluteLength, Pixels, px, rems};\nlet edges = Edges {\ntop: AbsoluteLength::Pixels(px(10.0)),\nright: AbsoluteLength::Rems(rems(1.0)),\nbottom: AbsoluteLength::Pixels(px(20.0)),\nleft: AbsoluteLength::Rems(rems(2.0)),\n};\nlet rem_size = px(16.0);\nlet edges_in_pixels = edges.to_pixels(rem_size);\n\nassert_eq!(edges_in_pixels.top, px(10.0)); // Already in pixels\nassert_eq!(edges_in_pixels.right, px(16.0)); // 1 rem converted to pixels\nassert_eq!(edges_in_pixels.bottom, px(20.0)); // Already in pixels\nassert_eq!(edges_in_pixels.left, px(32.0)); // 2 rems converted to pixels\n```",
          "signature": "pub fn to_pixels (self, rem_size : Pixels) -> Edges<Pixels>",
          "cfg": [],
          "target": "Edges<AbsoluteLength>"
        },
        {
          "source": "crates/gpui/src/geometry.rs",
          "documentation": "Converts the `DefiniteLength` to `Pixels` based on the parent size and the REM size.\n\nThis method allows for a `DefiniteLength` value to be converted into pixels, taking into account\nthe size of the parent element (for percentage-based lengths) and the size of a rem unit (for rem-based lengths).\n\n# Arguments\n\n* `parent_size` - `Size<AbsoluteLength>` representing the size of the parent element.\n* `rem_size` - `Pixels` representing the size of one REM unit.\n\n# Returns\n\nReturns an `Edges<Pixels>` representing the edges with lengths converted to pixels.\n\n# Examples\n\n```\n# use gpui::{Edges, DefiniteLength, px, AbsoluteLength, rems, Size};\nlet edges = Edges {\ntop: DefiniteLength::Absolute(AbsoluteLength::Pixels(px(10.0))),\nright: DefiniteLength::Fraction(0.5),\nbottom: DefiniteLength::Absolute(AbsoluteLength::Rems(rems(2.0))),\nleft: DefiniteLength::Fraction(0.25),\n};\nlet parent_size = Size {\nwidth: AbsoluteLength::Pixels(px(200.0)),\nheight: AbsoluteLength::Pixels(px(100.0)),\n};\nlet rem_size = px(16.0);\nlet edges_in_pixels = edges.to_pixels(parent_size, rem_size);\n\nassert_eq!(edges_in_pixels.top, px(10.0)); // Absolute length in pixels\nassert_eq!(edges_in_pixels.right, px(100.0)); // 50% of parent width\nassert_eq!(edges_in_pixels.bottom, px(32.0)); // 2 rems\nassert_eq!(edges_in_pixels.left, px(50.0)); // 25% of parent width\n```",
          "signature": "pub fn to_pixels (self, parent_size : Size<AbsoluteLength>, rem_size : Pixels) -> Edges<Pixels>",
          "cfg": [],
          "target": "Edges<DefiniteLength>"
        }
      ]
    },
    {
      "id": "gpui::geometry::Edges::zero",
      "name": "zero",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "summary": "Sets the edges of the `Edges` struct to zero, which means no size or thickness.",
      "declarations": [
        {
          "source": "crates/gpui/src/geometry.rs",
          "documentation": "Sets the edges of the `Edges` struct to zero, which means no size or thickness.\n\nThis is typically used when you want to specify that a box (like a padding or margin area)\nshould have no edges, effectively making it non-existent or invisible in layout calculations.\n\n# Returns\n\nReturns an `Edges<AbsoluteLength>` with all edges set to zero length.\n\n# Examples\n\n```\n# use gpui::{AbsoluteLength, Edges, Pixels};\nlet no_edges = Edges::<AbsoluteLength>::zero();\nassert_eq!(no_edges.top, AbsoluteLength::Pixels(Pixels::ZERO));\nassert_eq!(no_edges.right, AbsoluteLength::Pixels(Pixels::ZERO));\nassert_eq!(no_edges.bottom, AbsoluteLength::Pixels(Pixels::ZERO));\nassert_eq!(no_edges.left, AbsoluteLength::Pixels(Pixels::ZERO));\n```",
          "signature": "pub fn zero () -> Self",
          "cfg": [],
          "target": "Edges<AbsoluteLength>"
        },
        {
          "source": "crates/gpui/src/geometry.rs",
          "documentation": "Sets the edges of the `Edges` struct to zero, which means no size or thickness.\n\nThis is typically used when you want to specify that a box (like a padding or margin area)\nshould have no edges, effectively making it non-existent or invisible in layout calculations.\n\n# Returns\n\nReturns an `Edges<DefiniteLength>` with all edges set to zero length.\n\n# Examples\n\n```\n# use gpui::{px, DefiniteLength, Edges};\nlet no_edges = Edges::<DefiniteLength>::zero();\nassert_eq!(no_edges.top, DefiniteLength::from(px(0.)));\nassert_eq!(no_edges.right, DefiniteLength::from(px(0.)));\nassert_eq!(no_edges.bottom, DefiniteLength::from(px(0.)));\nassert_eq!(no_edges.left, DefiniteLength::from(px(0.)));\n```",
          "signature": "pub fn zero () -> Self",
          "cfg": [],
          "target": "Edges<DefiniteLength>"
        },
        {
          "source": "crates/gpui/src/geometry.rs",
          "documentation": "Sets the edges of the `Edges` struct to zero, which means no size or thickness.\n\nThis is typically used when you want to specify that a box (like a padding or margin area)\nshould have no edges, effectively making it non-existent or invisible in layout calculations.\n\n# Returns\n\nReturns an `Edges<Length>` with all edges set to zero length.\n\n# Examples\n\n```\n# use gpui::{DefiniteLength, Edges, Length, Pixels};\nlet no_edges = Edges::<Length>::zero();\nassert_eq!(no_edges.top, Length::Definite(DefiniteLength::from(Pixels::ZERO)));\nassert_eq!(no_edges.right, Length::Definite(DefiniteLength::from(Pixels::ZERO)));\nassert_eq!(no_edges.bottom, Length::Definite(DefiniteLength::from(Pixels::ZERO)));\nassert_eq!(no_edges.left, Length::Definite(DefiniteLength::from(Pixels::ZERO)));\n```",
          "signature": "pub fn zero () -> Self",
          "cfg": [],
          "target": "Edges<Length>"
        }
      ]
    },
    {
      "id": "gpui::geometry::GridLocation",
      "name": "GridLocation",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "A location in a grid layout.",
      "documentation": "A location in a grid layout.",
      "signature": "# [doc = \" A location in a grid layout.\"] # [derive (Clone, PartialEq, Debug, Serialize, Deserialize, JsonSchema, Default)] pub struct GridLocation { # [doc = \" The rows this item uses within the grid.\"] pub row : Range<GridPlacement>, # [doc = \" The columns this item uses within the grid.\"] pub column : Range<GridPlacement>, }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::GridPlacement",
      "name": "GridPlacement",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "The placement of an item within a grid layout's column or row.",
      "documentation": "The placement of an item within a grid layout's column or row.",
      "signature": "# [doc = \" The placement of an item within a grid layout's column or row.\"] # [derive (Clone, Copy, PartialEq, Debug, Serialize, Deserialize, JsonSchema, Default)] pub enum GridPlacement { # [doc = \" The grid line index to place this item.\"] Line (i16), # [doc = \" The number of grid lines to span.\"] Span (u16), # [doc = \" Automatically determine the placement, equivalent to Span(1)\"] # [default] Auto, }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Half",
      "name": "Half",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Provides a trait for types that can calculate half of their value.",
      "documentation": "Provides a trait for types that can calculate half of their value.\n\nThe `Half` trait is used for types that can be evenly divided, returning a new instance of the same type\nrepresenting half of the original value. This is commonly used for types that represent measurements or sizes,\nsuch as lengths or pixels, where halving is a frequent operation during layout calculations or animations.",
      "signature": "# [doc = \" Provides a trait for types that can calculate half of their value.\"] # [doc = \"\"] # [doc = \" The `Half` trait is used for types that can be evenly divided, returning a new instance of the same type\"] # [doc = \" representing half of the original value. This is commonly used for types that represent measurements or sizes,\"] # [doc = \" such as lengths or pixels, where halving is a frequent operation during layout calculations or animations.\"] pub trait Half { # [doc = \" Returns half of the current value.\"] # [doc = \"\"] # [doc = \" # Returns\"] # [doc = \"\"] # [doc = \" A new instance of the implementing type, representing half of the original value.\"] fn half (& self) -> Self; }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::IsZero",
      "name": "IsZero",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "A trait for checking if a value is zero.",
      "documentation": "A trait for checking if a value is zero.\n\nThis trait provides a method to determine if a value is considered to be zero.\nIt is implemented for various numeric and length-related types where the concept\nof zero is applicable. This can be useful for comparisons, optimizations, or\ndetermining if an operation has a neutral effect.",
      "signature": "# [doc = \" A trait for checking if a value is zero.\"] # [doc = \"\"] # [doc = \" This trait provides a method to determine if a value is considered to be zero.\"] # [doc = \" It is implemented for various numeric and length-related types where the concept\"] # [doc = \" of zero is applicable. This can be useful for comparisons, optimizations, or\"] # [doc = \" determining if an operation has a neutral effect.\"] pub trait IsZero { # [doc = \" Determines if the value is zero.\"] # [doc = \"\"] # [doc = \" # Returns\"] # [doc = \"\"] # [doc = \" Returns `true` if the value is zero, `false` otherwise.\"] fn is_zero (& self) -> bool; }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Length",
      "name": "Length",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "A length that can be defined in pixels, rems, percent of parent, or auto.",
      "documentation": "A length that can be defined in pixels, rems, percent of parent, or auto.",
      "signature": "# [doc = \" A length that can be defined in pixels, rems, percent of parent, or auto.\"] # [derive (Clone, Copy, PartialEq)] pub enum Length { # [doc = \" A definite length specified either in pixels, rems, or as a fraction of the parent's size.\"] Definite (DefiniteLength), # [doc = \" An automatic length that is determined by the context in which it is used.\"] Auto, }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Percentage",
      "name": "Percentage",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "A type representing a percentage value.",
      "documentation": "A type representing a percentage value.",
      "signature": "# [doc = \" A type representing a percentage value.\"] # [derive (Clone, Copy, Default, Add, AddAssign, Sub, SubAssign, Neg, Div, DivAssign, PartialEq, Serialize, Deserialize, Debug,)] # [repr (transparent)] pub struct Percentage (pub f32);",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Pixels",
      "name": "Pixels",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Represents a length in pixels, the base unit of measurement in the UI framework.",
      "documentation": "Represents a length in pixels, the base unit of measurement in the UI framework.\n\n`Pixels` is a value type that represents an absolute length in pixels, which is used\nfor specifying sizes, positions, and distances in the UI. It is the fundamental unit\nof measurement for all visual elements and layout calculations.\n\nThe inner value is an `f32`, allowing for sub-pixel precision which can be useful for\nanti-aliasing and animations. However, when applied to actual pixel grids, the value\nis typically rounded to the nearest integer.\n\n# Examples\n\n```\nuse gpui::{Pixels, ScaledPixels};\n\n// Define a length of 10 pixels\nlet length = Pixels::from(10.0);\n\n// Define a length and scale it by a factor of 2\nlet scaled_length = length.scale(2.0);\nassert_eq!(scaled_length, ScaledPixels::from(20.0));\n```",
      "signature": "# [doc = \" Represents a length in pixels, the base unit of measurement in the UI framework.\"] # [doc = \"\"] # [doc = \" `Pixels` is a value type that represents an absolute length in pixels, which is used\"] # [doc = \" for specifying sizes, positions, and distances in the UI. It is the fundamental unit\"] # [doc = \" of measurement for all visual elements and layout calculations.\"] # [doc = \"\"] # [doc = \" The inner value is an `f32`, allowing for sub-pixel precision which can be useful for\"] # [doc = \" anti-aliasing and animations. However, when applied to actual pixel grids, the value\"] # [doc = \" is typically rounded to the nearest integer.\"] # [doc = \"\"] # [doc = \" # Examples\"] # [doc = \"\"] # [doc = \" ```\"] # [doc = \" use gpui::{Pixels, ScaledPixels};\"] # [doc = \"\"] # [doc = \" // Define a length of 10 pixels\"] # [doc = \" let length = Pixels::from(10.0);\"] # [doc = \"\"] # [doc = \" // Define a length and scale it by a factor of 2\"] # [doc = \" let scaled_length = length.scale(2.0);\"] # [doc = \" assert_eq!(scaled_length, ScaledPixels::from(20.0));\"] # [doc = \" ```\"] # [derive (Clone, Copy, Default, Add, AddAssign, Sub, SubAssign, Neg, Div, DivAssign, PartialEq, Serialize, Deserialize, JsonSchema,)] # [repr (transparent)] pub struct Pixels (pub (crate) f32);",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Pixels::abs",
      "name": "abs",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the absolute value of the `Pixels`.",
      "documentation": "Returns the absolute value of the `Pixels`.\n\n# Returns\n\nA new `Pixels` instance with the absolute value of the original `Pixels`.",
      "signature": "pub fn abs (& self) -> Self",
      "cfg": [],
      "target": "Pixels"
    },
    {
      "id": "gpui::geometry::Pixels::as_f32",
      "name": "as_f32",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the raw `f32` value of this `Pixels`.",
      "documentation": "Returns the raw `f32` value of this `Pixels`.",
      "signature": "pub fn as_f32 (self) -> f32",
      "cfg": [],
      "target": "Pixels"
    },
    {
      "id": "gpui::geometry::Pixels::ceil",
      "name": "ceil",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the ceiling of the `Pixels` value to the nearest whole number.",
      "documentation": "Returns the ceiling of the `Pixels` value to the nearest whole number.\n\n# Returns\n\nReturns a new `Pixels` instance with the ceiling value.",
      "signature": "pub fn ceil (& self) -> Self",
      "cfg": [],
      "target": "Pixels"
    },
    {
      "id": "gpui::geometry::Pixels::floor",
      "name": "floor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Floors the `Pixels` value to the nearest whole number.",
      "documentation": "Floors the `Pixels` value to the nearest whole number.\n\n# Returns\n\nReturns a new `Pixels` instance with the floored value.",
      "signature": "pub fn floor (& self) -> Self",
      "cfg": [],
      "target": "Pixels"
    },
    {
      "id": "gpui::geometry::Pixels::pow",
      "name": "pow",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Raises the `Pixels` value to a given power.",
      "documentation": "Raises the `Pixels` value to a given power.\n\n# Arguments\n\n* `exponent` - The exponent to raise the `Pixels` value by.\n\n# Returns\n\nReturns a new `Pixels` instance with the value raised to the given exponent.",
      "signature": "pub fn pow (& self, exponent : f32) -> Self",
      "cfg": [],
      "target": "Pixels"
    },
    {
      "id": "gpui::geometry::Pixels::round",
      "name": "round",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Rounds the `Pixels` value to the nearest whole number.",
      "documentation": "Rounds the `Pixels` value to the nearest whole number.\n\n# Returns\n\nReturns a new `Pixels` instance with the rounded value.",
      "signature": "pub fn round (& self) -> Self",
      "cfg": [],
      "target": "Pixels"
    },
    {
      "id": "gpui::geometry::Pixels::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Scales the `Pixels` value by a given factor, producing `ScaledPixels`.",
      "documentation": "Scales the `Pixels` value by a given factor, producing `ScaledPixels`.\n\nThis method is used when adjusting pixel values for display scaling factors,\nsuch as high DPI (dots per inch) or Retina displays, where the pixel density is higher and\nthus requires scaling to maintain visual consistency and readability.\n\nThe resulting `ScaledPixels` represent the scaled value which can be used for rendering\ncalculations where display scaling is considered.",
      "signature": "pub fn scale (& self, factor : f32) -> ScaledPixels",
      "cfg": [],
      "target": "Pixels"
    },
    {
      "id": "gpui::geometry::Pixels::signum",
      "name": "signum",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the sign of the `Pixels` value.",
      "documentation": "Returns the sign of the `Pixels` value.\n\n# Returns\n\nReturns:\n* `1.0` if the value is positive\n* `-1.0` if the value is negative",
      "signature": "pub fn signum (& self) -> f32",
      "cfg": [],
      "target": "Pixels"
    },
    {
      "id": "gpui::geometry::Pixels::to_f64",
      "name": "to_f64",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the f64 value of `Pixels`.",
      "documentation": "Returns the f64 value of `Pixels`.\n\n# Returns\n\nA f64 value of the `Pixels`.",
      "signature": "pub fn to_f64 (self) -> f64",
      "cfg": [],
      "target": "Pixels"
    },
    {
      "id": "gpui::geometry::Point",
      "name": "Point",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Describes a location in a 2D cartesian space.",
      "documentation": "Describes a location in a 2D cartesian space.\n\nIt holds two public fields, `x` and `y`, which represent the coordinates in the space.\nThe type `T` for the coordinates can be any type that implements `Default`, `Clone`, and `Debug`.\n\n# Examples\n\n```\n# use gpui::Point;\nlet point = Point { x: 10, y: 20 };\nprintln!(\"{:?}\", point); // Outputs: Point { x: 10, y: 20 }\n```",
      "signature": "# [doc = \" Describes a location in a 2D cartesian space.\"] # [doc = \"\"] # [doc = \" It holds two public fields, `x` and `y`, which represent the coordinates in the space.\"] # [doc = \" The type `T` for the coordinates can be any type that implements `Default`, `Clone`, and `Debug`.\"] # [doc = \"\"] # [doc = \" # Examples\"] # [doc = \"\"] # [doc = \" ```\"] # [doc = \" # use gpui::Point;\"] # [doc = \" let point = Point { x: 10, y: 20 };\"] # [doc = \" println!(\\\"{:?}\\\", point); // Outputs: Point { x: 10, y: 20 }\"] # [doc = \" ```\"] # [derive (Refineable, Default, Add, AddAssign, Sub, SubAssign, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema, Hash, Neg,)] # [refineable (Debug, PartialEq, Serialize, Deserialize, JsonSchema)] # [repr (C)] pub struct Point<T : Clone + Debug + Default + PartialEq> { # [doc = \" The x coordinate of the point.\"] pub x : T, # [doc = \" The y coordinate of the point.\"] pub y : T, }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Point::clamp",
      "name": "clamp",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Clamps the point to a specified range.",
      "documentation": "Clamps the point to a specified range.\n\nGiven a minimum point and a maximum point, this method constrains the current point\nsuch that its coordinates do not exceed the range defined by the minimum and maximum points.\nIf the current point's coordinates are less than the minimum, they are set to the minimum.\nIf they are greater than the maximum, they are set to the maximum.\n\n# Arguments\n\n* `min` - A reference to a `Point` representing the minimum allowable coordinates.\n* `max` - A reference to a `Point` representing the maximum allowable coordinates.\n\n# Examples\n\n```\n# use gpui::Point;\nlet p = Point { x: 10, y: 20 };\nlet min = Point { x: 0, y: 5 };\nlet max = Point { x: 15, y: 25 };\nlet clamped_p = p.clamp(&min, &max);\nassert_eq!(clamped_p, Point { x: 10, y: 20 });\n\nlet p_out_of_bounds = Point { x: -5, y: 30 };\nlet clamped_p_out_of_bounds = p_out_of_bounds.clamp(&min, &max);\nassert_eq!(clamped_p_out_of_bounds, Point { x: 0, y: 25 });\n```",
      "signature": "pub fn clamp (& self, min : & Self, max : & Self) -> Self",
      "cfg": [],
      "target": "Point<T>"
    },
    {
      "id": "gpui::geometry::Point::magnitude",
      "name": "magnitude",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Calculates the Euclidean distance from the origin (0, 0) to this point.",
      "documentation": "Calculates the Euclidean distance from the origin (0, 0) to this point.\n\n# Examples\n\n```\n# use gpui::{Pixels, Point};\nlet p = Point { x: Pixels::from(3.0), y: Pixels::from(4.0) };\nassert_eq!(p.magnitude(), 5.0);\n```",
      "signature": "pub fn magnitude (& self) -> f64",
      "cfg": [],
      "target": "Point<Pixels>"
    },
    {
      "id": "gpui::geometry::Point::map",
      "name": "map",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Transforms the point to a `Point<U>` by applying the given function to both coordinates.",
      "documentation": "Transforms the point to a `Point<U>` by applying the given function to both coordinates.\n\nThis method allows for converting a `Point<T>` to a `Point<U>` by specifying a closure\nthat defines how to convert between the two types. The closure is applied to both the `x`\nand `y` coordinates, resulting in a new point of the desired type.\n\n# Arguments\n\n* `f` - A closure that takes a value of type `T` and returns a value of type `U`.\n\n# Examples\n\n```\n# use gpui::Point;\nlet p = Point { x: 3, y: 4 };\nlet p_float = p.map(|coord| coord as f32);\nassert_eq!(p_float, Point { x: 3.0, y: 4.0 });\n```",
      "signature": "pub fn map<U : Clone + Debug + Default + PartialEq> (& self, f : impl Fn (T) -> U) -> Point<U>",
      "cfg": [],
      "target": "Point<T>"
    },
    {
      "id": "gpui::geometry::Point::max",
      "name": "max",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns a new point with the maximum values of each dimension from `self` and `other`.",
      "documentation": "Returns a new point with the maximum values of each dimension from `self` and `other`.\n\n# Arguments\n\n* `other` - A reference to another `Point` to compare with `self`.\n\n# Examples\n\n```\n# use gpui::Point;\nlet p1 = Point { x: 3, y: 7 };\nlet p2 = Point { x: 5, y: 2 };\nlet max_point = p1.max(&p2);\nassert_eq!(max_point, Point { x: 5, y: 7 });\n```",
      "signature": "pub fn max (& self, other : & Self) -> Self",
      "cfg": [],
      "target": "Point<T>"
    },
    {
      "id": "gpui::geometry::Point::min",
      "name": "min",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns a new point with the minimum values of each dimension from `self` and `other`.",
      "documentation": "Returns a new point with the minimum values of each dimension from `self` and `other`.\n\n# Arguments\n\n* `other` - A reference to another `Point` to compare with `self`.\n\n# Examples\n\n```\n# use gpui::Point;\nlet p1 = Point { x: 3, y: 7 };\nlet p2 = Point { x: 5, y: 2 };\nlet min_point = p1.min(&p2);\nassert_eq!(min_point, Point { x: 3, y: 2 });\n```",
      "signature": "pub fn min (& self, other : & Self) -> Self",
      "cfg": [],
      "target": "Point<T>"
    },
    {
      "id": "gpui::geometry::Point::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Creates a new `Point` with the specified `x` and `y` coordinates.",
      "documentation": "Creates a new `Point` with the specified `x` and `y` coordinates.\n\n# Arguments\n\n* `x` - The horizontal coordinate of the point.\n* `y` - The vertical coordinate of the point.\n\n# Examples\n\n```\nuse gpui::Point;\nlet p = Point::new(10, 20);\nassert_eq!(p.x, 10);\nassert_eq!(p.y, 20);\n```",
      "signature": "pub const fn new (x : T, y : T) -> Self",
      "cfg": [],
      "target": "Point<T>"
    },
    {
      "id": "gpui::geometry::Point::relative_to",
      "name": "relative_to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Get the position of this point, relative to the given origin",
      "documentation": "Get the position of this point, relative to the given origin",
      "signature": "pub fn relative_to (& self, origin : & Point<T>) -> Point<T>",
      "cfg": [],
      "target": "Point<T>"
    },
    {
      "id": "gpui::geometry::Point::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Scales the point by a given factor, which is typically derived from the resolution of a target display to ensure proper sizing of UI elements.",
      "documentation": "Scales the point by a given factor, which is typically derived from the resolution\nof a target display to ensure proper sizing of UI elements.\n\n# Arguments\n\n* `factor` - The scaling factor to apply to both the x and y coordinates.\n\n# Examples\n\n```\n# use gpui::{Point, Pixels, ScaledPixels};\nlet p = Point { x: Pixels::from(10.0), y: Pixels::from(20.0) };\nlet scaled_p = p.scale(1.5);\nassert_eq!(scaled_p, Point { x: ScaledPixels::from(15.0), y: ScaledPixels::from(30.0) });\n```",
      "signature": "pub fn scale (& self, factor : f32) -> Point<ScaledPixels>",
      "cfg": [],
      "target": "Point<Pixels>"
    },
    {
      "id": "gpui::geometry::Radians",
      "name": "Radians",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Represents an angle in Radians",
      "documentation": "Represents an angle in Radians",
      "signature": "# [doc = \" Represents an angle in Radians\"] # [derive (Clone, Copy, Default, Add, AddAssign, Sub, SubAssign, Neg, Div, DivAssign, PartialEq, Serialize, Deserialize, Debug,)] # [repr (transparent)] pub struct Radians (pub f32);",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Rems",
      "name": "Rems",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Represents a length in rems, a unit based on the font-size of the window, which can be assigned with [`Window::set_rem_size`][set_rem_size].",
      "documentation": "Represents a length in rems, a unit based on the font-size of the window, which can be assigned with [`Window::set_rem_size`][set_rem_size].\n\nRems are used for defining lengths that are scalable and consistent across different UI elements.\nThe value of `1rem` is typically equal to the font-size of the root element (often the `<html>` element in browsers),\nmaking it a flexible unit that adapts to the user's text size preferences. In this framework, `rems` serve a similar\npurpose, allowing for scalable and accessible design that can adjust to different display settings or user preferences.\n\nFor example, if the root element's font-size is `16px`, then `1rem` equals `16px`. A length of `2rems` would then be `32px`.\n\n[set_rem_size]: crate::Window::set_rem_size",
      "signature": "# [doc = \" Represents a length in rems, a unit based on the font-size of the window, which can be assigned with [`Window::set_rem_size`][set_rem_size].\"] # [doc = \"\"] # [doc = \" Rems are used for defining lengths that are scalable and consistent across different UI elements.\"] # [doc = \" The value of `1rem` is typically equal to the font-size of the root element (often the `<html>` element in browsers),\"] # [doc = \" making it a flexible unit that adapts to the user's text size preferences. In this framework, `rems` serve a similar\"] # [doc = \" purpose, allowing for scalable and accessible design that can adjust to different display settings or user preferences.\"] # [doc = \"\"] # [doc = \" For example, if the root element's font-size is `16px`, then `1rem` equals `16px`. A length of `2rems` would then be `32px`.\"] # [doc = \"\"] # [doc = \" [set_rem_size]: crate::Window::set_rem_size\"] # [derive (Clone, Copy, Default, Add, Sub, Mul, Div, Neg, PartialEq)] pub struct Rems (pub f32);",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Rems::from_pixels",
      "name": "from_pixels",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Convert from pixels to Rem",
      "documentation": "Convert from pixels to Rem",
      "signature": "pub fn from_pixels (length : Pixels, window : & gpui::Window) -> Self",
      "cfg": [],
      "target": "Rems"
    },
    {
      "id": "gpui::geometry::Rems::to_pixels",
      "name": "to_pixels",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Convert this Rem value to pixels.",
      "documentation": "Convert this Rem value to pixels.",
      "signature": "pub fn to_pixels (self, rem_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "Rems"
    },
    {
      "id": "gpui::geometry::ScaledPixels",
      "name": "ScaledPixels",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Represents scaled pixels that take into account the device's scale factor.",
      "documentation": "Represents scaled pixels that take into account the device's scale factor.\n\n`ScaledPixels` are used to ensure that UI elements appear at the correct size on devices\nwith different pixel densities. When a device has a higher scale factor (such as Retina displays),\na single logical pixel may correspond to multiple physical pixels. By using `ScaledPixels`,\ndimensions and positions can be specified in a way that scales appropriately across different\ndisplay resolutions.",
      "signature": "# [doc = \" Represents scaled pixels that take into account the device's scale factor.\"] # [doc = \"\"] # [doc = \" `ScaledPixels` are used to ensure that UI elements appear at the correct size on devices\"] # [doc = \" with different pixel densities. When a device has a higher scale factor (such as Retina displays),\"] # [doc = \" a single logical pixel may correspond to multiple physical pixels. By using `ScaledPixels`,\"] # [doc = \" dimensions and positions can be specified in a way that scales appropriately across different\"] # [doc = \" display resolutions.\"] # [derive (Clone, Copy, Default, Add, AddAssign, Sub, SubAssign, Div, DivAssign, PartialEq)] # [repr (transparent)] pub struct ScaledPixels (pub f32);",
      "cfg": []
    },
    {
      "id": "gpui::geometry::ScaledPixels::as_f32",
      "name": "as_f32",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the raw `f32` value of this `ScaledPixels`.",
      "documentation": "Returns the raw `f32` value of this `ScaledPixels`.",
      "signature": "pub fn as_f32 (self) -> f32",
      "cfg": [],
      "target": "ScaledPixels"
    },
    {
      "id": "gpui::geometry::ScaledPixels::ceil",
      "name": "ceil",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Ceils the `ScaledPixels` value to the nearest whole number.",
      "documentation": "Ceils the `ScaledPixels` value to the nearest whole number.\n\n# Returns\n\nReturns a new `ScaledPixels` instance with the ceiled value.",
      "signature": "pub fn ceil (& self) -> Self",
      "cfg": [],
      "target": "ScaledPixels"
    },
    {
      "id": "gpui::geometry::ScaledPixels::floor",
      "name": "floor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Floors the `ScaledPixels` value to the nearest whole number.",
      "documentation": "Floors the `ScaledPixels` value to the nearest whole number.\n\n# Returns\n\nReturns a new `ScaledPixels` instance with the floored value.",
      "signature": "pub fn floor (& self) -> Self",
      "cfg": [],
      "target": "ScaledPixels"
    },
    {
      "id": "gpui::geometry::ScaledPixels::round",
      "name": "round",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Rounds the `ScaledPixels` value to the nearest whole number.",
      "documentation": "Rounds the `ScaledPixels` value to the nearest whole number.\n\n# Returns\n\nReturns a new `ScaledPixels` instance with the rounded value.",
      "signature": "pub fn round (& self) -> Self",
      "cfg": [],
      "target": "ScaledPixels"
    },
    {
      "id": "gpui::geometry::Size",
      "name": "Size",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "A structure representing a two-dimensional size with width and height in a given unit.",
      "documentation": "A structure representing a two-dimensional size with width and height in a given unit.\n\nThis struct is generic over the type `T`, which can be any type that implements `Clone`, `Default`, and `Debug`.\nIt is commonly used to specify dimensions for elements in a UI, such as a window or element.",
      "signature": "# [doc = \" A structure representing a two-dimensional size with width and height in a given unit.\"] # [doc = \"\"] # [doc = \" This struct is generic over the type `T`, which can be any type that implements `Clone`, `Default`, and `Debug`.\"] # [doc = \" It is commonly used to specify dimensions for elements in a UI, such as a window or element.\"] # [derive (Add, Clone, Copy, Default, Deserialize, Div, Hash, Neg, PartialEq, Refineable, Serialize, Sub,)] # [refineable (Debug, PartialEq, Serialize, Deserialize, JsonSchema)] # [repr (C)] pub struct Size<T : Clone + Debug + Default + PartialEq> { # [doc = \" The width component of the size.\"] pub width : T, # [doc = \" The height component of the size.\"] pub height : T, }",
      "cfg": []
    },
    {
      "id": "gpui::geometry::Size::auto",
      "name": "auto",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns a `Size` with both width and height set to `auto`, which allows the layout engine to determine the size.",
      "documentation": "Returns a `Size` with both width and height set to `auto`, which allows the layout engine to determine the size.\n\nThis function creates a `Size` instance where both the width and height are set to `Length::Auto`,\nindicating that their size should be computed based on the layout context, such as the content size or\navailable space.\n\n# Returns\n\nA `Size<Length>` with width and height set to `Length::Auto`.",
      "signature": "pub fn auto () -> Self",
      "cfg": [],
      "target": "Size<Length>"
    },
    {
      "id": "gpui::geometry::Size::center",
      "name": "center",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Compute the center point of the size.g",
      "documentation": "Compute the center point of the size.g",
      "signature": "pub fn center (& self) -> Point<T>",
      "cfg": [],
      "target": "Size<T>"
    },
    {
      "id": "gpui::geometry::Size::full",
      "name": "full",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns a `Size` with both width and height set to fill the available space.",
      "documentation": "Returns a `Size` with both width and height set to fill the available space.\n\nThis function creates a `Size` instance where both the width and height are set to `Length::Definite(DefiniteLength::Fraction(1.0))`,\nwhich represents 100% of the available space in both dimensions.\n\n# Returns\n\nA `Size<Length>` that will fill the available space when used in a layout.",
      "signature": "pub fn full () -> Self",
      "cfg": [],
      "target": "Size<Length>"
    },
    {
      "id": "gpui::geometry::Size::map",
      "name": "map",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Applies a function to the width and height of the size, producing a new `Size<U>`.",
      "documentation": "Applies a function to the width and height of the size, producing a new `Size<U>`.\n\nThis method allows for converting a `Size<T>` to a `Size<U>` by specifying a closure\nthat defines how to convert between the two types. The closure is applied to both the `width`\nand `height`, resulting in a new size of the desired type.\n\n# Arguments\n\n* `f` - A closure that takes a value of type `T` and returns a value of type `U`.\n\n# Examples\n\n```\n# use gpui::Size;\nlet my_size = Size { width: 10, height: 20 };\nlet my_new_size = my_size.map(|dimension| dimension as f32 * 1.5);\nassert_eq!(my_new_size, Size { width: 15.0, height: 30.0 });\n```",
      "signature": "pub fn map<U> (& self, f : impl Fn (T) -> U) -> Size<U> where U : Clone + Debug + Default + PartialEq,",
      "cfg": [],
      "target": "Size<T>"
    },
    {
      "id": "gpui::geometry::Size::max",
      "name": "max",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns a new `Size` with the maximum width and height from `self` and `other`.",
      "documentation": "Returns a new `Size` with the maximum width and height from `self` and `other`.\n\n# Arguments\n\n* `other` - A reference to another `Size` to compare with `self`.\n\n# Examples\n\n```\n# use gpui::Size;\nlet size1 = Size { width: 30, height: 40 };\nlet size2 = Size { width: 50, height: 20 };\nlet max_size = size1.max(&size2);\nassert_eq!(max_size, Size { width: 50, height: 40 });\n```",
      "signature": "pub fn max (& self, other : & Self) -> Self",
      "cfg": [],
      "target": "Size<T>"
    },
    {
      "id": "gpui::geometry::Size::min",
      "name": "min",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns a new `Size` with the minimum width and height from `self` and `other`.",
      "documentation": "Returns a new `Size` with the minimum width and height from `self` and `other`.\n\n# Arguments\n\n* `other` - A reference to another `Size` to compare with `self`.\n\n# Examples\n\n```\n# use gpui::Size;\nlet size1 = Size { width: 30, height: 40 };\nlet size2 = Size { width: 50, height: 20 };\nlet min_size = size1.min(&size2);\nassert_eq!(min_size, Size { width: 30, height: 20 });\n```",
      "signature": "pub fn min (& self, other : & Self) -> Self",
      "cfg": [],
      "target": "Size<T>"
    },
    {
      "id": "gpui::geometry::Size::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Create a new Size, a synonym for [`size`]",
      "documentation": "Create a new Size, a synonym for [`size`]",
      "signature": "pub fn new (width : T, height : T) -> Self",
      "cfg": [],
      "target": "Size<T>"
    },
    {
      "id": "gpui::geometry::Size::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Scales the size by a given factor.",
      "documentation": "Scales the size by a given factor.\n\nThis method multiplies both the width and height by the provided scaling factor,\nresulting in a new `Size<ScaledPixels>` that is proportionally larger or smaller\ndepending on the factor.\n\n# Arguments\n\n* `factor` - The scaling factor to apply to the width and height.\n\n# Examples\n\n```\n# use gpui::{Size, Pixels, ScaledPixels};\nlet size = Size { width: Pixels::from(100.0), height: Pixels::from(50.0) };\nlet scaled_size = size.scale(2.0);\nassert_eq!(scaled_size, Size { width: ScaledPixels::from(200.0), height: ScaledPixels::from(100.0) });\n```",
      "signature": "pub fn scale (& self, factor : f32) -> Size<ScaledPixels>",
      "cfg": [],
      "target": "Size<Pixels>"
    },
    {
      "id": "gpui::geometry::Size::to_device_pixels",
      "name": "to_device_pixels",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Converts the size from logical to physical pixels.",
      "documentation": "Converts the size from logical to physical pixels.",
      "signature": "pub fn to_device_pixels (self, scale_factor : f32) -> Size<DevicePixels>",
      "cfg": [],
      "target": "Size<Pixels>"
    },
    {
      "id": "gpui::geometry::Size::to_pixels",
      "name": "to_pixels",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Converts the size from physical to logical pixels.",
      "documentation": "Converts the size from physical to logical pixels.",
      "signature": "pub fn to_pixels (self, scale_factor : f32) -> Size<Pixels>",
      "cfg": [],
      "target": "Size<DevicePixels>"
    },
    {
      "id": "gpui::geometry::auto",
      "name": "auto",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns a `Length` representing an automatic length.",
      "documentation": "Returns a `Length` representing an automatic length.\n\nThe `auto` length is often used in layout calculations where the length should be determined\nby the layout context itself rather than being explicitly set. This is commonly used in CSS\nfor properties like `width`, `height`, `margin`, `padding`, etc., where `auto` can be used\nto instruct the layout engine to calculate the size based on other factors like the size of the\ncontainer or the intrinsic size of the content.\n\n# Returns\n\nA `Length` variant set to `Auto`.",
      "signature": "pub const fn auto () -> Length",
      "cfg": []
    },
    {
      "id": "gpui::geometry::bounds",
      "name": "bounds",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Create a bounds with the given origin and size",
      "documentation": "Create a bounds with the given origin and size",
      "signature": "pub fn bounds<T : Clone + Debug + Default + PartialEq> (origin : Point<T>, size : Size<T>,) -> Bounds<T>",
      "cfg": []
    },
    {
      "id": "gpui::geometry::percentage",
      "name": "percentage",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Generate a `Radian` from a percentage of a full circle.",
      "documentation": "Generate a `Radian` from a percentage of a full circle.",
      "signature": "pub fn percentage (value : f32) -> Percentage",
      "cfg": []
    },
    {
      "id": "gpui::geometry::phi",
      "name": "phi",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Returns the Golden Ratio, i.e. `~(1.0 + sqrt(5.0)) / 2.0`.",
      "documentation": "Returns the Golden Ratio, i.e. `~(1.0 + sqrt(5.0)) / 2.0`.",
      "signature": "pub const fn phi () -> DefiniteLength",
      "cfg": []
    },
    {
      "id": "gpui::geometry::point",
      "name": "point",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Constructs a new `Point<T>` with the given x and y coordinates.",
      "documentation": "Constructs a new `Point<T>` with the given x and y coordinates.\n\n# Arguments\n\n* `x` - The x coordinate of the point.\n* `y` - The y coordinate of the point.\n\n# Returns\n\nReturns a `Point<T>` with the specified coordinates.\n\n# Examples\n\n```\nuse gpui::point;\nlet p = point(10, 20);\nassert_eq!(p.x, 10);\nassert_eq!(p.y, 20);\n```",
      "signature": "pub const fn point<T : Clone + Debug + Default + PartialEq> (x : T, y : T) -> Point<T>",
      "cfg": []
    },
    {
      "id": "gpui::geometry::px",
      "name": "px",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Constructs a `Pixels` value representing a length in pixels.",
      "documentation": "Constructs a `Pixels` value representing a length in pixels.\n\n# Arguments\n\n* `pixels` - The number of pixels for the length.\n\n# Returns\n\nA `Pixels` representing the specified number of pixels.",
      "signature": "pub const fn px (pixels : f32) -> Pixels",
      "cfg": []
    },
    {
      "id": "gpui::geometry::radians",
      "name": "radians",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Create a `Radian` from a raw value",
      "documentation": "Create a `Radian` from a raw value",
      "signature": "pub fn radians (value : f32) -> Radians",
      "cfg": []
    },
    {
      "id": "gpui::geometry::relative",
      "name": "relative",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Constructs a `DefiniteLength` representing a relative fraction of a parent size.",
      "documentation": "Constructs a `DefiniteLength` representing a relative fraction of a parent size.\n\nThis function creates a `DefiniteLength` that is a specified fraction of a parent's dimension.\nThe fraction should be a floating-point number between 0.0 and 1.0, where 1.0 represents 100% of the parent's size.\n\n# Arguments\n\n* `fraction` - The fraction of the parent's size, between 0.0 and 1.0.\n\n# Returns\n\nA `DefiniteLength` representing the relative length as a fraction of the parent's size.",
      "signature": "pub const fn relative (fraction : f32) -> DefiniteLength",
      "cfg": []
    },
    {
      "id": "gpui::geometry::rems",
      "name": "rems",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Constructs a `Rems` value representing a length in rems.",
      "documentation": "Constructs a `Rems` value representing a length in rems.\n\n# Arguments\n\n* `rems` - The number of rems for the length.\n\n# Returns\n\nA `Rems` representing the specified number of rems.",
      "signature": "pub const fn rems (rems : f32) -> Rems",
      "cfg": []
    },
    {
      "id": "gpui::geometry::size",
      "name": "size",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "geometry",
      "path": "gpui::geometry",
      "source": "crates/gpui/src/geometry.rs",
      "summary": "Constructs a new `Size<T>` with the provided width and height.",
      "documentation": "Constructs a new `Size<T>` with the provided width and height.\n\n# Arguments\n\n* `width` - The width component of the `Size`.\n* `height` - The height component of the `Size`.\n\n# Examples\n\n```\nuse gpui::size;\nlet my_size = size(10, 20);\nassert_eq!(my_size.width, 10);\nassert_eq!(my_size.height, 20);\n```",
      "signature": "pub const fn size<T> (width : T, height : T) -> Size<T> where T : Clone + Debug + Default + PartialEq,",
      "cfg": []
    },
    {
      "id": "gpui::gestures::GestureKinds",
      "name": "GestureKinds",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gestures",
      "path": "gpui::gestures",
      "source": "crates/gpui/src/gestures.rs",
      "summary": "The gesture capabilities a platform can declare as natively recognized.",
      "documentation": "The gesture capabilities a platform can declare as natively recognized.\n\nUsed by [`PlatformGestures::native_recognizers`] to declare which gestures\nthe platform handles instead of forwarding their raw contacts to GPUI's\nportable recognizer. A backend must not send both raw contacts and native\nsemantic events for the same gesture; this declaration does not filter input.",
      "signature": "# [doc = \" The gesture capabilities a platform can declare as natively recognized.\"] # [doc = \"\"] # [doc = \" Used by [`PlatformGestures::native_recognizers`] to declare which gestures\"] # [doc = \" the platform handles instead of forwarding their raw contacts to GPUI's\"] # [doc = \" portable recognizer. A backend must not send both raw contacts and native\"] # [doc = \" semantic events for the same gesture; this declaration does not filter input.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub struct GestureKinds { # [doc = \" Tap and multi-tap. GPUI's portable path synthesizes mouse presses so\"] # [doc = \" existing click behavior remains compatible.\"] pub tap : bool, # [doc = \" Long press, surfaced as [`LongPressEvent`].\"] pub long_press : bool, # [doc = \" Pan/scroll (including fling momentum), surfaced as\"] # [doc = \" [`ScrollWheelEvent`](crate::ScrollWheelEvent)s.\"] pub pan : bool, # [doc = \" Pinch to zoom, surfaced as [`PinchEvent`](crate::PinchEvent)s.\"] pub pinch : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::gestures::GestureTuning",
      "name": "GestureTuning",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gestures",
      "path": "gpui::gestures",
      "source": "crates/gpui/src/gestures.rs",
      "summary": "Feel constants consumed by gesture recognizers. Provided on a best-effort basis, depending on each platform's support, defaulting to GPUI's own (iOS flavored) values",
      "documentation": "Feel constants consumed by gesture recognizers. Provided on a best-effort\nbasis, depending on each platform's support, defaulting to GPUI's own\n(iOS flavored) values",
      "signature": "# [doc = \" Feel constants consumed by gesture recognizers. Provided on a best-effort\"] # [doc = \" basis, depending on each platform's support, defaulting to GPUI's own\"] # [doc = \" (iOS flavored) values\"] # [derive (Clone, Copy, Debug, PartialEq)] pub struct GestureTuning { # [doc = \" Distance a touch may travel before it stops being a potential tap and\"] # [doc = \" becomes a pan/drag.\"] pub touch_slop : Pixels, # [doc = \" Maximum interval between taps for them to accumulate a tap count.\"] pub multi_tap_interval : Duration, # [doc = \" Maximum distance between taps for them to accumulate a tap count.\"] pub multi_tap_slop : Pixels, # [doc = \" How long a touch must remain within [`Self::touch_slop`] to be\"] # [doc = \" recognized as a long press.\"] pub long_press_duration : Duration, # [doc = \" Per-millisecond decay factor applied to exponential scroll momentum.\"] # [doc = \" (`UIScrollView` uses `0.998` per millisecond for its normal\"] # [doc = \" deceleration rate.)\"] # [doc = \"\"] # [doc = \" This field is retained for source compatibility. A platform that needs\"] # [doc = \" a different model can override [`PlatformGestures::scroll_physics`].\"] pub momentum_decay_per_ms : f32, # [doc = \" Minimum release velocity, in pixels per second, required to start\"] # [doc = \" scroll momentum.\"] pub min_fling_velocity : f32, }",
      "cfg": []
    },
    {
      "id": "gpui::gestures::LongPressEvent",
      "name": "LongPressEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gestures",
      "path": "gpui::gestures",
      "source": "crates/gpui/src/gestures.rs",
      "summary": "A phased long-press gesture recognized from a touch.",
      "documentation": "A phased long-press gesture recognized from a touch.",
      "signature": "# [doc = \" A phased long-press gesture recognized from a touch.\"] # [derive (Clone, Debug)] pub struct LongPressEvent { # [doc = \" The phase of the long press.\"] pub phase : TouchPhase, # [doc = \" The position where the touch started.\"] pub start_position : Point<Pixels>, # [doc = \" The touch's current position.\"] pub position : Point<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::gestures::NullPlatformGestures",
      "name": "NullPlatformGestures",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gestures",
      "path": "gpui::gestures",
      "source": "crates/gpui/src/gestures.rs",
      "summary": "A no-op [`PlatformGestures`] implementation: no native recognizers and default tuning. Suitable for desktop platforms and tests.",
      "documentation": "A no-op [`PlatformGestures`] implementation: no native recognizers and\ndefault tuning. Suitable for desktop platforms and tests.",
      "signature": "# [doc = \" A no-op [`PlatformGestures`] implementation: no native recognizers and\"] # [doc = \" default tuning. Suitable for desktop platforms and tests.\"] pub struct NullPlatformGestures;",
      "cfg": []
    },
    {
      "id": "gpui::gestures::OngoingScroll",
      "name": "OngoingScroll",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gestures",
      "path": "gpui::gestures",
      "source": "crates/gpui/src/gestures.rs",
      "summary": "Tracks the dominant axis across the events in a scroll gesture.",
      "documentation": "Tracks the dominant axis across the events in a scroll gesture.",
      "signature": "# [doc = \" Tracks the dominant axis across the events in a scroll gesture.\"] # [derive (Clone, Copy, Debug, Default)] pub struct OngoingScroll { last_event : Option<Instant>, axis : Option<Axis>, }",
      "cfg": []
    },
    {
      "id": "gpui::gestures::OngoingScroll::filter",
      "name": "filter",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gestures",
      "path": "gpui::gestures",
      "source": "crates/gpui/src/gestures.rs",
      "summary": "Filters the given delta to the dominant axis of the current scroll gesture.",
      "documentation": "Filters the given delta to the dominant axis of the current scroll gesture.\n\nGestures are delimited by their touch phase when available, with a timeout\nfallback for platforms that only emit [`TouchPhase::Moved`].",
      "signature": "pub fn filter (& mut self, delta : & mut Point<Pixels>, touch_phase : TouchPhase)",
      "cfg": [],
      "target": "OngoingScroll"
    },
    {
      "id": "gpui::gestures::PlatformGestures",
      "name": "PlatformGestures",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gestures",
      "path": "gpui::gestures",
      "source": "crates/gpui/src/gestures.rs",
      "summary": "Platform gesture recognition services.",
      "documentation": "Platform gesture recognition services.\n\nIf your mobile platform supports native gesture recognition, use this\nto share it with GPUI.",
      "signature": "# [doc = \" Platform gesture recognition services.\"] # [doc = \"\"] # [doc = \" If your mobile platform supports native gesture recognition, use this\"] # [doc = \" to share it with GPUI.\"] pub trait PlatformGestures { # [doc = \" Feel constants for the portable recognizers on this platform.\"] fn tuning (& self) -> GestureTuning { GestureTuning::default () } # [doc = \" The deceleration model used by portable touch-pan momentum.\"] # [doc = \"\"] # [doc = \" The default preserves the exponential model configured by\"] # [doc = \" [`GestureTuning::momentum_decay_per_ms`]. Platforms can opt into\"] # [doc = \" [`ScrollPhysics::FrictionSpline`] without changing the tuning struct.\"] fn scroll_physics (& self) -> ScrollPhysics { ScrollPhysics::Exponential { decay_per_ms : self . tuning () . momentum_decay_per_ms, } } # [doc = \" The gesture kinds this platform recognizes natively.\"] fn native_recognizers (& self) -> GestureKinds { GestureKinds::NONE } }",
      "cfg": []
    },
    {
      "id": "gpui::gestures::ScrollPhysics",
      "name": "ScrollPhysics",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gestures",
      "path": "gpui::gestures",
      "source": "crates/gpui/src/gestures.rs",
      "summary": "How free scrolling decelerates after a fling.",
      "documentation": "How free scrolling decelerates after a fling.\n\nThis models deceleration only. Boundary behavior — bouncing, edge glow,\nclamping — is the scroll container's policy: the container is the one that\nknows its extents.",
      "signature": "# [doc = \" How free scrolling decelerates after a fling.\"] # [doc = \"\"] # [doc = \" This models deceleration only. Boundary behavior — bouncing, edge glow,\"] # [doc = \" clamping — is the scroll container's policy: the container is the one that\"] # [doc = \" knows its extents.\"] # [derive (Clone, Copy, Debug, PartialEq)] pub enum ScrollPhysics { # [doc = \" Exponential velocity decay, the `UIScrollView` model:\"] # [doc = \" `velocity(t) = v₀ · decay_per_msᵐˢ`.\"] Exponential { # [doc = \" Per-millisecond velocity decay factor. `UIScrollView`'s normal\"] # [doc = \" deceleration rate is `0.998`.\"] decay_per_ms : f32, }, # [doc = \" The friction spline of Android's `OverScroller`: fling duration and\"] # [doc = \" distance follow a logarithmic deceleration law, and progress along\"] # [doc = \" the fling follows a cubic-Bezier ease-out curve. Transcribed from\"] # [doc = \" AOSP's `SplineOverScroller` (Apache-2.0).\"] FrictionSpline { # [doc = \" The scroll friction coefficient;\"] # [doc = \" `ViewConfiguration.getScrollFriction()` is `0.015` on Android.\"] friction : f32, # [doc = \" Pixels per physical inch of the display, in the coordinate space\"] # [doc = \" the fling runs in. Android folds display density into its\"] # [doc = \" deceleration coefficient, so the same finger speed flings\"] # [doc = \" further in pixels on a denser screen.\"] pixels_per_inch : f32, }, }",
      "cfg": []
    },
    {
      "id": "gpui::gestures::ScrollPhysics::android",
      "name": "android",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gestures",
      "path": "gpui::gestures",
      "source": "crates/gpui/src/gestures.rs",
      "summary": "Android scroll feel: `OverScroller` with stock friction, at Android's nominal density of 160 density-independent pixels per inch — the right pairing when fling distances are in logical pixels. Platforms that fling in physical pixels, or know the display's true density in their logical space, should construct [`ScrollPhysics::FrictionSpline`] directly.",
      "documentation": "Android scroll feel: `OverScroller` with stock friction, at Android's\nnominal density of 160 density-independent pixels per inch — the\nright pairing when fling distances are in logical pixels. Platforms\nthat fling in physical pixels, or know the display's true density in\ntheir logical space, should construct\n[`ScrollPhysics::FrictionSpline`] directly.",
      "signature": "pub fn android () -> Self",
      "cfg": [],
      "target": "ScrollPhysics"
    },
    {
      "id": "gpui::gestures::ScrollPhysics::ios",
      "name": "ios",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gestures",
      "path": "gpui::gestures",
      "source": "crates/gpui/src/gestures.rs",
      "summary": "iOS scroll feel: `UIScrollView`'s normal deceleration rate.",
      "documentation": "iOS scroll feel: `UIScrollView`'s normal deceleration rate.",
      "signature": "pub fn ios () -> Self",
      "cfg": [],
      "target": "ScrollPhysics"
    },
    {
      "id": "gpui::gestures::TouchDragEvent",
      "name": "TouchDragEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gestures",
      "path": "gpui::gestures",
      "source": "crates/gpui/src/gestures.rs",
      "summary": "A direct touch drag claimed by an element before touch input becomes a tap, long press, or scrolling gesture.",
      "documentation": "A direct touch drag claimed by an element before touch input becomes a tap,\nlong press, or scrolling gesture.\n\nA pending contact offers `Started` once at touch-down. Only a claimed offer\nreceives subsequent phases. For direction-aware acquisition after slop,\nuse the separate [`TouchPanEvent`] stream.",
      "signature": "# [doc = \" A direct touch drag claimed by an element before touch input becomes a tap,\"] # [doc = \" long press, or scrolling gesture.\"] # [doc = \"\"] # [doc = \" A pending contact offers `Started` once at touch-down. Only a claimed offer\"] # [doc = \" receives subsequent phases. For direction-aware acquisition after slop,\"] # [doc = \" use the separate [`TouchPanEvent`] stream.\"] # [derive (Clone, Debug)] pub struct TouchDragEvent { # [doc = \" The phase of the touch drag.\"] pub phase : TouchPhase, # [doc = \" The position where the touch started.\"] pub start_position : Point<Pixels>, # [doc = \" The touch's current position.\"] pub position : Point<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::gestures::TouchPanEvent",
      "name": "TouchPanEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gestures",
      "path": "gpui::gestures",
      "source": "crates/gpui/src/gestures.rs",
      "summary": "A direction-aware direct manipulation offered when a pending touch exceeds slop, or when live scrolling leaves an unconsumed delta at an edge. Listen during paint with [`crate::Window::on_touch_pan`]. Hit testing uses `touch_start_position`, including after a scroll handoff.",
      "documentation": "A direction-aware direct manipulation offered when a pending touch exceeds\nslop, or when live scrolling leaves an unconsumed delta at an edge. Listen\nduring paint with [`crate::Window::on_touch_pan`]. Hit testing uses\n`touch_start_position`, including after a scroll handoff.\n\nOn `Started`, inspect `axis` and signed `position - start_position` and\ncall [`crate::Window::prevent_default`] to acquire.\nBubble dispatch lets the innermost eligible listener acquire before its\nancestors; a pull-to-refresh owner should acquire only downward at scroll\ntop. Refusal leaves the full travel for default axis-locked scrolling.\nAt handoff the scroll has already consumed its portion; `start_position`\nis rebased so this offer contains only the residual. Acquisition cancels\nthe scroll stream, then owns the contact until its terminal phase, including\nreversals. Claimed direct manipulations never transfer to another owner.\n\nOnly acquisition produces `Moved` and exactly one `Ended` or `Cancelled`.\nCancellation must roll back, not commit. The axis is fixed at acquisition,\nbut positions remain raw and two-dimensional. There is no implicit fling.",
      "signature": "# [doc = \" A direction-aware direct manipulation offered when a pending touch exceeds\"] # [doc = \" slop, or when live scrolling leaves an unconsumed delta at an edge. Listen\"] # [doc = \" during paint with [`crate::Window::on_touch_pan`]. Hit testing uses\"] # [doc = \" `touch_start_position`, including after a scroll handoff.\"] # [doc = \"\"] # [doc = \" On `Started`, inspect `axis` and signed `position - start_position` and\"] # [doc = \" call [`crate::Window::prevent_default`] to acquire.\"] # [doc = \" Bubble dispatch lets the innermost eligible listener acquire before its\"] # [doc = \" ancestors; a pull-to-refresh owner should acquire only downward at scroll\"] # [doc = \" top. Refusal leaves the full travel for default axis-locked scrolling.\"] # [doc = \" At handoff the scroll has already consumed its portion; `start_position`\"] # [doc = \" is rebased so this offer contains only the residual. Acquisition cancels\"] # [doc = \" the scroll stream, then owns the contact until its terminal phase, including\"] # [doc = \" reversals. Claimed direct manipulations never transfer to another owner.\"] # [doc = \"\"] # [doc = \" Only acquisition produces `Moved` and exactly one `Ended` or `Cancelled`.\"] # [doc = \" Cancellation must roll back, not commit. The axis is fixed at acquisition,\"] # [doc = \" but positions remain raw and two-dimensional. There is no implicit fling.\"] # [derive (Clone, Debug)] pub struct TouchPanEvent { # [doc = \" Lifecycle phase; `Started` is an acquisition offer.\"] pub phase : TouchPhase, # [doc = \" Dominant axis at slop crossing; vertical wins an exact tie.\"] pub axis : Axis, # [doc = \" Original contact hit-test anchor in logical window pixels.\"] pub touch_start_position : Point<Pixels>, # [doc = \" Whether acquisition followed a partially or wholly unconsumed scroll.\"] pub is_scroll_handoff : bool, # [doc = \" Manipulation origin. On handoff this is current position minus residual\"] # [doc = \" scroll travel, not the original contact point.\"] pub start_position : Point<Pixels>, # [doc = \" Current raw position in logical window pixels.\"] pub position : Point<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::global::Global",
      "name": "Global",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "global",
      "path": "gpui::global",
      "source": "crates/gpui/src/global.rs",
      "summary": "A marker trait for types that can be stored in GPUI's global state.",
      "documentation": "A marker trait for types that can be stored in GPUI's global state.\n\nThis trait exists to provide type-safe access to globals by ensuring only\ntypes that implement [`Global`] can be used with the accessor methods. For\nexample, trying to access a global with a type that does not implement\n[`Global`] will result in a compile-time error.\n\nImplement this on types you want to store in the context as a global.\n\n## Restricting Access to Globals\n\nIn some situations you may need to store some global state, but want to\nrestrict access to reading it or writing to it.\n\nIn these cases, Rust's visibility system can be used to restrict access to\na global value. For example, you can create a private struct that implements\n[`Global`] and holds the global state. Then create a newtype struct that wraps\nthe global type and create custom accessor methods to expose the desired subset\nof operations.",
      "signature": "# [doc = \" A marker trait for types that can be stored in GPUI's global state.\"] # [doc = \"\"] # [doc = \" This trait exists to provide type-safe access to globals by ensuring only\"] # [doc = \" types that implement [`Global`] can be used with the accessor methods. For\"] # [doc = \" example, trying to access a global with a type that does not implement\"] # [doc = \" [`Global`] will result in a compile-time error.\"] # [doc = \"\"] # [doc = \" Implement this on types you want to store in the context as a global.\"] # [doc = \"\"] # [doc = \" ## Restricting Access to Globals\"] # [doc = \"\"] # [doc = \" In some situations you may need to store some global state, but want to\"] # [doc = \" restrict access to reading it or writing to it.\"] # [doc = \"\"] # [doc = \" In these cases, Rust's visibility system can be used to restrict access to\"] # [doc = \" a global value. For example, you can create a private struct that implements\"] # [doc = \" [`Global`] and holds the global state. Then create a newtype struct that wraps\"] # [doc = \" the global type and create custom accessor methods to expose the desired subset\"] # [doc = \" of operations.\"] pub trait Global : 'static { }",
      "cfg": []
    },
    {
      "id": "gpui::global::ReadGlobal",
      "name": "ReadGlobal",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "global",
      "path": "gpui::global",
      "source": "crates/gpui/src/global.rs",
      "summary": "A trait for reading a global value from the context.",
      "documentation": "A trait for reading a global value from the context.",
      "signature": "# [doc = \" A trait for reading a global value from the context.\"] pub trait ReadGlobal { # [doc = \" Returns the global instance of the implementing type.\"] # [doc = \"\"] # [doc = \" Panics if a global for that type has not been assigned.\"] fn global (cx : & App) -> & Self; }",
      "cfg": []
    },
    {
      "id": "gpui::global::UpdateGlobal",
      "name": "UpdateGlobal",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "global",
      "path": "gpui::global",
      "source": "crates/gpui/src/global.rs",
      "summary": "A trait for updating a global value in the context.",
      "documentation": "A trait for updating a global value in the context.",
      "signature": "# [doc = \" A trait for updating a global value in the context.\"] pub trait UpdateGlobal { # [doc = \" Updates the global instance of the implementing type using the provided closure.\"] # [doc = \"\"] # [doc = \" This method provides the closure with mutable access to the context and the global simultaneously.\"] fn update_global<C, F, R> (cx : & mut C, update : F) -> R where C : BorrowAppContext, F : FnOnce (& mut Self, & mut C) -> R; # [doc = \" Set the global instance of the implementing type.\"] fn set_global<C> (cx : & mut C, global : Self) where C : BorrowAppContext; }",
      "cfg": []
    },
    {
      "id": "gpui::gpui::AppContext",
      "name": "AppContext",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "The context trait, allows the different contexts in GPUI to be used interchangeably for certain operations.",
      "documentation": "The context trait, allows the different contexts in GPUI to be used\ninterchangeably for certain operations.",
      "signature": "# [doc = \" The context trait, allows the different contexts in GPUI to be used\"] # [doc = \" interchangeably for certain operations.\"] pub trait AppContext { # [doc = \" Create a new entity in the app context.\"] # [expect (clippy::wrong_self_convention, reason = \"`App::new` is an ubiquitous function for creating entities\")] # [allow (clippy::new_ret_no_self)] fn new<T : 'static> (& mut self, build_entity : impl FnOnce (& mut Context<T>) -> T) -> Entity<T>; # [doc = \" Reserve a slot for a entity to be inserted later.\"] # [doc = \" The returned [Reservation] allows you to obtain the [EntityId] for the future entity.\"] fn reserve_entity<T : 'static> (& mut self) -> Reservation<T>; # [doc = \" Insert a new entity in the app context based on a [Reservation] previously obtained from [`reserve_entity`].\"] # [doc = \"\"] # [doc = \" [`reserve_entity`]: Self::reserve_entity\"] fn insert_entity<T : 'static> (& mut self, reservation : Reservation<T>, build_entity : impl FnOnce (& mut Context<T>) -> T,) -> Entity<T>; # [doc = \" Update a entity in the app context.\"] fn update_entity<T, R> (& mut self, handle : & Entity<T>, update : impl FnOnce (& mut T, & mut Context<T>) -> R,) -> R where T : 'static; # [doc = \" Update a entity in the app context.\"] fn as_mut<'a, T> (& 'a mut self, handle : & Entity<T>) -> GpuiBorrow<'a, T> where T : 'static; # [doc = \" Read a entity from the app context.\"] fn read_entity<T, R> (& self, handle : & Entity<T>, read : impl FnOnce (& T, & App) -> R) -> R where T : 'static; # [doc = \" Update a window for the given handle.\"] fn update_window<T, F> (& mut self, window : AnyWindowHandle, f : F) -> Result<T> where F : FnOnce (AnyView, & mut Window, & mut App) -> T; # [doc = \" Run `f` against the entity's *current* window — the most recently\"] # [doc = \" rendered window that referenced the entity. Returns `None` if the\"] # [doc = \" entity has no current window or that window is unavailable. See\"] # [doc = \" [`App::with_window`] for the underlying lookup.\"] fn with_window<R> (& mut self, entity_id : EntityId, f : impl FnOnce (& mut Window, & mut App) -> R,) -> Option<R>; # [doc = \" Read a window off of the application context.\"] fn read_window<T, R> (& self, window : & WindowHandle<T>, read : impl FnOnce (Entity<T>, & App) -> R,) -> Result<R> where T : 'static; # [doc = \" Spawn a future on a background thread\"] fn background_spawn<R> (& self, future : impl Future<Output = R> + Send + 'static) -> Task<R> where R : Send + 'static; # [doc = \" Read a global from this app context\"] fn read_global<G, R> (& self, callback : impl FnOnce (& G, & App) -> R) -> R where G : Global; }",
      "cfg": []
    },
    {
      "id": "gpui::gpui::BorrowAppContext",
      "name": "BorrowAppContext",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "A helper trait for auto-implementing certain methods on contexts that can be used interchangeably.",
      "documentation": "A helper trait for auto-implementing certain methods on contexts that\ncan be used interchangeably.",
      "signature": "# [doc = \" A helper trait for auto-implementing certain methods on contexts that\"] # [doc = \" can be used interchangeably.\"] pub trait BorrowAppContext { # [doc = \" Set a global value on the context.\"] fn set_global<T : Global> (& mut self, global : T); # [doc = \" Updates the global state of the given type.\"] fn update_global<G, R> (& mut self, f : impl FnOnce (& mut G, & mut Self) -> R) -> R where G : Global; # [doc = \" Updates the global state of the given type, creating a default if it didn't exist before.\"] fn update_default_global<G, R> (& mut self, f : impl FnOnce (& mut G, & mut Self) -> R) -> R where G : Global + Default; }",
      "cfg": []
    },
    {
      "id": "gpui::gpui::EventEmitter",
      "name": "EventEmitter",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "A trait for tying together the types of a GPUI entity and the events it can emit.",
      "documentation": "A trait for tying together the types of a GPUI entity and the events it can\nemit.",
      "signature": "# [doc = \" A trait for tying together the types of a GPUI entity and the events it can\"] # [doc = \" emit.\"] pub trait EventEmitter<E : Any> : 'static { }",
      "cfg": []
    },
    {
      "id": "gpui::gpui::GPUI_MANIFEST_DIR",
      "name": "GPUI_MANIFEST_DIR",
      "kind": "static",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub static GPUI_MANIFEST_DIR: & str",
      "cfg": []
    },
    {
      "id": "gpui::gpui::GpuSpecs",
      "name": "GpuSpecs",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "Information about the GPU GPUI is running on.",
      "documentation": "Information about the GPU GPUI is running on.",
      "signature": "# [doc = \" Information about the GPU GPUI is running on.\"] # [derive (Default, Debug, serde::Serialize, serde::Deserialize, Clone)] pub struct GpuSpecs { # [doc = \" Whether the GPU is really a fake (like `llvmpipe`) running on the CPU.\"] pub is_software_emulated : bool, # [doc = \" The name of the device, as reported by Vulkan.\"] pub device_name : String, # [doc = \" The name of the driver, as reported by Vulkan.\"] pub driver_name : String, # [doc = \" Further information about the driver, as reported by Vulkan.\"] pub driver_info : String, }",
      "cfg": []
    },
    {
      "id": "gpui::gpui::Reservation",
      "name": "Reservation",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "Returned by [Context::reserve_entity] to later be passed to [Context::insert_entity]. Allows you to obtain the [EntityId] for a entity before it is created.",
      "documentation": "Returned by [Context::reserve_entity] to later be passed to [Context::insert_entity].\nAllows you to obtain the [EntityId] for a entity before it is created.",
      "signature": "# [doc = \" Returned by [Context::reserve_entity] to later be passed to [Context::insert_entity].\"] # [doc = \" Allows you to obtain the [EntityId] for a entity before it is created.\"] pub struct Reservation<T> (pub (crate) Slot<T>);",
      "cfg": []
    },
    {
      "id": "gpui::gpui::Reservation::entity_id",
      "name": "entity_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "Returns the [EntityId] that will be associated with the entity once it is inserted.",
      "documentation": "Returns the [EntityId] that will be associated with the entity once it is inserted.",
      "signature": "pub fn entity_id (& self) -> EntityId",
      "cfg": [],
      "target": "Reservation<T>"
    },
    {
      "id": "gpui::gpui::VisualContext",
      "name": "VisualContext",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "This trait is used for the different visual contexts in GPUI that require a window to be present.",
      "documentation": "This trait is used for the different visual contexts in GPUI that\nrequire a window to be present.",
      "signature": "# [doc = \" This trait is used for the different visual contexts in GPUI that\"] # [doc = \" require a window to be present.\"] pub trait VisualContext : AppContext { # [doc = \" The result type for window operations.\"] type Result<T>; # [doc = \" Returns the handle of the window associated with this context.\"] fn window_handle (& self) -> AnyWindowHandle; # [doc = \" Update a view with the given callback\"] fn update_window_entity<T : 'static, R> (& mut self, entity : & Entity<T>, update : impl FnOnce (& mut T, & mut Window, & mut Context<T>) -> R,) -> Self::Result<R>; # [doc = \" Create a new entity, with access to `Window`.\"] fn new_window_entity<T : 'static> (& mut self, build_entity : impl FnOnce (& mut Window, & mut Context<T>) -> T,) -> Self::Result<Entity<T>>; # [doc = \" Replace the root view of a window with a new view.\"] fn replace_root_view<V> (& mut self, build_view : impl FnOnce (& mut Window, & mut Context<V>) -> V,) -> Self::Result<Entity<V>> where V : 'static + Render; # [doc = \" Focus a entity in the window, if it implements the [`Focusable`] trait.\"] fn focus<V> (& mut self, entity : & Entity<V>) -> Self::Result<()> where V : Focusable; }",
      "cfg": []
    },
    {
      "id": "gpui::gpui::bench_group",
      "name": "bench_group",
      "kind": "macro",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "Defines a Criterion benchmark group for benchmarks annotated with [`gpui::bench`].",
      "documentation": "Defines a Criterion benchmark group for benchmarks annotated with [`gpui::bench`].\n\nThis mirrors `criterion::criterion_group!` so GPUI benchmark files can keep the\nsame shape as ordinary Criterion benchmarks.\n\n[`gpui::bench`]: crate::bench",
      "signature": "macro_rules! bench_group",
      "cfg": []
    },
    {
      "id": "gpui::gpui::bench_main",
      "name": "bench_main",
      "kind": "macro",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "Defines the entry point for GPUI Criterion benchmark groups.",
      "documentation": "Defines the entry point for GPUI Criterion benchmark groups.\n\nThis mirrors `criterion::criterion_main!` so GPUI benchmark files can keep the\nsame shape as ordinary Criterion benchmarks.",
      "signature": "macro_rules! bench_main",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-1",
      "name": "proptest",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (any (test, feature = \"test-support\"))] pub use proptest;",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ]
    },
    {
      "id": "gpui::gpui::reexport-10",
      "name": "color :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use color::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-11",
      "name": "ctor :: ctor",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use ctor::ctor;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-12",
      "name": "editable_text :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use editable_text::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-13",
      "name": "effect_owner :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use effect_owner::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-14",
      "name": "element :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use element::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-15",
      "name": "elements :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use elements::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-16",
      "name": "executor :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use executor::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-17",
      "name": "geometry :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use geometry::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-18",
      "name": "gestures :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gestures::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-19",
      "name": "global :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use global::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-2",
      "name": "accesskit",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use accesskit;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-20",
      "name": "gpui_macros :: { AppContext , IntoElement , Render , VisualContext , bench , property_test , register_action , test , }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui_macros::{ AppContext, IntoElement, Render, VisualContext, bench, property_test, register_action, test, };",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-21",
      "name": "atlas_lease :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use atlas_lease::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-22",
      "name": "gpui_shared_string :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui_shared_string::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-23",
      "name": "gpui_util :: arc_cow :: ArcCow",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui_util::arc_cow::ArcCow;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-24",
      "name": "http_client",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use http_client;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-25",
      "name": "input :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use input::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-26",
      "name": "inspector :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use inspector::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-27",
      "name": "interactive :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use interactive::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-28",
      "name": "keymap :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use keymap::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-29",
      "name": "luminance :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use luminance::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-3",
      "name": "accesskit :: Action as AccessibleAction",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use accesskit::Action as AccessibleAction;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-30",
      "name": "paint_recording :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use paint_recording::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-31",
      "name": "particles :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use particles::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-32",
      "name": "path_builder :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use path_builder::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-33",
      "name": "platform :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use platform::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-34",
      "name": "profiler :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use profiler::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-35",
      "name": "queue :: { PriorityQueueReceiver , PriorityQueueSender }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use queue::{ PriorityQueueReceiver, PriorityQueueSender };",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-36",
      "name": "refineable :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use refineable::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-37",
      "name": "renderer_timing :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use renderer_timing::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-38",
      "name": "scene :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use scene::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-39",
      "name": "shared_uri :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use shared_uri::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-4",
      "name": "accesskit :: { Orientation , Role , Toggled }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use accesskit::{ Orientation, Role, Toggled };",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-40",
      "name": "spring :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use spring::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-41",
      "name": "style :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use style::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-42",
      "name": "styled :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use styled::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-43",
      "name": "subscription :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use subscription::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-44",
      "name": "subtree_clip :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use subtree_clip::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-45",
      "name": "svg_renderer :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use svg_renderer::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-46",
      "name": "taffy :: { AvailableSpace , LayoutId }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use taffy::{ AvailableSpace, LayoutId };",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-47",
      "name": "test :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (any (test, feature = \"test-support\"))] pub use test::*;",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ]
    },
    {
      "id": "gpui::gpui::reexport-48",
      "name": "text_system :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use text_system::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-49",
      "name": "util :: { FutureExt , Timeout }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use util::{ FutureExt, Timeout };",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-5",
      "name": "action :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use action::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-50",
      "name": "view :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use view::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-51",
      "name": "visual_transform :: VisualTransform",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use visual_transform::VisualTransform;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-52",
      "name": "window :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use window::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-53",
      "name": "pollster :: block_on",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use pollster::block_on;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-6",
      "name": "anyhow :: Result",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use anyhow::Result;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-7",
      "name": "app :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use app::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-8",
      "name": "asset_cache :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use asset_cache::*;",
      "cfg": []
    },
    {
      "id": "gpui::gpui::reexport-9",
      "name": "assets :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "gpui",
      "path": "gpui::gpui",
      "source": "crates/gpui/src/gpui.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use assets::*;",
      "cfg": []
    },
    {
      "id": "gpui::input::ElementInputHandler",
      "name": "ElementInputHandler",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "input",
      "path": "gpui::input",
      "source": "crates/gpui/src/input.rs",
      "summary": "The canonical implementation of [`crate::PlatformInputHandler`]. Call [`Window::handle_input`] with an instance during your element's paint.",
      "documentation": "The canonical implementation of [`crate::PlatformInputHandler`]. Call [`Window::handle_input`]\nwith an instance during your element's paint.",
      "signature": "# [doc = \" The canonical implementation of [`crate::PlatformInputHandler`]. Call [`Window::handle_input`]\"] # [doc = \" with an instance during your element's paint.\"] pub struct ElementInputHandler<V> { view : Entity<V>, element_bounds : Bounds<Pixels>, visual_transform : crate::VisualTransform, }",
      "cfg": []
    },
    {
      "id": "gpui::input::ElementInputHandler::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "input",
      "path": "gpui::input",
      "source": "crates/gpui/src/input.rs",
      "summary": "Used in [`Element::paint`][element_paint] with the element's bounds, a `Window`, and a `App` context.",
      "documentation": "Used in [`Element::paint`][element_paint] with the element's bounds, a `Window`, and a `App` context.\n\n[element_paint]: crate::Element::paint",
      "signature": "pub fn new (element_bounds : Bounds<Pixels>, view : Entity<V>) -> Self",
      "cfg": [],
      "target": "ElementInputHandler<V>"
    },
    {
      "id": "gpui::input::ElementInputHandler::with_visual_transform",
      "name": "with_visual_transform",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "input",
      "path": "gpui::input",
      "source": "crates/gpui/src/input.rs",
      "summary": "Captures the mapping used by this frame's logical `element_bounds`. Only the handler's element-bounds metadata is mapped here. Entity callback points remain window-global, returned caret/range rectangles must already be displayed window coordinates, and `bounds_for_range` still receives logical element bounds. The entity must store the same prepaint mapping with its layout snapshot and inverse-map incoming points exactly once.",
      "documentation": "Captures the mapping used by this frame's logical `element_bounds`.\nOnly the handler's element-bounds metadata is mapped here. Entity callback\npoints remain window-global, returned caret/range rectangles must already\nbe displayed window coordinates, and `bounds_for_range` still receives\nlogical element bounds. The entity must store the same prepaint mapping\nwith its layout snapshot and inverse-map incoming points exactly once.",
      "signature": "pub fn with_visual_transform (mut self, transform : crate::VisualTransform) -> Self",
      "cfg": [],
      "target": "ElementInputHandler<V>"
    },
    {
      "id": "gpui::input::EntityInputHandler",
      "name": "EntityInputHandler",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "input",
      "path": "gpui::input",
      "source": "crates/gpui/src/input.rs",
      "summary": "Implement this trait to allow views to handle textual input when implementing an editor, field, etc.",
      "documentation": "Implement this trait to allow views to handle textual input when implementing an editor, field, etc.\n\nOnce your view implements this trait, you can use it to construct an [`ElementInputHandler<V>`].\nThis input handler can then be assigned during paint by calling [`Window::handle_input`].\n\nSee [`InputHandler`] for details on how to implement each method.",
      "signature": "# [doc = \" Implement this trait to allow views to handle textual input when implementing an editor, field, etc.\"] # [doc = \"\"] # [doc = \" Once your view implements this trait, you can use it to construct an [`ElementInputHandler<V>`].\"] # [doc = \" This input handler can then be assigned during paint by calling [`Window::handle_input`].\"] # [doc = \"\"] # [doc = \" See [`InputHandler`] for details on how to implement each method.\"] pub trait EntityInputHandler : 'static + Sized { # [doc = \" See [`InputHandler::native_selection`].\"] fn native_selection (& mut self, _window : & mut Window, _cx : & mut Context<Self>,) -> Option<crate::NativeTextSelection> { None } # [doc = \" See [`InputHandler::set_native_selection`].\"] fn set_native_selection (& mut self, _selection : crate::NativeTextSelection, _window : & mut Window, _cx : & mut Context<Self>,) -> bool { false } # [doc = \" See [`InputHandler::native_position_in_direction`].\"] fn native_position_in_direction (& mut self, _position : crate::NativeTextPosition, _direction : crate::TextNavigationDirection, _offset : usize, _window : & mut Window, _cx : & mut Context<Self>,) -> Option<crate::NativeTextPosition> { None } # [doc = \" See [`InputHandler::native_position_bounds`].\"] fn native_position_bounds (& mut self, _position : crate::NativeTextPosition, _window : & mut Window, _cx : & mut Context<Self>,) -> Option<Bounds<Pixels>> { None } # [doc = \" See [`InputHandler::native_position_for_point`].\"] fn native_position_for_point (& mut self, _point : crate::Point<Pixels>, _within_range : Option<Range<usize>>, _window : & mut Window, _cx : & mut Context<Self>,) -> Option<crate::NativeTextPosition> { None } # [doc = \" See [`InputHandler::farthest_native_position`].\"] fn farthest_native_position (& mut self, _range : Range<usize>, _direction : crate::TextNavigationDirection, _window : & mut Window, _cx : & mut Context<Self>,) -> Option<crate::NativeTextPosition> { None } # [doc = \" See [`InputHandler::selection_rects_for_range`].\"] fn selection_rects_for_range (& mut self, _range : Range<usize>, _window : & mut Window, _cx : & mut Context<Self>,) -> Vec<crate::TextSelectionRect> { Vec::new () } # [doc = \" See [`InputHandler::text_position_in_direction`].\"] fn text_position_in_direction (& mut self, _position : usize, _direction : crate::TextNavigationDirection, _offset : usize, _window : & mut Window, _cx : & mut Context<Self>,) -> Option<usize> { None } # [doc = \" See [`InputHandler::farthest_text_position`].\"] fn farthest_text_position (& mut self, _range : Range<usize>, _direction : crate::TextNavigationDirection, _window : & mut Window, _cx : & mut Context<Self>,) -> Option<usize> { None } # [doc = \" See [`InputHandler::base_writing_direction`].\"] fn base_writing_direction (& mut self, _position : usize, _window : & mut Window, _cx : & mut Context<Self>,) -> Option<crate::TextWritingDirection> { None } # [doc = \" See [`InputHandler::set_base_writing_direction`].\"] fn set_base_writing_direction (& mut self, _direction : crate::TextWritingDirection, _range : Range<usize>, _window : & mut Window, _cx : & mut Context<Self>,) -> bool { false } # [doc = \" See [`InputHandler::grapheme_range_at`].\"] fn grapheme_range_at (& mut self, _position : usize, _window : & mut Window, _cx : & mut Context<Self>,) -> Option<Range<usize>> { None } # [doc = \" See [`InputHandler::native_caret_bounds`].\"] fn native_caret_bounds (& mut self, _position : usize, _window : & mut Window, _cx : & mut Context<Self>,) -> Option<Bounds<Pixels>> { None } # [doc = \" See [`InputHandler::text_input_options`].\"] fn text_input_options (& mut self, _window : & mut Window, _cx : & mut Context<Self>,) -> crate::TextInputOptions { crate::TextInputOptions::default () } # [doc = \" See [`InputHandler::perform_text_input_action`].\"] fn perform_text_input_action (& mut self, _action : crate::TextInputAction, _window : & mut Window, _cx : & mut Context<Self>,) -> bool { false } # [doc = \" See [`InputHandler::text_for_range`] for details\"] fn text_for_range (& mut self, range : Range<usize>, adjusted_range : & mut Option<Range<usize>>, window : & mut Window, cx : & mut Context<Self>,) -> Option<String>; # [doc = \" See [`InputHandler::selected_text_range`] for details\"] fn selected_text_range (& mut self, ignore_disabled_input : bool, window : & mut Window, cx : & mut Context<Self>,) -> Option<UTF16Selection>; # [doc = \" See [`InputHandler::marked_text_range`] for details\"] fn marked_text_range (& self, window : & mut Window, cx : & mut Context<Self>,) -> Option<Range<usize>>; # [doc = \" See [`InputHandler::unmark_text`] for details\"] fn unmark_text (& mut self, window : & mut Window, cx : & mut Context<Self>); # [doc = \" See [`InputHandler::replace_text_in_range`] for details\"] fn replace_text_in_range (& mut self, range : Option<Range<usize>>, text : & str, window : & mut Window, cx : & mut Context<Self>,); # [doc = \" See [`InputHandler::replace_and_mark_text_in_range`] for details\"] fn replace_and_mark_text_in_range (& mut self, range : Option<Range<usize>>, new_text : & str, new_selected_range : Option<Range<usize>>, window : & mut Window, cx : & mut Context<Self>,); # [doc = \" See [`InputHandler::bounds_for_range`] for details\"] fn bounds_for_range (& mut self, range_utf16 : Range<usize>, element_bounds : Bounds<Pixels>, window : & mut Window, cx : & mut Context<Self>,) -> Option<Bounds<Pixels>>; # [doc = \" See [`InputHandler::character_index_for_point`] for details\"] fn character_index_for_point (& mut self, point : crate::Point<Pixels>, window : & mut Window, cx : & mut Context<Self>,) -> Option<usize>; # [doc = \" See [`InputHandler::set_selected_text_range`] for details\"] fn set_selected_text_range (& mut self, _range_utf16 : Range<usize>, _window : & mut Window, _cx : & mut Context<Self>,) { } # [doc = \" See [`InputHandler::text_length_utf16`] for details\"] fn text_length_utf16 (& mut self, _window : & mut Window, _cx : & mut Context<Self>,) -> Option<usize> { None } # [doc = \" See [`InputHandler::accepts_text_input`] for details\"] fn accepts_text_input (& self, _window : & mut Window, _cx : & mut Context<Self>) -> bool { true } }",
      "cfg": []
    },
    {
      "id": "gpui::inspector::InspectorElementId",
      "name": "InspectorElementId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "inspector",
      "path": "gpui::inspector",
      "source": "crates/gpui/src/inspector.rs",
      "summary": "A unique identifier for an element that can be inspected.",
      "documentation": "A unique identifier for an element that can be inspected.",
      "signature": "# [doc = \" A unique identifier for an element that can be inspected.\"] # [derive (Debug, Eq, PartialEq, Hash, Clone)] pub struct InspectorElementId { # [doc = \" Stable part of the ID.\"] # [cfg (any (feature = \"inspector\", debug_assertions))] pub path : std::rc::Rc<InspectorElementPath>, # [doc = \" Disambiguates elements that have the same path.\"] # [cfg (any (feature = \"inspector\", debug_assertions))] pub instance_id : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::inspector::reexport-1",
      "name": "conditional :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "inspector",
      "path": "gpui::inspector",
      "source": "crates/gpui/src/inspector.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (any (feature = \"inspector\", debug_assertions))] pub use conditional::*;",
      "cfg": [
        "cfg (any (feature = \"inspector\", debug_assertions))"
      ]
    },
    {
      "id": "gpui::interactive::ClickEvent",
      "name": "ClickEvent",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A click event, generated when a mouse button or keyboard button is pressed and released, or when a tap gesture is recognized on a touch screen.",
      "documentation": "A click event, generated when a mouse button or keyboard button is pressed and released,\nor when a tap gesture is recognized on a touch screen.",
      "signature": "# [doc = \" A click event, generated when a mouse button or keyboard button is pressed and released,\"] # [doc = \" or when a tap gesture is recognized on a touch screen.\"] # [derive (Clone, Debug)] pub enum ClickEvent { # [doc = \" A click event trigger by a mouse button being pressed and released.\"] Mouse (MouseClickEvent), # [doc = \" A click event trigger by a keyboard button being pressed and released.\"] Keyboard (KeyboardClickEvent), # [doc = \" A click event triggered by a recognized tap gesture on a touch screen.\"] Touch (TouchClickEvent), }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::ClickEvent::click_count",
      "name": "click_count",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns the click count of the click event",
      "documentation": "Returns the click count of the click event\n\n`Keyboard`: Always 1\n`Mouse`: Count of clicks from MouseUpEvent\n`Touch`: Count of consecutive taps",
      "signature": "pub fn click_count (& self) -> usize",
      "cfg": [],
      "target": "ClickEvent"
    },
    {
      "id": "gpui::interactive::ClickEvent::first_focus",
      "name": "first_focus",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns whether the click focused the element",
      "documentation": "Returns whether the click focused the element\n\n`Keyboard`: false, keyboard clicks only work if an element is already focused\n`Mouse`: Whether this was the first focusing click\n`Touch`: false, mobile windows are already active when tappable",
      "signature": "pub fn first_focus (& self) -> bool",
      "cfg": [],
      "target": "ClickEvent"
    },
    {
      "id": "gpui::interactive::ClickEvent::is_keyboard",
      "name": "is_keyboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns whether the click event is generated by a keyboard event",
      "documentation": "Returns whether the click event is generated by a keyboard event",
      "signature": "pub fn is_keyboard (& self) -> bool",
      "cfg": [],
      "target": "ClickEvent"
    },
    {
      "id": "gpui::interactive::ClickEvent::is_middle_click",
      "name": "is_middle_click",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns if this was a middle click",
      "documentation": "Returns if this was a middle click\n\n`Keyboard`: false\n`Mouse`: Whether the middle button was pressed and released",
      "signature": "pub fn is_middle_click (& self) -> bool",
      "cfg": [],
      "target": "ClickEvent"
    },
    {
      "id": "gpui::interactive::ClickEvent::is_right_click",
      "name": "is_right_click",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns if this was a right click",
      "documentation": "Returns if this was a right click\n\n`Keyboard`: false\n`Mouse`: Whether the right button was pressed and released",
      "signature": "pub fn is_right_click (& self) -> bool",
      "cfg": [],
      "target": "ClickEvent"
    },
    {
      "id": "gpui::interactive::ClickEvent::is_secondary",
      "name": "is_secondary",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns whether the click is a secondary activation, i.e. a context menu trigger: a right click from a mouse (macOS ctrl-clicks arrive already converted to right clicks by the platform layer), or a long press on a touch screen.",
      "documentation": "Returns whether the click is a secondary activation, i.e. a context\nmenu trigger: a right click from a mouse (macOS ctrl-clicks arrive\nalready converted to right clicks by the platform layer), or a long\npress on a touch screen.",
      "signature": "pub fn is_secondary (& self) -> bool",
      "cfg": [],
      "target": "ClickEvent"
    },
    {
      "id": "gpui::interactive::ClickEvent::modifiers",
      "name": "modifiers",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns the modifiers that were held during the click event",
      "documentation": "Returns the modifiers that were held during the click event\n\n`Keyboard`: The keyboard click events never have modifiers.\n`Mouse`: Modifiers that were held during the mouse key up event.",
      "signature": "pub fn modifiers (& self) -> Modifiers",
      "cfg": [],
      "target": "ClickEvent"
    },
    {
      "id": "gpui::interactive::ClickEvent::mouse_position",
      "name": "mouse_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns the mouse position of the click event",
      "documentation": "Returns the mouse position of the click event\n\n`Keyboard`: None\n`Mouse`: The position of the mouse when the button was released.\n`Touch`: None, touches are not mouse input and there is no cursor.",
      "signature": "pub fn mouse_position (& self) -> Option<Point<Pixels>>",
      "cfg": [],
      "target": "ClickEvent"
    },
    {
      "id": "gpui::interactive::ClickEvent::position",
      "name": "position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns the position of the click event",
      "documentation": "Returns the position of the click event\n\n`Keyboard`: The bottom left corner of the clicked hitbox\n`Mouse`: The position of the mouse when the button was released.\n`Touch`: The position of the tap.",
      "signature": "pub fn position (& self) -> Point<Pixels>",
      "cfg": [],
      "target": "ClickEvent"
    },
    {
      "id": "gpui::interactive::ClickEvent::standard_click",
      "name": "standard_click",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns whether the click was a standard click",
      "documentation": "Returns whether the click was a standard click\n\n`Keyboard`: Always true\n`Mouse`: Left button pressed and released\n`Touch`: A tap, but not a long press",
      "signature": "pub fn standard_click (& self) -> bool",
      "cfg": [],
      "target": "ClickEvent"
    },
    {
      "id": "gpui::interactive::ExternalDragPayload",
      "name": "ExternalDragPayload",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Data offered to the platform when an internal drag leaves the window and is promoted to a native drag session.",
      "documentation": "Data offered to the platform when an internal drag leaves the window and is\npromoted to a native drag session.",
      "signature": "# [doc = \" Data offered to the platform when an internal drag leaves the window and is\"] # [doc = \" promoted to a native drag session.\"] # [derive (Debug, Clone, Eq, PartialEq)] pub enum ExternalDragPayload { # [doc = \" Real on-disk paths, handed to the platform as an outbound file drag.\"] Files (FileDragPaths), }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::ExternalDrop",
      "name": "ExternalDrop",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Non-path data offered by a native drag source.",
      "documentation": "Non-path data offered by a native drag source.\n\nReal filesystem paths continue to use [`ExternalPaths`] so existing drop targets remain\nsource-compatible. When a source offers both paths and encoded representations, platforms\nprefer the paths and do not publish a duplicate `ExternalDrop` session.",
      "signature": "# [doc = \" Non-path data offered by a native drag source.\"] # [doc = \"\"] # [doc = \" Real filesystem paths continue to use [`ExternalPaths`] so existing drop targets remain\"] # [doc = \" source-compatible. When a source offers both paths and encoded representations, platforms\"] # [doc = \" prefer the paths and do not publish a duplicate `ExternalDrop` session.\"] # [derive (Clone, Debug, Default)] pub struct ExternalDrop (pub SmallVec<[ExternalDropItem; 2]>);",
      "cfg": []
    },
    {
      "id": "gpui::interactive::ExternalDrop::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns whether no supported items were offered.",
      "documentation": "Returns whether no supported items were offered.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "ExternalDrop"
    },
    {
      "id": "gpui::interactive::ExternalDrop::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns the offered items without reading their content.",
      "documentation": "Returns the offered items without reading their content.",
      "signature": "pub fn items (& self) -> & [ExternalDropItem]",
      "cfg": [],
      "target": "ExternalDrop"
    },
    {
      "id": "gpui::interactive::ExternalDrop::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Creates a non-path external drop from its offered items.",
      "documentation": "Creates a non-path external drop from its offered items.",
      "signature": "pub fn new (items : impl IntoIterator<Item = ExternalDropItem>) -> Self",
      "cfg": [],
      "target": "ExternalDrop"
    },
    {
      "id": "gpui::interactive::ExternalDropData",
      "name": "ExternalDropData",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A bounded, asynchronously readable native drag payload.",
      "documentation": "A bounded, asynchronously readable native drag payload.\n\nPlatforms publish the available kind and metadata while the pointer is hovering, but defer\nreading the bytes until a drop target explicitly calls [`Self::read`]. This keeps images and\nvirtual files out of the window event path and lets the receiver apply its own byte limit.",
      "signature": "# [doc = \" A bounded, asynchronously readable native drag payload.\"] # [doc = \"\"] # [doc = \" Platforms publish the available kind and metadata while the pointer is hovering, but defer\"] # [doc = \" reading the bytes until a drop target explicitly calls [`Self::read`]. This keeps images and\"] # [doc = \" virtual files out of the window event path and lets the receiver apply its own byte limit.\"] # [derive (Clone)] pub struct ExternalDropData { len : Option<u64>, read : Arc<dyn Fn (u64) -> LocalBoxFuture<'static, Result<Arc<[u8]>>>>, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::ExternalDropData::from_bytes",
      "name": "from_bytes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Creates a payload whose bytes are already in memory, primarily for application-created drags and tests.",
      "documentation": "Creates a payload whose bytes are already in memory, primarily for application-created\ndrags and tests.",
      "signature": "pub fn from_bytes (bytes : impl Into<Arc<[u8]>>) -> Self",
      "cfg": [],
      "target": "ExternalDropData"
    },
    {
      "id": "gpui::interactive::ExternalDropData::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns whether the source declared this item empty.",
      "documentation": "Returns whether the source declared this item empty.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "ExternalDropData"
    },
    {
      "id": "gpui::interactive::ExternalDropData::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns the source's declared size, if it supplied one without reading the content.",
      "documentation": "Returns the source's declared size, if it supplied one without reading the content.",
      "signature": "pub fn len (& self) -> Option<u64>",
      "cfg": [],
      "target": "ExternalDropData"
    },
    {
      "id": "gpui::interactive::ExternalDropData::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Creates a deferred payload. `len` is the source's declared size when available.",
      "documentation": "Creates a deferred payload. `len` is the source's declared size when available.",
      "signature": "pub fn new (len : Option<u64>, read : impl Fn (u64) -> LocalBoxFuture<'static, Result<Arc<[u8]>>> + 'static,) -> Self",
      "cfg": [],
      "target": "ExternalDropData"
    },
    {
      "id": "gpui::interactive::ExternalDropData::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Reads at most `limit` bytes.",
      "documentation": "Reads at most `limit` bytes.\n\nA source that declares or returns more data than the limit is refused. Receivers should\nstill apply an aggregate limit when reading more than one item.",
      "signature": "pub fn read (& self, limit : u64) -> LocalBoxFuture<'static, Result<Arc<[u8]>>>",
      "cfg": [],
      "target": "ExternalDropData"
    },
    {
      "id": "gpui::interactive::ExternalDropEvent",
      "name": "ExternalDropEvent",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A native drag event for encoded images, text, URLs, and virtual files.",
      "documentation": "A native drag event for encoded images, text, URLs, and virtual files.",
      "signature": "# [doc = \" A native drag event for encoded images, text, URLs, and virtual files.\"] # [derive (Debug, Clone)] pub enum ExternalDropEvent { # [doc = \" Supported kinds and metadata have entered the window. Item bytes remain deferred.\"] Entered { # [doc = \" The pointer position relative to the window.\"] position : Point<Pixels>, # [doc = \" The offered non-path items.\"] drop : ExternalDrop, }, # [doc = \" The drag is moving over the window.\"] Pending { # [doc = \" The pointer position relative to the window.\"] position : Point<Pixels>, }, # [doc = \" The user dropped the offered items.\"] Submit { # [doc = \" The pointer position relative to the window.\"] position : Point<Pixels>, }, # [doc = \" The drag left the window without a drop.\"] Exited, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::ExternalDropItem",
      "name": "ExternalDropItem",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "One item offered by a native drag source that has no real filesystem path.",
      "documentation": "One item offered by a native drag source that has no real filesystem path.",
      "signature": "# [doc = \" One item offered by a native drag source that has no real filesystem path.\"] # [derive (Clone, Debug)] pub enum ExternalDropItem { # [doc = \" An encoded image.\"] Image (ExternalImage), # [doc = \" Plain or rich text represented as bytes plus a MIME type.\"] Text (ExternalText), # [doc = \" A URL, delivered without downloading it.\"] Url (ExternalUrl), # [doc = \" A promised or virtual file.\"] File (ExternalFile), }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::ExternalFile",
      "name": "ExternalFile",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A file whose content is supplied by the drag source instead of an on-disk path.",
      "documentation": "A file whose content is supplied by the drag source instead of an on-disk path.",
      "signature": "# [doc = \" A file whose content is supplied by the drag source instead of an on-disk path.\"] # [derive (Clone, Debug)] pub struct ExternalFile { name : SharedString, # [doc = \" The MIME type reported by the source, if any.\"] pub mime_type : Option<SharedString>, # [doc = \" The deferred file content.\"] pub data : ExternalDropData, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::ExternalFile::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns the sanitized display and destination file name.",
      "documentation": "Returns the sanitized display and destination file name.",
      "signature": "pub fn name (& self) -> & str",
      "cfg": [],
      "target": "ExternalFile"
    },
    {
      "id": "gpui::interactive::ExternalFile::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Creates a virtual file after validating that `name` is one portable path component.",
      "documentation": "Creates a virtual file after validating that `name` is one portable path component.",
      "signature": "pub fn new (name : impl Into<SharedString>, mime_type : Option<SharedString>, data : ExternalDropData,) -> Result<Self>",
      "cfg": [],
      "target": "ExternalFile"
    },
    {
      "id": "gpui::interactive::ExternalImage",
      "name": "ExternalImage",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "An encoded image offered by a native drag source.",
      "documentation": "An encoded image offered by a native drag source.",
      "signature": "# [doc = \" An encoded image offered by a native drag source.\"] # [derive (Clone, Debug)] pub struct ExternalImage { # [doc = \" The encoded image format.\"] pub format : ImageFormat, # [doc = \" The deferred encoded bytes.\"] pub data : ExternalDropData, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::ExternalPaths",
      "name": "ExternalPaths",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A collection of paths from the platform, such as from a file drop.",
      "documentation": "A collection of paths from the platform, such as from a file drop.",
      "signature": "# [doc = \" A collection of paths from the platform, such as from a file drop.\"] # [derive (Debug, Clone, Default, Eq, PartialEq)] pub struct ExternalPaths (pub SmallVec<[PathBuf; 2]>);",
      "cfg": []
    },
    {
      "id": "gpui::interactive::ExternalPaths::paths",
      "name": "paths",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Convert this collection of paths into a slice.",
      "documentation": "Convert this collection of paths into a slice.",
      "signature": "pub fn paths (& self) -> & [PathBuf]",
      "cfg": [],
      "target": "ExternalPaths"
    },
    {
      "id": "gpui::interactive::ExternalText",
      "name": "ExternalText",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Text offered by a native drag source.",
      "documentation": "Text offered by a native drag source.",
      "signature": "# [doc = \" Text offered by a native drag source.\"] # [derive (Clone, Debug)] pub struct ExternalText { # [doc = \" The MIME type reported by the platform.\"] pub mime_type : SharedString, # [doc = \" The deferred UTF-8 bytes.\"] pub data : ExternalDropData, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::ExternalUrl",
      "name": "ExternalUrl",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A URL offered by a native drag source.",
      "documentation": "A URL offered by a native drag source.",
      "signature": "# [doc = \" A URL offered by a native drag source.\"] # [derive (Clone, Debug)] pub struct ExternalUrl { # [doc = \" The deferred UTF-8 URL bytes. GPUI never downloads the URL.\"] pub data : ExternalDropData, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::FileDragPaths",
      "name": "FileDragPaths",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Paths handed to the platform for a native file drag. Directory metadata is provided by the caller to avoid querying it when the platform drag starts.",
      "documentation": "Paths handed to the platform for a native file drag. Directory metadata is\nprovided by the caller to avoid querying it when the platform drag starts.",
      "signature": "# [doc = \" Paths handed to the platform for a native file drag. Directory metadata is\"] # [doc = \" provided by the caller to avoid querying it when the platform drag starts.\"] # [derive (Debug, Clone, Default, Eq, PartialEq)] pub struct FileDragPaths (SmallVec<[(PathBuf, bool); 2]>);",
      "cfg": []
    },
    {
      "id": "gpui::interactive::FileDragPaths::entries",
      "name": "entries",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "The dragged paths, each paired with whether it is a directory.",
      "documentation": "The dragged paths, each paired with whether it is a directory.",
      "signature": "pub fn entries (& self) -> & [(PathBuf, bool)]",
      "cfg": [],
      "target": "FileDragPaths"
    },
    {
      "id": "gpui::interactive::FileDragPaths::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Creates a native file-drag payload from paths paired with whether each path is a directory.",
      "documentation": "Creates a native file-drag payload from paths paired with whether each path is a directory.",
      "signature": "pub fn new (entries : impl IntoIterator<Item = (PathBuf, bool)>) -> Self",
      "cfg": [],
      "target": "FileDragPaths"
    },
    {
      "id": "gpui::interactive::FileDropEvent",
      "name": "FileDropEvent",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A file drop event from the platform, generated when files are dragged and dropped onto the window.",
      "documentation": "A file drop event from the platform, generated when files are dragged and dropped onto the window.",
      "signature": "# [doc = \" A file drop event from the platform, generated when files are dragged and dropped onto the window.\"] # [derive (Debug, Clone)] pub enum FileDropEvent { # [doc = \" The files have entered the window.\"] Entered { # [doc = \" The position of the mouse relative to the window.\"] position : Point<Pixels>, # [doc = \" The paths of the files that are being dragged.\"] paths : ExternalPaths, }, # [doc = \" The files are being dragged over the window\"] Pending { # [doc = \" The position of the mouse relative to the window.\"] position : Point<Pixels>, }, # [doc = \" The files have been dropped onto the window.\"] Submit { # [doc = \" The position of the mouse relative to the window.\"] position : Point<Pixels>, }, # [doc = \" The user has stopped dragging the files over the window.\"] Exited, # [doc = \" The platform-owned drag session has ended.\"] Ended, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::GestureEvent",
      "name": "GestureEvent",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A gesture event from the platform.",
      "documentation": "A gesture event from the platform.",
      "signature": "# [doc = \" A gesture event from the platform.\"] pub trait GestureEvent : InputEvent { }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::InputEvent",
      "name": "InputEvent",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "An event from a platform input source.",
      "documentation": "An event from a platform input source.",
      "signature": "# [doc = \" An event from a platform input source.\"] pub trait InputEvent : Sealed + 'static { # [doc = \" Convert this event into the platform input enum.\"] fn to_platform_input (self) -> PlatformInput; }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::KeyDownEvent",
      "name": "KeyDownEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "The key down event equivalent for the platform.",
      "documentation": "The key down event equivalent for the platform.",
      "signature": "# [doc = \" The key down event equivalent for the platform.\"] # [derive (Clone, Debug, Eq, PartialEq)] pub struct KeyDownEvent { # [doc = \" The keystroke that was generated.\"] pub keystroke : Keystroke, # [doc = \" Whether the key is currently held down.\"] pub is_held : bool, # [doc = \" Whether to prefer character input over keybindings for this keystroke.\"] # [doc = \" In some cases, like AltGr on Windows, modifiers are significant for character input.\"] pub prefer_character_input : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::KeyEvent",
      "name": "KeyEvent",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A key event from the platform.",
      "documentation": "A key event from the platform.",
      "signature": "# [doc = \" A key event from the platform.\"] pub trait KeyEvent : InputEvent { }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::KeyUpEvent",
      "name": "KeyUpEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "The key up event equivalent for the platform.",
      "documentation": "The key up event equivalent for the platform.",
      "signature": "# [doc = \" The key up event equivalent for the platform.\"] # [derive (Clone, Debug)] pub struct KeyUpEvent { # [doc = \" The keystroke that was released.\"] pub keystroke : Keystroke, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::KeyboardButton",
      "name": "KeyboardButton",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "An enum representing the keyboard button that was pressed for a click event.",
      "documentation": "An enum representing the keyboard button that was pressed for a click event.",
      "signature": "# [doc = \" An enum representing the keyboard button that was pressed for a click event.\"] # [derive (Hash, PartialEq, Eq, Copy, Clone, Debug, Default)] pub enum KeyboardButton { # [doc = \" Enter key was clicked\"] # [default] Enter, # [doc = \" Space key was clicked\"] Space, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::KeyboardClickEvent",
      "name": "KeyboardClickEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A click event that was generated by a keyboard button being pressed and released.",
      "documentation": "A click event that was generated by a keyboard button being pressed and released.",
      "signature": "# [doc = \" A click event that was generated by a keyboard button being pressed and released.\"] # [derive (Clone, Debug, Default)] pub struct KeyboardClickEvent { # [doc = \" The keyboard button that was pressed to trigger the click.\"] pub button : KeyboardButton, # [doc = \" The bounds of the element that was clicked.\"] pub bounds : Bounds<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::ModifiersChangedEvent",
      "name": "ModifiersChangedEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "The modifiers changed event equivalent for the platform.",
      "documentation": "The modifiers changed event equivalent for the platform.",
      "signature": "# [doc = \" The modifiers changed event equivalent for the platform.\"] # [derive (Clone, Debug, Default)] pub struct ModifiersChangedEvent { # [doc = \" The new state of the modifier keys\"] pub modifiers : Modifiers, # [doc = \" The new state of the capslock key\"] pub capslock : Capslock, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::MouseButton",
      "name": "MouseButton",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "An enum representing the mouse button that was pressed.",
      "documentation": "An enum representing the mouse button that was pressed.",
      "signature": "# [doc = \" An enum representing the mouse button that was pressed.\"] # [derive (Hash, Default, PartialEq, Eq, Copy, Clone, Debug)] pub enum MouseButton { # [doc = \" The left mouse button.\"] # [default] Left, # [doc = \" The right mouse button.\"] Right, # [doc = \" The middle mouse button.\"] Middle, # [doc = \" A navigation button, such as back or forward.\"] Navigate (NavigationDirection), }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::MouseButton::all",
      "name": "all",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Get all the mouse buttons in a list.",
      "documentation": "Get all the mouse buttons in a list.",
      "signature": "pub fn all () -> Vec<Self>",
      "cfg": [],
      "target": "MouseButton"
    },
    {
      "id": "gpui::interactive::MouseCancelEvent",
      "name": "MouseCancelEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "The platform ended a mouse/pointer stream without a release (capture loss, cancellation, or deactivation). This is not a mouse-up and must not click or drop. Window broadcasts it to mouse listeners even if propagation is stopped, then releases capture and cancels dragging. Gesture owners should discard pending presses during the capture phase. Repeated cancellation is harmless.",
      "documentation": "The platform ended a mouse/pointer stream without a release (capture loss,\ncancellation, or deactivation). This is not a mouse-up and must not click or\ndrop. Window broadcasts it to mouse listeners even if propagation is stopped,\nthen releases capture and cancels dragging. Gesture owners should discard\npending presses during the capture phase. Repeated cancellation is harmless.",
      "signature": "# [doc = \" The platform ended a mouse/pointer stream without a release (capture loss,\"] # [doc = \" cancellation, or deactivation). This is not a mouse-up and must not click or\"] # [doc = \" drop. Window broadcasts it to mouse listeners even if propagation is stopped,\"] # [doc = \" then releases capture and cancels dragging. Gesture owners should discard\"] # [doc = \" pending presses during the capture phase. Repeated cancellation is harmless.\"] # [derive (Clone, Copy, Debug, Default)] pub struct MouseCancelEvent;",
      "cfg": []
    },
    {
      "id": "gpui::interactive::MouseClickEvent",
      "name": "MouseClickEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A click event, generated when a mouse button is pressed and released.",
      "documentation": "A click event, generated when a mouse button is pressed and released.",
      "signature": "# [doc = \" A click event, generated when a mouse button is pressed and released.\"] # [derive (Clone, Debug, Default)] pub struct MouseClickEvent { # [doc = \" The mouse event when the button was pressed.\"] pub down : MouseDownEvent, # [doc = \" The mouse event when the button was released.\"] pub up : MouseUpEvent, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::MouseDownEvent",
      "name": "MouseDownEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A mouse down event from the platform",
      "documentation": "A mouse down event from the platform",
      "signature": "# [doc = \" A mouse down event from the platform\"] # [derive (Clone, Debug, Default)] pub struct MouseDownEvent { # [doc = \" Which mouse button was pressed.\"] pub button : MouseButton, # [doc = \" The position of the mouse on the window.\"] pub position : Point<Pixels>, # [doc = \" The modifiers that were held down when the mouse was pressed.\"] pub modifiers : Modifiers, # [doc = \" The number of times the button has been clicked.\"] pub click_count : usize, # [doc = \" Whether this is the first, focusing click.\"] pub first_mouse : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::MouseDownEvent::is_focusing",
      "name": "is_focusing",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns true if this mouse up event should focus the element.",
      "documentation": "Returns true if this mouse up event should focus the element.",
      "signature": "pub fn is_focusing (& self) -> bool",
      "cfg": [],
      "target": "MouseDownEvent"
    },
    {
      "id": "gpui::interactive::MouseEvent",
      "name": "MouseEvent",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A mouse event from the platform.",
      "documentation": "A mouse event from the platform.",
      "signature": "# [doc = \" A mouse event from the platform.\"] pub trait MouseEvent : InputEvent { }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::MouseExitEvent",
      "name": "MouseExitEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A mouse exit event from the platform, generated when the mouse leaves the window.",
      "documentation": "A mouse exit event from the platform, generated when the mouse leaves the window.",
      "signature": "# [doc = \" A mouse exit event from the platform, generated when the mouse leaves the window.\"] # [derive (Clone, Debug, Default)] pub struct MouseExitEvent { # [doc = \" The position of the mouse relative to the window.\"] pub position : Point<Pixels>, # [doc = \" The mouse button that was pressed, if any.\"] pub pressed_button : Option<MouseButton>, # [doc = \" The modifiers that were held down when the mouse was moved.\"] pub modifiers : Modifiers, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::MouseMoveEvent",
      "name": "MouseMoveEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A mouse move event from the platform.",
      "documentation": "A mouse move event from the platform.",
      "signature": "# [doc = \" A mouse move event from the platform.\"] # [derive (Clone, Debug, Default)] pub struct MouseMoveEvent { # [doc = \" The position of the mouse on the window.\"] pub position : Point<Pixels>, # [doc = \" The mouse button that was pressed, if any.\"] pub pressed_button : Option<MouseButton>, # [doc = \" The modifiers that were held down when the mouse was moved.\"] pub modifiers : Modifiers, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::MouseMoveEvent::dragging",
      "name": "dragging",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns true if the left mouse button is currently held down.",
      "documentation": "Returns true if the left mouse button is currently held down.",
      "signature": "pub fn dragging (& self) -> bool",
      "cfg": [],
      "target": "MouseMoveEvent"
    },
    {
      "id": "gpui::interactive::MousePressureEvent",
      "name": "MousePressureEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A mouse pressure event from the platform. Generated when a force-sensitive trackpad is pressed hard. Currently only implemented for macOS trackpads.",
      "documentation": "A mouse pressure event from the platform. Generated when a force-sensitive trackpad is pressed hard.\nCurrently only implemented for macOS trackpads.",
      "signature": "# [doc = \" A mouse pressure event from the platform. Generated when a force-sensitive trackpad is pressed hard.\"] # [doc = \" Currently only implemented for macOS trackpads.\"] # [derive (Debug, Clone, Default)] pub struct MousePressureEvent { # [doc = \" Pressure of the current stage as a float between 0 and 1\"] pub pressure : f32, # [doc = \" The pressure stage of the event.\"] pub stage : PressureStage, # [doc = \" The position of the mouse on the window.\"] pub position : Point<Pixels>, # [doc = \" The modifiers that were held down when the mouse pressure changed.\"] pub modifiers : Modifiers, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::MouseUpEvent",
      "name": "MouseUpEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A mouse up event from the platform",
      "documentation": "A mouse up event from the platform",
      "signature": "# [doc = \" A mouse up event from the platform\"] # [derive (Clone, Debug, Default)] pub struct MouseUpEvent { # [doc = \" Which mouse button was released.\"] pub button : MouseButton, # [doc = \" The position of the mouse on the window.\"] pub position : Point<Pixels>, # [doc = \" The modifiers that were held down when the mouse was released.\"] pub modifiers : Modifiers, # [doc = \" The number of times the button has been clicked.\"] pub click_count : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::MouseUpEvent::is_focusing",
      "name": "is_focusing",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns true if this mouse up event should focus the element.",
      "documentation": "Returns true if this mouse up event should focus the element.",
      "signature": "pub fn is_focusing (& self) -> bool",
      "cfg": [],
      "target": "MouseUpEvent"
    },
    {
      "id": "gpui::interactive::NavigationDirection",
      "name": "NavigationDirection",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A navigation direction, such as back or forward.",
      "documentation": "A navigation direction, such as back or forward.",
      "signature": "# [doc = \" A navigation direction, such as back or forward.\"] # [derive (Hash, Default, PartialEq, Eq, Copy, Clone, Debug)] pub enum NavigationDirection { # [doc = \" The back button.\"] # [default] Back, # [doc = \" The forward button.\"] Forward, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::PinchEvent",
      "name": "PinchEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A pinch gesture from a platform trackpad or GPUI's portable touch recognizer.",
      "documentation": "A pinch gesture from a platform trackpad or GPUI's portable touch recognizer.\n",
      "signature": "# [doc = \" A pinch gesture from a platform trackpad or GPUI's portable touch recognizer.\"] # [doc = \"\"] # [derive (Clone, Debug, Default)] pub struct PinchEvent { # [doc = \" The position of the pinch center on the window.\"] pub position : Point<Pixels>, # [doc = \" The zoom delta for this event.\"] # [doc = \" Positive values indicate zooming in, negative values indicate zooming out.\"] # [doc = \" For example, 0.1 represents a 10% zoom increase.\"] # [doc = \" Portable touch pinch reports the ratio to the previous contact span\"] # [doc = \" minus one; consumers multiply their scale by `1.0 + delta`.\"] pub delta : f32, # [doc = \" The modifiers that were held down during the pinch gesture.\"] pub modifiers : Modifiers, # [doc = \" The phase of the pinch gesture.\"] pub phase : TouchPhase, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::PlatformInput",
      "name": "PlatformInput",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "An enum corresponding to all kinds of platform input events.",
      "documentation": "An enum corresponding to all kinds of platform input events.",
      "signature": "# [doc = \" An enum corresponding to all kinds of platform input events.\"] # [derive (Clone, Debug)] pub enum PlatformInput { # [doc = \" A key was pressed.\"] KeyDown (KeyDownEvent), # [doc = \" A key was released.\"] KeyUp (KeyUpEvent), # [doc = \" The keyboard modifiers were changed.\"] ModifiersChanged (ModifiersChangedEvent), # [doc = \" The mouse was pressed.\"] MouseDown (MouseDownEvent), # [doc = \" The mouse was released.\"] MouseUp (MouseUpEvent), # [doc = \" A pointer stream ended without a release or click.\"] MouseCancelled (MouseCancelEvent), # [doc = \" Mouse pressure.\"] MousePressure (MousePressureEvent), # [doc = \" The mouse was moved.\"] MouseMove (MouseMoveEvent), # [doc = \" The mouse exited the window.\"] MouseExited (MouseExitEvent), # [doc = \" The scroll wheel was used.\"] ScrollWheel (ScrollWheelEvent), # [doc = \" A pinch gesture was performed.\"] Pinch (PinchEvent), # [doc = \" A long-press gesture recognized from touch input.\"] LongPress (LongPressEvent), # [doc = \" A direct touch drag claimed by an element.\"] TouchDrag (TouchDragEvent), # [doc = \" A direction-aware touch manipulation acquired after slop.\"] TouchPan (crate::TouchPanEvent), # [doc = \" Files were dragged and dropped onto the window.\"] FileDrop (FileDropEvent), # [doc = \" Non-path native data was dragged and dropped onto the window.\"] ExternalDrop (ExternalDropEvent), # [doc = \" A raw touch event on a touch screen.\"] Touch (TouchEvent), }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::PlatformInput::kind_name",
      "name": "kind_name",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A short static name for this input's variant, for diagnostics and telemetry.",
      "documentation": "A short static name for this input's variant, for diagnostics and\ntelemetry.",
      "signature": "pub fn kind_name (& self) -> & 'static str",
      "cfg": [],
      "target": "PlatformInput"
    },
    {
      "id": "gpui::interactive::PlatformInput::touch_event",
      "name": "touch_event",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns the touch event contained in this input, if any.",
      "documentation": "Returns the touch event contained in this input, if any.",
      "signature": "pub fn touch_event (& self) -> Option<& TouchEvent>",
      "cfg": [],
      "target": "PlatformInput"
    },
    {
      "id": "gpui::interactive::PointerButtonState",
      "name": "PointerButtonState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Complete button state for platform adapters that receive button snapshots. Bits 0..4 denote left, right, middle, back and forward, respectively (the standard pointer `buttons` layout). Unknown bits are ignored. Reconciliation emits each changed button once, releases before presses, including chord transitions delivered in a move rather than a down/up platform message.",
      "documentation": "Complete button state for platform adapters that receive button snapshots.\nBits 0..4 denote left, right, middle, back and forward, respectively (the\nstandard pointer `buttons` layout). Unknown bits are ignored. Reconciliation\nemits each changed button once, releases before presses, including chord\ntransitions delivered in a move rather than a down/up platform message.",
      "signature": "# [doc = \" Complete button state for platform adapters that receive button snapshots.\"] # [doc = \" Bits 0..4 denote left, right, middle, back and forward, respectively (the\"] # [doc = \" standard pointer `buttons` layout). Unknown bits are ignored. Reconciliation\"] # [doc = \" emits each changed button once, releases before presses, including chord\"] # [doc = \" transitions delivered in a move rather than a down/up platform message.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub struct PointerButtonState (u16);",
      "cfg": []
    },
    {
      "id": "gpui::interactive::PointerButtonState::cancel",
      "name": "cancel",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Forget a cancelled stream without producing synthetic releases/clicks. Returns whether any button was held; repeated calls return false.",
      "documentation": "Forget a cancelled stream without producing synthetic releases/clicks.\nReturns whether any button was held; repeated calls return false.",
      "signature": "pub fn cancel (& mut self) -> bool",
      "cfg": [],
      "target": "PointerButtonState"
    },
    {
      "id": "gpui::interactive::PointerButtonState::pressed_button",
      "name": "pressed_button",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "One held button for the legacy move API, preferring left, right, middle, back, then forward. Never returns an already released button.",
      "documentation": "One held button for the legacy move API, preferring left, right, middle,\nback, then forward. Never returns an already released button.",
      "signature": "pub fn pressed_button (self) -> Option<MouseButton>",
      "cfg": [],
      "target": "PointerButtonState"
    },
    {
      "id": "gpui::interactive::PointerButtonState::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Reconcile a platform snapshot; the bool is true for a press.",
      "documentation": "Reconcile a platform snapshot; the bool is true for a press.",
      "signature": "pub fn update (& mut self, buttons : u16) -> Vec<(MouseButton, bool)>",
      "cfg": [],
      "target": "PointerButtonState"
    },
    {
      "id": "gpui::interactive::PressureStage",
      "name": "PressureStage",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "The stage of a pressure click event.",
      "documentation": "The stage of a pressure click event.",
      "signature": "# [doc = \" The stage of a pressure click event.\"] # [derive (Clone, Copy, Debug, Default, PartialEq)] pub enum PressureStage { # [doc = \" No pressure.\"] # [default] Zero, # [doc = \" Normal click pressure.\"] Normal, # [doc = \" High pressure, enough to trigger a force click.\"] Force, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::ScrollDelta",
      "name": "ScrollDelta",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "The scroll delta for a scroll wheel event.",
      "documentation": "The scroll delta for a scroll wheel event.",
      "signature": "# [doc = \" The scroll delta for a scroll wheel event.\"] # [derive (Clone, Copy, Debug)] pub enum ScrollDelta { # [doc = \" An exact scroll delta in pixels.\"] Pixels (Point<Pixels>), # [doc = \" An inexact scroll delta in lines.\"] Lines (Point<f32>), }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::ScrollDelta::coalesce",
      "name": "coalesce",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Combines two scroll deltas into one. If the signs of the deltas are the same (both positive or both negative), the deltas are added together. If the signs are opposite, the second delta (other) is used, effectively overriding the first delta.",
      "documentation": "Combines two scroll deltas into one.\nIf the signs of the deltas are the same (both positive or both negative),\nthe deltas are added together. If the signs are opposite, the second delta\n(other) is used, effectively overriding the first delta.",
      "signature": "pub fn coalesce (self, other : ScrollDelta) -> ScrollDelta",
      "cfg": [],
      "target": "ScrollDelta"
    },
    {
      "id": "gpui::interactive::ScrollDelta::pixel_delta",
      "name": "pixel_delta",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Converts this scroll event into exact pixels.",
      "documentation": "Converts this scroll event into exact pixels.",
      "signature": "pub fn pixel_delta (& self, line_height : Pixels) -> Point<Pixels>",
      "cfg": [],
      "target": "ScrollDelta"
    },
    {
      "id": "gpui::interactive::ScrollDelta::precise",
      "name": "precise",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Returns true if this is a precise scroll delta in pixels.",
      "documentation": "Returns true if this is a precise scroll delta in pixels.",
      "signature": "pub fn precise (& self) -> bool",
      "cfg": [],
      "target": "ScrollDelta"
    },
    {
      "id": "gpui::interactive::ScrollWheelEvent",
      "name": "ScrollWheelEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A mouse wheel event from the platform.",
      "documentation": "A mouse wheel event from the platform.",
      "signature": "# [doc = \" A mouse wheel event from the platform.\"] # [derive (Clone, Debug, Default)] pub struct ScrollWheelEvent { # [doc = \" The position of the mouse on the window.\"] pub position : Point<Pixels>, # [doc = \" The change in scroll wheel position for this event.\"] pub delta : ScrollDelta, # [doc = \" The modifiers that were held down when the mouse was moved.\"] pub modifiers : Modifiers, # [doc = \" The phase of the touch event.\"] pub touch_phase : TouchPhase, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::TouchClickEvent",
      "name": "TouchClickEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A click event that was generated by a recognized tap gesture on a touch screen.",
      "documentation": "A click event that was generated by a recognized tap gesture on a touch\nscreen.",
      "signature": "# [doc = \" A click event that was generated by a recognized tap gesture on a touch\"] # [doc = \" screen.\"] # [derive (Clone, Debug, Default)] pub struct TouchClickEvent { # [doc = \" The position of the tap in window coordinates.\"] pub position : Point<Pixels>, # [doc = \" The number of consecutive taps at this location (double tap = 2),\"] # [doc = \" analogous to the mouse `click_count`.\"] pub tap_count : usize, # [doc = \" Whether this was a long press rather than a tap. Long presses are\"] # [doc = \" touch's secondary activation: they are delivered to aux-click\"] # [doc = \" listeners alongside right clicks, not to primary click listeners.\"] pub long_press : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::TouchEvent",
      "name": "TouchEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "A raw touch event from the platform.",
      "documentation": "A raw touch event from the platform.\n\nForward all contacts using stable IDs, never their index in a native event.\nCoordinates are logical window pixels. Deliver historical samples before\ncurrent samples, and never also synthesize mouse/native gestures for these\ncontacts. Predictions affect pan output only. Cancellation is per-contact;\na system-wide interruption must call [`Window::cancel_touch_input`] as well\nto stop post-release momentum and pending recognition.",
      "signature": "# [doc = \" A raw touch event from the platform.\"] # [doc = \"\"] # [doc = \" Forward all contacts using stable IDs, never their index in a native event.\"] # [doc = \" Coordinates are logical window pixels. Deliver historical samples before\"] # [doc = \" current samples, and never also synthesize mouse/native gestures for these\"] # [doc = \" contacts. Predictions affect pan output only. Cancellation is per-contact;\"] # [doc = \" a system-wide interruption must call [`Window::cancel_touch_input`] as well\"] # [doc = \" to stop post-release momentum and pending recognition.\"] # [derive (Clone, Debug, Default)] pub struct TouchEvent { # [doc = \" Which touch this event belongs to.\"] pub id : TouchId, # [doc = \" The phase of the touch.\"] pub phase : TouchPhase, # [doc = \" The position of the touch in window coordinates.\"] pub position : Point<Pixels>, # [doc = \" Where the platform predicts the touch will be roughly one frame from\"] # [doc = \" now, in the same coordinate space as `position`, when the platform\"] # [doc = \" offers a prediction for a [`TouchPhase::Moved`] event.\"] # [doc = \"\"] # [doc = \" Best-effort latency compensation only: it may influence how far a\"] # [doc = \" recognized pan scrolls within a frame, but never hit testing, gesture\"] # [doc = \" classification, or velocity estimation. Later events reconcile any\"] # [doc = \" prediction error.\"] pub predicted_position : Option<Point<Pixels>>, # [doc = \" Normalized touch force in `0.0..=1.0`, if the hardware reports it.\"] pub force : Option<f32>, }",
      "cfg": []
    },
    {
      "id": "gpui::interactive::TouchId",
      "name": "TouchId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "Identifies one touch (finger or stylus contact) for its lifetime, from [`TouchPhase::Started`] through [`TouchPhase::Ended`] or [`TouchPhase::Cancelled`].",
      "documentation": "Identifies one touch (finger or stylus contact) for its lifetime, from\n[`TouchPhase::Started`] through [`TouchPhase::Ended`] or\n[`TouchPhase::Cancelled`].\n\nThe value is opaque and platform-defined; it is only guaranteed to be\nstable for the duration of the touch and unique among concurrent touches.",
      "signature": "# [doc = \" Identifies one touch (finger or stylus contact) for its lifetime, from\"] # [doc = \" [`TouchPhase::Started`] through [`TouchPhase::Ended`] or\"] # [doc = \" [`TouchPhase::Cancelled`].\"] # [doc = \"\"] # [doc = \" The value is opaque and platform-defined; it is only guaranteed to be\"] # [doc = \" stable for the duration of the touch and unique among concurrent touches.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct TouchId (pub u64);",
      "cfg": []
    },
    {
      "id": "gpui::interactive::TouchPhase",
      "name": "TouchPhase",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "interactive",
      "path": "gpui::interactive",
      "source": "crates/gpui/src/interactive.rs",
      "summary": "The phase of a touch motion event. Based on the winit enum of the same name.",
      "documentation": "The phase of a touch motion event.\nBased on the winit enum of the same name.",
      "signature": "# [doc = \" The phase of a touch motion event.\"] # [doc = \" Based on the winit enum of the same name.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub enum TouchPhase { # [doc = \" The touch started.\"] Started, # [doc = \" The touch event is moving.\"] # [default] Moved, # [doc = \" The touch phase has ended\"] Ended, # [doc = \" The touch was cancelled: the system took it and it will not end\"] # [doc = \" normally. Consumers must fully unwind any in-progress interaction,\"] # [doc = \" treating the touch as if it never committed.\"] Cancelled, }",
      "cfg": []
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::active_node_id",
      "name": "active_node_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn active_node_id (& self) -> Option<DispatchNodeId>",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::available_actions",
      "name": "available_actions",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn available_actions (& self, target : DispatchNodeId) -> Vec<Box<dyn Action>>",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::bindings_for_action",
      "name": "bindings_for_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "Returns key bindings that invoke an action on the currently focused element. Bindings are returned in the order they were added. For display, the last binding should take precedence.",
      "documentation": "Returns key bindings that invoke an action on the currently focused element. Bindings are\nreturned in the order they were added. For display, the last binding should take precedence.\n\nBindings are only included if they are the highest precedence match for their keystrokes, so\nshadowed bindings are not included.",
      "signature": "pub fn bindings_for_action (& self, action : & dyn Action, context_stack : & [KeyContext],) -> Vec<KeyBinding>",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::dispatch_key",
      "name": "dispatch_key",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "dispatch_key processes the keystroke input should be set to the value of `pending` from the previous call to dispatch_key. This returns three instructions to the input handler: - bindings: any bindings to execute before processing this keystroke - pending: the new set of pending keystrokes to store - to_replay: any keystroke that had been pushed to pending, but are no-longer matched, these should be replayed first.",
      "documentation": "dispatch_key processes the keystroke\ninput should be set to the value of `pending` from the previous call to dispatch_key.\nThis returns three instructions to the input handler:\n- bindings: any bindings to execute before processing this keystroke\n- pending: the new set of pending keystrokes to store\n- to_replay: any keystroke that had been pushed to pending, but are no-longer matched,\nthese should be replayed first.",
      "signature": "pub fn dispatch_key (& mut self, mut input : SmallVec<[Keystroke; 1]>, keystroke : Keystroke, dispatch_path : & SmallVec<[DispatchNodeId; 32]>,) -> DispatchResult",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::dispatch_path",
      "name": "dispatch_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn dispatch_path (& self, target : DispatchNodeId) -> SmallVec<[DispatchNodeId; 32]>",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::flush_dispatch",
      "name": "flush_dispatch",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "If the user types a matching prefix of a binding and then waits for a timeout flush_dispatch() converts any previously pending input to replay events.",
      "documentation": "If the user types a matching prefix of a binding and then waits for a timeout\nflush_dispatch() converts any previously pending input to replay events.",
      "signature": "pub fn flush_dispatch (& mut self, input : SmallVec<[Keystroke; 1]>, dispatch_path : & SmallVec<[DispatchNodeId; 32]>,) -> SmallVec<[Replay; 1]>",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::focus_contains",
      "name": "focus_contains",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn focus_contains (& self, parent : FocusId, child : FocusId) -> bool",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::focus_path",
      "name": "focus_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn focus_path (& self, focus_id : FocusId) -> SmallVec<[FocusId; 8]>",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::focusable_node_id",
      "name": "focusable_node_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn focusable_node_id (& self, target : FocusId) -> Option<DispatchNodeId>",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::highest_precedence_binding_for_action",
      "name": "highest_precedence_binding_for_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "Returns the highest precedence binding for the given action and context stack. This is the same as the last result of `bindings_for_action`, but more efficient than getting all bindings.",
      "documentation": "Returns the highest precedence binding for the given action and context stack. This is the\nsame as the last result of `bindings_for_action`, but more efficient than getting all bindings.",
      "signature": "pub fn highest_precedence_binding_for_action (& self, action : & dyn Action, context_stack : & [KeyContext],) -> Option<KeyBinding>",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::is_action_available",
      "name": "is_action_available",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_action_available (& self, action : & dyn Action, target : DispatchNodeId) -> bool",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (keymap : Rc<RefCell<Keymap>>, action_registry : Rc<ActionRegistry>) -> Self",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::node",
      "name": "node",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn node (& self, node_id : DispatchNodeId) -> & DispatchNode",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::on_action",
      "name": "on_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_action (& mut self, action_type : TypeId, listener : Rc<dyn Fn (& dyn Any, DispatchPhase, & mut Window, & mut App)>,)",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::on_key_event",
      "name": "on_key_event",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_key_event (& mut self, listener : KeyListener)",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::on_modifiers_changed",
      "name": "on_modifiers_changed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_modifiers_changed (& mut self, listener : ModifiersChangedListener)",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::pop_node",
      "name": "pop_node",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn pop_node (& mut self)",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::possible_next_bindings_for_input",
      "name": "possible_next_bindings_for_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "Find the bindings that can follow the current input sequence.",
      "documentation": "Find the bindings that can follow the current input sequence.",
      "signature": "pub fn possible_next_bindings_for_input (& self, input : & [Keystroke], context_stack : & [KeyContext],) -> Vec<KeyBinding>",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::push_node",
      "name": "push_node",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn push_node (& mut self) -> DispatchNodeId",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::reuse_subtree",
      "name": "reuse_subtree",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn reuse_subtree (& mut self, old_range : Range<usize>, source : & mut Self, focus : Option<FocusId>,) -> ReusedSubtree",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::root_node_id",
      "name": "root_node_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn root_node_id (& self) -> DispatchNodeId",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::set_active_node",
      "name": "set_active_node",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_active_node (& mut self, node_id : DispatchNodeId)",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::set_focus_id",
      "name": "set_focus_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_focus_id (& mut self, focus_id : FocusId)",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::set_key_context",
      "name": "set_key_context",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_key_context (& mut self, context : KeyContext)",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::set_view_id",
      "name": "set_view_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_view_id (& mut self, view_id : EntityId)",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::truncate",
      "name": "truncate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn truncate (& mut self, index : usize)",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::DispatchTree::view_path_reversed",
      "name": "view_path_reversed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn view_path_reversed (& self, view_id : EntityId) -> impl Iterator<Item = EntityId>",
      "cfg": [],
      "target": "DispatchTree"
    },
    {
      "id": "gpui::key_dispatch::ReusedSubtree::contains_focus",
      "name": "contains_focus",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn contains_focus (& self) -> bool",
      "cfg": [],
      "target": "ReusedSubtree"
    },
    {
      "id": "gpui::key_dispatch::ReusedSubtree::refresh_node_id",
      "name": "refresh_node_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "key_dispatch",
      "path": "gpui::key_dispatch",
      "source": "crates/gpui/src/key_dispatch.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn refresh_node_id (& self, node_id : DispatchNodeId) -> DispatchNodeId",
      "cfg": [],
      "target": "ReusedSubtree"
    },
    {
      "id": "gpui::keymap::BindingIndex",
      "name": "BindingIndex",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "Index of a binding within a keymap.",
      "documentation": "Index of a binding within a keymap.",
      "signature": "# [doc = \" Index of a binding within a keymap.\"] # [derive (Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd)] pub struct BindingIndex (usize);",
      "cfg": []
    },
    {
      "id": "gpui::keymap::Keymap",
      "name": "Keymap",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "A collection of key bindings for the user's application.",
      "documentation": "A collection of key bindings for the user's application.",
      "signature": "# [doc = \" A collection of key bindings for the user's application.\"] # [derive (Default)] pub struct Keymap { bindings : Vec<KeyBinding>, binding_indices_by_action_id : TypeIdHashMap<SmallVec<[usize; 3]>>, disabled_binding_indices : Vec<usize>, version : KeymapVersion, }",
      "cfg": []
    },
    {
      "id": "gpui::keymap::Keymap::add_bindings",
      "name": "add_bindings",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "Add more bindings to the keymap.",
      "documentation": "Add more bindings to the keymap.",
      "signature": "pub fn add_bindings<T : IntoIterator<Item = KeyBinding>> (& mut self, bindings : T)",
      "cfg": [],
      "target": "Keymap"
    },
    {
      "id": "gpui::keymap::Keymap::all_bindings_for_input",
      "name": "all_bindings_for_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "Returns all bindings that might match the input without checking context. The bindings returned in precedence order (reverse of the order they were added to the keymap).",
      "documentation": "Returns all bindings that might match the input without checking context. The bindings\nreturned in precedence order (reverse of the order they were added to the keymap).",
      "signature": "pub fn all_bindings_for_input (& self, input : & [Keystroke]) -> Vec<KeyBinding>",
      "cfg": [],
      "target": "Keymap"
    },
    {
      "id": "gpui::keymap::Keymap::bindings",
      "name": "bindings",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "Iterate over all bindings, in the order they were added.",
      "documentation": "Iterate over all bindings, in the order they were added.",
      "signature": "pub fn bindings (& self) -> impl DoubleEndedIterator<Item = & KeyBinding> + ExactSizeIterator",
      "cfg": [],
      "target": "Keymap"
    },
    {
      "id": "gpui::keymap::Keymap::bindings_for_action",
      "name": "bindings_for_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "Iterate over all bindings for the given action, in the order they were added. For display, the last binding should take precedence.",
      "documentation": "Iterate over all bindings for the given action, in the order they were added. For display,\nthe last binding should take precedence.",
      "signature": "pub fn bindings_for_action<'a> (& 'a self, action : & 'a dyn Action,) -> impl 'a + DoubleEndedIterator<Item = & 'a KeyBinding>",
      "cfg": [],
      "target": "Keymap"
    },
    {
      "id": "gpui::keymap::Keymap::bindings_for_input",
      "name": "bindings_for_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "Returns a list of bindings that match the given input, and a boolean indicating whether or not more bindings might match if the input was longer. Bindings are returned in precedence order (higher precedence first, reverse of the order they were added to the keymap).",
      "documentation": "Returns a list of bindings that match the given input, and a boolean indicating whether or\nnot more bindings might match if the input was longer. Bindings are returned in precedence\norder (higher precedence first, reverse of the order they were added to the keymap).\n\nPrecedence is defined by the depth in the tree (matches on the Editor take precedence over\nmatches on the Pane, then the Workspace, etc.). Bindings with no context are treated as the\nsame as the deepest context.\n\nIn the case of multiple bindings at the same depth, the ones added to the keymap later take\nprecedence. User bindings are added after built-in bindings so that they take precedence.\n\nIf a binding has been disabled with `\"x\": null` it will not be returned. Disabled bindings\nare evaluated with the same precedence rules so you can disable a rule in a given context\nonly. A disabled binding only suppresses bindings from sources with equal or weaker\nprecedence: a base keymap null hides default bindings, but user bindings still apply.",
      "signature": "pub fn bindings_for_input (& self, input : & [impl AsKeystroke], context_stack : & [KeyContext],) -> (SmallVec<[KeyBinding; 1]>, bool)",
      "cfg": [],
      "target": "Keymap"
    },
    {
      "id": "gpui::keymap::Keymap::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "Reset this keymap to its initial state.",
      "documentation": "Reset this keymap to its initial state.",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "Keymap"
    },
    {
      "id": "gpui::keymap::Keymap::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "Create a new keymap with the given bindings.",
      "documentation": "Create a new keymap with the given bindings.",
      "signature": "pub fn new (bindings : Vec<KeyBinding>) -> Self",
      "cfg": [],
      "target": "Keymap"
    },
    {
      "id": "gpui::keymap::Keymap::possible_next_bindings_for_input",
      "name": "possible_next_bindings_for_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "Find the bindings that can follow the current input sequence.",
      "documentation": "Find the bindings that can follow the current input sequence.",
      "signature": "pub fn possible_next_bindings_for_input (& self, input : & [Keystroke], context_stack : & [KeyContext],) -> Vec<KeyBinding>",
      "cfg": [],
      "target": "Keymap"
    },
    {
      "id": "gpui::keymap::Keymap::version",
      "name": "version",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "Get the current version of the keymap.",
      "documentation": "Get the current version of the keymap.",
      "signature": "pub fn version (& self) -> KeymapVersion",
      "cfg": [],
      "target": "Keymap"
    },
    {
      "id": "gpui::keymap::KeymapVersion",
      "name": "KeymapVersion",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "An opaque identifier of which version of the keymap is currently active. The keymap's version is changed whenever bindings are added or removed.",
      "documentation": "An opaque identifier of which version of the keymap is currently active.\nThe keymap's version is changed whenever bindings are added or removed.",
      "signature": "# [doc = \" An opaque identifier of which version of the keymap is currently active.\"] # [doc = \" The keymap's version is changed whenever bindings are added or removed.\"] # [derive (Copy, Clone, Eq, PartialEq, Default)] pub struct KeymapVersion (usize);",
      "cfg": []
    },
    {
      "id": "gpui::keymap::binding::KeyBinding",
      "name": "KeyBinding",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::binding",
      "path": "gpui::keymap::binding",
      "source": "crates/gpui/src/keymap/binding.rs",
      "summary": "A keybinding and its associated metadata, from the keymap.",
      "documentation": "A keybinding and its associated metadata, from the keymap.",
      "signature": "# [doc = \" A keybinding and its associated metadata, from the keymap.\"] pub struct KeyBinding { pub (crate) action : Box<dyn Action>, pub (crate) keystrokes : SmallVec<[KeybindingKeystroke; 2]>, pub (crate) context_predicate : Option<Rc<KeyBindingContextPredicate>>, pub (crate) meta : Option<KeyBindingMetaIndex>, # [doc = \" The json input string used when building the keybinding, if any\"] pub (crate) action_input : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui::keymap::binding::KeyBinding::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::binding",
      "path": "gpui::keymap::binding",
      "source": "crates/gpui/src/keymap/binding.rs",
      "summary": "Get the action associated with this binding",
      "documentation": "Get the action associated with this binding",
      "signature": "pub fn action (& self) -> & dyn Action",
      "cfg": [],
      "target": "KeyBinding"
    },
    {
      "id": "gpui::keymap::binding::KeyBinding::action_input",
      "name": "action_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::binding",
      "path": "gpui::keymap::binding",
      "source": "crates/gpui/src/keymap/binding.rs",
      "summary": "Get the action input associated with the action for this binding",
      "documentation": "Get the action input associated with the action for this binding",
      "signature": "pub fn action_input (& self) -> Option<SharedString>",
      "cfg": [],
      "target": "KeyBinding"
    },
    {
      "id": "gpui::keymap::binding::KeyBinding::keystrokes",
      "name": "keystrokes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::binding",
      "path": "gpui::keymap::binding",
      "source": "crates/gpui/src/keymap/binding.rs",
      "summary": "Get the keystrokes associated with this binding",
      "documentation": "Get the keystrokes associated with this binding",
      "signature": "pub fn keystrokes (& self) -> & [KeybindingKeystroke]",
      "cfg": [],
      "target": "KeyBinding"
    },
    {
      "id": "gpui::keymap::binding::KeyBinding::load",
      "name": "load",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::binding",
      "path": "gpui::keymap::binding",
      "source": "crates/gpui/src/keymap/binding.rs",
      "summary": "Load a keybinding from the given raw data.",
      "documentation": "Load a keybinding from the given raw data.",
      "signature": "pub fn load (keystrokes : & str, action : Box<dyn Action>, context_predicate : Option<Rc<KeyBindingContextPredicate>>, use_key_equivalents : bool, action_input : Option<SharedString>, keyboard_mapper : & dyn PlatformKeyboardMapper,) -> std::result::Result<Self, InvalidKeystrokeError>",
      "cfg": [],
      "target": "KeyBinding"
    },
    {
      "id": "gpui::keymap::binding::KeyBinding::match_keystrokes",
      "name": "match_keystrokes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::binding",
      "path": "gpui::keymap::binding",
      "source": "crates/gpui/src/keymap/binding.rs",
      "summary": "Check if the given keystrokes match this binding.",
      "documentation": "Check if the given keystrokes match this binding.",
      "signature": "pub fn match_keystrokes (& self, typed : & [impl AsKeystroke]) -> Option<bool>",
      "cfg": [],
      "target": "KeyBinding"
    },
    {
      "id": "gpui::keymap::binding::KeyBinding::meta",
      "name": "meta",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::binding",
      "path": "gpui::keymap::binding",
      "source": "crates/gpui/src/keymap/binding.rs",
      "summary": "Get the metadata for this binding",
      "documentation": "Get the metadata for this binding",
      "signature": "pub fn meta (& self) -> Option<KeyBindingMetaIndex>",
      "cfg": [],
      "target": "KeyBinding"
    },
    {
      "id": "gpui::keymap::binding::KeyBinding::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::binding",
      "path": "gpui::keymap::binding",
      "source": "crates/gpui/src/keymap/binding.rs",
      "summary": "Construct a new keybinding from the given data. Panics on parse error.",
      "documentation": "Construct a new keybinding from the given data. Panics on parse error.",
      "signature": "pub fn new<A : Action> (keystrokes : & str, action : A, context : Option<& str>) -> Self",
      "cfg": [],
      "target": "KeyBinding"
    },
    {
      "id": "gpui::keymap::binding::KeyBinding::predicate",
      "name": "predicate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::binding",
      "path": "gpui::keymap::binding",
      "source": "crates/gpui/src/keymap/binding.rs",
      "summary": "Get the predicate used to match this binding",
      "documentation": "Get the predicate used to match this binding",
      "signature": "pub fn predicate (& self) -> Option<Rc<KeyBindingContextPredicate>>",
      "cfg": [],
      "target": "KeyBinding"
    },
    {
      "id": "gpui::keymap::binding::KeyBinding::set_meta",
      "name": "set_meta",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::binding",
      "path": "gpui::keymap::binding",
      "source": "crates/gpui/src/keymap/binding.rs",
      "summary": "Set the metadata for this binding.",
      "documentation": "Set the metadata for this binding.",
      "signature": "pub fn set_meta (& mut self, meta : KeyBindingMetaIndex)",
      "cfg": [],
      "target": "KeyBinding"
    },
    {
      "id": "gpui::keymap::binding::KeyBinding::with_meta",
      "name": "with_meta",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::binding",
      "path": "gpui::keymap::binding",
      "source": "crates/gpui/src/keymap/binding.rs",
      "summary": "Set the metadata for this binding.",
      "documentation": "Set the metadata for this binding.",
      "signature": "pub fn with_meta (mut self, meta : KeyBindingMetaIndex) -> Self",
      "cfg": [],
      "target": "KeyBinding"
    },
    {
      "id": "gpui::keymap::binding::KeyBindingMetaIndex",
      "name": "KeyBindingMetaIndex",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::binding",
      "path": "gpui::keymap::binding",
      "source": "crates/gpui/src/keymap/binding.rs",
      "summary": "A unique identifier for retrieval of metadata associated with a key binding. Intended to be used as an index or key into a user-defined store of metadata associated with the binding, such as the source of the binding.",
      "documentation": "A unique identifier for retrieval of metadata associated with a key binding.\nIntended to be used as an index or key into a user-defined store of metadata\nassociated with the binding, such as the source of the binding.",
      "signature": "# [doc = \" A unique identifier for retrieval of metadata associated with a key binding.\"] # [doc = \" Intended to be used as an index or key into a user-defined store of metadata\"] # [doc = \" associated with the binding, such as the source of the binding.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct KeyBindingMetaIndex (pub u32);",
      "cfg": []
    },
    {
      "id": "gpui::keymap::context::ContextEntry",
      "name": "ContextEntry",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "An entry in a KeyContext",
      "documentation": "An entry in a KeyContext",
      "signature": "# [derive (Clone, Debug, Eq, PartialEq, Hash)] # [doc = \" An entry in a KeyContext\"] pub struct ContextEntry { # [doc = \" The key (or name if no value)\"] pub key : SharedString, # [doc = \" The value\"] pub value : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui::keymap::context::KeyBindingContextPredicate",
      "name": "KeyBindingContextPredicate",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "A datastructure for resolving whether an action should be dispatched Representing a small language for describing which contexts correspond to which actions.",
      "documentation": "A datastructure for resolving whether an action should be dispatched\nRepresenting a small language for describing which contexts correspond\nto which actions.",
      "signature": "# [doc = \" A datastructure for resolving whether an action should be dispatched\"] # [doc = \" Representing a small language for describing which contexts correspond\"] # [doc = \" to which actions.\"] # [derive (Clone, Debug, Eq, PartialEq, Hash)] pub enum KeyBindingContextPredicate { # [doc = \" A predicate that will match a given identifier.\"] Identifier (SharedString), # [doc = \" A predicate that will match a given key-value pair.\"] Equal (SharedString, SharedString), # [doc = \" A predicate that will match a given key-value pair not being present.\"] NotEqual (SharedString, SharedString), # [doc = \" A predicate that will match a given predicate appearing below another predicate.\"] # [doc = \" in the element tree\"] Descendant (Box<KeyBindingContextPredicate>, Box<KeyBindingContextPredicate>,), # [doc = \" Predicate that will invert another predicate.\"] Not (Box<KeyBindingContextPredicate>), # [doc = \" A predicate that will match if both of its children match.\"] And (Box<KeyBindingContextPredicate>, Box<KeyBindingContextPredicate>,), # [doc = \" A predicate that will match if either of its children match.\"] Or (Box<KeyBindingContextPredicate>, Box<KeyBindingContextPredicate>,), }",
      "cfg": []
    },
    {
      "id": "gpui::keymap::context::KeyBindingContextPredicate::depth_of",
      "name": "depth_of",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Find the deepest depth at which the predicate matches.",
      "documentation": "Find the deepest depth at which the predicate matches.",
      "signature": "pub fn depth_of (& self, contexts : & [KeyContext]) -> Option<usize>",
      "cfg": [],
      "target": "KeyBindingContextPredicate"
    },
    {
      "id": "gpui::keymap::context::KeyBindingContextPredicate::eval",
      "name": "eval",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Eval a predicate against a set of contexts, arranged from lowest to highest.",
      "documentation": "Eval a predicate against a set of contexts, arranged from lowest to highest.",
      "signature": "pub fn eval (& self, contexts : & [KeyContext]) -> bool",
      "cfg": [],
      "target": "KeyBindingContextPredicate"
    },
    {
      "id": "gpui::keymap::context::KeyBindingContextPredicate::eval_inner",
      "name": "eval_inner",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Eval a predicate against a set of contexts, arranged from lowest to highest.",
      "documentation": "Eval a predicate against a set of contexts, arranged from lowest to highest.",
      "signature": "pub fn eval_inner (& self, contexts : & [KeyContext], all_contexts : & [KeyContext]) -> bool",
      "cfg": [],
      "target": "KeyBindingContextPredicate"
    },
    {
      "id": "gpui::keymap::context::KeyBindingContextPredicate::is_superset",
      "name": "is_superset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Returns whether or not this predicate matches all possible contexts matched by the other predicate.",
      "documentation": "Returns whether or not this predicate matches all possible contexts matched by\nthe other predicate.",
      "signature": "pub fn is_superset (& self, other : & Self) -> bool",
      "cfg": [],
      "target": "KeyBindingContextPredicate"
    },
    {
      "id": "gpui::keymap::context::KeyBindingContextPredicate::parse",
      "name": "parse",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Parse a string in the same format as the keymap's context field.",
      "documentation": "Parse a string in the same format as the keymap's context field.\n\nA basic equivalence check against a set of identifiers can performed by\nsimply writing a string:\n\n`StatusBar` -> A predicate that will match a context with the identifier `StatusBar`\n\nYou can also specify a key-value pair:\n\n`mode == visible` -> A predicate that will match a context with the key `mode`\nwith the value `visible`\n\nAnd a logical operations combining these two checks:\n\n`StatusBar && mode == visible` -> A predicate that will match a context with the\nidentifier `StatusBar` and the key `mode`\nwith the value `visible`\n\n\nThere is also a special child `>` operator that will match a predicate that is\nbelow another predicate:\n\n`StatusBar > mode == visible` -> A predicate that will match a context identifier `StatusBar`\nand a child context that has the key `mode` with the\nvalue `visible`\n\nThis syntax supports `!=`, `||` and `&&` as logical operators.\nYou can also preface an operation or check with a `!` to negate it.",
      "signature": "pub fn parse (source : & str) -> Result<Self>",
      "cfg": [],
      "target": "KeyBindingContextPredicate"
    },
    {
      "id": "gpui::keymap::context::KeyContext",
      "name": "KeyContext",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "A datastructure for resolving whether an action should be dispatched at this point in the element tree. Contains a set of identifiers and/or key value pairs representing the current context for the keymap.",
      "documentation": "A datastructure for resolving whether an action should be dispatched\nat this point in the element tree. Contains a set of identifiers\nand/or key value pairs representing the current context for the\nkeymap.",
      "signature": "# [doc = \" A datastructure for resolving whether an action should be dispatched\"] # [doc = \" at this point in the element tree. Contains a set of identifiers\"] # [doc = \" and/or key value pairs representing the current context for the\"] # [doc = \" keymap.\"] # [derive (Clone, Default, Eq, PartialEq, Hash)] pub struct KeyContext (Vec<ContextEntry>);",
      "cfg": []
    },
    {
      "id": "gpui::keymap::context::KeyContext::add",
      "name": "add",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Add an identifier to this context, if it's not already in this context.",
      "documentation": "Add an identifier to this context, if it's not already in this context.",
      "signature": "pub fn add<I : Into<SharedString>> (& mut self, identifier : I)",
      "cfg": [],
      "target": "KeyContext"
    },
    {
      "id": "gpui::keymap::context::KeyContext::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Clear this context.",
      "documentation": "Clear this context.",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "KeyContext"
    },
    {
      "id": "gpui::keymap::context::KeyContext::contains",
      "name": "contains",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Check if this context contains a given identifier or key.",
      "documentation": "Check if this context contains a given identifier or key.",
      "signature": "pub fn contains (& self, key : & str) -> bool",
      "cfg": [],
      "target": "KeyContext"
    },
    {
      "id": "gpui::keymap::context::KeyContext::extend",
      "name": "extend",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Extend this context with another context.",
      "documentation": "Extend this context with another context.",
      "signature": "pub fn extend (& mut self, other : & Self)",
      "cfg": [],
      "target": "KeyContext"
    },
    {
      "id": "gpui::keymap::context::KeyContext::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Get the associated value for a given identifier or key.",
      "documentation": "Get the associated value for a given identifier or key.",
      "signature": "pub fn get (& self, key : & str) -> Option<& SharedString>",
      "cfg": [],
      "target": "KeyContext"
    },
    {
      "id": "gpui::keymap::context::KeyContext::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Check if this context is empty.",
      "documentation": "Check if this context is empty.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "KeyContext"
    },
    {
      "id": "gpui::keymap::context::KeyContext::new_with_defaults",
      "name": "new_with_defaults",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Initialize a new [`KeyContext`] that contains an `os` key set to either `macos`, `linux`, `windows` or `unknown`.",
      "documentation": "Initialize a new [`KeyContext`] that contains an `os` key set to either `macos`, `linux`, `windows` or `unknown`.",
      "signature": "pub fn new_with_defaults () -> Self",
      "cfg": [],
      "target": "KeyContext"
    },
    {
      "id": "gpui::keymap::context::KeyContext::parse",
      "name": "parse",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Parse a key context from a string. The key context format is very simple: - either a single identifier, such as `StatusBar` - or a key value pair, such as `mode = visible` - separated by whitespace, such as `StatusBar mode = visible`",
      "documentation": "Parse a key context from a string.\nThe key context format is very simple:\n- either a single identifier, such as `StatusBar`\n- or a key value pair, such as `mode = visible`\n- separated by whitespace, such as `StatusBar mode = visible`",
      "signature": "pub fn parse (source : & str) -> Result<Self>",
      "cfg": [],
      "target": "KeyContext"
    },
    {
      "id": "gpui::keymap::context::KeyContext::primary",
      "name": "primary",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Returns the primary context entry (usually the name of the component)",
      "documentation": "Returns the primary context entry (usually the name of the component)",
      "signature": "pub fn primary (& self) -> Option<& ContextEntry>",
      "cfg": [],
      "target": "KeyContext"
    },
    {
      "id": "gpui::keymap::context::KeyContext::secondary",
      "name": "secondary",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Returns everything except the primary context entry.",
      "documentation": "Returns everything except the primary context entry.",
      "signature": "pub fn secondary (& self) -> impl Iterator<Item = & ContextEntry>",
      "cfg": [],
      "target": "KeyContext"
    },
    {
      "id": "gpui::keymap::context::KeyContext::set",
      "name": "set",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap::context",
      "path": "gpui::keymap::context",
      "source": "crates/gpui/src/keymap/context.rs",
      "summary": "Set a key value pair in this context, if it's not already set.",
      "documentation": "Set a key value pair in this context, if it's not already set.",
      "signature": "pub fn set<S1 : Into<SharedString>, S2 : Into<SharedString>> (& mut self, key : S1, value : S2)",
      "cfg": [],
      "target": "KeyContext"
    },
    {
      "id": "gpui::keymap::reexport-1",
      "name": "binding :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use binding::*;",
      "cfg": []
    },
    {
      "id": "gpui::keymap::reexport-2",
      "name": "context :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "keymap",
      "path": "gpui::keymap",
      "source": "crates/gpui/src/keymap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use context::*;",
      "cfg": []
    },
    {
      "id": "gpui::luminance::BackdropStatistics",
      "name": "BackdropStatistics",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "luminance",
      "path": "gpui::luminance",
      "source": "crates/gpui/src/luminance.rs",
      "summary": "Statistics of the five optical-source texels copied by a glass probe: center and diagonal quarter points, after scattering when enabled and before glass compositing. These are encoded RGB measurements, not linear light, exhaustive backdrop extrema, or exhaustive backdrop variance. Alpha is ignored: stored RGB is neither unpremultiplied nor alpha-weighted.",
      "documentation": "Statistics of the five optical-source texels copied by a glass probe:\ncenter and diagonal quarter points, after scattering when enabled and\nbefore glass compositing. These are encoded RGB measurements, not linear\nlight, exhaustive backdrop extrema, or exhaustive backdrop variance.\nAlpha is ignored: stored RGB is neither unpremultiplied nor alpha-weighted.",
      "signature": "# [doc = \" Statistics of the five optical-source texels copied by a glass probe:\"] # [doc = \" center and diagonal quarter points, after scattering when enabled and\"] # [doc = \" before glass compositing. These are encoded RGB measurements, not linear\"] # [doc = \" light, exhaustive backdrop extrema, or exhaustive backdrop variance.\"] # [doc = \" Alpha is ignored: stored RGB is neither unpremultiplied nor alpha-weighted.\"] # [derive (Clone, Copy, Debug, PartialEq)] pub struct BackdropStatistics { # [doc = \" Arithmetic mean of stored encoded red, green, and blue, in `0..=1`.\"] pub mean_rgb : [f32; 3], # [doc = \" Mean encoded luminance; identical to the legacy probe reading.\"] pub mean_luminance : f32, # [doc = \" Minimum encoded luminance among the five sampled texels only.\"] pub min_luminance : f32, # [doc = \" Maximum encoded luminance among the five sampled texels only.\"] pub max_luminance : f32, # [doc = \" Population variance of the five encoded luminances (divisor five).\"] pub luminance_variance : f32, }",
      "cfg": []
    },
    {
      "id": "gpui::luminance::BackdropStatistics::from_encoded_texels",
      "name": "from_encoded_texels",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "luminance",
      "path": "gpui::luminance",
      "source": "crates/gpui/src/luminance.rs",
      "summary": "Decode five RGBA8 or BGRA8 texels at `stride` byte intervals. The caller supplies the slice beginning at the probe's first texel; row padding and other probes are never included in the measurement. Panics if the slice cannot contain all five texels or stride is below four.",
      "documentation": "Decode five RGBA8 or BGRA8 texels at `stride` byte intervals.\nThe caller supplies the slice beginning at the probe's first texel;\nrow padding and other probes are never included in the measurement.\nPanics if the slice cannot contain all five texels or stride is below four.",
      "signature": "pub fn from_encoded_texels (data : & [u8], stride : usize, bgra : bool) -> Self",
      "cfg": [],
      "target": "BackdropStatistics"
    },
    {
      "id": "gpui::luminance::LuminanceProbeCache",
      "name": "LuminanceProbeCache",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "luminance",
      "path": "gpui::luminance",
      "source": "crates/gpui/src/luminance.rs",
      "summary": "Generation- and submission-aware CPU cache shared by all glass renderers.",
      "documentation": "Generation- and submission-aware CPU cache shared by all glass renderers.\n\nEach frame registers only probes actually encoded for admitted surfaces.\nMissing probes immediately read `None`, including surfaces painted through\nan opaque budget fallback. Completion callbacks carry the full lease ID\nand submission sequence, not merely the physical GPU slot.",
      "signature": "# [doc = \" Generation- and submission-aware CPU cache shared by all glass renderers.\"] # [doc = \"\"] # [doc = \" Each frame registers only probes actually encoded for admitted surfaces.\"] # [doc = \" Missing probes immediately read `None`, including surfaces painted through\"] # [doc = \" an opaque budget fallback. Completion callbacks carry the full lease ID\"] # [doc = \" and submission sequence, not merely the physical GPU slot.\"] # [derive (Clone, Copy, Default)] pub struct LuminanceProbeCache { frame : u64, slots : [CachedProbe; MAX_LUMINANCE_PROBES], }",
      "cfg": []
    },
    {
      "id": "gpui::luminance::LuminanceProbeCache::begin_frame",
      "name": "begin_frame",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "luminance",
      "path": "gpui::luminance",
      "source": "crates/gpui/src/luminance.rs",
      "summary": "Register a frame's encoded probe IDs, including an empty frame, and return the sequence to capture with its GPU completion. Continuous owners keep their latest completed value without waiting for the GPU.",
      "documentation": "Register a frame's encoded probe IDs, including an empty frame, and\nreturn the sequence to capture with its GPU completion. Continuous\nowners keep their latest completed value without waiting for the GPU.",
      "signature": "pub fn begin_frame (& mut self, probes : impl IntoIterator<Item = u32>) -> u64",
      "cfg": [],
      "target": "LuminanceProbeCache"
    },
    {
      "id": "gpui::luminance::LuminanceProbeCache::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "luminance",
      "path": "gpui::luminance",
      "source": "crates/gpui/src/luminance.rs",
      "summary": "Latest verified value for this exact active lease, or `None` before its first completion, after replacement, or when not submitted.",
      "documentation": "Latest verified value for this exact active lease, or `None` before\nits first completion, after replacement, or when not submitted.",
      "signature": "pub fn get (& self, id : u32) -> Option<f32>",
      "cfg": [],
      "target": "LuminanceProbeCache"
    },
    {
      "id": "gpui::luminance::LuminanceProbeCache::publish",
      "name": "publish",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "luminance",
      "path": "gpui::luminance",
      "source": "crates/gpui/src/luminance.rs",
      "summary": "Publish a completed sample only for its still-active owner and activation. Late older submissions cannot overwrite a newer sample; an older frame of the same continuously active owner remains usable.",
      "documentation": "Publish a completed sample only for its still-active owner and\nactivation. Late older submissions cannot overwrite a newer sample;\nan older frame of the same continuously active owner remains usable.",
      "signature": "pub fn publish (& mut self, frame : u64, id : u32, luminance : f32)",
      "cfg": [],
      "target": "LuminanceProbeCache"
    },
    {
      "id": "gpui::luminance::LuminanceProbeCache::publish_statistics",
      "name": "publish_statistics",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "luminance",
      "path": "gpui::luminance",
      "source": "crates/gpui/src/luminance.rs",
      "summary": "Publish statistics atomically with their legacy mean, using the same owner, activation, and completion-order checks as scalar readings.",
      "documentation": "Publish statistics atomically with their legacy mean, using the same\nowner, activation, and completion-order checks as scalar readings.",
      "signature": "pub fn publish_statistics (& mut self, frame : u64, id : u32, statistics : BackdropStatistics)",
      "cfg": [],
      "target": "LuminanceProbeCache"
    },
    {
      "id": "gpui::luminance::LuminanceProbeCache::statistics",
      "name": "statistics",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "luminance",
      "path": "gpui::luminance",
      "source": "crates/gpui/src/luminance.rs",
      "summary": "Latest statistics for the exact active lease, with the same freshness rules as [`Self::get`]. A scalar-only publication has no statistics.",
      "documentation": "Latest statistics for the exact active lease, with the same freshness\nrules as [`Self::get`]. A scalar-only publication has no statistics.",
      "signature": "pub fn statistics (& self, id : u32) -> Option<BackdropStatistics>",
      "cfg": [],
      "target": "LuminanceProbeCache"
    },
    {
      "id": "gpui::luminance::LuminanceProbeLease",
      "name": "LuminanceProbeLease",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "luminance",
      "path": "gpui::luminance",
      "source": "crates/gpui/src/luminance.rs",
      "summary": "A lazy, exclusive claim on one backdrop luminance readback slot.",
      "documentation": "A lazy, exclusive claim on one backdrop luminance readback slot.\n\nPass [`Self::id`] to [`crate::GlassMaterial::probe`] and\n[`crate::Window::backdrop_luminance`], retaining the lease while using it.\nIDs are opaque: their low **4 bits** address a physical GPU slot and their\nhigh **28 bits** are a per-slot generation. Reacquisition advances that\ngeneration, so a new owner cannot read an old owner's cached sample.\n\nGenerations never wrap. At exhaustion the slot is permanently retired;\nthe all-ones [`NO_LUMINANCE_PROBE`] ID is never issued. Exhaustion therefore\nmakes probes unavailable instead of aliasing an old ID. Allocation remains\nprocess-wide and conservative across windows, as each renderer has its own\ncache. The ID is valid only while its lease is alive.",
      "signature": "# [doc = \" A lazy, exclusive claim on one backdrop luminance readback slot.\"] # [doc = \"\"] # [doc = \" Pass [`Self::id`] to [`crate::GlassMaterial::probe`] and\"] # [doc = \" [`crate::Window::backdrop_luminance`], retaining the lease while using it.\"] # [doc = \" IDs are opaque: their low **4 bits** address a physical GPU slot and their\"] # [doc = \" high **28 bits** are a per-slot generation. Reacquisition advances that\"] # [doc = \" generation, so a new owner cannot read an old owner's cached sample.\"] # [doc = \"\"] # [doc = \" Generations never wrap. At exhaustion the slot is permanently retired;\"] # [doc = \" the all-ones [`NO_LUMINANCE_PROBE`] ID is never issued. Exhaustion therefore\"] # [doc = \" makes probes unavailable instead of aliasing an old ID. Allocation remains\"] # [doc = \" process-wide and conservative across windows, as each renderer has its own\"] # [doc = \" cache. The ID is valid only while its lease is alive.\"] # [derive (Debug, Default)] pub struct LuminanceProbeLease (Option<u32>);",
      "cfg": []
    },
    {
      "id": "gpui::luminance::LuminanceProbeLease::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "luminance",
      "path": "gpui::luminance",
      "source": "crates/gpui/src/luminance.rs",
      "summary": "Return this lease's opaque ID, claiming a free slot on first use. Return `None` when all physical slots are leased or retired; a later call retries if the lease has not acquired a slot yet.",
      "documentation": "Return this lease's opaque ID, claiming a free slot on first use.\nReturn `None` when all physical slots are leased or retired; a later\ncall retries if the lease has not acquired a slot yet.",
      "signature": "pub fn id (& mut self) -> Option<u32>",
      "cfg": [],
      "target": "LuminanceProbeLease"
    },
    {
      "id": "gpui::luminance::luminance_probe_slot",
      "name": "luminance_probe_slot",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "luminance",
      "path": "gpui::luminance",
      "source": "crates/gpui/src/luminance.rs",
      "summary": "Decode only the physical readback index, never the cache's ownership key. The no-probe sentinel has no slot. GPU texture/buffer sizes remain fixed.",
      "documentation": "Decode only the physical readback index, never the cache's ownership key.\nThe no-probe sentinel has no slot. GPU texture/buffer sizes remain fixed.",
      "signature": "pub fn luminance_probe_slot (id : u32) -> Option<usize>",
      "cfg": []
    },
    {
      "id": "gpui::paint_recording::PaintMark",
      "name": "PaintMark",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "paint_recording",
      "path": "gpui::paint_recording",
      "source": "crates/gpui/src/paint_recording.rs",
      "summary": "A paint-phase position, usable only in the same window and scene epoch. Take this immediately before painting the live subtree.",
      "documentation": "A paint-phase position, usable only in the same window and scene epoch.\nTake this immediately before painting the live subtree.",
      "signature": "# [doc = \" A paint-phase position, usable only in the same window and scene epoch.\"] # [doc = \" Take this immediately before painting the live subtree.\"] pub struct PaintMark { pub (crate) epoch : Arc<()>, pub (crate) start : usize, pub (crate) window : WindowId, pub (crate) scale : f32, pub (crate) platform_views : usize, pub (crate) resource_revision : u64, pub (crate) transform : crate::VisualTransform, pub (crate) opacity : f32, pub (crate) layers : Vec<crate::Bounds<crate::ScaledPixels>>, }",
      "cfg": []
    },
    {
      "id": "gpui::paint_recording::PaintRecording",
      "name": "PaintRecording",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "paint_recording",
      "path": "gpui::paint_recording",
      "source": "crates/gpui/src/paint_recording.rs",
      "summary": "Immutable last-live paint operations, not an element and not a screenshot.",
      "documentation": "Immutable last-live paint operations, not an element and not a screenshot.\n\nSupports quads/gradients, paths, shadows, underlines and leased text/image\nsprites. Replay owns no input, focus, IME, accessibility or semantic targets.\nCapture-time visible clipping is part of the picture: moving it never reveals\npixels clipped or culled during capture. Replay maps that picture from the\ncaptured ambient transform/opacity into the current scope, then intersects\ncurrent ancestor clipping. Subtree-local transforms/opacity remain frozen.\nGlass, surfaces, hosted views and deferred overlays refuse capture; frozen\ncomposited snapshots remain a separate framework gap.\n\nClones share storage. Callers must bound the number/lifetime of recordings\nand drop them on retirement completion, reinsertion and reduced motion. The\nsubmitted frame retains its resources until that frame is cleared.",
      "signature": "# [doc = \" Immutable last-live paint operations, not an element and not a screenshot.\"] # [doc = \"\"] # [doc = \" Supports quads/gradients, paths, shadows, underlines and leased text/image\"] # [doc = \" sprites. Replay owns no input, focus, IME, accessibility or semantic targets.\"] # [doc = \" Capture-time visible clipping is part of the picture: moving it never reveals\"] # [doc = \" pixels clipped or culled during capture. Replay maps that picture from the\"] # [doc = \" captured ambient transform/opacity into the current scope, then intersects\"] # [doc = \" current ancestor clipping. Subtree-local transforms/opacity remain frozen.\"] # [doc = \" Glass, surfaces, hosted views and deferred overlays refuse capture; frozen\"] # [doc = \" composited snapshots remain a separate framework gap.\"] # [doc = \"\"] # [doc = \" Clones share storage. Callers must bound the number/lifetime of recordings\"] # [doc = \" and drop them on retirement completion, reinsertion and reduced motion. The\"] # [doc = \" submitted frame retains its resources until that frame is cleared.\"] # [derive (Clone)] pub struct PaintRecording { pub (crate) scene : Rc<Scene>, pub (crate) window : WindowId, pub (crate) scale : f32, pub (crate) transform : crate::VisualTransform, pub (crate) opacity : f32, }",
      "cfg": []
    },
    {
      "id": "gpui::paint_recording::PaintRecordingError",
      "name": "PaintRecordingError",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "paint_recording",
      "path": "gpui::paint_recording",
      "source": "crates/gpui/src/paint_recording.rs",
      "summary": "Capture/replay refusal. No partial recording or partially replayed subtree is returned. Callers should immediately retire unsupported content.",
      "documentation": "Capture/replay refusal. No partial recording or partially replayed subtree\nis returned. Callers should immediately retire unsupported content.",
      "signature": "# [doc = \" Capture/replay refusal. No partial recording or partially replayed subtree\"] # [doc = \" is returned. Callers should immediately retire unsupported content.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, thiserror::Error)] pub enum PaintRecordingError { # [doc = \" The mark is from another paint frame or does not name a valid range.\"] # [error (\"paint mark is stale\")] StaleMark, # [doc = \" Paint cannot cross windows.\"] # [error (\"paint recording belongs to another window\")] WindowMismatch, # [doc = \" Raster resources cannot cross display scale factors.\"] # [error (\"paint recording display scale changed\")] ScaleMismatch, # [doc = \" Device loss or atlas reset invalidated owned resources.\"] # [error (\"paint recording resources were reset\")] ResourceReset, # [doc = \" The atlas cannot retain these allocations, or they have been evicted.\"] # [error (\"atlas cannot retain the recorded tiles\")] AtlasUnsupported, # [doc = \" Glass requires a frozen composited backdrop, not live-backdrop replay.\"] # [error (\"backdrop glass requires composited snapshot capture\")] BackdropGlass, # [doc = \" Platform pixel buffers may be externally mutable.\"] # [error (\"platform surfaces cannot be frozen as paint operations\")] Surface, # [doc = \" Hosted platform views are not GPUI paint operations.\"] # [error (\"hosted platform views cannot be recorded\")] PlatformView, # [doc = \" Deferred elements paint outside the contiguous subtree paint range.\"] # [error (\"frames containing deferred draws cannot be recorded\")] DeferredDraw, # [doc = \" A range cannot close inherited layers or leave newly opened layers open.\"] # [error (\"paint recording crosses a layer boundary\")] UnbalancedLayers, # [doc = \" Edge fade is a position-dependent policy, not a uniform replay opacity.\"] # [error (\"edge-fade replay requires an explicit composited snapshot\")] EdgeFade, # [doc = \" Zero/nonfinite ambient opacity cannot be normalized for future scopes.\"] # [error (\"capture needs finite positive ambient opacity\")] InvisibleCapture, # [doc = \" Replay translations must be finite.\"] # [error (\"paint recording offset must be finite\")] InvalidOffset, # [doc = \" The normalized transform or opacity exceeded finite renderer values.\"] # [error (\"paint recording replay scope is not finite\")] InvalidReplayScope, }",
      "cfg": []
    },
    {
      "id": "gpui::particles::MAX_PARTICLES_PER_BATCH",
      "name": "MAX_PARTICLES_PER_BATCH",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Hard ceiling for one sampled particle batch.",
      "documentation": "Hard ceiling for one sampled particle batch.\n\nHosts that need more concurrent work should split it across the semantic\neffect budget rather than allocating an unbounded temporary instance list.",
      "signature": "pub const MAX_PARTICLES_PER_BATCH: u32",
      "cfg": []
    },
    {
      "id": "gpui::particles::ParticleEmitter",
      "name": "ParticleEmitter",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "One deterministic emitter sampled into atlas-backed sprite instances.",
      "documentation": "One deterministic emitter sampled into atlas-backed sprite instances.\n\nCoordinates are logical window pixels. Speed is pixels per second and\nacceleration is pixels per second squared. All particles share one source\nrectangle and paint mode while seed-derived values vary spawn position,\ndirection, speed, size, and initial rotation.",
      "signature": "# [doc = \" One deterministic emitter sampled into atlas-backed sprite instances.\"] # [doc = \"\"] # [doc = \" Coordinates are logical window pixels. Speed is pixels per second and\"] # [doc = \" acceleration is pixels per second squared. All particles share one source\"] # [doc = \" rectangle and paint mode while seed-derived values vary spawn position,\"] # [doc = \" direction, speed, size, and initial rotation.\"] # [derive (Clone, Debug, PartialEq)] pub struct ParticleEmitter { seed : u64, source : Bounds<DevicePixels>, origin : Point<Pixels>, spawn_area : Size<Pixels>, count : u32, emission_span : Duration, lifetime : Duration, direction : Radians, spread : Radians, speed_min : f32, speed_max : f32, acceleration : Point<f32>, start_size : Size<Pixels>, end_size : Size<Pixels>, size_variation : f32, initial_rotation : Radians, rotation_spread : Radians, angular_velocity : Radians, fade_in : f32, fade_out : f32, opacity : f32, corner_radii : Corners<Pixels>, color_mode : SpriteColorMode, blend_mode : SpriteBlendMode, tint : Hsla, }",
      "cfg": []
    },
    {
      "id": "gpui::particles::ParticleEmitter::acceleration",
      "name": "acceleration",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Sets constant acceleration in logical pixels per second squared.",
      "documentation": "Sets constant acceleration in logical pixels per second squared.",
      "signature": "pub fn acceleration (mut self, acceleration : Point<f32>) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::blend_mode",
      "name": "blend_mode",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Sets the fixed-function compositing equation for this emitter.",
      "documentation": "Sets the fixed-function compositing equation for this emitter.",
      "signature": "pub fn blend_mode (mut self, blend_mode : SpriteBlendMode) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::color_mode",
      "name": "color_mode",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Sets sample-to-color conversion and the alpha-mask tint.",
      "documentation": "Sets sample-to-color conversion and the alpha-mask tint.",
      "signature": "pub fn color_mode (mut self, color_mode : SpriteColorMode, tint : Hsla) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::corner_radii",
      "name": "corner_radii",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Sets the rounded mask applied to each sampled destination.",
      "documentation": "Sets the rounded mask applied to each sampled destination.",
      "signature": "pub fn corner_radii (mut self, corner_radii : Corners<Pixels>) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::count",
      "name": "count",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Returns the number of deterministic particle slots in this emitter.",
      "documentation": "Returns the number of deterministic particle slots in this emitter.",
      "signature": "pub fn count (& self) -> u32",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::direction",
      "name": "direction",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Sets the central direction and total angular spread in radians.",
      "documentation": "Sets the central direction and total angular spread in radians.",
      "signature": "pub fn direction (mut self, direction : Radians, spread : Radians) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::emission_span",
      "name": "emission_span",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Distributes births over `span`; zero makes every particle a burst.",
      "documentation": "Distributes births over `span`; zero makes every particle a burst.",
      "signature": "pub fn emission_span (mut self, span : Duration) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::fade",
      "name": "fade",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Sets fade-in and fade-out shares of each particle lifetime.",
      "documentation": "Sets fade-in and fade-out shares of each particle lifetime.\n\nEach share is in `0.0..=1.0`; overlapping fades multiply.",
      "signature": "pub fn fade (mut self, fade_in : f32, fade_out : f32) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::lifetime",
      "name": "lifetime",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Sets how long each particle remains alive after its own birth.",
      "documentation": "Sets how long each particle remains alive after its own birth.",
      "signature": "pub fn lifetime (mut self, lifetime : Duration) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Creates a bounded burst from `origin` using one image source rectangle.",
      "documentation": "Creates a bounded burst from `origin` using one image source rectangle.\n\nThe default motion emits in all directions for 800 ms with normal color\nand source-over compositing. Builders change geometry and paint policy;\ninvalid or oversized emitters are reported atomically by\n[`crate::Window::paint_particle_batch`].",
      "signature": "pub fn new (seed : u64, source : Bounds<DevicePixels>, origin : Point<Pixels>, count : u32) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::opacity",
      "name": "opacity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Sets additional emitter opacity, clamped while painting.",
      "documentation": "Sets additional emitter opacity, clamped while painting.",
      "signature": "pub fn opacity (mut self, opacity : f32) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::rotation",
      "name": "rotation",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Sets initial rotation, initial random spread, and radians per second.",
      "documentation": "Sets initial rotation, initial random spread, and radians per second.",
      "signature": "pub fn rotation (mut self, initial : Radians, spread : Radians, angular_velocity : Radians,) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::size",
      "name": "size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Sets the destination size at birth and at the end of the lifetime.",
      "documentation": "Sets the destination size at birth and at the end of the lifetime.",
      "signature": "pub fn size (mut self, start : Size<Pixels>, end : Size<Pixels>) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::size_variation",
      "name": "size_variation",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Varies both dimensions by up to `fraction` around their sampled size.",
      "documentation": "Varies both dimensions by up to `fraction` around their sampled size.\n\nValid fractions are in `0.0..=1.0`.",
      "signature": "pub fn size_variation (mut self, fraction : f32) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::spawn_area",
      "name": "spawn_area",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Spreads spawn points uniformly across a rectangle centered on `origin`.",
      "documentation": "Spreads spawn points uniformly across a rectangle centered on `origin`.",
      "signature": "pub fn spawn_area (mut self, area : Size<Pixels>) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::speed",
      "name": "speed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Sets the inclusive initial speed range in logical pixels per second.",
      "documentation": "Sets the inclusive initial speed range in logical pixels per second.",
      "signature": "pub fn speed (mut self, min : f32, max : f32) -> Self",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::particles::ParticleEmitter::total_duration",
      "name": "total_duration",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "particles",
      "path": "gpui::particles",
      "source": "crates/gpui/src/particles.rs",
      "summary": "Returns the time from the first birth until the final particle expires.",
      "documentation": "Returns the time from the first birth until the final particle expires.",
      "signature": "pub fn total_duration (& self) -> Duration",
      "cfg": [],
      "target": "ParticleEmitter"
    },
    {
      "id": "gpui::path_builder::PathBuilder",
      "name": "PathBuilder",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "A [`Path`] builder.",
      "documentation": "A [`Path`] builder.",
      "signature": "# [doc = \" A [`Path`] builder.\"] pub struct PathBuilder { raw : lyon::path::builder::WithSvg<lyon::path::BuilderImpl>, transform : Option<lyon::math::Transform>, # [doc = \" PathStyle of the PathBuilder\"] pub style : PathStyle, dash_array : Option<Vec<Pixels>>, dash_offset : Pixels, stroke_trim : (f32, f32), }",
      "cfg": []
    },
    {
      "id": "gpui::path_builder::PathBuilder::add_polygon",
      "name": "add_polygon",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Adds a polygon.",
      "documentation": "Adds a polygon.",
      "signature": "pub fn add_polygon (& mut self, points : & [Point<Pixels>], closed : bool)",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::arc_to",
      "name": "arc_to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Adds an elliptical arc.",
      "documentation": "Adds an elliptical arc.",
      "signature": "pub fn arc_to (& mut self, radii : Point<Pixels>, x_rotation : Pixels, large_arc : bool, sweep : bool, to : Point<Pixels>,)",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::build",
      "name": "build",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Builds into a [`Path`].",
      "documentation": "Builds into a [`Path`].",
      "signature": "pub fn build (self) -> Result<Path<Pixels>, Error>",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::build_path",
      "name": "build_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Builds a [`Path`] from a [`lyon::tessellation::VertexBuffers`].",
      "documentation": "Builds a [`Path`] from a [`lyon::tessellation::VertexBuffers`].",
      "signature": "pub fn build_path (buf : VertexBuffers<lyon::math::Point, u16>) -> Path<Pixels>",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Close the current sub-path.",
      "documentation": "Close the current sub-path.",
      "signature": "pub fn close (& mut self)",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::cubic_bezier_to",
      "name": "cubic_bezier_to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Adds a cubic Bézier to the [`Path`] given its two control points and its end point.",
      "documentation": "Adds a cubic Bézier to the [`Path`] given its two control points\nand its end point.",
      "signature": "pub fn cubic_bezier_to (& mut self, to : Point<Pixels>, control_a : Point<Pixels>, control_b : Point<Pixels>,)",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::curve_to",
      "name": "curve_to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Draw a curve from the current point to the given point, using the given control point.",
      "documentation": "Draw a curve from the current point to the given point, using the given control point.",
      "signature": "pub fn curve_to (& mut self, to : Point<Pixels>, ctrl : Point<Pixels>)",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::dash_array",
      "name": "dash_array",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Sets the dash array of the [`PathBuilder`].",
      "documentation": "Sets the dash array of the [`PathBuilder`].\n\n[MDN](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/stroke-dasharray)",
      "signature": "pub fn dash_array (mut self, dash_array : & [Pixels]) -> Self",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::dash_offset",
      "name": "dash_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Advances the dash pattern by this distance at the start of the path.",
      "documentation": "Advances the dash pattern by this distance at the start of the path.\n\nSampling a changing offset produces a travelling trace without callers\nsplitting the path into short line elements. Negative and oversized\nvalues wrap around the complete dash pattern.",
      "signature": "pub fn dash_offset (mut self, offset : Pixels) -> Self",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::fill",
      "name": "fill",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Creates a new [`PathBuilder`] to build a Fill path.",
      "documentation": "Creates a new [`PathBuilder`] to build a Fill path.",
      "signature": "pub fn fill () -> Self",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::line_to",
      "name": "line_to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Draw a straight line from the current point to the given point.",
      "documentation": "Draw a straight line from the current point to the given point.",
      "signature": "pub fn line_to (& mut self, to : Point<Pixels>)",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::move_to",
      "name": "move_to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Move the current point to the given point.",
      "documentation": "Move the current point to the given point.",
      "signature": "pub fn move_to (& mut self, to : Point<Pixels>)",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::relative_arc_to",
      "name": "relative_arc_to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Equivalent to `arc_to` in relative coordinates.",
      "documentation": "Equivalent to `arc_to` in relative coordinates.",
      "signature": "pub fn relative_arc_to (& mut self, radii : Point<Pixels>, x_rotation : Pixels, large_arc : bool, sweep : bool, to : Point<Pixels>,)",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::rotate",
      "name": "rotate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Applies a rotation to the path.",
      "documentation": "Applies a rotation to the path.\n\nThe `angle` is in degrees value in the range 0.0 to 360.0.",
      "signature": "pub fn rotate (& mut self, angle : f32)",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Applies a scale to the path.",
      "documentation": "Applies a scale to the path.",
      "signature": "pub fn scale (& mut self, scale : f32)",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::stroke",
      "name": "stroke",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Creates a new [`PathBuilder`] to build a Stroke path.",
      "documentation": "Creates a new [`PathBuilder`] to build a Stroke path.",
      "signature": "pub fn stroke (width : Pixels) -> Self",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::stroke_trim",
      "name": "stroke_trim",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Keeps one normalized interval of a stroked path.",
      "documentation": "Keeps one normalized interval of a stroked path.\n\n`0.0..1.0` is the full measured path. Sampling the end from zero to one\nreveals a stroke while preserving its actual curves, joins, caps, dash\nphase, clipping, and gradient paint. The interval is applied before\nstroke tessellation and is ignored by fill builders.",
      "signature": "pub fn stroke_trim (mut self, start : f32, end : f32) -> Self",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::transform",
      "name": "transform",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Applies a transform to the path.",
      "documentation": "Applies a transform to the path.",
      "signature": "pub fn transform (& mut self, transform : Transform)",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::translate",
      "name": "translate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Applies a translation to the path.",
      "documentation": "Applies a translation to the path.",
      "signature": "pub fn translate (& mut self, to : Point<Pixels>)",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathBuilder::with_style",
      "name": "with_style",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Sets the style of the [`PathBuilder`].",
      "documentation": "Sets the style of the [`PathBuilder`].",
      "signature": "pub fn with_style (self, style : PathStyle) -> Self",
      "cfg": [],
      "target": "PathBuilder"
    },
    {
      "id": "gpui::path_builder::PathStyle",
      "name": "PathStyle",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "Style of the PathBuilder",
      "documentation": "Style of the PathBuilder",
      "signature": "# [doc = \" Style of the PathBuilder\"] pub enum PathStyle { # [doc = \" Stroke style\"] Stroke (StrokeOptions), # [doc = \" Fill style\"] Fill (FillOptions), }",
      "cfg": []
    },
    {
      "id": "gpui::path_builder::reexport-1",
      "name": "lyon :: math :: Transform",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use lyon::math::Transform;",
      "cfg": []
    },
    {
      "id": "gpui::path_builder::reexport-2",
      "name": "lyon :: tessellation :: { FillOptions , FillRule , StrokeOptions }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "path_builder",
      "path": "gpui::path_builder",
      "source": "crates/gpui/src/path_builder.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use lyon::tessellation::{ FillOptions, FillRule, StrokeOptions };",
      "cfg": []
    },
    {
      "id": "gpui::platform::A11yCallbacks",
      "name": "A11yCallbacks",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Callbacks for the accessibility adapter.",
      "documentation": "Callbacks for the accessibility adapter.",
      "signature": "# [doc = \" Callbacks for the accessibility adapter.\"] pub struct A11yCallbacks { # [doc = \" Called when the adapter is activated (a screen reader connects).\"] pub activation : Box<dyn Fn () -> Option<accesskit::TreeUpdate> + Send + 'static>, # [doc = \" Called when an action is requested by the screen reader.\"] pub action : Box<dyn Fn (accesskit::ActionRequest) + Send + 'static>, # [doc = \" Called when the adapter is deactivated (screen reader disconnects).\"] pub deactivation : Box<dyn Fn () + Send + 'static>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::AppLifecyclePhase",
      "name": "AppLifecyclePhase",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "The application's lifecycle phase, as owned and reported by a mobile OS.",
      "documentation": "The application's lifecycle phase, as owned and reported by a mobile OS.\n\n`Inactive` means visible but not receiving input (a system dialog on\ntop), while `Background` means not visible at all, with process death\npossible at any time thereafter.\n\n| Phase        | iOS                          | Android      |\n|--------------|------------------------------|--------------|\n| `Active`     | `didBecomeActive`            | `onResume`   |\n| `Inactive`   | `willResignActive`           | `onPause`    |\n| `Background` | `didEnterBackground`         | `onStop`     |\n| `Foreground` | `willEnterForeground`        | `onStart`    |",
      "signature": "# [doc = \" The application's lifecycle phase, as owned and reported by a mobile OS.\"] # [doc = \"\"] # [doc = \" `Inactive` means visible but not receiving input (a system dialog on\"] # [doc = \" top), while `Background` means not visible at all, with process death\"] # [doc = \" possible at any time thereafter.\"] # [doc = \"\"] # [doc = \" | Phase | iOS | Android |\"] # [doc = \" |--------------|------------------------------|--------------|\"] # [doc = \" | `Active` | `didBecomeActive` | `onResume` |\"] # [doc = \" | `Inactive` | `willResignActive` | `onPause` |\"] # [doc = \" | `Background` | `didEnterBackground` | `onStop` |\"] # [doc = \" | `Foreground` | `willEnterForeground` | `onStart` |\"] # [derive (Debug, Copy, Clone, Eq, PartialEq, Hash)] pub enum AppLifecyclePhase { # [doc = \" Foreground and receiving input.\"] Active, # [doc = \" Foreground (visible) but not receiving input.\"] Inactive, # [doc = \" Not visible. The GPU surface may be destroyed while backgrounded and\"] # [doc = \" the process may be killed without further notice.\"] Background, # [doc = \" Becoming visible again, before input is restored.\"] Foreground, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::AppOperation",
      "name": "AppOperation",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Application commands whose availability depends on the native host.",
      "documentation": "Application commands whose availability depends on the native host.",
      "signature": "# [doc = \" Application commands whose availability depends on the native host.\"] # [derive (Clone, Copy, Debug, Eq, PartialEq)] pub enum AppOperation { # [doc = \" End the application process through the native host.\"] Quit, # [doc = \" Relaunch the application process.\"] Restart, # [doc = \" Hide this application.\"] Hide, # [doc = \" Hide other applications.\"] HideOtherApps, # [doc = \" Unhide other applications.\"] UnhideOtherApps, # [doc = \" Reveal a filesystem path in a native file manager.\"] RevealPath, # [doc = \" Open a filesystem path with its default application.\"] OpenWithSystem, # [doc = \" Install an application dock menu.\"] SetDockMenu, # [doc = \" Set the native pointer cursor style.\"] SetCursorStyle, # [doc = \" Hide the native pointer cursor until mouse movement.\"] HideCursorUntilMouseMoves, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::AtlasKey",
      "name": "AtlasKey",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (PartialEq, Eq, Hash, Clone)] # [expect (missing_docs)] pub enum AtlasKey { Glyph (RenderGlyphParams), Svg (RenderSvgParams), Image (RenderImageParams), }",
      "cfg": []
    },
    {
      "id": "gpui::platform::AtlasKey::texture_kind",
      "name": "texture_kind",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Returns the texture kind for this atlas key.",
      "documentation": "Returns the texture kind for this atlas key.",
      "signature": "pub fn texture_kind (& self) -> AtlasTextureKind",
      "cfg": [],
      "target": "AtlasKey"
    },
    {
      "id": "gpui::platform::AtlasTextureId",
      "name": "AtlasTextureId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq, Eq, Hash)] # [repr (C)] # [expect (missing_docs)] pub struct AtlasTextureId { # [doc = \" The index of this texture in the atlas.\"] pub index : u32, # [doc = \" The kind of content stored in this texture.\"] pub kind : AtlasTextureKind, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::AtlasTextureKind",
      "name": "AtlasTextureKind",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq, Eq, Hash)] # [repr (C)] # [cfg_attr (all (any (target_os = \"linux\", target_os = \"freebsd\"), not (any (feature = \"x11\", feature = \"wayland\"))), allow (dead_code))] # [expect (missing_docs)] pub enum AtlasTextureKind { Monochrome = 0, Polychrome = 1, Subpixel = 2, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::AtlasTextureList",
      "name": "AtlasTextureList",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] pub struct AtlasTextureList<T> { pub textures : Vec<Option<T>>, pub free_list : Vec<usize>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::AtlasTextureList::drain",
      "name": "drain",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn drain (& mut self) -> std::vec::Drain<'_, Option<T>>",
      "cfg": [],
      "target": "AtlasTextureList<T>"
    },
    {
      "id": "gpui::platform::AtlasTextureList::iter_mut",
      "name": "iter_mut",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn iter_mut (& mut self) -> impl DoubleEndedIterator<Item = & mut T>",
      "cfg": [],
      "target": "AtlasTextureList<T>"
    },
    {
      "id": "gpui::platform::AtlasTile",
      "name": "AtlasTile",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Copy, Clone, Debug, PartialEq, Eq)] # [repr (C)] # [expect (missing_docs)] pub struct AtlasTile { # [doc = \" The texture this tile belongs to.\"] pub texture_id : AtlasTextureId, # [doc = \" The unique ID of this tile within its texture.\"] pub tile_id : TileId, # [doc = \" Padding around the tile content in pixels.\"] pub padding : u32, # [doc = \" The bounds of this tile within the texture.\"] pub bounds : Bounds<DevicePixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::AutofillPurpose",
      "name": "AutofillPurpose",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Semantic autofill hint. Availability depends on the platform and user settings; OneTimeCode neither reads SMS nor guarantees code retrieval.",
      "documentation": "Semantic autofill hint. Availability depends on the platform and user\nsettings; OneTimeCode neither reads SMS nor guarantees code retrieval.",
      "signature": "# [doc = \" Semantic autofill hint. Availability depends on the platform and user\"] # [doc = \" settings; OneTimeCode neither reads SMS nor guarantees code retrieval.\"] # [derive (Clone, Copy, Debug, Eq, PartialEq)] pub enum AutofillPurpose { # [doc = \" Person's full name.\"] Name, # [doc = \" Account username.\"] Username, # [doc = \" Existing account password.\"] CurrentPassword, # [doc = \" Newly chosen password.\"] NewPassword, # [doc = \" Email address.\"] Email, # [doc = \" Telephone number.\"] Phone, # [doc = \" One-time verification code.\"] OneTimeCode, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::ClipboardEntry",
      "name": "ClipboardEntry",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Either a ClipboardString or a ClipboardImage",
      "documentation": "Either a ClipboardString or a ClipboardImage",
      "signature": "# [doc = \" Either a ClipboardString or a ClipboardImage\"] # [derive (Clone, Debug, Eq, PartialEq)] pub enum ClipboardEntry { # [doc = \" A string entry\"] String (ClipboardString), # [doc = \" An image entry\"] Image (Image), # [doc = \" A file entry\"] ExternalPaths (crate::ExternalPaths), }",
      "cfg": []
    },
    {
      "id": "gpui::platform::ClipboardItem",
      "name": "ClipboardItem",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A clipboard item that should be copied to the clipboard",
      "documentation": "A clipboard item that should be copied to the clipboard",
      "signature": "# [doc = \" A clipboard item that should be copied to the clipboard\"] # [derive (Clone, Debug, Eq, PartialEq)] pub struct ClipboardItem { # [doc = \" The entries in this clipboard item.\"] pub entries : Vec<ClipboardEntry>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::ClipboardItem::entries",
      "name": "entries",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Get the item's entries",
      "documentation": "Get the item's entries",
      "signature": "pub fn entries (& self) -> & [ClipboardEntry]",
      "cfg": [],
      "target": "ClipboardItem"
    },
    {
      "id": "gpui::platform::ClipboardItem::into_entries",
      "name": "into_entries",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Get owned versions of the item's entries",
      "documentation": "Get owned versions of the item's entries",
      "signature": "pub fn into_entries (self) -> impl Iterator<Item = ClipboardEntry>",
      "cfg": [],
      "target": "ClipboardItem"
    },
    {
      "id": "gpui::platform::ClipboardItem::metadata",
      "name": "metadata",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "If this item is one ClipboardEntry::String, returns its metadata.",
      "documentation": "If this item is one ClipboardEntry::String, returns its metadata.",
      "signature": "pub fn metadata (& self) -> Option<& String>",
      "cfg": [],
      "target": "ClipboardItem"
    },
    {
      "id": "gpui::platform::ClipboardItem::new_image",
      "name": "new_image",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Create a new ClipboardItem::Image with the given image with no associated metadata",
      "documentation": "Create a new ClipboardItem::Image with the given image with no associated metadata",
      "signature": "pub fn new_image (image : & Image) -> Self",
      "cfg": [],
      "target": "ClipboardItem"
    },
    {
      "id": "gpui::platform::ClipboardItem::new_string",
      "name": "new_string",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Create a new ClipboardItem::String with no associated metadata",
      "documentation": "Create a new ClipboardItem::String with no associated metadata",
      "signature": "pub fn new_string (text : String) -> Self",
      "cfg": [],
      "target": "ClipboardItem"
    },
    {
      "id": "gpui::platform::ClipboardItem::new_string_with_json_metadata",
      "name": "new_string_with_json_metadata",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Create a new ClipboardItem::String with the given text and associated metadata",
      "documentation": "Create a new ClipboardItem::String with the given text and associated metadata",
      "signature": "pub fn new_string_with_json_metadata<T : Serialize> (text : String, metadata : T) -> Self",
      "cfg": [],
      "target": "ClipboardItem"
    },
    {
      "id": "gpui::platform::ClipboardItem::new_string_with_metadata",
      "name": "new_string_with_metadata",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Create a new ClipboardItem::String with the given text and associated metadata",
      "documentation": "Create a new ClipboardItem::String with the given text and associated metadata",
      "signature": "pub fn new_string_with_metadata (text : String, metadata : String) -> Self",
      "cfg": [],
      "target": "ClipboardItem"
    },
    {
      "id": "gpui::platform::ClipboardItem::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Concatenates together all the ClipboardString entries in the item. Returns None if there were no ClipboardString entries.",
      "documentation": "Concatenates together all the ClipboardString entries in the item.\nReturns None if there were no ClipboardString entries.",
      "signature": "pub fn text (& self) -> Option<String>",
      "cfg": [],
      "target": "ClipboardItem"
    },
    {
      "id": "gpui::platform::ClipboardString",
      "name": "ClipboardString",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A clipboard item that should be copied to the clipboard",
      "documentation": "A clipboard item that should be copied to the clipboard",
      "signature": "# [doc = \" A clipboard item that should be copied to the clipboard\"] # [derive (Clone, Debug, Eq, PartialEq)] pub struct ClipboardString { # [doc = \" The text content.\"] pub text : String, # [doc = \" Optional metadata associated with this clipboard string.\"] pub metadata : Option<String>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::ClipboardString::into_text",
      "name": "into_text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Get the owned text of the clipboard string",
      "documentation": "Get the owned text of the clipboard string",
      "signature": "pub fn into_text (self) -> String",
      "cfg": [],
      "target": "ClipboardString"
    },
    {
      "id": "gpui::platform::ClipboardString::metadata_json",
      "name": "metadata_json",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Get the metadata of the clipboard string, formatted as JSON",
      "documentation": "Get the metadata of the clipboard string, formatted as JSON",
      "signature": "pub fn metadata_json<T> (& self) -> Option<T> where T : for<'a> Deserialize<'a>,",
      "cfg": [],
      "target": "ClipboardString"
    },
    {
      "id": "gpui::platform::ClipboardString::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Create a new clipboard string with the given text",
      "documentation": "Create a new clipboard string with the given text",
      "signature": "pub fn new (text : String) -> Self",
      "cfg": [],
      "target": "ClipboardString"
    },
    {
      "id": "gpui::platform::ClipboardString::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Get the text of the clipboard string",
      "documentation": "Get the text of the clipboard string",
      "signature": "pub fn text (& self) -> & String",
      "cfg": [],
      "target": "ClipboardString"
    },
    {
      "id": "gpui::platform::ClipboardString::text_hash",
      "name": "text_hash",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Compute a hash of the given text for clipboard change detection.",
      "documentation": "Compute a hash of the given text for clipboard change detection.",
      "signature": "pub fn text_hash (text : & str) -> u64",
      "cfg": [],
      "target": "ClipboardString"
    },
    {
      "id": "gpui::platform::ClipboardString::with_json_metadata",
      "name": "with_json_metadata",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Return a new clipboard item with the metadata replaced by the given metadata, after serializing it as JSON.",
      "documentation": "Return a new clipboard item with the metadata replaced by the given metadata,\nafter serializing it as JSON.",
      "signature": "pub fn with_json_metadata<T : Serialize> (mut self, metadata : T) -> Self",
      "cfg": [],
      "target": "ClipboardString"
    },
    {
      "id": "gpui::platform::CursorStyle",
      "name": "CursorStyle",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "The style of the cursor (pointer)",
      "documentation": "The style of the cursor (pointer)",
      "signature": "# [doc = \" The style of the cursor (pointer)\"] # [derive (Copy, Clone, Default, Debug, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] pub enum CursorStyle { # [doc = \" The default cursor\"] # [default] Arrow, # [doc = \" A text input cursor\"] # [doc = \" corresponds to the CSS cursor value `text`\"] IBeam, # [doc = \" A crosshair cursor\"] # [doc = \" corresponds to the CSS cursor value `crosshair`\"] Crosshair, # [doc = \" A closed hand cursor\"] # [doc = \" corresponds to the CSS cursor value `grabbing`\"] ClosedHand, # [doc = \" An open hand cursor\"] # [doc = \" corresponds to the CSS cursor value `grab`\"] OpenHand, # [doc = \" A pointing hand cursor\"] # [doc = \" corresponds to the CSS cursor value `pointer`\"] PointingHand, # [doc = \" A resize left cursor\"] # [doc = \" corresponds to the CSS cursor value `w-resize`\"] ResizeLeft, # [doc = \" A resize right cursor\"] # [doc = \" corresponds to the CSS cursor value `e-resize`\"] ResizeRight, # [doc = \" A resize cursor to the left and right\"] # [doc = \" corresponds to the CSS cursor value `ew-resize`\"] ResizeLeftRight, # [doc = \" A resize up cursor\"] # [doc = \" corresponds to the CSS cursor value `n-resize`\"] ResizeUp, # [doc = \" A resize down cursor\"] # [doc = \" corresponds to the CSS cursor value `s-resize`\"] ResizeDown, # [doc = \" A resize cursor directing up and down\"] # [doc = \" corresponds to the CSS cursor value `ns-resize`\"] ResizeUpDown, # [doc = \" A resize cursor directing up-left and down-right\"] # [doc = \" corresponds to the CSS cursor value `nesw-resize`\"] ResizeUpLeftDownRight, # [doc = \" A resize cursor directing up-right and down-left\"] # [doc = \" corresponds to the CSS cursor value `nwse-resize`\"] ResizeUpRightDownLeft, # [doc = \" A cursor indicating that the item/column can be resized horizontally.\"] # [doc = \" corresponds to the CSS cursor value `col-resize`\"] ResizeColumn, # [doc = \" A cursor indicating that the item/row can be resized vertically.\"] # [doc = \" corresponds to the CSS cursor value `row-resize`\"] ResizeRow, # [doc = \" A text input cursor for vertical layout\"] # [doc = \" corresponds to the CSS cursor value `vertical-text`\"] IBeamCursorForVerticalLayout, # [doc = \" A cursor indicating that the operation is not allowed\"] # [doc = \" corresponds to the CSS cursor value `not-allowed`\"] OperationNotAllowed, # [doc = \" A cursor indicating that the operation will result in a link\"] # [doc = \" corresponds to the CSS cursor value `alias`\"] DragLink, # [doc = \" A cursor indicating that the operation will result in a copy\"] # [doc = \" corresponds to the CSS cursor value `copy`\"] DragCopy, # [doc = \" A cursor indicating that the operation will result in a context menu\"] # [doc = \" corresponds to the CSS cursor value `context-menu`\"] ContextualMenu, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::DEFAULT_GRAYSCALE_ENHANCED_CONTRAST",
      "name": "DEFAULT_GRAYSCALE_ENHANCED_CONTRAST",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Contrast boost applied to dark grayscale foregrounds.",
      "documentation": "Contrast boost applied to dark grayscale foregrounds.\n\nMatches the WGPU fallback. DirectWrite supplies its own value on Windows.",
      "signature": "pub const DEFAULT_GRAYSCALE_ENHANCED_CONTRAST: f32",
      "cfg": []
    },
    {
      "id": "gpui::platform::DEFAULT_SUBPIXEL_ENHANCED_CONTRAST",
      "name": "DEFAULT_SUBPIXEL_ENHANCED_CONTRAST",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Contrast boost applied to subpixel coverage.",
      "documentation": "Contrast boost applied to subpixel coverage.\n\nUnused on macOS, which stays grayscale-only. Matches the WGPU fallback.",
      "signature": "pub const DEFAULT_SUBPIXEL_ENHANCED_CONTRAST: f32",
      "cfg": []
    },
    {
      "id": "gpui::platform::DEFAULT_TEXT_GAMMA",
      "name": "DEFAULT_TEXT_GAMMA",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Default glyph-compositing gamma when the platform does not report one.",
      "documentation": "Default glyph-compositing gamma when the platform does not report one.\n\nMatches the WGPU fallback and the historical DirectWrite 1.8 default.",
      "signature": "pub const DEFAULT_TEXT_GAMMA: f32",
      "cfg": []
    },
    {
      "id": "gpui::platform::Decorations",
      "name": "Decorations",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A type to describe how this window is currently configured",
      "documentation": "A type to describe how this window is currently configured",
      "signature": "# [doc = \" A type to describe how this window is currently configured\"] # [derive (Debug, Copy, Clone, Eq, PartialEq, Hash, Default)] pub enum Decorations { # [doc = \" The window is configured to use server side decorations\"] # [default] Server, # [doc = \" The window is configured to use client side decorations\"] Client { # [doc = \" The edge tiling state\"] tiling : Tiling, }, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::DisplayId",
      "name": "DisplayId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "An opaque identifier for a hardware display",
      "documentation": "An opaque identifier for a hardware display",
      "signature": "# [doc = \" An opaque identifier for a hardware display\"] # [derive (PartialEq, Eq, Hash, Copy, Clone)] pub struct DisplayId (pub (crate) u64);",
      "cfg": []
    },
    {
      "id": "gpui::platform::DisplayId::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Create a new `DisplayId` from a raw platform display identifier.",
      "documentation": "Create a new `DisplayId` from a raw platform display identifier.",
      "signature": "pub fn new (id : u64) -> Self",
      "cfg": [],
      "target": "DisplayId"
    },
    {
      "id": "gpui::platform::Image",
      "name": "Image",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "An image, with a format and certain bytes",
      "documentation": "An image, with a format and certain bytes",
      "signature": "# [doc = \" An image, with a format and certain bytes\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct Image { # [doc = \" The image format the bytes represent (e.g. PNG)\"] pub format : ImageFormat, # [doc = \" The raw image bytes\"] pub bytes : Vec<u8>, # [doc = \" The unique ID for the image\"] pub id : u64, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::Image::bytes",
      "name": "bytes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Get the raw bytes of the clipboard image",
      "documentation": "Get the raw bytes of the clipboard image",
      "signature": "pub fn bytes (& self) -> & [u8]",
      "cfg": [],
      "target": "Image"
    },
    {
      "id": "gpui::platform::Image::empty",
      "name": "empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "An empty image containing no data",
      "documentation": "An empty image containing no data",
      "signature": "pub fn empty () -> Self",
      "cfg": [],
      "target": "Image"
    },
    {
      "id": "gpui::platform::Image::format",
      "name": "format",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Get the format of the clipboard image",
      "documentation": "Get the format of the clipboard image",
      "signature": "pub fn format (& self) -> ImageFormat",
      "cfg": [],
      "target": "Image"
    },
    {
      "id": "gpui::platform::Image::from_bytes",
      "name": "from_bytes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Create an image from a format and bytes",
      "documentation": "Create an image from a format and bytes",
      "signature": "pub fn from_bytes (format : ImageFormat, bytes : Vec<u8>) -> Self",
      "cfg": [],
      "target": "Image"
    },
    {
      "id": "gpui::platform::Image::get_render_image",
      "name": "get_render_image",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Use the GPUI `get_asset` API to make this image renderable",
      "documentation": "Use the GPUI `get_asset` API to make this image renderable",
      "signature": "pub fn get_render_image (self : Arc<Self>, window : & mut Window, cx : & mut App,) -> Option<Arc<RenderImage>>",
      "cfg": [],
      "target": "Image"
    },
    {
      "id": "gpui::platform::Image::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Get this image's ID",
      "documentation": "Get this image's ID",
      "signature": "pub fn id (& self) -> u64",
      "cfg": [],
      "target": "Image"
    },
    {
      "id": "gpui::platform::Image::is_asset_cached",
      "name": "is_asset_cached",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Check whether this image is present in GPUI's asset cache (loading or loaded), without fetching it.",
      "documentation": "Check whether this image is present in GPUI's asset cache (loading or\nloaded), without fetching it.",
      "signature": "pub fn is_asset_cached (self : & Arc<Self>, cx : & App) -> bool",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "Image"
    },
    {
      "id": "gpui::platform::Image::remove_asset",
      "name": "remove_asset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Use the GPUI `remove_asset` API to drop this image, if possible.",
      "documentation": "Use the GPUI `remove_asset` API to drop this image, if possible.",
      "signature": "pub fn remove_asset (self : Arc<Self>, cx : & mut App)",
      "cfg": [],
      "target": "Image"
    },
    {
      "id": "gpui::platform::Image::to_image_data",
      "name": "to_image_data",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Convert the clipboard image to an `ImageData` object.",
      "documentation": "Convert the clipboard image to an `ImageData` object.",
      "signature": "pub fn to_image_data (& self, svg_renderer : SvgRenderer) -> Result<Arc<RenderImage>>",
      "cfg": [],
      "target": "Image"
    },
    {
      "id": "gpui::platform::Image::use_render_image",
      "name": "use_render_image",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Use the GPUI `use_asset` API to make this image renderable",
      "documentation": "Use the GPUI `use_asset` API to make this image renderable",
      "signature": "pub fn use_render_image (self : Arc<Self>, window : & mut Window, cx : & mut App,) -> Option<Arc<RenderImage>>",
      "cfg": [],
      "target": "Image"
    },
    {
      "id": "gpui::platform::ImageFormat",
      "name": "ImageFormat",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "One of the editor's supported image formats (e.g. PNG, JPEG) - used when dealing with images in the clipboard",
      "documentation": "One of the editor's supported image formats (e.g. PNG, JPEG) - used when dealing with images in the clipboard",
      "signature": "# [doc = \" One of the editor's supported image formats (e.g. PNG, JPEG) - used when dealing with images in the clipboard\"] # [derive (Clone, Copy, Debug, Eq, PartialEq, EnumIter, Hash)] pub enum ImageFormat { # [doc = \" .png\"] Png, # [doc = \" .jpeg or .jpg\"] Jpeg, # [doc = \" .webp\"] Webp, # [doc = \" .gif\"] Gif, # [doc = \" .svg\"] Svg, # [doc = \" .bmp\"] Bmp, # [doc = \" .tif or .tiff\"] Tiff, # [doc = \" .ico\"] Ico, # [doc = \" Netpbm image formats (.pbm, .ppm, .pgm).\"] Pnm, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::ImageFormat::extension",
      "name": "extension",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Returns the file extension for this image format (without leading dot).",
      "documentation": "Returns the file extension for this image format (without leading dot).",
      "signature": "pub const fn extension (self) -> & 'static str",
      "cfg": [],
      "target": "ImageFormat"
    },
    {
      "id": "gpui::platform::ImageFormat::from_mime_type",
      "name": "from_mime_type",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Returns the ImageFormat for the given mime type, including known aliases.",
      "documentation": "Returns the ImageFormat for the given mime type, including known aliases.",
      "signature": "pub fn from_mime_type (mime_type : & str) -> Option<Self>",
      "cfg": [],
      "target": "ImageFormat"
    },
    {
      "id": "gpui::platform::ImageFormat::mime_type",
      "name": "mime_type",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Returns the mime type for the ImageFormat",
      "documentation": "Returns the mime type for the ImageFormat",
      "signature": "pub const fn mime_type (self) -> & 'static str",
      "cfg": [],
      "target": "ImageFormat"
    },
    {
      "id": "gpui::platform::InputHandler",
      "name": "InputHandler",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Zed's interface for handling text input from the platform's IME system This is currently a 1:1 exposure of the NSTextInputClient API:",
      "documentation": "Zed's interface for handling text input from the platform's IME system\nThis is currently a 1:1 exposure of the NSTextInputClient API:\n\n<https://developer.apple.com/documentation/appkit/nstextinputclient>",
      "signature": "# [doc = \" Zed's interface for handling text input from the platform's IME system\"] # [doc = \" This is currently a 1:1 exposure of the NSTextInputClient API:\"] # [doc = \"\"] # [doc = \" <https://developer.apple.com/documentation/appkit/nstextinputclient>\"] pub trait InputHandler : 'static { # [doc = \" Query both primary selection endpoints atomically, preserving visual\"] # [doc = \" affinity even when offsets coincide. None means unsupported, not empty.\"] fn native_selection (& mut self, _window : & mut Window, _cx : & mut App,) -> Option<crate::NativeTextSelection> { None } # [doc = \" Atomically apply primary anchor/head offsets and affinities to the\"] # [doc = \" caller-owned edit model. Return false on unsupported/invalid requests;\"] # [doc = \" do not change the range and then separately patch cached affinity.\"] fn set_native_selection (& mut self, _selection : crate::NativeTextSelection, _window : & mut Window, _cx : & mut App,) -> bool { false } # [doc = \" Navigate physical caret stops while preserving bidi/wrap affinity.\"] # [doc = \" Unlike offset-only navigation, two positions at one UTF-16 index may\"] # [doc = \" remain distinct. None means unavailable; never invent downstream affinity.\"] fn native_position_in_direction (& mut self, _position : crate::NativeTextPosition, _direction : crate::TextNavigationDirection, _offset : usize, _window : & mut Window, _cx : & mut App,) -> Option<crate::NativeTextPosition> { None } # [doc = \" Painted caret geometry for the exact UTF-16 index and affinity.\"] fn native_position_bounds (& mut self, _position : crate::NativeTextPosition, _window : & mut Window, _cx : & mut App,) -> Option<Bounds<Pixels>> { None } # [doc = \" Nearest painted caret to a logical window point, retaining visual affinity.\"] # [doc = \" When supplied, the UTF-16 range restricts eligible caret stops before\"] # [doc = \" comparing geometry; never clamp the resulting logical offset afterward.\"] # [doc = \" Return unavailable when geometry or an eligible stop is unavailable.\"] fn native_position_for_point (& mut self, _point : Point<Pixels>, _within_range : Option<Range<usize>>, _window : & mut Window, _cx : & mut App,) -> Option<crate::NativeTextPosition> { None } # [doc = \" Physical farthest caret in a UTF-16 range, retaining incident affinity.\"] fn farthest_native_position (& mut self, _range : Range<usize>, _direction : crate::TextNavigationDirection, _window : & mut Window, _cx : & mut App,) -> Option<crate::NativeTextPosition> { None } # [doc = \" Painted selection fragments for a UTF-16 range, in logical window\"] # [doc = \" coordinates. Return empty when geometry is unavailable. Never replace\"] # [doc = \" bidirectional fragments with a guessed union rectangle.\"] fn selection_rects_for_range (& mut self, _range : Range<usize>, _window : & mut Window, _cx : & mut App,) -> Vec<crate::TextSelectionRect> { Vec::new () } # [doc = \" Move by `offset` visual caret stops in a physical direction. Input and\"] # [doc = \" output positions are UTF-16 offsets; do not add/subtract UTF-16 units\"] # [doc = \" as a substitute for visual or grapheme navigation. None means unavailable.\"] # [doc = \" This compatibility API projects to downstream affinity; native clients\"] # [doc = \" needing exact bidi/wrap caret identity use `native_position_in_direction`.\"] fn text_position_in_direction (& mut self, _position : usize, _direction : crate::TextNavigationDirection, _offset : usize, _window : & mut Window, _cx : & mut App,) -> Option<usize> { None } # [doc = \" The visually farthest caret in a UTF-16 range in the given physical\"] # [doc = \" direction. None means unavailable; logical endpoints are not a fallback.\"] fn farthest_text_position (& mut self, _range : Range<usize>, _direction : crate::TextNavigationDirection, _window : & mut Window, _cx : & mut App,) -> Option<usize> { None } # [doc = \" Resolved paragraph direction at a UTF-16 position, or None if unknown.\"] fn base_writing_direction (& mut self, _position : usize, _window : & mut Window, _cx : & mut App,) -> Option<crate::TextWritingDirection> { None } # [doc = \" Request paragraph direction for a UTF-16 range. Return false if the\"] # [doc = \" editor cannot represent or apply this mutation; never report a no-op\"] # [doc = \" as success. Plain text need not support explicit paragraph attributes.\"] fn set_base_writing_direction (& mut self, _direction : crate::TextWritingDirection, _range : Range<usize>, _window : & mut Window, _cx : & mut App,) -> bool { false } # [doc = \" Extended grapheme containing a UTF-16 position; None if unavailable or\"] # [doc = \" outside the document. Never split surrogate pairs or combining clusters.\"] fn grapheme_range_at (& mut self, _position : usize, _window : & mut Window, _cx : & mut App,) -> Option<Range<usize>> { None } # [doc = \" Visual caret geometry at a UTF-16 position in logical window pixels.\"] # [doc = \" None is preferable to guessed geometry when shaping is unavailable.\"] # [doc = \" This compatibility API uses downstream affinity. Prefer\"] # [doc = \" `native_position_bounds` when the platform retains visual affinity.\"] fn native_caret_bounds (& mut self, _position : usize, _window : & mut Window, _cx : & mut App,) -> Option<Bounds<Pixels>> { None } # [doc = \" Requested keyboard/autofill hints; unsupported hints are best-effort.\"] fn text_input_options (& mut self, _window : & mut Window, _cx : & mut App) -> TextInputOptions { TextInputOptions::default () } # [doc = \" Handle an explicit platform IME action. Return true only if handled.\"] # [doc = \" The default refuses all actions; platforms may deliver their ordinary\"] # [doc = \" return-key input path when appropriate, but must not invent submission.\"] fn perform_text_input_action (& mut self, _action : TextInputAction, _window : & mut Window, _cx : & mut App,) -> bool { false } # [doc = \" Get the range of the user's currently selected text, if any\"] # [doc = \" Corresponds to [selectedRange()](https://developer.apple.com/documentation/appkit/nstextinputclient/1438242-selectedrange)\"] # [doc = \"\"] # [doc = \" Return value is in terms of UTF-16 characters, from 0 to the length of the document\"] fn selected_text_range (& mut self, ignore_disabled_input : bool, window : & mut Window, cx : & mut App,) -> Option<UTF16Selection>; # [doc = \" Get the range of the currently marked text, if any\"] # [doc = \" Corresponds to [markedRange()](https://developer.apple.com/documentation/appkit/nstextinputclient/1438250-markedrange)\"] # [doc = \"\"] # [doc = \" Return value is in terms of UTF-16 characters, from 0 to the length of the document\"] fn marked_text_range (& mut self, window : & mut Window, cx : & mut App) -> Option<Range<usize>>; # [doc = \" Get the text for the given document range in UTF-16 characters\"] # [doc = \" Corresponds to [attributedSubstring(forProposedRange: actualRange:)](https://developer.apple.com/documentation/appkit/nstextinputclient/1438238-attributedsubstring)\"] # [doc = \"\"] # [doc = \" range_utf16 is in terms of UTF-16 characters\"] fn text_for_range (& mut self, range_utf16 : Range<usize>, adjusted_range : & mut Option<Range<usize>>, window : & mut Window, cx : & mut App,) -> Option<String>; # [doc = \" Replace the text in the given document range with the given text\"] # [doc = \" Corresponds to [insertText(_:replacementRange:)](https://developer.apple.com/documentation/appkit/nstextinputclient/1438258-inserttext)\"] # [doc = \"\"] # [doc = \" replacement_range is in terms of UTF-16 characters\"] fn replace_text_in_range (& mut self, replacement_range : Option<Range<usize>>, text : & str, window : & mut Window, cx : & mut App,); # [doc = \" Replace the text in the given document range with the given text,\"] # [doc = \" and mark the given text as part of an IME 'composing' state\"] # [doc = \" Corresponds to [setMarkedText(_:selectedRange:replacementRange:)](https://developer.apple.com/documentation/appkit/nstextinputclient/1438246-setmarkedtext)\"] # [doc = \"\"] # [doc = \" range_utf16 is in terms of UTF-16 characters\"] # [doc = \" new_selected_range is in terms of UTF-16 characters\"] fn replace_and_mark_text_in_range (& mut self, range_utf16 : Option<Range<usize>>, new_text : & str, new_selected_range : Option<Range<usize>>, window : & mut Window, cx : & mut App,); # [doc = \" Remove the IME 'composing' state from the document\"] # [doc = \" Corresponds to [unmarkText()](https://developer.apple.com/documentation/appkit/nstextinputclient/1438239-unmarktext)\"] fn unmark_text (& mut self, window : & mut Window, cx : & mut App); # [doc = \" Get the bounds of the given document range in screen coordinates\"] # [doc = \" Corresponds to [firstRect(forCharacterRange:actualRange:)](https://developer.apple.com/documentation/appkit/nstextinputclient/1438240-firstrect)\"] # [doc = \"\"] # [doc = \" This is used for positioning the IME candidate window\"] fn bounds_for_range (& mut self, range_utf16 : Range<usize>, window : & mut Window, cx : & mut App,) -> Option<Bounds<Pixels>>; # [doc = \" Get the character offset for the given point in terms of UTF16 characters\"] # [doc = \"\"] # [doc = \" Corresponds to [characterIndexForPoint:](https://developer.apple.com/documentation/appkit/nstextinputclient/characterindex(for:))\"] fn character_index_for_point (& mut self, point : Point<Pixels>, window : & mut Window, cx : & mut App,) -> Option<usize>; # [doc = \" Set the range of the user's currently selected text.\"] # [doc = \"\"] # [doc = \" This is the reverse data-flow direction from [`Self::selected_text_range`]:\"] # [doc = \" platforms call it when the system text machinery moves the selection on the\"] # [doc = \" application's behalf — e.g. the user drags a system selection handle or\"] # [doc = \" invokes Select All from system UI (iOS `UITextInput setSelectedTextRange:`,\"] # [doc = \" Android `InputConnection.setSelection`).\"] # [doc = \"\"] # [doc = \" range_utf16 is in terms of UTF-16 characters, from 0 to the length of the document\"] fn set_selected_text_range (& mut self, _range_utf16 : Range<usize>, _window : & mut Window, _cx : & mut App,) { } # [doc = \" Get the bounds of the focused text element in window coordinates, if known.\"] # [doc = \"\"] # [doc = \" This is the pull counterpart to the [`PlatformWindow::update_ime_position`]\"] # [doc = \" push: mobile platforms ask for the focused element's geometry when they\"] # [doc = \" need it (e.g. to frame system text-interaction UI overlaid on the focused\"] # [doc = \" element).\"] fn element_bounds (& mut self, _window : & mut Window, _cx : & mut App) -> Option<Bounds<Pixels>> { None } # [doc = \" Get the length of the document in UTF-16 characters, if known.\"] fn text_length_utf16 (& mut self, _window : & mut Window, _cx : & mut App) -> Option<usize> { None } # [doc = \" Allows a given input context to opt into getting raw key repeats instead of\"] # [doc = \" sending these to the platform.\"] # [doc = \" TODO: Ideally we should be able to set ApplePressAndHoldEnabled in NSUserDefaults\"] # [doc = \" (which is how iTerm does it) but it doesn't seem to work for me.\"] # [allow (dead_code)] fn apple_press_and_hold_enabled (& mut self) -> bool { true } # [doc = \" Returns whether this handler is accepting text input to be inserted.\"] fn accepts_text_input (& mut self, _window : & mut Window, _cx : & mut App) -> bool { true } # [doc = \" Returns whether printable keys should be routed to the IME before keybinding\"] # [doc = \" matching when a non-ASCII input source (e.g. Japanese, Korean, Chinese IME)\"] # [doc = \" is active. This prevents multi-stroke keybindings like `jj` from intercepting\"] # [doc = \" keys that the IME should compose.\"] # [doc = \"\"] # [doc = \" Defaults to `false`. The editor overrides this based on whether it expects\"] # [doc = \" character input (e.g. Vim insert mode returns `true`, normal mode returns `false`).\"] # [doc = \" The terminal keeps the default `false` so that raw keys reach the terminal process.\"] fn prefers_ime_for_printable_keys (& mut self, _window : & mut Window, _cx : & mut App) -> bool { false } }",
      "cfg": []
    },
    {
      "id": "gpui::platform::KeyboardPurpose",
      "name": "KeyboardPurpose",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Requested keyboard layout. This is a hint, never input validation.",
      "documentation": "Requested keyboard layout. This is a hint, never input validation.",
      "signature": "# [doc = \" Requested keyboard layout. This is a hint, never input validation.\"] # [derive (Clone, Copy, Debug, Default, Eq, PartialEq)] pub enum KeyboardPurpose { # [doc = \" General text entry.\"] # [default] Text, # [doc = \" Integer numeric entry.\"] Number, # [doc = \" Decimal numeric entry.\"] Decimal, # [doc = \" Telephone entry.\"] Phone, # [doc = \" Email address entry.\"] Email, # [doc = \" URL entry.\"] Url, # [doc = \" Search query entry.\"] Search, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::MAX_BUTTONS_PER_SIDE",
      "name": "MAX_BUTTONS_PER_SIDE",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Maximum number of [`WindowButton`]s per side in the titlebar.",
      "documentation": "Maximum number of [`WindowButton`]s per side in the titlebar.",
      "signature": "pub const MAX_BUTTONS_PER_SIDE: usize",
      "cfg": []
    },
    {
      "id": "gpui::platform::NoopTextSystem",
      "name": "NoopTextSystem",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [expect (missing_docs)] pub struct NoopTextSystem;",
      "cfg": []
    },
    {
      "id": "gpui::platform::NoopTextSystem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "NoopTextSystem"
    },
    {
      "id": "gpui::platform::PathPromptOptions",
      "name": "PathPromptOptions",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "The options that can be configured for a file dialog prompt",
      "documentation": "The options that can be configured for a file dialog prompt",
      "signature": "# [doc = \" The options that can be configured for a file dialog prompt\"] # [derive (Clone, Debug)] pub struct PathPromptOptions { # [doc = \" Should the prompt allow files to be selected?\"] pub files : bool, # [doc = \" Should the prompt allow directories to be selected?\"] pub directories : bool, # [doc = \" Should the prompt allow multiple files to be selected?\"] pub multiple : bool, # [doc = \" The prompt to show to a user when selecting a path\"] pub prompt : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::Platform",
      "name": "Platform",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [expect (missing_docs)] pub trait Platform : 'static { # [doc = \" Checks a native command immediately before issuing it on the owner UI thread.\"] # [doc = \" Backends must report unsupported, unavailable and refused distinctly. Mobile\"] # [doc = \" backends must override this conservative default for commands they implement.\"] # [doc = \" `Ok` means the request may be issued, not that an asynchronous OS transition\"] # [doc = \" has completed. Legacy void methods cannot report errors; cross-platform\"] # [doc = \" callers should use the corresponding `App::try_*` methods.\"] fn check_app_operation (& self, _operation : AppOperation) -> Result<(), PlatformOperationError> { if cfg ! (any (target_os = \"android\", target_os = \"ios\")) { Err (PlatformOperationError::Unsupported (\"application command\")) } else { Ok (()) } } fn background_executor (& self) -> BackgroundExecutor; fn foreground_executor (& self) -> ForegroundExecutor; fn text_system (& self) -> Arc<dyn PlatformTextSystem>; fn run (& self, on_finish_launching : Box<dyn 'static + FnOnce ()>); fn quit (& self); fn restart (& self, binary_path : Option<PathBuf>); fn activate (& self, ignoring_other_apps : bool); fn hide (& self); fn hide_other_apps (& self); fn unhide_other_apps (& self); fn displays (& self) -> Vec<Rc<dyn PlatformDisplay>>; fn primary_display (& self) -> Option<Rc<dyn PlatformDisplay>>; fn active_window (& self) -> Option<AnyWindowHandle>; fn window_stack (& self) -> Option<Vec<AnyWindowHandle>> { None } fn is_screen_capture_supported (& self) -> bool { false } fn screen_capture_sources (& self,) -> oneshot::Receiver<anyhow::Result<Vec<Rc<dyn ScreenCaptureSource>>>> { let (sources_tx, sources_rx) = oneshot::channel (); sources_tx . send (Err (anyhow::anyhow ! (\"screen capture is unsupported by this platform implementation\"))) . ok (); sources_rx } fn open_window (& self, handle : AnyWindowHandle, options : WindowParams,) -> anyhow::Result<Box<dyn PlatformWindow>>; # [doc = \" Returns the appearance of the application's windows.\"] fn window_appearance (& self) -> WindowAppearance; # [doc = \" Overrides the appearance (light/dark) applied to the app's windows, independent\"] # [doc = \" of the OS-wide setting. Pass `None` to clear the override and follow the system\"] # [doc = \" again. The override is reflected by [`Platform::window_appearance`].\"] # [doc = \"\"] # [doc = \" Currently only implemented on macOS, where it sets `NSApplication.appearance` so\"] # [doc = \" the native window chrome (the window border and titlebar) of every window matches\"] # [doc = \" a dark app theme even when the system is in light mode (or vice versa). A no-op on\"] # [doc = \" other platforms.\"] fn set_window_appearance (& self, _appearance : Option<WindowAppearance>) { } # [doc = \" Returns the window button layout configuration when supported.\"] fn button_layout (& self) -> Option<WindowButtonLayout> { None } fn open_url (& self, url : & str); fn on_open_urls (& self, callback : Box<dyn FnMut (Vec<String>)>); fn register_url_scheme (& self, url : & str) -> Task<Result<()>>; fn prompt_for_paths (& self, options : PathPromptOptions,) -> oneshot::Receiver<Result<Option<Vec<PathBuf>>>>; fn prompt_for_new_path (& self, directory : & Path, suggested_name : Option<& str>,) -> oneshot::Receiver<Result<Option<PathBuf>>>; fn can_select_mixed_files_and_dirs (& self) -> bool; fn reveal_path (& self, path : & Path); fn open_with_system (& self, path : & Path); fn on_quit (& self, callback : Box<dyn FnMut ()>); fn on_reopen (& self, callback : Box<dyn FnMut ()>); fn on_system_wake (& self, callback : Box<dyn FnMut ()>); # [doc = \" Registers a callback invoked whenever the application's lifecycle\"] # [doc = \" phase changes. See [`AppLifecyclePhase`] for the phase vocabulary and\"] # [doc = \" its mapping onto iOS and Android.\"] # [doc = \"\"] # [doc = \" Desktop platforms never invoke this.\"] fn on_app_lifecycle (& self, _callback : Box<dyn FnMut (AppLifecyclePhase)>) { } # [doc = \" Registers a callback invoked when the OS signals memory pressure\"] # [doc = \" (iOS `didReceiveMemoryWarning`, Android `onTrimMemory`).\"] # [doc = \"\"] # [doc = \" Desktop platforms never invoke this.\"] fn on_memory_warning (& self, _callback : Box<dyn FnMut ()>) { } # [doc = \" The platform's gesture recognition services, if it provides any\"] # [doc = \" beyond gpui's portable recognizers. See\"] # [doc = \" [`PlatformGestures`](crate::PlatformGestures).\"] fn gestures (& self) -> Option<Rc<dyn PlatformGestures>> { None } fn set_menus (& self, menus : Vec<Menu>, keymap : & Keymap); fn get_menus (& self) -> Option<Vec<OwnedMenu>> { None } fn set_dock_menu (& self, menu : Vec<MenuItem>, keymap : & Keymap); fn perform_dock_menu_action (& self, _action : usize) { } fn add_recent_document (& self, _path : & Path) { } fn update_jump_list (& self, _menus : Vec<MenuItem>, _entries : Vec<SmallVec<[PathBuf; 2]>>,) -> Task<Vec<SmallVec<[PathBuf; 2]>>> { Task::ready (Vec::new ()) } fn on_app_menu_action (& self, callback : Box<dyn FnMut (& dyn Action)>); fn on_will_open_app_menu (& self, callback : Box<dyn FnMut ()>); fn on_validate_app_menu_command (& self, callback : Box<dyn FnMut (& dyn Action) -> bool>); fn thermal_state (& self) -> ThermalState; fn on_thermal_state_change (& self, callback : Box<dyn FnMut ()>); # [doc = \" Sets the application's process-wide identity and user-visible name.\"] # [doc = \"\"] # [doc = \" The identifier is used for platform identity mechanisms such as the\"] # [doc = \" Windows AppUserModelID. The name is used wherever the operating system\"] # [doc = \" presents the application to the user. Call this once, early in startup,\"] # [doc = \" before opening windows or posting notifications.\"] fn set_app_identity (& self, identifier : & str, name : & str) { _ = (identifier, name); } # [doc = \" Posts a notification to the operating system's notification center.\"] # [doc = \"\"] # [doc = \" Posting a notification whose [`SystemNotification::tag`] matches an\"] # [doc = \" earlier one replaces that notification where the platform supports it.\"] # [doc = \" No-op on platforms without notification support, or when delivery is\"] # [doc = \" unavailable (e.g. authorization was denied).\"] fn show_system_notification (& self, notification : SystemNotification) { _ = notification; } # [doc = \" Removes the delivered or pending notification with this tag.\"] # [doc = \"\"] # [doc = \" Best-effort: some platforms cannot retract a notification once shown,\"] # [doc = \" in which case it ages out of the notification center on its own.\"] fn dismiss_system_notification (& self, tag : & str) { _ = tag; } # [doc = \" Registers the callback invoked when the user activates a system\"] # [doc = \" notification, either by clicking its body or one of its action\"] # [doc = \" buttons.\"] # [doc = \"\"] # [doc = \" Implementations must invoke the callback on the main thread.\"] fn on_system_notification_response (& self, callback : Box<dyn FnMut (SystemNotificationResponse)>,) { _ = callback; } fn compositor_name (& self) -> & 'static str { \"\" } fn app_path (& self) -> Result<PathBuf>; fn path_for_auxiliary_executable (& self, name : & str) -> Result<PathBuf>; # [doc = \" Sets the native pointer cursor style. Automatic framework updates check\"] # [doc = \" `AppOperation::SetCursorStyle` immediately before calling this method.\"] # [doc = \" Pointer styling and hiding are independent capabilities; a host may support\"] # [doc = \" one without the other. Refusal skips only the native update, not the frame's\"] # [doc = \" cursor requests or hit testing. Direct calls retain the backend's behavior.\"] fn set_cursor_style (& self, style : CursorStyle); # [doc = \" Hides the mouse cursor until the user moves the mouse over one of\"] # [doc = \" this application's windows. Automatic typing/action updates independently\"] # [doc = \" check `AppOperation::HideCursorUntilMouseMoves` immediately before calling.\"] # [doc = \" Direct calls retain the backend's behavior, including explicit refusal.\"] fn hide_cursor_until_mouse_moves (& self); # [doc = \" Returns whether the mouse cursor is currently visible.\"] fn is_cursor_visible (& self) -> bool; fn should_auto_hide_scrollbars (& self) -> bool; fn read_from_clipboard (& self) -> Option<ClipboardItem>; fn write_to_clipboard (& self, item : ClipboardItem); # [cfg (any (target_os = \"linux\", target_os = \"freebsd\"))] fn read_from_primary (& self) -> Option<ClipboardItem>; # [cfg (any (target_os = \"linux\", target_os = \"freebsd\"))] fn write_to_primary (& self, item : ClipboardItem); # [cfg (target_os = \"macos\")] fn read_from_find_pasteboard (& self) -> Option<ClipboardItem>; # [cfg (target_os = \"macos\")] fn write_to_find_pasteboard (& self, item : ClipboardItem); fn write_credentials (& self, url : & str, username : & str, password : & [u8]) -> Task<Result<()>>; fn read_credentials (& self, url : & str) -> Task<Result<Option<(String, Vec<u8>)>>>; fn delete_credentials (& self, url : & str) -> Task<Result<()>>; fn keyboard_layout (& self) -> Box<dyn PlatformKeyboardLayout>; fn keyboard_mapper (& self) -> Rc<dyn PlatformKeyboardMapper>; fn on_keyboard_layout_change (& self, callback : Box<dyn FnMut ()>); }",
      "cfg": []
    },
    {
      "id": "gpui::platform::PlatformAtlas",
      "name": "PlatformAtlas",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [expect (missing_docs)] pub trait PlatformAtlas { fn get_or_insert_with<'a> (& self, key : & AtlasKey, build : & mut dyn FnMut () -> Result<Option<(Size<DevicePixels>, Cow<'a, [u8]>)>>,) -> Result<Option<AtlasTile>>; fn remove (& self, key : & AtlasKey); # [doc = \" Changes before unleased coordinates can be recycled by eviction/reset.\"] # [doc = \" Atlases supporting retention must implement this capture-interval fence.\"] fn resource_revision (& self) -> u64 { 0 } # [doc = \" Retains every requested allocation until the last lease is dropped.\"] # [doc = \" Unsupported atlases refuse capture. Implementations must invalidate all\"] # [doc = \" leases before clearing/resetting resources or reusing tile identities.\"] fn retain_tiles (self : Arc<Self>, _tiles : & [AtlasTile]) -> Option<crate::AtlasLease> { None } # [cfg (any (test, feature = \"test-support\"))] fn contains (& self, _key : & AtlasKey) -> bool { false } }",
      "cfg": []
    },
    {
      "id": "gpui::platform::PlatformDispatcher",
      "name": "PlatformDispatcher",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "This type is public so that our test macro can generate and use it, but it should not be considered part of our public API.",
      "documentation": "This type is public so that our test macro can generate and use it, but it should not\nbe considered part of our public API.",
      "signature": "# [doc = \" This type is public so that our test macro can generate and use it, but it should not\"] # [doc = \" be considered part of our public API.\"] # [doc (hidden)] pub trait PlatformDispatcher : Send + Sync { fn is_main_thread (& self) -> bool; fn dispatch (& self, runnable : RunnableVariant, priority : Priority); fn dispatch_on_main_thread (& self, runnable : RunnableVariant, priority : Priority); fn dispatch_after (& self, duration : Duration, runnable : RunnableVariant); fn dispatch_on_main_thread_when_idle (& self, runnable : RunnableVariant, timeout : Option<Duration>,) { let _ = timeout; self . dispatch_on_main_thread (runnable, Priority::Low); } fn idle_time_remaining (& self) -> Option<Duration> { None } fn spawn_realtime (& self, f : Box<dyn FnOnce () + Send>); fn now (& self) -> Instant { Instant::now () } fn increase_timer_resolution (& self) -> TimerResolutionGuard { gpui_util::defer (Box::new (| | { })) } # [cfg (any (test, feature = \"test-support\"))] fn as_test (& self) -> Option<& TestDispatcher> { None } # [cfg (any (test, feature = \"test-support\"))] fn as_threaded (& self) -> Option<& ThreadedDispatcher> { None } }",
      "cfg": []
    },
    {
      "id": "gpui::platform::PlatformDisplay",
      "name": "PlatformDisplay",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A handle to a platform's display, e.g. a monitor or laptop screen.",
      "documentation": "A handle to a platform's display, e.g. a monitor or laptop screen.",
      "signature": "# [doc = \" A handle to a platform's display, e.g. a monitor or laptop screen.\"] pub trait PlatformDisplay : Debug { # [doc = \" Get the ID for this display\"] fn id (& self) -> DisplayId; # [doc = \" Returns a stable identifier for this display that can be persisted and used\"] # [doc = \" across system restarts.\"] fn uuid (& self) -> Result<Uuid>; # [doc = \" Get the bounds for this display\"] fn bounds (& self) -> Bounds<Pixels>; # [doc = \" Get the visible bounds for this display, excluding taskbar/dock areas.\"] # [doc = \" This is the usable area where windows can be placed without being obscured.\"] # [doc = \" Defaults to the full display bounds if not overridden.\"] fn visible_bounds (& self) -> Bounds<Pixels> { self . bounds () } # [doc = \" Get the default bounds for this display to place a window\"] fn default_bounds (& self) -> Bounds<Pixels> { let bounds = self . bounds (); let center = bounds . center (); let clipped_window_size = DEFAULT_WINDOW_SIZE . min (& bounds . size); let offset = clipped_window_size / 2.0; let origin = point (center . x - offset . width, center . y - offset . height); Bounds::new (origin, clipped_window_size) } }",
      "cfg": []
    },
    {
      "id": "gpui::platform::PlatformHeadlessRenderer",
      "name": "PlatformHeadlessRenderer",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A renderer for headless windows that can produce real rendered output.",
      "documentation": "A renderer for headless windows that can produce real rendered output.",
      "signature": "# [doc = \" A renderer for headless windows that can produce real rendered output.\"] # [cfg (any (test, feature = \"test-support\"))] pub trait PlatformHeadlessRenderer { # [doc = \" Render a scene and return the result as an RGBA image.\"] fn render_scene_to_image (& mut self, scene : & Scene, size : Size<DevicePixels>,) -> Result<RgbaImage>; # [doc = \" Render a scene to an offscreen target without reading the result back.\"] # [doc = \"\"] # [doc = \" This is the headless analogue of presenting a frame: it performs the\"] # [doc = \" same CPU-side scene encoding and GPU submission as drawing to a real\"] # [doc = \" window, but doesn't block on GPU completion or copy pixels back.\"] fn render_scene (& mut self, scene : & Scene, size : Size<DevicePixels>) -> Result<()>; # [doc = \" Opt-in, blocking measurement of one offscreen submission. Ordinary rendering\"] # [doc = \" stays nonblocking. Completion is not presentation, and pixel capture is not\"] # [doc = \" GPU execution. Unsupported implementations return an error, not zero time.\"] fn measure_scene (& mut self, _scene : & Scene, _size : Size<DevicePixels>,) -> Result<crate::RendererFrameTiming> { anyhow::bail ! (\"renderer timing is unsupported by this backend\") } # [doc = \" Adapter/backend identity for same-host evidence, not a portability promise.\"] fn timing_identity (& self) -> String { \"unsupported\" . into () } # [doc = \" Returns the sprite atlas used by this renderer.\"] fn sprite_atlas (& self) -> Arc<dyn PlatformAtlas>; # [doc = \" The luminance this renderer read back for a probe slot, with the same\"] # [doc = \" meaning as [`PlatformWindow::backdrop_luminance`].\"] fn backdrop_luminance (& mut self, _slot : u32) -> Option<f32> { None } # [doc = \" Same measurement and availability as [`PlatformWindow::backdrop_statistics`].\"] fn backdrop_statistics (& mut self, _id : u32) -> Option<crate::BackdropStatistics> { None } }",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ]
    },
    {
      "id": "gpui::platform::PlatformInputHandler",
      "name": "PlatformInputHandler",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [expect (missing_docs)] pub struct PlatformInputHandler { cx : AsyncWindowContext, handler : Box<dyn InputHandler>, effect_owner : Option<crate::EffectOwner>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::PlatformInputHandler::accepts_text_input",
      "name": "accepts_text_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn accepts_text_input (& mut self, window : & mut Window, cx : & mut App) -> bool",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::apple_press_and_hold_enabled",
      "name": "apple_press_and_hold_enabled",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn apple_press_and_hold_enabled (& mut self) -> bool",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::base_writing_direction",
      "name": "base_writing_direction",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::base_writing_direction`].",
      "documentation": "See [`InputHandler::base_writing_direction`].",
      "signature": "pub fn base_writing_direction (& mut self, position : usize,) -> Option<crate::TextWritingDirection>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::bounds_for_range",
      "name": "bounds_for_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bounds_for_range (& mut self, range_utf16 : Range<usize>) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::character_index_for_point",
      "name": "character_index_for_point",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn character_index_for_point (& mut self, point : Point<Pixels>) -> Option<usize>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::compute_ime_candidate_bounds",
      "name": "compute_ime_candidate_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn compute_ime_candidate_bounds (marked_range : Option<Range<usize>>, selection : & UTF16Selection, mut bounds_for_range : impl FnMut (Range<usize>) -> Option<Bounds<Pixels>>,) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::dispatch_input",
      "name": "dispatch_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn dispatch_input (& mut self, input : & str, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::element_bounds",
      "name": "element_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::element_bounds`].",
      "documentation": "See [`InputHandler::element_bounds`].",
      "signature": "pub fn element_bounds (& mut self) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::farthest_native_position",
      "name": "farthest_native_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::farthest_native_position`].",
      "documentation": "See [`InputHandler::farthest_native_position`].",
      "signature": "pub fn farthest_native_position (& mut self, range : Range<usize>, direction : crate::TextNavigationDirection,) -> Option<crate::NativeTextPosition>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::farthest_text_position",
      "name": "farthest_text_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::farthest_text_position`].",
      "documentation": "See [`InputHandler::farthest_text_position`].",
      "signature": "pub fn farthest_text_position (& mut self, range : Range<usize>, direction : crate::TextNavigationDirection,) -> Option<usize>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::grapheme_range_at",
      "name": "grapheme_range_at",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::grapheme_range_at`].",
      "documentation": "See [`InputHandler::grapheme_range_at`].",
      "signature": "pub fn grapheme_range_at (& mut self, position : usize) -> Option<Range<usize>>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::ime_candidate_bounds",
      "name": "ime_candidate_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ime_candidate_bounds (& mut self) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::marked_text_range",
      "name": "marked_text_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn marked_text_range (& mut self) -> Option<Range<usize>>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::native_caret_bounds",
      "name": "native_caret_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::native_caret_bounds`].",
      "documentation": "See [`InputHandler::native_caret_bounds`].",
      "signature": "pub fn native_caret_bounds (& mut self, position : usize) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::native_position_bounds",
      "name": "native_position_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::native_position_bounds`].",
      "documentation": "See [`InputHandler::native_position_bounds`].",
      "signature": "pub fn native_position_bounds (& mut self, position : crate::NativeTextPosition,) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::native_position_for_point",
      "name": "native_position_for_point",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::native_position_for_point`].",
      "documentation": "See [`InputHandler::native_position_for_point`].",
      "signature": "pub fn native_position_for_point (& mut self, point : Point<Pixels>, within_range : Option<Range<usize>>,) -> Option<crate::NativeTextPosition>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::native_position_in_direction",
      "name": "native_position_in_direction",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::native_position_in_direction`].",
      "documentation": "See [`InputHandler::native_position_in_direction`].",
      "signature": "pub fn native_position_in_direction (& mut self, position : crate::NativeTextPosition, direction : crate::TextNavigationDirection, offset : usize,) -> Option<crate::NativeTextPosition>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::native_selection",
      "name": "native_selection",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::native_selection`].",
      "documentation": "See [`InputHandler::native_selection`].",
      "signature": "pub fn native_selection (& mut self) -> Option<crate::NativeTextSelection>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (cx : AsyncWindowContext, handler : Box<dyn InputHandler>) -> Self",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::perform_text_input_action",
      "name": "perform_text_input_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Dispatch an IME action. Returns false if the editor refuses it or the window is gone. A refused action must not be reported as submitted.",
      "documentation": "Dispatch an IME action. Returns false if the editor refuses it or the\nwindow is gone. A refused action must not be reported as submitted.",
      "signature": "pub fn perform_text_input_action (& mut self, action : TextInputAction) -> bool",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::query_accepts_text_input",
      "name": "query_accepts_text_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn query_accepts_text_input (& mut self) -> bool",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::query_prefers_ime_for_printable_keys",
      "name": "query_prefers_ime_for_printable_keys",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::prefers_ime_for_printable_keys`].",
      "documentation": "See [`InputHandler::prefers_ime_for_printable_keys`].\n\nThis is not a pure delegation to the handler: while a multi-stroke binding is pending this\nreturns `false` regardless of the handler's preference, because the next printable key may\ncomplete a binding whose prefix already bypassed the IME.",
      "signature": "pub fn query_prefers_ime_for_printable_keys (& mut self) -> bool",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::replace_and_mark_text_in_range",
      "name": "replace_and_mark_text_in_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn replace_and_mark_text_in_range (& mut self, range_utf16 : Option<Range<usize>>, new_text : & str, new_selected_range : Option<Range<usize>>,)",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::replace_text_in_range",
      "name": "replace_text_in_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn replace_text_in_range (& mut self, replacement_range : Option<Range<usize>>, text : & str)",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::selected_bounds",
      "name": "selected_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_bounds (& mut self, window : & mut Window, cx : & mut App) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::selected_text_range",
      "name": "selected_text_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_text_range (& mut self, ignore_disabled_input : bool) -> Option<UTF16Selection>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::selection_rects_for_range",
      "name": "selection_rects_for_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::selection_rects_for_range`].",
      "documentation": "See [`InputHandler::selection_rects_for_range`].",
      "signature": "pub fn selection_rects_for_range (& mut self, range : Range<usize>,) -> Vec<crate::TextSelectionRect>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::set_base_writing_direction",
      "name": "set_base_writing_direction",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::set_base_writing_direction`].",
      "documentation": "See [`InputHandler::set_base_writing_direction`].",
      "signature": "pub fn set_base_writing_direction (& mut self, direction : crate::TextWritingDirection, range : Range<usize>,) -> bool",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::set_native_selection",
      "name": "set_native_selection",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::set_native_selection`].",
      "documentation": "See [`InputHandler::set_native_selection`].",
      "signature": "pub fn set_native_selection (& mut self, selection : crate::NativeTextSelection) -> bool",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::set_selected_text_range",
      "name": "set_selected_text_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::set_selected_text_range`].",
      "documentation": "See [`InputHandler::set_selected_text_range`].",
      "signature": "pub fn set_selected_text_range (& mut self, range_utf16 : Range<usize>)",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::text_for_range",
      "name": "text_for_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text_for_range (& mut self, range_utf16 : Range<usize>, adjusted : & mut Option<Range<usize>>,) -> Option<String>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::text_input_options",
      "name": "text_input_options",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Query the focused editor's keyboard hints. `None` means the window is no longer accessible, not that default hints were requested.",
      "documentation": "Query the focused editor's keyboard hints. `None` means the window is\nno longer accessible, not that default hints were requested.",
      "signature": "pub fn text_input_options (& mut self) -> Option<TextInputOptions>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::text_length_utf16",
      "name": "text_length_utf16",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::text_length_utf16`].",
      "documentation": "See [`InputHandler::text_length_utf16`].",
      "signature": "pub fn text_length_utf16 (& mut self) -> Option<usize>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::text_position_in_direction",
      "name": "text_position_in_direction",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "See [`InputHandler::text_position_in_direction`].",
      "documentation": "See [`InputHandler::text_position_in_direction`].",
      "signature": "pub fn text_position_in_direction (& mut self, position : usize, direction : crate::TextNavigationDirection, offset : usize,) -> Option<usize>",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformInputHandler::unmark_text",
      "name": "unmark_text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn unmark_text (& mut self)",
      "cfg": [],
      "target": "PlatformInputHandler"
    },
    {
      "id": "gpui::platform::PlatformNativeSurface",
      "name": "PlatformNativeSurface",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A platform-native surface inserted between GPUI's base and overlay scene planes.",
      "documentation": "A platform-native surface inserted between GPUI's base and overlay scene\nplanes.",
      "signature": "# [doc = \" A platform-native surface inserted between GPUI's base and overlay scene\"] # [doc = \" planes.\"] pub trait PlatformNativeSurface { # [doc = \" Updates the native surface geometry in device pixels.\"] fn set_bounds (& self, bounds : Bounds<DevicePixels>) -> Result<()>; # [doc = \" Updates whether the native surface participates in composition.\"] fn set_visible (& self, visible : bool) -> Result<()>; # [doc = \" Returns the platform attachment object, such as an\"] # [doc = \" `IDCompositionVisual` on Windows.\"] fn platform_handle (& self) -> Box<dyn Any>; }",
      "cfg": []
    },
    {
      "id": "gpui::platform::PlatformOperationError",
      "name": "PlatformOperationError",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Why a checked native command was not accepted. A refusal is never success.",
      "documentation": "Why a checked native command was not accepted. A refusal is never success.",
      "signature": "# [doc = \" Why a checked native command was not accepted. A refusal is never success.\"] # [derive (Clone, Debug, Eq, PartialEq, thiserror::Error)] pub enum PlatformOperationError { # [doc = \" The backend does not implement this operation.\"] # [error (\"unsupported platform operation: {0}\")] Unsupported (& 'static str), # [doc = \" The backend implements it, but the required native state is absent.\"] # [error (\"platform operation temporarily unavailable: {0}\")] Unavailable (& 'static str), # [doc = \" The host denied the request, for example because of policy or permission.\"] # [error (\"platform operation refused: {0}\")] Refused (& 'static str), }",
      "cfg": []
    },
    {
      "id": "gpui::platform::PlatformTextSystem",
      "name": "PlatformTextSystem",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [expect (missing_docs)] pub trait PlatformTextSystem : Send + Sync { fn add_fonts (& self, fonts : Vec<Cow<'static, [u8]>>) -> Result<()>; # [doc = \" Get all available font names.\"] fn all_font_names (& self) -> Vec<String>; # [doc = \" Get the font ID for a font descriptor.\"] fn font_id (& self, descriptor : & Font) -> Result<FontId>; # [doc = \" Get metrics for a font.\"] fn font_metrics (& self, font_id : FontId) -> FontMetrics; # [doc = \" Get typographic bounds for a glyph.\"] fn typographic_bounds (& self, font_id : FontId, glyph_id : GlyphId) -> Result<Bounds<f32>>; # [doc = \" Get the advance width for a glyph.\"] fn advance (& self, font_id : FontId, glyph_id : GlyphId) -> Result<Size<f32>>; # [doc = \" Get the glyph ID for a character.\"] fn glyph_for_char (& self, font_id : FontId, ch : char) -> Option<GlyphId>; # [doc = \" Get raster bounds for a glyph.\"] fn glyph_raster_bounds (& self, params : & RenderGlyphParams) -> Result<Bounds<DevicePixels>>; # [doc = \" Rasterize a glyph.\"] fn rasterize_glyph (& self, params : & RenderGlyphParams, raster_bounds : Bounds<DevicePixels>,) -> Result<(Size<DevicePixels>, Vec<u8>)>; # [doc = \" Layout a line of text with the given font runs.\"] fn layout_line (& self, text : & str, font_size : Pixels, runs : & [FontRun]) -> LineLayout; # [doc = \" Returns the recommended text rendering mode for the given font and size.\"] fn recommended_rendering_mode (& self, _font_id : FontId, _font_size : Pixels) -> TextRenderingMode; # [doc = \" Returns the dilation level to use for a glyph painted in the given color.\"] fn glyph_dilation_for_color (& self, _color : Hsla) -> u8 { 0 } }",
      "cfg": []
    },
    {
      "id": "gpui::platform::PlatformWindow",
      "name": "PlatformWindow",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [expect (missing_docs)] pub trait PlatformWindow : HasWindowHandle + HasDisplayHandle { # [doc = \" Checks a native command on the owner UI thread immediately before dispatch.\"] # [doc = \" Mobile backends must opt in to commands they implement; OS-owned window\"] # [doc = \" geometry is not a successful resize. Use `Window::try_*` to receive errors\"] # [doc = \" instead of relying on legacy void commands, which may do nothing on mobile.\"] fn check_window_operation (& self, _operation : WindowOperation,) -> Result<(), PlatformOperationError> { if cfg ! (any (target_os = \"android\", target_os = \"ios\")) { Err (PlatformOperationError::Unsupported (\"window command\")) } else { Ok (()) } } fn bounds (& self) -> Bounds<Pixels>; fn is_maximized (& self) -> bool; fn window_bounds (& self) -> WindowBounds; fn content_size (& self) -> Size<Pixels>; fn resize (& mut self, size : Size<Pixels>); fn scale_factor (& self) -> f32; fn appearance (& self) -> WindowAppearance; fn display (& self) -> Option<Rc<dyn PlatformDisplay>>; fn mouse_position (& self) -> Point<Pixels>; fn modifiers (& self) -> Modifiers; fn capslock (& self) -> Capslock; fn set_input_handler (& mut self, input_handler : PlatformInputHandler); fn take_input_handler (& mut self) -> Option<PlatformInputHandler>; fn prompt (& self, level : PromptLevel, msg : & str, detail : Option<& str>, answers : & [PromptButton],) -> Option<oneshot::Receiver<usize>>; fn activate (& self); # [doc = \" Requests that the operating system draw attention to this window.\"] fn request_attention (& self) { } fn is_active (& self) -> bool; fn is_hovered (& self) -> bool; fn background_appearance (& self) -> WindowBackgroundAppearance; fn set_title (& mut self, title : & str); fn set_background_appearance (& self, background_appearance : WindowBackgroundAppearance); fn minimize (& self); fn zoom (& self); # [doc = \" Asks the platform to close this window through its normal close path.\"] # [doc = \"\"] # [doc = \" The request must run the callback registered by [`Self::on_should_close`]\"] # [doc = \" and leave the window open when that callback refuses.\"] fn request_close (& self); fn toggle_fullscreen (& self); fn is_fullscreen (& self) -> bool; fn on_request_frame (& self, callback : Box<dyn FnMut (RequestFrameOptions)>); fn on_input (& self, callback : Box<dyn FnMut (PlatformInput) -> DispatchEventResult>); fn on_active_status_change (& self, callback : Box<dyn FnMut (bool)>); fn on_hover_status_change (& self, callback : Box<dyn FnMut (bool)>); fn on_resize (& self, callback : Box<dyn FnMut (Size<Pixels>, f32)>); fn on_moved (& self, callback : Box<dyn FnMut ()>); fn on_should_close (& self, callback : Box<dyn FnMut () -> bool>); # [doc = \" Registers the hit test for client-drawn window chrome.\"] # [doc = \"\"] # [doc = \" The platform supplies the position from the native hit-test request\"] # [doc = \" itself. Using the last delivered pointer event is one movement behind\"] # [doc = \" on Windows, where `WM_NCHITTEST` precedes `WM_MOUSEMOVE`, and can make a\"] # [doc = \" maximize button report client area on entry instead of `HTMAXBUTTON`.\"] fn on_hit_test_window_control (& self, callback : Box<dyn FnMut (Point<Pixels>) -> Option<WindowControlArea>>,); fn on_close (& self, callback : Box<dyn FnOnce ()>); fn on_appearance_changed (& self, callback : Box<dyn FnMut ()>); fn on_button_layout_changed (& self, _callback : Box<dyn FnMut ()>) { } fn draw (& self, scene : & Scene); # [doc = \" Draws a scene with primitives at and after `overlay_start` on a platform\"] # [doc = \" overlay surface when one has been enabled.\"] # [doc = \"\"] # [doc = \" Platforms without layered scene support fall back to drawing the complete\"] # [doc = \" scene on their primary surface.\"] fn draw_layered (& self, scene : & Scene, _overlay_start : usize) { self . draw (scene); } # [doc = \" Enables a transparent GPUI surface above native child views.\"] # [doc = \"\"] # [doc = \" This is currently an experimental capability for embedding native\"] # [doc = \" surfaces between GPUI's base and deferred-overlay paint planes.\"] fn enable_scene_overlay (& self) -> anyhow::Result<()> { anyhow::bail ! (\"layered GPUI scenes are not supported on this platform\") } # [doc = \" Creates a native surface slot between GPUI's base and overlay planes.\"] fn create_native_surface (& self) -> Result<Rc<dyn PlatformNativeSurface>> { anyhow::bail ! (\"native surface portals are not supported on this platform\") } # [doc = \" Attaches, repositions and detaches natively hosted views to match the\"] # [doc = \" frame GPUI just drew.\"] # [doc = \"\"] # [doc = \" Called from the window's draw, which runs on the platform's UI thread, so\"] # [doc = \" implementations may touch native view hierarchies directly. Platforms\"] # [doc = \" without native view hosting ignore the update.\"] fn update_platform_views (& self, _update : & PlatformViewUpdate) { } fn completed_frame (& self) { } fn sprite_atlas (& self) -> Arc<dyn PlatformAtlas>; fn is_subpixel_rendering_supported (& self) -> bool; fn get_title (& self) -> String { String::new () } fn tabbed_windows (& self) -> Option<Vec<SystemWindowTab>> { None } fn tab_bar_visible (& self) -> bool { false } fn set_edited (& mut self, _edited : bool) { } fn set_document_path (& self, _path : Option<& std::path::Path>) { } # [cfg (target_os = \"macos\")] fn set_traffic_light_position (& self, _position : Point<Pixels>) { } fn show_character_palette (& self) { } fn titlebar_double_click (& self, _is_resizable : bool, _is_minimizable : bool) { } fn on_move_tab_to_new_window (& self, _callback : Box<dyn FnMut ()>) { } fn on_merge_all_windows (& self, _callback : Box<dyn FnMut ()>) { } fn on_select_previous_tab (& self, _callback : Box<dyn FnMut ()>) { } fn on_select_next_tab (& self, _callback : Box<dyn FnMut ()>) { } fn on_toggle_tab_bar (& self, _callback : Box<dyn FnMut ()>) { } fn merge_all_windows (& self) { } fn move_tab_to_new_window (& self) { } fn toggle_window_tab_overview (& self) { } fn set_tabbing_identifier (& self, _identifier : Option<String>) { } # [cfg (target_os = \"windows\")] fn get_raw_handle (& self) -> windows::Win32::Foundation::HWND; fn inner_window_bounds (& self) -> WindowBounds { self . window_bounds () } fn request_decorations (& self, _decorations : WindowDecorations) { } fn show_window_menu (& self, _position : Point<Pixels>) { } # [doc = \" Presents one opaque menu revision. Replacements must invalidate the old\"] # [doc = \" revision and wait for its native tracking loop to exit before starting\"] # [doc = \" the next, including replacements from another window on this UI thread.\"] # [doc = \"\"] # [doc = \" Implementations must run a blocking native tracking loop only after the\"] # [doc = \" current GPUI call stack has yielded. Coordinates are window-relative\"] # [doc = \" logical pixels. Unsupported platforms return\"] # [doc = \" [`NativeMenuError::NotSupported`] so the component can render in-window.\"] # [doc = \" Failed replacement cancellation is a refusal, not unsupported capability.\"] fn show_context_menu (& self, _session : NativeMenuSessionId, _menu : Menu, _position : Point<Pixels>,) -> std::result::Result<oneshot::Receiver<PlatformNativeMenuOutcome>, NativeMenuError> { Err (NativeMenuNotSupportedError . into ()) } # [doc = \" Invalidates only the matching current revision. `true` means a cancel\"] # [doc = \" request, not completed closure; the result receiver confirms loop exit.\"] # [doc = \" A stale identity must never call a thread-wide native cancellation API.\"] # [doc = \" Even a refused cancellation must suppress that revision's late command.\"] fn cancel_context_menu (& self, _session : NativeMenuSessionId) -> Result<bool, NativeMenuError> { Ok (false) } # [doc = \" Observes a menu only while inside the actual native tracking call.\"] # [doc = \" Queued menus and test-platform simulations must return `None`. This is\"] # [doc = \" instrumentation for native loop smoke tests, not presentation state.\"] # [cfg (any (test, feature = \"test-support\"))] fn native_context_menu_tracking (& self) -> Option<NativeMenuSessionId> { None } fn start_window_move (& self) { } fn can_start_external_drag (& self) -> bool { false } fn start_external_drag (& self, _payload : & ExternalDragPayload) -> bool { false } fn start_window_resize (& self, _edge : ResizeEdge) { } fn set_exclusive_zone (& self, _zone : Pixels) { } # [cfg (all (target_os = \"linux\", feature = \"wayland\"))] fn set_exclusive_edge (& self, _edge : layer_shell::Anchor) { } fn set_input_region (& self, _region : Option<& [Bounds<Pixels>]>) { } fn window_decorations (& self) -> Decorations { Decorations::Server } fn set_app_id (& mut self, _app_id : & str) { } fn map_window (& mut self) -> anyhow::Result<()> { Ok (()) } fn window_controls (& self) -> WindowControls { WindowControls::default () } fn set_client_inset (& self, _inset : Pixels) { } fn gpu_specs (& self) -> Option<GpuSpecs>; fn update_ime_position (& self, _bounds : Bounds<Pixels>); # [doc = \" The regions of this window currently obscured or reserved by the\"] # [doc = \" system. Zero on platforms without such regions.\"] fn insets (& self) -> WindowInsets { WindowInsets::default () } # [doc = \" Registers a callback invoked whenever [`Self::insets`] change. Update\"] # [doc = \" the value returned by `insets` before invoking this callback.\"] # [doc = \"\"] # [doc = \" Contract: fires continuously during animated transitions (Android\"] # [doc = \" `WindowInsetsAnimation` progress; on iOS the platform interpolates\"] # [doc = \" the keyboard animation curve on frame ticks) and is exact at rest.\"] fn on_insets_changed (& self, _callback : Box<dyn FnMut (WindowInsets)>) { } # [doc = \" Sets the handler for the system back action (Android back\"] # [doc = \" button/gesture; no source on iOS or desktop).\"] fn set_back_handler (& self, _callback : Box<dyn FnMut ()>) { } # [doc = \" Declares whether the application would currently handle the system\"] # [doc = \" back action (e.g. navigation depth> 0).\"] fn set_back_enabled (& self, _enabled : bool) { } # [doc = \" Requests that the soft keyboard be shown.\"] fn show_soft_keyboard (& self) { } # [doc = \" Requests that the soft keyboard be hidden.\"] fn hide_soft_keyboard (& self) { } # [doc = \" Inform the operating system that text input state changed. Called while\"] # [doc = \" the core window is borrowed; defer native queries through the input\"] # [doc = \" handler until after returning, rather than reentering the core window.\"] fn text_input_state_changed (& self, _change : TextInputStateChange) { } fn play_system_bell (& self) { } # [doc = \" Initialize the accessibility adapter with callbacks.\"] fn a11y_init (& self, _callbacks : A11yCallbacks) { } # [doc = \" Provide a TreeUpdate to the accessibility adapter.\"] fn a11y_tree_update (& self, _tree_update : accesskit::TreeUpdate) { } # [doc = \" Inform the adapter of updated window bounds.\"] fn a11y_update_window_bounds (& self) { } # [cfg (any (test, feature = \"test-support\"))] fn as_test (& mut self) -> Option<& mut TestWindow> { None } # [doc = \" Renders the given scene to a texture and returns the pixel data as an RGBA image.\"] # [doc = \" This does not present the frame to screen - useful for visual testing where we want\"] # [doc = \" to capture what would be rendered without displaying it or requiring the window to be visible.\"] # [cfg (any (test, feature = \"test-support\"))] fn render_to_image (& self, _scene : & Scene) -> Result<RgbaImage> { anyhow::bail ! (\"render_to_image not implemented for this platform\") } # [doc = \" The luminance the renderer read back for this probe slot, or `None`\"] # [doc = \" while no probed surface has completed a frame in it — including on a\"] # [doc = \" renderer that takes no probes at all, which is how the absence of the\"] # [doc = \" capability is reported rather than hidden.\"] fn backdrop_luminance (& self, _slot : u32) -> Option<f32> { None } # [doc = \" Five-sample optical-source statistics for an active probe lease.\"] # [doc = \" Unsupported renderers and probes without completed readings return `None`.\"] fn backdrop_statistics (& self, _id : u32) -> Option<crate::BackdropStatistics> { None } }",
      "cfg": []
    },
    {
      "id": "gpui::platform::PromptButton",
      "name": "PromptButton",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Prompt Button",
      "documentation": "Prompt Button",
      "signature": "# [doc = \" Prompt Button\"] # [derive (Clone, Debug, PartialEq)] pub enum PromptButton { # [doc = \" Ok button\"] Ok (SharedString), # [doc = \" Cancel button\"] Cancel (SharedString), # [doc = \" Other button\"] Other (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui::platform::PromptButton::cancel",
      "name": "cancel",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Create a Cancel button",
      "documentation": "Create a Cancel button",
      "signature": "pub fn cancel (label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PromptButton"
    },
    {
      "id": "gpui::platform::PromptButton::is_cancel",
      "name": "is_cancel",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Returns true if this button is a cancel button.",
      "documentation": "Returns true if this button is a cancel button.",
      "signature": "pub fn is_cancel (& self) -> bool",
      "cfg": [],
      "target": "PromptButton"
    },
    {
      "id": "gpui::platform::PromptButton::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Returns the label of the button",
      "documentation": "Returns the label of the button",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "PromptButton"
    },
    {
      "id": "gpui::platform::PromptButton::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Create a button with label",
      "documentation": "Create a button with label",
      "signature": "pub fn new (label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PromptButton"
    },
    {
      "id": "gpui::platform::PromptButton::ok",
      "name": "ok",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Create an Ok button",
      "documentation": "Create an Ok button",
      "signature": "pub fn ok (label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PromptButton"
    },
    {
      "id": "gpui::platform::PromptLevel",
      "name": "PromptLevel",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "What kind of prompt styling to show",
      "documentation": "What kind of prompt styling to show",
      "signature": "# [doc = \" What kind of prompt styling to show\"] # [derive (Copy, Clone, Debug, PartialEq)] pub enum PromptLevel { # [doc = \" A prompt that is shown when the user should be notified of something\"] Info, # [doc = \" A prompt that is shown when the user needs to be warned of a potential problem\"] Warning, # [doc = \" A prompt that is shown when a critical problem has occurred\"] Critical, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::RequestFrameOptions",
      "name": "RequestFrameOptions",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Copy, Clone, Eq, PartialEq, Default)] # [expect (missing_docs)] pub struct RequestFrameOptions { # [doc = \" Whether a presentation is required.\"] pub require_presentation : bool, # [doc = \" Force refresh of all rendering states when true.\"] pub force_render : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::ResizeEdge",
      "name": "ResizeEdge",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Which part of the window to resize",
      "documentation": "Which part of the window to resize",
      "signature": "# [doc = \" Which part of the window to resize\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum ResizeEdge { # [doc = \" The top edge\"] Top, # [doc = \" The top right corner\"] TopRight, # [doc = \" The right edge\"] Right, # [doc = \" The bottom right corner\"] BottomRight, # [doc = \" The bottom edge\"] Bottom, # [doc = \" The bottom left corner\"] BottomLeft, # [doc = \" The left edge\"] Left, # [doc = \" The top left corner\"] TopLeft, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::RunnableVariant",
      "name": "RunnableVariant",
      "kind": "type",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Type alias for runnables with metadata. Previously an enum with a single variant, now simplified to a direct type alias.",
      "documentation": "Type alias for runnables with metadata.\nPreviously an enum with a single variant, now simplified to a direct type alias.",
      "signature": "# [doc = \" Type alias for runnables with metadata.\"] # [doc = \" Previously an enum with a single variant, now simplified to a direct type alias.\"] # [doc (hidden)] pub type RunnableVariant = Runnable<RunnableMeta>;",
      "cfg": []
    },
    {
      "id": "gpui::platform::ScreenCaptureFrame",
      "name": "ScreenCaptureFrame",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A frame of video captured from a screen.",
      "documentation": "A frame of video captured from a screen.",
      "signature": "# [doc = \" A frame of video captured from a screen.\"] pub struct ScreenCaptureFrame (pub PlatformScreenCaptureFrame);",
      "cfg": []
    },
    {
      "id": "gpui::platform::ScreenCaptureSource",
      "name": "ScreenCaptureSource",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A source of on-screen video content that can be captured.",
      "documentation": "A source of on-screen video content that can be captured.",
      "signature": "# [doc = \" A source of on-screen video content that can be captured.\"] pub trait ScreenCaptureSource { # [doc = \" Returns metadata for this source.\"] fn metadata (& self) -> Result<SourceMetadata>; # [doc = \" Start capture video from this source, invoking the given callback\"] # [doc = \" with each frame.\"] fn stream (& self, foreground_executor : & ForegroundExecutor, frame_callback : Box<dyn Fn (ScreenCaptureFrame) + Send>,) -> oneshot::Receiver<Result<Box<dyn ScreenCaptureStream>>>; }",
      "cfg": []
    },
    {
      "id": "gpui::platform::ScreenCaptureStream",
      "name": "ScreenCaptureStream",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A video stream captured from a screen.",
      "documentation": "A video stream captured from a screen.",
      "signature": "# [doc = \" A video stream captured from a screen.\"] pub trait ScreenCaptureStream { # [doc = \" Returns metadata for this source.\"] fn metadata (& self) -> Result<SourceMetadata>; }",
      "cfg": []
    },
    {
      "id": "gpui::platform::SourceMetadata",
      "name": "SourceMetadata",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Metadata for a given [ScreenCaptureSource]",
      "documentation": "Metadata for a given [ScreenCaptureSource]",
      "signature": "# [doc = \" Metadata for a given [ScreenCaptureSource]\"] # [derive (Clone)] pub struct SourceMetadata { # [doc = \" Opaque identifier of this screen.\"] pub id : u64, # [doc = \" Human-readable label for this source.\"] pub label : Option<SharedString>, # [doc = \" Whether this source is the main display.\"] pub is_main : Option<bool>, # [doc = \" Video resolution of this source.\"] pub resolution : Size<DevicePixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::SystemNotification",
      "name": "SystemNotification",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A notification posted to the operating system's notification center, rather than rendered as in-app UI.",
      "documentation": "A notification posted to the operating system's notification center,\nrather than rendered as in-app UI.",
      "signature": "# [doc = \" A notification posted to the operating system's notification center,\"] # [doc = \" rather than rendered as in-app UI.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct SystemNotification { # [doc = \" Stable identity for the notification. Posting a new notification with\"] # [doc = \" the same tag replaces the previous one where the platform supports it,\"] # [doc = \" and responses carry the tag back to the application.\"] pub tag : SharedString, # [doc = \" The notification's headline.\"] pub title : SharedString, # [doc = \" Additional text displayed below the title.\"] pub body : SharedString, # [doc = \" Buttons offered on the notification. Platforms that cannot display\"] # [doc = \" action buttons show the notification without them.\"] pub actions : Vec<SystemNotificationAction>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::SystemNotificationAction",
      "name": "SystemNotificationAction",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A button offered on a [`SystemNotification`].",
      "documentation": "A button offered on a [`SystemNotification`].",
      "signature": "# [doc = \" A button offered on a [`SystemNotification`].\"] # [derive (Clone, Debug, PartialEq, Eq, Hash)] pub struct SystemNotificationAction { # [doc = \" Identifies the action in [`SystemNotificationResponse::action_id`]\"] # [doc = \" when the user presses this button.\"] pub id : SharedString, # [doc = \" The button's user-visible label.\"] pub label : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::SystemNotificationResponse",
      "name": "SystemNotificationResponse",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "The user's activation of a [`SystemNotification`].",
      "documentation": "The user's activation of a [`SystemNotification`].",
      "signature": "# [doc = \" The user's activation of a [`SystemNotification`].\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct SystemNotificationResponse { # [doc = \" The [`SystemNotification::tag`] of the activated notification.\"] pub tag : SharedString, # [doc = \" The pressed action button's [`SystemNotificationAction::id`], or\"] # [doc = \" `None` when the user activated the notification body itself.\"] pub action_id : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::TasksIncluded",
      "name": "TasksIncluded",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] pub enum TasksIncluded { OnlyCompleted, CompletedAndRunning, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::TextGammaParams",
      "name": "TextGammaParams",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Perceptual alpha correction applied when compositing atlas glyph coverage.",
      "documentation": "Perceptual alpha correction applied when compositing atlas glyph coverage.\n\nWindows and WGPU already reshape grayscale (and subpixel) coverage with this\nlayout before the hardware blend. Metal uses the same defaults so a tintable\nA8 mask is not left as a raw `color.a *= sample.a` multiply.",
      "signature": "# [doc = \" Perceptual alpha correction applied when compositing atlas glyph coverage.\"] # [doc = \"\"] # [doc = \" Windows and WGPU already reshape grayscale (and subpixel) coverage with this\"] # [doc = \" layout before the hardware blend. Metal uses the same defaults so a tintable\"] # [doc = \" A8 mask is not left as a raw `color.a *= sample.a` multiply.\"] # [repr (C)] # [derive (Clone, Copy, Debug, PartialEq)] pub struct TextGammaParams { # [doc = \" Four-term polynomial used by [`apply_contrast_and_gamma_correction`].\"] pub gamma_ratios : [f32; 4], # [doc = \" Contrast boost applied to dark grayscale foregrounds.\"] pub grayscale_enhanced_contrast : f32, # [doc = \" Contrast boost applied to subpixel coverage.\"] pub subpixel_enhanced_contrast : f32, # [doc = \" Pad to 32 bytes so Metal constant-buffer layout stays aligned.\"] pub pad : [f32; 2], }",
      "cfg": []
    },
    {
      "id": "gpui::platform::TextGammaParams::grayscale_default",
      "name": "grayscale_default",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Parameters used by the WGPU fallback path.",
      "documentation": "Parameters used by the WGPU fallback path.",
      "signature": "pub fn grayscale_default () -> Self",
      "cfg": [],
      "target": "TextGammaParams"
    },
    {
      "id": "gpui::platform::TextGammaParams::identity",
      "name": "identity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Parameters that leave atlas coverage exactly as rasterized.",
      "documentation": "Parameters that leave atlas coverage exactly as rasterized.\n\nCore Graphics bakes its own gamma handling into the coverage it\nrasterizes, and the macOS text system already dilates strokes to match\nAppleFontSmoothing per foreground luminance. Reshaping that coverage a\nsecond time with the DirectWrite curve thickens and smudges glyphs, so\nMetal composites it untouched.",
      "signature": "pub fn identity () -> Self",
      "cfg": [],
      "target": "TextGammaParams"
    },
    {
      "id": "gpui::platform::TextInputAction",
      "name": "TextInputAction",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Requested IME return-key action. The editor, not the platform, decides whether an action submits data or moves focus. Newline is explicit.",
      "documentation": "Requested IME return-key action. The editor, not the platform, decides\nwhether an action submits data or moves focus. Newline is explicit.",
      "signature": "# [doc = \" Requested IME return-key action. The editor, not the platform, decides\"] # [doc = \" whether an action submits data or moves focus. Newline is explicit.\"] # [derive (Clone, Copy, Debug, Default, Eq, PartialEq)] pub enum TextInputAction { # [doc = \" Platform default return key.\"] # [default] Default, # [doc = \" Insert a line break if the editor accepts it.\"] Newline, # [doc = \" Complete editing.\"] Done, # [doc = \" Navigate to the entered destination.\"] Go, # [doc = \" Move to the next input.\"] Next, # [doc = \" Move to the previous input.\"] Previous, # [doc = \" Submit a search query.\"] Search, # [doc = \" Send the composed content.\"] Send, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::TextInputOptions",
      "name": "TextInputOptions",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Caller-owned input traits, analogous to UIKit UITextInputTraits, Android EditorInfo and HTML inputmode/enterkeyhint/autocomplete. Platforms must document unsupported hints. These never validate text or perform actions.",
      "documentation": "Caller-owned input traits, analogous to UIKit UITextInputTraits, Android\nEditorInfo and HTML inputmode/enterkeyhint/autocomplete. Platforms must\ndocument unsupported hints. These never validate text or perform actions.",
      "signature": "# [doc = \" Caller-owned input traits, analogous to UIKit UITextInputTraits, Android\"] # [doc = \" EditorInfo and HTML inputmode/enterkeyhint/autocomplete. Platforms must\"] # [doc = \" document unsupported hints. These never validate text or perform actions.\"] # [derive (Clone, Copy, Debug, Default, Eq, PartialEq)] pub struct TextInputOptions { # [doc = \" Requested keyboard layout.\"] pub purpose : KeyboardPurpose, # [doc = \" Requested return-key label/action.\"] pub action : TextInputAction, # [doc = \" Semantic autofill purpose; None makes no autofill request.\"] pub autofill : Option<AutofillPurpose>, # [doc = \" Whether line breaks are meaningful to this editor.\"] pub multiline : bool, # [doc = \" Request secure platform input. The editor must still mask its rendered\"] # [doc = \" text and exclude sensitive content from diagnostics and accessibility.\"] pub secure : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::TextInputStateChange",
      "name": "TextInputStateChange",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A change in the state of the focused text input.",
      "documentation": "A change in the state of the focused text input.",
      "signature": "# [doc = \" A change in the state of the focused text input.\"] # [derive (Debug, Copy, Clone, Eq, PartialEq, Hash)] pub enum TextInputStateChange { # [doc = \" An editable element gained focus.\"] FocusGained, # [doc = \" The focused editable element lost focus.\"] FocusLost, # [doc = \" The selection or caret moved\"] SelectionChanged, # [doc = \" The document content changed outside of platform-initiated edits.\"] ContentChanged, # [doc = \" Keyboard layout, return action, or autofill hints changed.\"] OptionsChanged, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::TextRenderingMode",
      "name": "TextRenderingMode",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "The text rendering mode to use for drawing glyphs.",
      "documentation": "The text rendering mode to use for drawing glyphs.",
      "signature": "# [doc = \" The text rendering mode to use for drawing glyphs.\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq)] pub enum TextRenderingMode { # [doc = \" Use the platform's default text rendering mode.\"] # [default] PlatformDefault, # [doc = \" Use subpixel (ClearType-style) text rendering.\"] Subpixel, # [doc = \" Use grayscale text rendering.\"] Grayscale, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::ThermalState",
      "name": "ThermalState",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Thermal state of the system",
      "documentation": "Thermal state of the system",
      "signature": "# [doc = \" Thermal state of the system\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum ThermalState { # [doc = \" System has no thermal constraints\"] Nominal, # [doc = \" System is slightly constrained, reduce discretionary work\"] Fair, # [doc = \" System is moderately constrained, reduce CPU/GPU intensive work\"] Serious, # [doc = \" System is critically constrained, minimize all resource usage\"] Critical, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::TileId",
      "name": "TileId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)] # [repr (C)] # [expect (missing_docs)] pub struct TileId (pub u32);",
      "cfg": []
    },
    {
      "id": "gpui::platform::Tiling",
      "name": "Tiling",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A type to describe which sides of the window are currently tiled in some way",
      "documentation": "A type to describe which sides of the window are currently tiled in some way",
      "signature": "# [doc = \" A type to describe which sides of the window are currently tiled in some way\"] # [derive (Debug, Copy, Clone, Eq, PartialEq, Hash, Default)] pub struct Tiling { # [doc = \" Whether the top edge is tiled\"] pub top : bool, # [doc = \" Whether the left edge is tiled\"] pub left : bool, # [doc = \" Whether the right edge is tiled\"] pub right : bool, # [doc = \" Whether the bottom edge is tiled\"] pub bottom : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::Tiling::is_tiled",
      "name": "is_tiled",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Whether any edge is tiled",
      "documentation": "Whether any edge is tiled",
      "signature": "pub fn is_tiled (& self) -> bool",
      "cfg": [],
      "target": "Tiling"
    },
    {
      "id": "gpui::platform::Tiling::tiled",
      "name": "tiled",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Initializes a [`Tiling`] type with all sides tiled",
      "documentation": "Initializes a [`Tiling`] type with all sides tiled",
      "signature": "pub fn tiled () -> Self",
      "cfg": [],
      "target": "Tiling"
    },
    {
      "id": "gpui::platform::TimerResolutionGuard",
      "name": "TimerResolutionGuard",
      "kind": "type",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] pub type TimerResolutionGuard = gpui_util::Deferred<Box<dyn FnOnce () + Send>>;",
      "cfg": []
    },
    {
      "id": "gpui::platform::TitlebarOptions",
      "name": "TitlebarOptions",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "The options that can be configured for a window's titlebar",
      "documentation": "The options that can be configured for a window's titlebar",
      "signature": "# [doc = \" The options that can be configured for a window's titlebar\"] # [derive (Debug, Default)] pub struct TitlebarOptions { # [doc = \" The initial title of the window\"] pub title : Option<SharedString>, # [doc = \" Should the default system titlebar be hidden to allow for a custom-drawn titlebar? (macOS and Windows only)\"] # [doc = \" Refer to [`WindowOptions::window_decorations`] on Linux\"] pub appears_transparent : bool, # [doc = \" The position of the macOS traffic light buttons\"] pub traffic_light_position : Option<Point<Pixels>>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::UTF16Selection",
      "name": "UTF16Selection",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A struct representing a selection in a text buffer, in UTF16 characters. This is different from a range because the head may be before the tail.",
      "documentation": "A struct representing a selection in a text buffer, in UTF16 characters.\nThis is different from a range because the head may be before the tail.",
      "signature": "# [doc = \" A struct representing a selection in a text buffer, in UTF16 characters.\"] # [doc = \" This is different from a range because the head may be before the tail.\"] # [derive (Debug)] pub struct UTF16Selection { # [doc = \" The range of text in the document this selection corresponds to\"] # [doc = \" in UTF16 characters.\"] pub range : Range<usize>, # [doc = \" Whether the head of this selection is at the start (true), or end (false)\"] # [doc = \" of the range\"] pub reversed : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::WindowAppearance",
      "name": "WindowAppearance",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "The appearance of the window, as defined by the operating system.",
      "documentation": "The appearance of the window, as defined by the operating system.\n\nOn macOS, this corresponds to named [`NSAppearance`](https://developer.apple.com/documentation/appkit/nsappearance)\nvalues.",
      "signature": "# [doc = \" The appearance of the window, as defined by the operating system.\"] # [doc = \"\"] # [doc = \" On macOS, this corresponds to named [`NSAppearance`](https://developer.apple.com/documentation/appkit/nsappearance)\"] # [doc = \" values.\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq)] pub enum WindowAppearance { # [doc = \" A light appearance.\"] # [doc = \"\"] # [doc = \" On macOS, this corresponds to the `aqua` appearance.\"] # [default] Light, # [doc = \" A light appearance with vibrant colors.\"] # [doc = \"\"] # [doc = \" On macOS, this corresponds to the `NSAppearanceNameVibrantLight` appearance.\"] VibrantLight, # [doc = \" A dark appearance.\"] # [doc = \"\"] # [doc = \" On macOS, this corresponds to the `darkAqua` appearance.\"] Dark, # [doc = \" A dark appearance with vibrant colors.\"] # [doc = \"\"] # [doc = \" On macOS, this corresponds to the `NSAppearanceNameVibrantDark` appearance.\"] VibrantDark, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::WindowBackgroundAppearance",
      "name": "WindowBackgroundAppearance",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "The appearance of the background of the window itself, when there is no content or the content is transparent.",
      "documentation": "The appearance of the background of the window itself, when there is\nno content or the content is transparent.",
      "signature": "# [doc = \" The appearance of the background of the window itself, when there is\"] # [doc = \" no content or the content is transparent.\"] # [derive (Copy, Clone, Debug, Default, PartialEq)] pub enum WindowBackgroundAppearance { # [doc = \" Opaque.\"] # [doc = \"\"] # [doc = \" This lets the window manager know that content behind this\"] # [doc = \" window does not need to be drawn.\"] # [doc = \"\"] # [doc = \" Actual color depends on the system and themes should define a fully\"] # [doc = \" opaque background color instead.\"] # [default] Opaque, # [doc = \" Plain alpha transparency.\"] Transparent, # [doc = \" Transparency, but the contents behind the window are blurred.\"] # [doc = \"\"] # [doc = \" Not always supported.\"] Blurred, # [doc = \" The Mica backdrop material, supported on Windows 11.\"] MicaBackdrop, # [doc = \" The Mica Alt backdrop material, supported on Windows 11.\"] MicaAltBackdrop, # [doc = \" The current platform's system glass material.\"] # [doc = \"\"] # [doc = \" On macOS 26+ this is `NSGlassEffectView` at the regular style, composited\"] # [doc = \" behind the window's content. On Windows 11 it is the main-window Mica\"] # [doc = \" backdrop. Other platforms treat it as [`Self::Opaque`].\"] SystemGlass, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::WindowBounds",
      "name": "WindowBounds",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Represents the status of how a window should be opened.",
      "documentation": "Represents the status of how a window should be opened.",
      "signature": "# [doc = \" Represents the status of how a window should be opened.\"] # [derive (Debug, Copy, Clone, PartialEq)] pub enum WindowBounds { # [doc = \" Indicates that the window should open in a windowed state with the given bounds.\"] Windowed (Bounds<Pixels>), # [doc = \" Indicates that the window should open in a maximized state.\"] # [doc = \" The bounds provided here represent the restore size of the window.\"] Maximized (Bounds<Pixels>), # [doc = \" Indicates that the window should open in fullscreen mode.\"] # [doc = \" The bounds provided here represent the restore size of the window.\"] Fullscreen (Bounds<Pixels>), }",
      "cfg": []
    },
    {
      "id": "gpui::platform::WindowBounds::centered",
      "name": "centered",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Creates a new window bounds that centers the window on the screen.",
      "documentation": "Creates a new window bounds that centers the window on the screen.",
      "signature": "pub fn centered (size : Size<Pixels>, cx : & App) -> Self",
      "cfg": [],
      "target": "WindowBounds"
    },
    {
      "id": "gpui::platform::WindowBounds::get_bounds",
      "name": "get_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Retrieve the inner bounds",
      "documentation": "Retrieve the inner bounds",
      "signature": "pub fn get_bounds (& self) -> Bounds<Pixels>",
      "cfg": [],
      "target": "WindowBounds"
    },
    {
      "id": "gpui::platform::WindowButton",
      "name": "WindowButton",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A window control button type used in [`WindowButtonLayout`].",
      "documentation": "A window control button type used in [`WindowButtonLayout`].",
      "signature": "# [doc = \" A window control button type used in [`WindowButtonLayout`].\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum WindowButton { # [doc = \" The minimize button\"] Minimize, # [doc = \" The maximize button\"] Maximize, # [doc = \" The close button\"] Close, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::WindowButton::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Returns a stable element ID for rendering this button.",
      "documentation": "Returns a stable element ID for rendering this button.",
      "signature": "pub fn id (& self) -> & 'static str",
      "cfg": [],
      "target": "WindowButton"
    },
    {
      "id": "gpui::platform::WindowButtonLayout",
      "name": "WindowButtonLayout",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Describes which [`WindowButton`]s appear on each side of the titlebar.",
      "documentation": "Describes which [`WindowButton`]s appear on each side of the titlebar.\n\nOn Linux, this is read from the desktop environment's configuration\n(e.g. GNOME's `gtk-decoration-layout` gsetting) via\n`WindowButtonLayout::parse`.",
      "signature": "# [doc = \" Describes which [`WindowButton`]s appear on each side of the titlebar.\"] # [doc = \"\"] # [doc = \" On Linux, this is read from the desktop environment's configuration\"] # [doc = \" (e.g. GNOME's `gtk-decoration-layout` gsetting) via\"] # [doc = \" `WindowButtonLayout::parse`.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct WindowButtonLayout { # [doc = \" Buttons on the left side of the titlebar.\"] pub left : [Option<WindowButton>; MAX_BUTTONS_PER_SIDE], # [doc = \" Buttons on the right side of the titlebar.\"] pub right : [Option<WindowButton>; MAX_BUTTONS_PER_SIDE], }",
      "cfg": []
    },
    {
      "id": "gpui::platform::WindowButtonLayout::format",
      "name": "format",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Formats the layout back into a GNOME-style `button-layout` string.",
      "documentation": "Formats the layout back into a GNOME-style `button-layout` string.",
      "signature": "pub fn format (& self) -> String",
      "cfg": [
        "cfg (test)"
      ],
      "target": "WindowButtonLayout"
    },
    {
      "id": "gpui::platform::WindowButtonLayout::linux_default",
      "name": "linux_default",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Returns Zed's built-in fallback button layout for Linux titlebars.",
      "documentation": "Returns Zed's built-in fallback button layout for Linux titlebars.",
      "signature": "pub fn linux_default () -> Self",
      "cfg": [],
      "target": "WindowButtonLayout"
    },
    {
      "id": "gpui::platform::WindowButtonLayout::parse",
      "name": "parse",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Parses a GNOME-style `button-layout` string (e.g. `\"close,minimize:maximize\"`).",
      "documentation": "Parses a GNOME-style `button-layout` string (e.g. `\"close,minimize:maximize\"`).",
      "signature": "pub fn parse (layout_string : & str) -> Result<Self>",
      "cfg": [],
      "target": "WindowButtonLayout"
    },
    {
      "id": "gpui::platform::WindowControls",
      "name": "WindowControls",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "What window controls this platform supports",
      "documentation": "What window controls this platform supports",
      "signature": "# [doc = \" What window controls this platform supports\"] # [derive (Debug, Copy, Clone, Eq, PartialEq, Hash)] pub struct WindowControls { # [doc = \" Whether this platform supports fullscreen\"] pub fullscreen : bool, # [doc = \" Whether this platform supports maximize\"] pub maximize : bool, # [doc = \" Whether this platform supports minimize\"] pub minimize : bool, # [doc = \" Whether this platform supports a window menu\"] pub window_menu : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::WindowDecorations",
      "name": "WindowDecorations",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "A type to describe the appearance of a window",
      "documentation": "A type to describe the appearance of a window",
      "signature": "# [doc = \" A type to describe the appearance of a window\"] # [derive (Debug, Copy, Clone, Eq, PartialEq, Hash, Default)] pub enum WindowDecorations { # [default] # [doc = \" Server side decorations\"] Server, # [doc = \" Client side decorations\"] Client, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::WindowInsets",
      "name": "WindowInsets",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Regions of a window that are obscured or reserved by the system.",
      "documentation": "Regions of a window that are obscured or reserved by the system.\n\nDistances are nonnegative logical pixels inward from the edges of the\ncurrent content viewport, not physical screen pixels or keyboard height.\nIf the platform already resizes the viewport above an IME, `ime` contains\nonly remaining overlap (normally zero). Overlay mode reports the occluded\nportion. Never apply both a viewport reduction and the same inset again.\nFloating/split keyboards cannot be represented faithfully as edge insets;\nthese values describe edge avoidance, not arbitrary occlusion geometry.",
      "signature": "# [doc = \" Regions of a window that are obscured or reserved by the system.\"] # [doc = \"\"] # [doc = \" Distances are nonnegative logical pixels inward from the edges of the\"] # [doc = \" current content viewport, not physical screen pixels or keyboard height.\"] # [doc = \" If the platform already resizes the viewport above an IME, `ime` contains\"] # [doc = \" only remaining overlap (normally zero). Overlay mode reports the occluded\"] # [doc = \" portion. Never apply both a viewport reduction and the same inset again.\"] # [doc = \" Floating/split keyboards cannot be represented faithfully as edge insets;\"] # [doc = \" these values describe edge avoidance, not arbitrary occlusion geometry.\"] # [derive (Debug, Clone, Default, PartialEq)] pub struct WindowInsets { # [doc = \" Regions covered by system UI or hardware: status bar, display\"] # [doc = \" cutouts/notch, home indicator, navigation bars.\"] # [doc = \" (iOS: `safeAreaInsets`. Android: `WindowInsets` of types\"] # [doc = \" `systemBars() | displayCutout()`.)\"] pub safe_area : Edges<Pixels>, # [doc = \" The region covered by the keyboard, when present.\"] # [doc = \" (iOS: derived from `keyboardWillShow`/frame-change notifications.\"] # [doc = \" Android: `WindowInsets.Type.ime()`.)\"] pub ime : Edges<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::WindowInsets::effective",
      "name": "effective",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "The combined inset content should avoid. Overlapping safe-area and keyboard regions combine by maximum, never by addition.",
      "documentation": "The combined inset content should avoid. Overlapping safe-area and\nkeyboard regions combine by maximum, never by addition.",
      "signature": "pub fn effective (& self) -> Edges<Pixels>",
      "cfg": [],
      "target": "WindowInsets"
    },
    {
      "id": "gpui::platform::WindowKind",
      "name": "WindowKind",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "The kind of window to create",
      "documentation": "The kind of window to create",
      "signature": "# [doc = \" The kind of window to create\"] # [derive (Clone, Debug, PartialEq, Eq)] pub enum WindowKind { # [doc = \" A normal application window\"] Normal, # [doc = \" A window that appears above all other windows, usually used for alerts or popups\"] # [doc = \" use sparingly!\"] PopUp, # [doc = \" A parent-anchored, platform-native popup window for menus, comboboxes, context menus and\"] # [doc = \" tooltips. Unlike [`WindowKind::PopUp`], it is positioned relative to a parent window.\"] # [doc = \"\"] # [doc = \" The popup's size comes from [`WindowOptions::window_bounds`], whose origin is ignored.\"] # [doc = \" See [`popup::PopupOptions`] for the placement options. Platforms without a native\"] # [doc = \" implementation reject it with [`popup::PopupNotSupportedError`].\"] AnchoredPopup (popup::PopupOptions), # [doc = \" A floating window that appears on top of its parent window\"] Floating, # [doc = \" A Wayland LayerShell window, used to draw overlays or backgrounds for applications such as\"] # [doc = \" docks, notifications or wallpapers.\"] # [cfg (all (target_os = \"linux\", feature = \"wayland\"))] LayerShell (layer_shell::LayerShellOptions), # [doc = \" A window that appears on top of its parent window and blocks interaction with it\"] # [doc = \" until the modal window is closed\"] Dialog, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::WindowOperation",
      "name": "WindowOperation",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Window commands whose availability depends on the native host.",
      "documentation": "Window commands whose availability depends on the native host.",
      "signature": "# [doc = \" Window commands whose availability depends on the native host.\"] # [derive (Clone, Copy, Debug, Eq, PartialEq)] pub enum WindowOperation { # [doc = \" Request a content size.\"] Resize, # [doc = \" Toggle maximization/zoom.\"] Zoom, # [doc = \" Minimize the window.\"] Minimize, # [doc = \" Toggle native fullscreen.\"] ToggleFullscreen, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::WindowOptions",
      "name": "WindowOptions",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "The variables that can be configured when creating a new window",
      "documentation": "The variables that can be configured when creating a new window",
      "signature": "# [doc = \" The variables that can be configured when creating a new window\"] # [derive (Debug)] pub struct WindowOptions { # [doc = \" Specifies the state and bounds of the window in screen coordinates.\"] # [doc = \" - `None`: Inherit the bounds.\"] # [doc = \" - `Some(WindowBounds)`: Open a window with corresponding state and its restore size.\"] pub window_bounds : Option<WindowBounds>, # [doc = \" The titlebar configuration of the window\"] pub titlebar : Option<TitlebarOptions>, # [doc = \" Whether the window should be focused when created\"] pub focus : bool, # [doc = \" Whether the window should be shown when created\"] pub show : bool, # [doc = \" The kind of window to create\"] pub kind : WindowKind, # [doc = \" Whether the window can be moved by the user. When `false`, the user cannot drag\"] # [doc = \" the window (on macOS this sets `NSWindow.isMovable`, which also disables the\"] # [doc = \" Window-menu tiling items); programmatic moves are still allowed.\"] pub is_movable : bool, # [doc = \" Whether the application owns dragging of the (custom) titlebar, rather than\"] # [doc = \" AppKit. Only has an effect on macOS.\"] # [doc = \"\"] # [doc = \" Set this to `true` for windows that draw their own titlebar and move the window\"] # [doc = \" themselves via [`Window::start_window_move`]. It marks the whole content view as\"] # [doc = \" app-owned titlebar content, so AppKit neither drags the window from the titlebar\"] # [doc = \" nor delays titlebar clicks while disambiguating double-clicks (a delay first\"] # [doc = \" observed on macOS 27). It is independent of `is_movable`, so such windows stay\"] # [doc = \" user-movable (via their own drag) and keep the Window-menu tiling items enabled.\"] # [doc = \"\"] # [doc = \" Leave this `false` for windows that rely on AppKit's native titlebar dragging.\"] pub app_owns_titlebar_drag : bool, # [doc = \" Whether the window should be resizable by the user\"] pub is_resizable : bool, # [doc = \" Whether the window should be minimized by the user\"] pub is_minimizable : bool, # [doc = \" The display to create the window on, if this is None,\"] # [doc = \" the window will be created on the main display\"] pub display_id : Option<DisplayId>, # [doc = \" The appearance of the window background.\"] pub window_background : WindowBackgroundAppearance, # [doc = \" Application identifier of the window. Can by used by desktop environments to group applications together.\"] pub app_id : Option<String>, # [doc = \" Window minimum size\"] pub window_min_size : Option<Size<Pixels>>, # [doc = \" Whether to use client or server-side decorations on X11 and Wayland.\"] # [doc = \" The platform may ignore requests it cannot satisfy.\"] pub window_decorations : Option<WindowDecorations>, # [doc = \" Icon image (X11 only)\"] pub icon : Option<Arc<image::RgbaImage>>, # [doc = \" Tab group name, allows opening the window as a native tab on macOS 10.12+. Windows with the same tabbing identifier will be grouped together.\"] pub tabbing_identifier : Option<String>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::WindowParams",
      "name": "WindowParams",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "The variables that can be configured when creating a new window",
      "documentation": "The variables that can be configured when creating a new window",
      "signature": "# [doc = \" The variables that can be configured when creating a new window\"] # [derive (Debug)] # [cfg_attr (all (any (target_os = \"linux\", target_os = \"freebsd\"), not (any (feature = \"x11\", feature = \"wayland\"))), allow (dead_code))] # [allow (missing_docs)] pub struct WindowParams { pub bounds : Bounds<Pixels>, # [doc = \" The titlebar configuration of the window\"] # [cfg_attr (feature = \"wayland\", allow (dead_code))] pub titlebar : Option<TitlebarOptions>, # [doc = \" The kind of window to create\"] # [cfg_attr (any (target_os = \"linux\", target_os = \"freebsd\"), allow (dead_code))] pub kind : WindowKind, # [doc = \" Whether the window should be movable by the user\"] # [cfg_attr (any (target_os = \"linux\", target_os = \"freebsd\"), allow (dead_code))] pub is_movable : bool, # [doc = \" Whether the application owns dragging of the (custom) titlebar (macOS only)\"] # [cfg_attr (any (target_os = \"linux\", target_os = \"freebsd\", target_os = \"windows\"), allow (dead_code))] pub app_owns_titlebar_drag : bool, # [doc = \" Whether the window should be resizable by the user\"] # [cfg_attr (any (target_os = \"linux\", target_os = \"freebsd\"), allow (dead_code))] pub is_resizable : bool, # [doc = \" Whether the window should be minimized by the user\"] # [cfg_attr (any (target_os = \"linux\", target_os = \"freebsd\"), allow (dead_code))] pub is_minimizable : bool, # [cfg_attr (any (target_os = \"linux\", target_os = \"freebsd\", target_os = \"windows\"), allow (dead_code))] pub focus : bool, # [cfg_attr (any (target_os = \"linux\", target_os = \"freebsd\"), allow (dead_code))] pub show : bool, # [doc = \" An image to set as the window icon (x11 only)\"] # [cfg_attr (feature = \"wayland\", allow (dead_code))] pub icon : Option<Arc<image::RgbaImage>>, # [cfg_attr (feature = \"wayland\", allow (dead_code))] pub display_id : Option<DisplayId>, # [cfg_attr (feature = \"wayland\", allow (dead_code))] pub app_id : Option<String>, pub window_min_size : Option<Size<Pixels>>, # [cfg (target_os = \"macos\")] pub tabbing_identifier : Option<String>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::app_menu::Menu",
      "name": "Menu",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "A menu of the application, either a main menu or a submenu",
      "documentation": "A menu of the application, either a main menu or a submenu",
      "signature": "# [doc = \" A menu of the application, either a main menu or a submenu\"] pub struct Menu { # [doc = \" The name of the menu\"] pub name : SharedString, # [doc = \" The items in the menu\"] pub items : Vec<MenuItem>, # [doc = \" Whether this menu is disabled\"] pub disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::app_menu::Menu::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Set whether this menu is disabled",
      "documentation": "Set whether this menu is disabled",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui::platform::app_menu::Menu::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Set items to be in this menu",
      "documentation": "Set items to be in this menu",
      "signature": "pub fn items (mut self, items : impl IntoIterator<Item = MenuItem>) -> Self",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui::platform::app_menu::Menu::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Create a new Menu with the given name",
      "documentation": "Create a new Menu with the given name",
      "signature": "pub fn new (name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui::platform::app_menu::Menu::owned",
      "name": "owned",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Create an OwnedMenu from this Menu",
      "documentation": "Create an OwnedMenu from this Menu",
      "signature": "pub fn owned (self) -> OwnedMenu",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui::platform::app_menu::MenuItem",
      "name": "MenuItem",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "The different kinds of items that can be in a menu",
      "documentation": "The different kinds of items that can be in a menu",
      "signature": "# [doc = \" The different kinds of items that can be in a menu\"] pub enum MenuItem { # [doc = \" A separator between items\"] Separator, # [doc = \" A submenu\"] Submenu (Menu), # [doc = \" A menu, managed by the system (for example, the Services menu on macOS)\"] SystemMenu (OsMenu), # [doc = \" An action that can be performed\"] Action { # [doc = \" The name of this menu item\"] name : SharedString, # [doc = \" The action to perform when this menu item is selected\"] action : Box<dyn Action>, # [doc = \" The OS Action that corresponds to this action, if any\"] # [doc = \" See [`OsAction`] for more information\"] os_action : Option<OsAction>, # [doc = \" Whether this action is checked\"] checked : bool, # [doc = \" Whether this action is disabled\"] disabled : bool, }, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::app_menu::MenuItem::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Creates a new menu item that invokes an action",
      "documentation": "Creates a new menu item that invokes an action",
      "signature": "pub fn action (name : impl Into<SharedString>, action : impl Action) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui::platform::app_menu::MenuItem::checked",
      "name": "checked",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Set whether this menu item is checked",
      "documentation": "Set whether this menu item is checked\n\nOnly for [`MenuItem::Action`], otherwise, will be ignored",
      "signature": "pub fn checked (mut self, checked : bool) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui::platform::app_menu::MenuItem::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Set whether this menu item is disabled",
      "documentation": "Set whether this menu item is disabled",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui::platform::app_menu::MenuItem::is_checked",
      "name": "is_checked",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Returns whether this menu item is checked",
      "documentation": "Returns whether this menu item is checked\n\nOnly for [`MenuItem::Action`], otherwise, returns false",
      "signature": "pub fn is_checked (& self) -> bool",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui::platform::app_menu::MenuItem::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Returns whether this menu item is disabled",
      "documentation": "Returns whether this menu item is disabled\n\nOnly for [`MenuItem::Action`] and [`MenuItem::Submenu`], otherwise, returns false",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui::platform::app_menu::MenuItem::os_action",
      "name": "os_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Creates a new menu item that invokes an action and has an OS action",
      "documentation": "Creates a new menu item that invokes an action and has an OS action",
      "signature": "pub fn os_action (name : impl Into<SharedString>, action : impl Action, os_action : OsAction,) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui::platform::app_menu::MenuItem::os_submenu",
      "name": "os_submenu",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Creates a new submenu that is populated by the OS",
      "documentation": "Creates a new submenu that is populated by the OS",
      "signature": "pub fn os_submenu (name : impl Into<SharedString>, menu_type : SystemMenuType) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui::platform::app_menu::MenuItem::owned",
      "name": "owned",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Create an OwnedMenuItem from this MenuItem",
      "documentation": "Create an OwnedMenuItem from this MenuItem",
      "signature": "pub fn owned (self) -> OwnedMenuItem",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui::platform::app_menu::MenuItem::separator",
      "name": "separator",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Creates a new menu item that is a separator",
      "documentation": "Creates a new menu item that is a separator",
      "signature": "pub fn separator () -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui::platform::app_menu::MenuItem::submenu",
      "name": "submenu",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Creates a new menu item that is a submenu",
      "documentation": "Creates a new menu item that is a submenu",
      "signature": "pub fn submenu (menu : Menu) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui::platform::app_menu::NativeMenuNotSupportedError",
      "name": "NativeMenuNotSupportedError",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Returned when the current platform cannot present application-provided context menus through the operating system.",
      "documentation": "Returned when the current platform cannot present application-provided\ncontext menus through the operating system.\n\nThis is a capability result, not a presentation failure. Components that\nwork on every platform should use it as the signal to draw their existing\nin-window menu instead.",
      "signature": "# [doc = \" Returned when the current platform cannot present application-provided\"] # [doc = \" context menus through the operating system.\"] # [doc = \"\"] # [doc = \" This is a capability result, not a presentation failure. Components that\"] # [doc = \" work on every platform should use it as the signal to draw their existing\"] # [doc = \" in-window menu instead.\"] # [derive (Debug, Error)] # [error (\"native context menus are not supported on this platform\")] pub struct NativeMenuNotSupportedError;",
      "cfg": []
    },
    {
      "id": "gpui::platform::app_menu::NativeMenuOutcome",
      "name": "NativeMenuOutcome",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "How a platform-native context menu finished.",
      "documentation": "How a platform-native context menu finished.\n\nThe selected action is dispatched through the focus context that was\nactive when the menu opened before [`Selected`](Self::Selected) is\nreported.",
      "signature": "# [doc = \" How a platform-native context menu finished.\"] # [doc = \"\"] # [doc = \" The selected action is dispatched through the focus context that was\"] # [doc = \" active when the menu opened before [`Selected`](Self::Selected) is\"] # [doc = \" reported.\"] # [derive (Copy, Clone, Debug, Eq, PartialEq)] pub enum NativeMenuOutcome { # [doc = \" The user selected an enabled action.\"] Selected, # [doc = \" The menu closed without selecting an action.\"] Dismissed, # [doc = \" The revision was cancelled/replaced. No command was dispatched.\"] Cancelled, # [doc = \" Presentation or its window/backend disappeared without a valid result.\"] # [doc = \" This is not a user dismissal.\"] Unavailable, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::app_menu::OsAction",
      "name": "OsAction",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "OS actions are actions that are recognized by the operating system This allows the operating system to provide specialized behavior for these actions",
      "documentation": "OS actions are actions that are recognized by the operating system\nThis allows the operating system to provide specialized behavior for\nthese actions",
      "signature": "# [doc = \" OS actions are actions that are recognized by the operating system\"] # [doc = \" This allows the operating system to provide specialized behavior for\"] # [doc = \" these actions\"] # [derive (Copy, Clone, Eq, PartialEq)] pub enum OsAction { # [doc = \" The 'cut' action\"] Cut, # [doc = \" The 'copy' action\"] Copy, # [doc = \" The 'paste' action\"] Paste, # [doc = \" The 'select all' action\"] SelectAll, # [doc = \" The 'undo' action\"] Undo, # [doc = \" The 'redo' action\"] Redo, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::app_menu::OsMenu",
      "name": "OsMenu",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "OS menus are menus that are recognized by the operating system This allows the operating system to provide specialized items for these menus",
      "documentation": "OS menus are menus that are recognized by the operating system\nThis allows the operating system to provide specialized items for\nthese menus",
      "signature": "# [doc = \" OS menus are menus that are recognized by the operating system\"] # [doc = \" This allows the operating system to provide specialized items for\"] # [doc = \" these menus\"] pub struct OsMenu { # [doc = \" The name of the menu\"] pub name : SharedString, # [doc = \" The type of menu\"] pub menu_type : SystemMenuType, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::app_menu::OsMenu::owned",
      "name": "owned",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "Create an OwnedOsMenu from this OsMenu",
      "documentation": "Create an OwnedOsMenu from this OsMenu",
      "signature": "pub fn owned (self) -> OwnedOsMenu",
      "cfg": [],
      "target": "OsMenu"
    },
    {
      "id": "gpui::platform::app_menu::OwnedMenu",
      "name": "OwnedMenu",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "A menu of the application, either a main menu or a submenu",
      "documentation": "A menu of the application, either a main menu or a submenu",
      "signature": "# [doc = \" A menu of the application, either a main menu or a submenu\"] # [derive (Clone)] pub struct OwnedMenu { # [doc = \" The name of the menu\"] pub name : SharedString, # [doc = \" The items in the menu\"] pub items : Vec<OwnedMenuItem>, # [doc = \" Whether this menu is disabled\"] pub disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::app_menu::OwnedMenuItem",
      "name": "OwnedMenuItem",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "The different kinds of items that can be in a menu",
      "documentation": "The different kinds of items that can be in a menu",
      "signature": "# [doc = \" The different kinds of items that can be in a menu\"] pub enum OwnedMenuItem { # [doc = \" A separator between items\"] Separator, # [doc = \" A submenu\"] Submenu (OwnedMenu), # [doc = \" A menu, managed by the system (for example, the Services menu on macOS)\"] SystemMenu (OwnedOsMenu), # [doc = \" An action that can be performed\"] Action { # [doc = \" The name of this menu item\"] name : String, # [doc = \" The action to perform when this menu item is selected\"] action : Box<dyn Action>, # [doc = \" The OS Action that corresponds to this action, if any\"] # [doc = \" See [`OsAction`] for more information\"] os_action : Option<OsAction>, # [doc = \" Whether this action is checked\"] checked : bool, # [doc = \" Whether this action is disabled\"] disabled : bool, }, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::app_menu::OwnedOsMenu",
      "name": "OwnedOsMenu",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "OS menus are menus that are recognized by the operating system This allows the operating system to provide specialized items for these menus",
      "documentation": "OS menus are menus that are recognized by the operating system\nThis allows the operating system to provide specialized items for\nthese menus",
      "signature": "# [doc = \" OS menus are menus that are recognized by the operating system\"] # [doc = \" This allows the operating system to provide specialized items for\"] # [doc = \" these menus\"] # [derive (Clone)] pub struct OwnedOsMenu { # [doc = \" The name of the menu\"] pub name : SharedString, # [doc = \" The type of menu\"] pub menu_type : SystemMenuType, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::app_menu::SystemMenuType",
      "name": "SystemMenuType",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::app_menu",
      "path": "gpui::platform::app_menu",
      "source": "crates/gpui/src/platform/app_menu.rs",
      "summary": "The type of system menu",
      "documentation": "The type of system menu",
      "signature": "# [doc = \" The type of system menu\"] # [derive (Copy, Clone, Eq, PartialEq)] pub enum SystemMenuType { # [doc = \" The 'Services' menu in the Application menu on macOS\"] Services, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::apply_contrast_and_gamma_correction",
      "name": "apply_contrast_and_gamma_correction",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Reshape atlas coverage so grayscale text composites with the same perceptual contrast and gamma curve as Direct3D and WGPU.",
      "documentation": "Reshape atlas coverage so grayscale text composites with the same\nperceptual contrast and gamma curve as Direct3D and WGPU.\n\n`sample` is the single-channel coverage from the glyph (or SVG) atlas.\n`color` is the unpremultiplied RGB tint. The returned value replaces the\nraw coverage before `color.a *= coverage`.",
      "signature": "pub fn apply_contrast_and_gamma_correction (sample : f32, color : [f32; 3], enhanced_contrast_factor : f32, gamma_ratios : [f32; 4],) -> f32",
      "cfg": []
    },
    {
      "id": "gpui::platform::get_gamma_correction_ratios",
      "name": "get_gamma_correction_ratios",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Compute gamma correction ratios for grayscale and subpixel text compositing.",
      "documentation": "Compute gamma correction ratios for grayscale and subpixel text compositing.",
      "signature": "pub fn get_gamma_correction_ratios (gamma : f32) -> [f32; 4]",
      "cfg": []
    },
    {
      "id": "gpui::platform::guess_compositor",
      "name": "guess_compositor",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "Return which compositor we're guessing we'll use. Does not attempt to connect to the given compositor.",
      "documentation": "Return which compositor we're guessing we'll use.\nDoes not attempt to connect to the given compositor.",
      "signature": "pub fn guess_compositor () -> & 'static str",
      "cfg": [
        "cfg (any (target_os = \"linux\", target_os = \"freebsd\"))"
      ]
    },
    {
      "id": "gpui::platform::keyboard::DummyKeyboardMapper",
      "name": "DummyKeyboardMapper",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keyboard",
      "path": "gpui::platform::keyboard",
      "source": "crates/gpui/src/platform/keyboard.rs",
      "summary": "A dummy implementation of the platform keyboard mapper",
      "documentation": "A dummy implementation of the platform keyboard mapper",
      "signature": "# [doc = \" A dummy implementation of the platform keyboard mapper\"] pub struct DummyKeyboardMapper;",
      "cfg": []
    },
    {
      "id": "gpui::platform::keyboard::PlatformKeyboardLayout",
      "name": "PlatformKeyboardLayout",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keyboard",
      "path": "gpui::platform::keyboard",
      "source": "crates/gpui/src/platform/keyboard.rs",
      "summary": "A trait for platform-specific keyboard layouts",
      "documentation": "A trait for platform-specific keyboard layouts",
      "signature": "# [doc = \" A trait for platform-specific keyboard layouts\"] pub trait PlatformKeyboardLayout { # [doc = \" Get the keyboard layout ID, which should be unique to the layout\"] fn id (& self) -> & str; # [doc = \" Get the keyboard layout display name\"] fn name (& self) -> & str; }",
      "cfg": []
    },
    {
      "id": "gpui::platform::keyboard::PlatformKeyboardMapper",
      "name": "PlatformKeyboardMapper",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keyboard",
      "path": "gpui::platform::keyboard",
      "source": "crates/gpui/src/platform/keyboard.rs",
      "summary": "A trait for platform-specific keyboard mappings",
      "documentation": "A trait for platform-specific keyboard mappings",
      "signature": "# [doc = \" A trait for platform-specific keyboard mappings\"] pub trait PlatformKeyboardMapper { # [doc = \" Map a key equivalent to its platform-specific representation\"] fn map_key_equivalent (& self, keystroke : Keystroke, use_key_equivalents : bool,) -> KeybindingKeystroke; # [doc = \" Get the key equivalents for the current keyboard layout,\"] # [doc = \" only used on macOS\"] fn get_key_equivalents (& self) -> Option<& HashMap<char, char>>; }",
      "cfg": []
    },
    {
      "id": "gpui::platform::keystroke::AsKeystroke",
      "name": "AsKeystroke",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "This is a helper trait so that we can simplify the implementation of some functions",
      "documentation": "This is a helper trait so that we can simplify the implementation of some functions",
      "signature": "# [doc = \" This is a helper trait so that we can simplify the implementation of some functions\"] pub trait AsKeystroke { # [doc = \" Returns the GPUI representation of the keystroke.\"] fn as_keystroke (& self) -> & Keystroke; }",
      "cfg": []
    },
    {
      "id": "gpui::platform::keystroke::Capslock",
      "name": "Capslock",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "The state of the capslock key at some point in time",
      "documentation": "The state of the capslock key at some point in time",
      "signature": "# [doc = \" The state of the capslock key at some point in time\"] # [derive (Copy, Clone, Debug, Eq, PartialEq, Default, Serialize, Deserialize, Hash, JsonSchema)] pub struct Capslock { # [doc = \" The capslock key is on\"] # [serde (default)] pub on : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::keystroke::InvalidKeystrokeError",
      "name": "InvalidKeystrokeError",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Error type for `Keystroke::parse`. This is used instead of `anyhow::Error` so that Zed can use markdown to display it.",
      "documentation": "Error type for `Keystroke::parse`. This is used instead of `anyhow::Error` so that Zed can use\nmarkdown to display it.",
      "signature": "# [doc = \" Error type for `Keystroke::parse`. This is used instead of `anyhow::Error` so that Zed can use\"] # [doc = \" markdown to display it.\"] # [derive (Debug)] pub struct InvalidKeystrokeError { # [doc = \" The invalid keystroke.\"] pub keystroke : String, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::keystroke::KEYSTROKE_PARSE_EXPECTED_MESSAGE",
      "name": "KEYSTROKE_PARSE_EXPECTED_MESSAGE",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Sentence explaining what keystroke parser expects, starting with \"Expected ...\"",
      "documentation": "Sentence explaining what keystroke parser expects, starting with \"Expected ...\"",
      "signature": "pub const KEYSTROKE_PARSE_EXPECTED_MESSAGE: & str",
      "cfg": []
    },
    {
      "id": "gpui::platform::keystroke::KeybindingKeystroke",
      "name": "KeybindingKeystroke",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Represents a keystroke that can be used in keybindings and displayed to the user.",
      "documentation": "Represents a keystroke that can be used in keybindings and displayed to the user.",
      "signature": "# [doc = \" Represents a keystroke that can be used in keybindings and displayed to the user.\"] # [derive (Debug, Clone, Eq, PartialEq, Hash)] pub struct KeybindingKeystroke { # [doc = \" The GPUI representation of the keystroke.\"] inner : Keystroke, # [doc = \" The modifiers to display.\"] # [cfg (target_os = \"windows\")] display_modifiers : Modifiers, # [doc = \" The key to display.\"] # [cfg (target_os = \"windows\")] display_key : String, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::keystroke::KeybindingKeystroke::from_keystroke",
      "name": "from_keystroke",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Create a new keybinding keystroke from the given keystroke, without any platform-specific mapping.",
      "documentation": "Create a new keybinding keystroke from the given keystroke, without any platform-specific mapping.",
      "signature": "pub fn from_keystroke (keystroke : Keystroke) -> Self",
      "cfg": [],
      "target": "KeybindingKeystroke"
    },
    {
      "id": "gpui::platform::keystroke::KeybindingKeystroke::inner",
      "name": "inner",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns the GPUI representation of the keystroke.",
      "documentation": "Returns the GPUI representation of the keystroke.",
      "signature": "pub fn inner (& self) -> & Keystroke",
      "cfg": [],
      "target": "KeybindingKeystroke"
    },
    {
      "id": "gpui::platform::keystroke::KeybindingKeystroke::key",
      "name": "key",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns the key.",
      "documentation": "Returns the key.\n\nPlatform-specific behavior:\n- On macOS and Linux, this key is the same as `inner.key`, which is the GPUI representation of the keystroke.\n- On Windows, this key is the display key, for example, a `ctrl-@` keystroke will have `inner.key` as `@` and `display_key` as `2`.",
      "signature": "pub fn key (& self) -> & str",
      "cfg": [],
      "target": "KeybindingKeystroke"
    },
    {
      "id": "gpui::platform::keystroke::KeybindingKeystroke::modifiers",
      "name": "modifiers",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns the modifiers.",
      "documentation": "Returns the modifiers.\n\nPlatform-specific behavior:\n- On macOS and Linux, this modifiers is the same as `inner.modifiers`, which is the GPUI representation of the keystroke.\n- On Windows, this modifiers is the display modifiers, for example, a `ctrl-@` keystroke will have `inner.modifiers` as\n`Modifiers::control()` and `display_modifiers` as `Modifiers::control_shift()`.",
      "signature": "pub fn modifiers (& self) -> & Modifiers",
      "cfg": [],
      "target": "KeybindingKeystroke"
    },
    {
      "id": "gpui::platform::keystroke::KeybindingKeystroke::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (inner : Keystroke, display_modifiers : Modifiers, display_key : String) -> Self",
      "cfg": [
        "cfg (target_os = \"windows\")"
      ],
      "target": "KeybindingKeystroke"
    },
    {
      "id": "gpui::platform::keystroke::KeybindingKeystroke::new_with_mapper",
      "name": "new_with_mapper",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Create a new keybinding keystroke from the given keystroke using the given keyboard mapper.",
      "documentation": "Create a new keybinding keystroke from the given keystroke using the given keyboard mapper.",
      "signature": "pub fn new_with_mapper (inner : Keystroke, use_key_equivalents : bool, keyboard_mapper : & dyn PlatformKeyboardMapper,) -> Self",
      "cfg": [],
      "target": "KeybindingKeystroke"
    },
    {
      "id": "gpui::platform::keystroke::KeybindingKeystroke::remove_key_char",
      "name": "remove_key_char",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Removes the key_char",
      "documentation": "Removes the key_char",
      "signature": "pub fn remove_key_char (& mut self)",
      "cfg": [],
      "target": "KeybindingKeystroke"
    },
    {
      "id": "gpui::platform::keystroke::KeybindingKeystroke::set_key",
      "name": "set_key",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Sets the key. On Windows this modifies both `inner.key` and `display_key`.",
      "documentation": "Sets the key. On Windows this modifies both `inner.key` and `display_key`.",
      "signature": "pub fn set_key (& mut self, key : String)",
      "cfg": [],
      "target": "KeybindingKeystroke"
    },
    {
      "id": "gpui::platform::keystroke::KeybindingKeystroke::set_modifiers",
      "name": "set_modifiers",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Sets the modifiers. On Windows this modifies both `inner.modifiers` and `display_modifiers`.",
      "documentation": "Sets the modifiers. On Windows this modifies both `inner.modifiers` and `display_modifiers`.",
      "signature": "pub fn set_modifiers (& mut self, modifiers : Modifiers)",
      "cfg": [],
      "target": "KeybindingKeystroke"
    },
    {
      "id": "gpui::platform::keystroke::KeybindingKeystroke::unparse",
      "name": "unparse",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Produces a representation of this key that Parse can understand.",
      "documentation": "Produces a representation of this key that Parse can understand.",
      "signature": "pub fn unparse (& self) -> String",
      "cfg": [],
      "target": "KeybindingKeystroke"
    },
    {
      "id": "gpui::platform::keystroke::Keystroke",
      "name": "Keystroke",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "A keystroke and associated metadata generated by the platform",
      "documentation": "A keystroke and associated metadata generated by the platform",
      "signature": "# [doc = \" A keystroke and associated metadata generated by the platform\"] # [derive (Clone, Debug, Eq, PartialEq, Default, Deserialize, Hash)] pub struct Keystroke { # [doc = \" the state of the modifier keys at the time the keystroke was generated\"] pub modifiers : Modifiers, # [doc = \" key is the character printed on the key that was pressed\"] # [doc = \" e.g. for option-s, key is \\\"s\\\"\"] # [doc = \" On layouts that do not have ascii keys (e.g. Thai)\"] # [doc = \" this will be the ASCII-equivalent character (q instead of ๆ),\"] # [doc = \" and the typed character will be present in key_char.\"] pub key : String, # [doc = \" key_char is the character that could have been typed when\"] # [doc = \" this binding was pressed.\"] # [doc = \" e.g. for s this is \\\"s\\\", for option-s \\\"ß\\\", and cmd-s None\"] pub key_char : Option<String>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::keystroke::Keystroke::is_ime_in_progress",
      "name": "is_ime_in_progress",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns true if this keystroke left the ime system in an incomplete state.",
      "documentation": "Returns true if this keystroke left\nthe ime system in an incomplete state.",
      "signature": "pub fn is_ime_in_progress (& self) -> bool",
      "cfg": [],
      "target": "Keystroke"
    },
    {
      "id": "gpui::platform::keystroke::Keystroke::parse",
      "name": "parse",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "key syntax is: `[secondary-][ctrl-][alt-][shift-][cmd-][fn-]key[->key_char]` key_char syntax is only used for generating test events, secondary means \"cmd\" on macOS and \"ctrl\" on other platforms when matching a key with an key_char set will be matched without it.",
      "documentation": "key syntax is:\n`[secondary-][ctrl-][alt-][shift-][cmd-][fn-]key[->key_char]`\nkey_char syntax is only used for generating test events,\nsecondary means \"cmd\" on macOS and \"ctrl\" on other platforms\nwhen matching a key with an key_char set will be matched without it.",
      "signature": "pub fn parse (source : & str) -> std::result::Result<Self, InvalidKeystrokeError>",
      "cfg": [],
      "target": "Keystroke"
    },
    {
      "id": "gpui::platform::keystroke::Keystroke::should_match",
      "name": "should_match",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "When matching a key we cannot know whether the user intended to type the key_char or the key itself. On some non-US keyboards keys we use in our bindings are behind option (for example `$` is typed `alt-ç` on a Czech keyboard), and on some keyboards the IME handler converts a sequence of keys into a specific character (for example `\"` is typed as `\" space` on a brazilian keyboard).",
      "documentation": "When matching a key we cannot know whether the user intended to type\nthe key_char or the key itself. On some non-US keyboards keys we use in our\nbindings are behind option (for example `$` is typed `alt-ç` on a Czech keyboard),\nand on some keyboards the IME handler converts a sequence of keys into a\nspecific character (for example `\"` is typed as `\" space` on a brazilian keyboard).\n\nThis method assumes that `self` was typed and `target' is in the keymap, and checks\nboth possibilities for self against the target.",
      "signature": "pub fn should_match (& self, target : & KeybindingKeystroke) -> bool",
      "cfg": [],
      "target": "Keystroke"
    },
    {
      "id": "gpui::platform::keystroke::Keystroke::unparse",
      "name": "unparse",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Produces a representation of this key that Parse can understand.",
      "documentation": "Produces a representation of this key that Parse can understand.",
      "signature": "pub fn unparse (& self) -> String",
      "cfg": [],
      "target": "Keystroke"
    },
    {
      "id": "gpui::platform::keystroke::Keystroke::with_simulated_ime",
      "name": "with_simulated_ime",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns a new keystroke with the key_char filled. This is used for dispatch_keystroke where we want users to be able to simulate typing \"space\", etc.",
      "documentation": "Returns a new keystroke with the key_char filled.\nThis is used for dispatch_keystroke where we want users to\nbe able to simulate typing \"space\", etc.",
      "signature": "pub fn with_simulated_ime (mut self) -> Self",
      "cfg": [],
      "target": "Keystroke"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers",
      "name": "Modifiers",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "The state of the modifier keys at some point in time",
      "documentation": "The state of the modifier keys at some point in time",
      "signature": "# [doc = \" The state of the modifier keys at some point in time\"] # [derive (Copy, Clone, Debug, Eq, PartialEq, Default, Serialize, Deserialize, Hash, JsonSchema)] pub struct Modifiers { # [doc = \" The control key\"] # [serde (default)] pub control : bool, # [doc = \" The alt key\"] # [doc = \" Sometimes also known as the 'meta' key\"] # [serde (default)] pub alt : bool, # [doc = \" The shift key\"] # [serde (default)] pub shift : bool, # [doc = \" The command key, on macos\"] # [doc = \" the windows key, on windows\"] # [doc = \" the super key, on linux\"] # [serde (default)] pub platform : bool, # [doc = \" The function key\"] # [serde (default)] pub function : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::alt",
      "name": "alt",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns [`Modifiers`] with just alt.",
      "documentation": "Returns [`Modifiers`] with just alt.",
      "signature": "pub fn alt () -> Modifiers",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::command",
      "name": "command",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns [`Modifiers`] with just the command key.",
      "documentation": "Returns [`Modifiers`] with just the command key.",
      "signature": "pub fn command () -> Modifiers",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::command_shift",
      "name": "command_shift",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns [`Modifiers`] with command + shift.",
      "documentation": "Returns [`Modifiers`] with command + shift.",
      "signature": "pub fn command_shift () -> Modifiers",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::control",
      "name": "control",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns [`Modifiers`] with just control.",
      "documentation": "Returns [`Modifiers`] with just control.",
      "signature": "pub fn control () -> Modifiers",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::control_shift",
      "name": "control_shift",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns [`Modifiers`] with command + shift.",
      "documentation": "Returns [`Modifiers`] with command + shift.",
      "signature": "pub fn control_shift () -> Modifiers",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::function",
      "name": "function",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns [`Modifiers`] with just function.",
      "documentation": "Returns [`Modifiers`] with just function.",
      "signature": "pub fn function () -> Modifiers",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::is_subset_of",
      "name": "is_subset_of",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Checks if this [`Modifiers`] is a subset of another [`Modifiers`].",
      "documentation": "Checks if this [`Modifiers`] is a subset of another [`Modifiers`].",
      "signature": "pub fn is_subset_of (& self, other : & Modifiers) -> bool",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::modified",
      "name": "modified",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns whether any modifier key is pressed.",
      "documentation": "Returns whether any modifier key is pressed.",
      "signature": "pub fn modified (& self) -> bool",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::none",
      "name": "none",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns [`Modifiers`] with no modifiers.",
      "documentation": "Returns [`Modifiers`] with no modifiers.",
      "signature": "pub fn none () -> Modifiers",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::number_of_modifiers",
      "name": "number_of_modifiers",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns how many modifier keys are pressed.",
      "documentation": "Returns how many modifier keys are pressed.",
      "signature": "pub fn number_of_modifiers (& self) -> u8",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::secondary",
      "name": "secondary",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Whether the semantically 'secondary' modifier key is pressed.",
      "documentation": "Whether the semantically 'secondary' modifier key is pressed.\n\nOn macOS, this is the command key.\nOn Linux and Windows, this is the control key.",
      "signature": "pub fn secondary (& self) -> bool",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::secondary_key",
      "name": "secondary_key",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "A Returns [`Modifiers`] with just the secondary key pressed.",
      "documentation": "A Returns [`Modifiers`] with just the secondary key pressed.",
      "signature": "pub fn secondary_key () -> Modifiers",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::shift",
      "name": "shift",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns [`Modifiers`] with just shift.",
      "documentation": "Returns [`Modifiers`] with just shift.",
      "signature": "pub fn shift () -> Modifiers",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::super_key",
      "name": "super_key",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns [`Modifiers`] with just the super key.",
      "documentation": "Returns [`Modifiers`] with just the super key.",
      "signature": "pub fn super_key () -> Modifiers",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::keystroke::Modifiers::windows",
      "name": "windows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::keystroke",
      "path": "gpui::platform::keystroke",
      "source": "crates/gpui/src/platform/keystroke.rs",
      "summary": "Returns [`Modifiers`] with just the windows key.",
      "documentation": "Returns [`Modifiers`] with just the windows key.",
      "signature": "pub fn windows () -> Modifiers",
      "cfg": [],
      "target": "Modifiers"
    },
    {
      "id": "gpui::platform::layer_shell::KeyboardInteractivity",
      "name": "KeyboardInteractivity",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::layer_shell",
      "path": "gpui::platform::layer_shell",
      "source": "crates/gpui/src/platform/layer_shell.rs",
      "summary": "Keyboard interactivity mode for the layer_shell surfaces.",
      "documentation": "Keyboard interactivity mode for the layer_shell surfaces.",
      "signature": "# [doc = \" Keyboard interactivity mode for the layer_shell surfaces.\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq)] pub enum KeyboardInteractivity { # [doc = \" No keyboard inputs will be delivered to the surface and it won't be able to receive\"] # [doc = \" keyboard focus.\"] None, # [doc = \" The surface will receive exclusive keyboard focus as long as it is above the shell surface\"] # [doc = \" layer, and no other layer_shell surfaces are above it.\"] Exclusive, # [doc = \" The surface can be focused similarly to a normal window.\"] # [default] OnDemand, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::layer_shell::Layer",
      "name": "Layer",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::layer_shell",
      "path": "gpui::platform::layer_shell",
      "source": "crates/gpui/src/platform/layer_shell.rs",
      "summary": "The layer the surface is rendered on. Multiple surfaces can share a layer, and ordering within a single layer is undefined.",
      "documentation": "The layer the surface is rendered on. Multiple surfaces can share a layer, and ordering within\na single layer is undefined.",
      "signature": "# [doc = \" The layer the surface is rendered on. Multiple surfaces can share a layer, and ordering within\"] # [doc = \" a single layer is undefined.\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq)] pub enum Layer { # [doc = \" The background layer, typically used for wallpapers.\"] Background, # [doc = \" The bottom layer.\"] Bottom, # [doc = \" The top layer, typically used for fullscreen windows.\"] Top, # [doc = \" The overlay layer, used for surfaces that should always be on top.\"] # [default] Overlay, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::layer_shell::LayerShellNotSupportedError",
      "name": "LayerShellNotSupportedError",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::layer_shell",
      "path": "gpui::platform::layer_shell",
      "source": "crates/gpui/src/platform/layer_shell.rs",
      "summary": "An error indicating that an action failed because the compositor doesn't support the required layer_shell protocol.",
      "documentation": "An error indicating that an action failed because the compositor doesn't support the required\nlayer_shell protocol.",
      "signature": "# [doc = \" An error indicating that an action failed because the compositor doesn't support the required\"] # [doc = \" layer_shell protocol.\"] # [derive (Debug, Error)] # [error (\"Compositor doesn't support zwlr_layer_shell_v1\")] pub struct LayerShellNotSupportedError;",
      "cfg": []
    },
    {
      "id": "gpui::platform::layer_shell::LayerShellOptions",
      "name": "LayerShellOptions",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::layer_shell",
      "path": "gpui::platform::layer_shell",
      "source": "crates/gpui/src/platform/layer_shell.rs",
      "summary": "Options for creating a layer_shell window.",
      "documentation": "Options for creating a layer_shell window.",
      "signature": "# [doc = \" Options for creating a layer_shell window.\"] # [derive (Clone, Debug, Default, PartialEq, Eq)] pub struct LayerShellOptions { # [doc = \" The namespace for the surface, mostly used by compositors to apply rules, can not be\"] # [doc = \" changed after the surface is created.\"] pub namespace : String, # [doc = \" The layer the surface is rendered on.\"] pub layer : Layer, # [doc = \" The anchor point of the surface.\"] pub anchor : Anchor, # [doc = \" Requests that the compositor avoids occluding an area with other surfaces.\"] pub exclusive_zone : Option<Pixels>, # [doc = \" The anchor point of the exclusive zone, will be determined using the anchor if left\"] # [doc = \" unspecified.\"] pub exclusive_edge : Option<Anchor>, # [doc = \" Margins between the surface and its anchor point(s).\"] # [doc = \" Specified in CSS order: top, right, bottom, left.\"] pub margin : Option<(Pixels, Pixels, Pixels, Pixels)>, # [doc = \" How keyboard events should be delivered to the surface.\"] pub keyboard_interactivity : KeyboardInteractivity, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::native_menu::NativeMenuError",
      "name": "NativeMenuError",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "Native capability/refusal errors. Only `NotSupported` permits an automatic in-window fallback; cancellation failure can leave an old native menu open.",
      "documentation": "Native capability/refusal errors. Only `NotSupported` permits an automatic\nin-window fallback; cancellation failure can leave an old native menu open.",
      "signature": "# [doc = \" Native capability/refusal errors. Only `NotSupported` permits an automatic\"] # [doc = \" in-window fallback; cancellation failure can leave an old native menu open.\"] # [derive (Debug, thiserror::Error)] pub enum NativeMenuError { # [doc = \" This platform does not present application context menus natively.\"] # [error (transparent)] NotSupported (# [from] NativeMenuNotSupportedError), # [doc = \" The OS refused to end an existing tracking loop. Its command is already\"] # [doc = \" invalidated, but its UI must not be reported as closed.\"] # [error (\"native context-menu cancellation failed: {0}\")] CancellationFailed (String), }",
      "cfg": []
    },
    {
      "id": "gpui::platform::native_menu::NativeMenuSession",
      "name": "NativeMenuSession",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "Awaitable native menu presentation. Retain `id()` for cancellation/revision checks and `effect_owner()` when installing an asynchronous completion callback. Re-enter that owner with `App::with_effect_owner` inside callbacks; awaiting a future does not grant ambient authority to its caller.",
      "documentation": "Awaitable native menu presentation. Retain `id()` for cancellation/revision\nchecks and `effect_owner()` when installing an asynchronous completion\ncallback. Re-enter that owner with `App::with_effect_owner` inside callbacks;\nawaiting a future does not grant ambient authority to its caller.",
      "signature": "# [doc = \" Awaitable native menu presentation. Retain `id()` for cancellation/revision\"] # [doc = \" checks and `effect_owner()` when installing an asynchronous completion\"] # [doc = \" callback. Re-enter that owner with `App::with_effect_owner` inside callbacks;\"] # [doc = \" awaiting a future does not grant ambient authority to its caller.\"] pub struct NativeMenuSession { pub (crate) id : NativeMenuSessionId, pub (crate) owner : Option<EffectOwner>, pub (crate) task : Task<NativeMenuOutcome>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::native_menu::NativeMenuSession::detach",
      "name": "detach",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "Allows dispatch/completion to run without awaiting its result.",
      "documentation": "Allows dispatch/completion to run without awaiting its result.",
      "signature": "pub fn detach (self)",
      "cfg": [],
      "target": "NativeMenuSession"
    },
    {
      "id": "gpui::platform::native_menu::NativeMenuSession::effect_owner",
      "name": "effect_owner",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "Explicit effect authority captured at presentation, never from focus.",
      "documentation": "Explicit effect authority captured at presentation, never from focus.",
      "signature": "pub fn effect_owner (& self) -> Option<EffectOwner>",
      "cfg": [],
      "target": "NativeMenuSession"
    },
    {
      "id": "gpui::platform::native_menu::NativeMenuSession::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "The revision that `Window::cancel_context_menu` can invalidate.",
      "documentation": "The revision that `Window::cancel_context_menu` can invalidate.",
      "signature": "pub fn id (& self) -> NativeMenuSessionId",
      "cfg": [],
      "target": "NativeMenuSession"
    },
    {
      "id": "gpui::platform::native_menu::NativeMenuSessionId",
      "name": "NativeMenuSessionId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "Opaque identity for one native menu revision, unique across windows/owners.",
      "documentation": "Opaque identity for one native menu revision, unique across windows/owners.",
      "signature": "# [doc = \" Opaque identity for one native menu revision, unique across windows/owners.\"] # [derive (Clone, Copy, Debug, Eq, PartialEq, Hash)] pub struct NativeMenuSessionId (u64);",
      "cfg": []
    },
    {
      "id": "gpui::platform::native_menu::PlatformNativeMenuOutcome",
      "name": "PlatformNativeMenuOutcome",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "Backend result, distinct from unsupported presentation and transport loss.",
      "documentation": "Backend result, distinct from unsupported presentation and transport loss.",
      "signature": "# [doc = \" Backend result, distinct from unsupported presentation and transport loss.\"] pub enum PlatformNativeMenuOutcome { # [doc = \" An enabled native command was chosen.\"] Selected (Box<dyn Action>), # [doc = \" Tracking ended without choosing a command.\"] Dismissed, # [doc = \" Tracking ended after the revision was invalidated.\"] Cancelled, # [doc = \" Presentation failed; this is not user dismissal.\"] Unavailable, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::native_menu::PlatformNativeMenuSession",
      "name": "PlatformNativeMenuSession",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "Shared foreground-only lifecycle gate for native backend implementations. Replacements invalidate the old gate and await `finished()` before entering another modal native loop. A cancelled pending presentation must still wait for its predecessor before finishing, preserving the replacement chain.",
      "documentation": "Shared foreground-only lifecycle gate for native backend implementations.\nReplacements invalidate the old gate and await `finished()` before entering\nanother modal native loop. A cancelled pending presentation must still wait\nfor its predecessor before finishing, preserving the replacement chain.",
      "signature": "# [doc = \" Shared foreground-only lifecycle gate for native backend implementations.\"] # [doc = \" Replacements invalidate the old gate and await `finished()` before entering\"] # [doc = \" another modal native loop. A cancelled pending presentation must still wait\"] # [doc = \" for its predecessor before finishing, preserving the replacement chain.\"] # [derive (Clone)] pub struct PlatformNativeMenuSession { id : NativeMenuSessionId, state : Rc<PlatformNativeMenuState>, finished : Shared<oneshot::Receiver<()>>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::native_menu::PlatformNativeMenuSession::complete",
      "name": "complete",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "Called only after tracking exits, or before tracking when presentation is cancelled/unavailable. Repeated/late completion cannot send twice.",
      "documentation": "Called only after tracking exits, or before tracking when presentation\nis cancelled/unavailable. Repeated/late completion cannot send twice.",
      "signature": "pub fn complete (& self, outcome : PlatformNativeMenuOutcome)",
      "cfg": [],
      "target": "PlatformNativeMenuSession"
    },
    {
      "id": "gpui::platform::native_menu::PlatformNativeMenuSession::finished",
      "name": "finished",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "Waits until tracking has ended (or its backend has disappeared).",
      "documentation": "Waits until tracking has ended (or its backend has disappeared).",
      "signature": "pub async fn finished (& self)",
      "cfg": [],
      "target": "PlatformNativeMenuSession"
    },
    {
      "id": "gpui::platform::native_menu::PlatformNativeMenuSession::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "The identity to compare before calling a native cancellation API.",
      "documentation": "The identity to compare before calling a native cancellation API.",
      "signature": "pub fn id (& self) -> NativeMenuSessionId",
      "cfg": [],
      "target": "PlatformNativeMenuSession"
    },
    {
      "id": "gpui::platform::native_menu::PlatformNativeMenuSession::invalidate",
      "name": "invalidate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "Prevents any late command from this presentation from being delivered. This does not claim that its native UI has closed.",
      "documentation": "Prevents any late command from this presentation from being delivered.\nThis does not claim that its native UI has closed.",
      "signature": "pub fn invalidate (& self)",
      "cfg": [],
      "target": "PlatformNativeMenuSession"
    },
    {
      "id": "gpui::platform::native_menu::PlatformNativeMenuSession::is_invalidated",
      "name": "is_invalidated",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "Whether the presentation must not begin tracking or deliver a command.",
      "documentation": "Whether the presentation must not begin tracking or deliver a command.",
      "signature": "pub fn is_invalidated (& self) -> bool",
      "cfg": [],
      "target": "PlatformNativeMenuSession"
    },
    {
      "id": "gpui::platform::native_menu::PlatformNativeMenuSession::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::native_menu",
      "path": "gpui::platform::native_menu",
      "source": "crates/gpui/src/platform/native_menu.rs",
      "summary": "Creates one tracking lifetime for the Window-issued identity.",
      "documentation": "Creates one tracking lifetime for the Window-issued identity.",
      "signature": "pub fn new (id : NativeMenuSessionId) -> (Self, oneshot::Receiver<PlatformNativeMenuOutcome>)",
      "cfg": [],
      "target": "PlatformNativeMenuSession"
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewHosting",
      "name": "PlatformViewHosting",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "The bookkeeping a platform layer needs while it hosts native views, kept apart from the native calls so attach, reposition, restack and detach sequencing can be tested without a window.",
      "documentation": "The bookkeeping a platform layer needs while it hosts native views, kept\napart from the native calls so attach, reposition, restack and detach\nsequencing can be tested without a window.\n\n`A` carries whatever the platform layer captured at attach time and must put\nback verbatim at detach: on Windows the child window's parent, window styles\nand window region.",
      "signature": "# [doc = \" The bookkeeping a platform layer needs while it hosts native views, kept\"] # [doc = \" apart from the native calls so attach, reposition, restack and detach\"] # [doc = \" sequencing can be tested without a window.\"] # [doc = \"\"] # [doc = \" `A` carries whatever the platform layer captured at attach time and must put\"] # [doc = \" back verbatim at detach: on Windows the child window's parent, window styles\"] # [doc = \" and window region.\"] pub struct PlatformViewHosting<A> { # [doc = \" Hosted views in the stacking order last applied, bottom-most first.\"] hosted : Vec<HostedView<A>>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewHosting::attach",
      "name": "attach",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Records a view as hosted, stacked above every view hosted so far.",
      "documentation": "Records a view as hosted, stacked above every view hosted so far.\n\nAttaching a view that is already hosted replaces what has to be restored\nfor it and forgets its applied frame, so the next placement is applied\nunconditionally.",
      "signature": "pub fn attach (& mut self, id : PlatformViewId, attributes : A)",
      "cfg": [],
      "target": "PlatformViewHosting<A>"
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewHosting::attributes",
      "name": "attributes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Returns what the platform layer must restore for a hosted view.",
      "documentation": "Returns what the platform layer must restore for a hosted view.",
      "signature": "pub fn attributes (& self, id : PlatformViewId) -> Option<& A>",
      "cfg": [],
      "target": "PlatformViewHosting<A>"
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewHosting::contains",
      "name": "contains",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Returns whether the given view is hosted.",
      "documentation": "Returns whether the given view is hosted.",
      "signature": "pub fn contains (& self, id : PlatformViewId) -> bool",
      "cfg": [],
      "target": "PlatformViewHosting<A>"
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewHosting::detach",
      "name": "detach",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Forgets a hosted view, returning what the platform layer must restore.",
      "documentation": "Forgets a hosted view, returning what the platform layer must restore.",
      "signature": "pub fn detach (& mut self, id : PlatformViewId) -> Option<A>",
      "cfg": [],
      "target": "PlatformViewHosting<A>"
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewHosting::detach_all",
      "name": "detach_all",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Forgets every hosted view, bottom-most first.",
      "documentation": "Forgets every hosted view, bottom-most first.",
      "signature": "pub fn detach_all (& mut self) -> Vec<(PlatformViewId, A)>",
      "cfg": [],
      "target": "PlatformViewHosting<A>"
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewHosting::ids",
      "name": "ids",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Returns the hosted views in the stacking order last applied, bottom-most first.",
      "documentation": "Returns the hosted views in the stacking order last applied, bottom-most\nfirst.",
      "signature": "pub fn ids (& self) -> Vec<PlatformViewId>",
      "cfg": [],
      "target": "PlatformViewHosting<A>"
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewHosting::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Returns true while no view is hosted.",
      "documentation": "Returns true while no view is hosted.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "PlatformViewHosting<A>"
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewHosting::place",
      "name": "place",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Records the frame a hosted view was laid out at, returning the physical rectangle to move it to, or `None` when it already sits there.",
      "documentation": "Records the frame a hosted view was laid out at, returning the physical\nrectangle to move it to, or `None` when it already sits there.",
      "signature": "pub fn place (& mut self, id : PlatformViewId, bounds : Bounds<Pixels>, scale_factor : f32,) -> Option<Bounds<DevicePixels>>",
      "cfg": [],
      "target": "PlatformViewHosting<A>"
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewHosting::restack",
      "name": "restack",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Adopts `order` — bottom-most first — as the stacking order, returning true when it differs from the order last applied and the platform layer therefore has to restack.",
      "documentation": "Adopts `order` — bottom-most first — as the stacking order, returning\ntrue when it differs from the order last applied and the platform layer\ntherefore has to restack.\n\nIds that are not hosted are ignored, and hosted views the frame did not\nmention keep their relative order beneath the ordered ones.",
      "signature": "pub fn restack (& mut self, order : & [PlatformViewId]) -> bool",
      "cfg": [],
      "target": "PlatformViewHosting<A>"
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewId",
      "name": "PlatformViewId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "The stable identity of a hosted platform view.",
      "documentation": "The stable identity of a hosted platform view.\n\nTwo handles referring to the same native view compare equal.",
      "signature": "# [doc = \" The stable identity of a hosted platform view.\"] # [doc = \"\"] # [doc = \" Two handles referring to the same native view compare equal.\"] # [derive (Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct PlatformViewId (usize);",
      "cfg": []
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewId::as_usize",
      "name": "as_usize",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Returns the identity as an opaque integer, useful for logging and for platform layers that key their own bookkeeping by view identity.",
      "documentation": "Returns the identity as an opaque integer, useful for logging and for\nplatform layers that key their own bookkeeping by view identity.",
      "signature": "pub fn as_usize (self) -> usize",
      "cfg": [],
      "target": "PlatformViewId"
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewPlacement",
      "name": "PlatformViewPlacement",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "A hosted view and the window-space bounds GPUI laid it out at.",
      "documentation": "A hosted view and the window-space bounds GPUI laid it out at.\n\nBounds use GPUI's window coordinate space: logical pixels with the origin at\nthe window's top-left corner and y growing downwards. They are already\nsnapped to the display's device-pixel grid.",
      "signature": "# [doc = \" A hosted view and the window-space bounds GPUI laid it out at.\"] # [doc = \"\"] # [doc = \" Bounds use GPUI's window coordinate space: logical pixels with the origin at\"] # [doc = \" the window's top-left corner and y growing downwards. They are already\"] # [doc = \" snapped to the display's device-pixel grid.\"] # [derive (Clone, Debug)] pub struct PlatformViewPlacement { # [doc = \" The hosted view.\"] pub handle : PlatformViewHandle, # [doc = \" Where the view belongs within the window.\"] pub bounds : Bounds<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewPlacement::clip_bounds",
      "name": "clip_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "The visible part of [`bounds`](Self::bounds) after GPUI's nested content masks were applied.",
      "documentation": "The visible part of [`bounds`](Self::bounds) after GPUI's nested content\nmasks were applied.\n\nNative hosts keep the view at its full layout bounds and crop it to this\nrectangle. Resizing the view itself to this rectangle would change the\ncontent's layout instead of clipping it.",
      "signature": "pub fn clip_bounds (& self) -> Bounds<Pixels>",
      "cfg": [],
      "target": "PlatformViewPlacement"
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewPlacement::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Records a view's full layout rectangle and the visible rectangle left by clipping. The clip is constrained to the layout rectangle.",
      "documentation": "Records a view's full layout rectangle and the visible rectangle left by\nclipping. The clip is constrained to the layout rectangle.",
      "signature": "pub fn new (handle : PlatformViewHandle, bounds : Bounds<Pixels>, clip_bounds : Bounds<Pixels>,) -> Self",
      "cfg": [],
      "target": "PlatformViewPlacement"
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewUpdate",
      "name": "PlatformViewUpdate",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "The platform-view work owed by a single drawn frame.",
      "documentation": "The platform-view work owed by a single drawn frame.",
      "signature": "# [doc = \" The platform-view work owed by a single drawn frame.\"] # [derive (Clone, Debug, Default, PartialEq)] pub struct PlatformViewUpdate { # [doc = \" Views painted by this frame, in paint order, each at its current bounds.\"] # [doc = \" A view that was not hosted before is attached; one that already was is\"] # [doc = \" repositioned.\"] pub placements : Vec<PlatformViewPlacement>, # [doc = \" Views that were hosted by the previous frame but were not painted by this\"] # [doc = \" one, and so must be hidden and detached.\"] pub detached : Vec<PlatformViewId>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::platform_view::PlatformViewUpdate::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Returns true when the frame asks for no platform-view work at all.",
      "documentation": "Returns true when the frame asks for no platform-view work at all.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "PlatformViewUpdate"
    },
    {
      "id": "gpui::platform::platform_view::flip_bounds_origin_y",
      "name": "flip_bounds_origin_y",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Converts window-space bounds, whose origin is the window's top-left corner with y growing downwards, into the origin a bottom-left-origin coordinate system wants — the convention AppKit uses for a non-flipped `NSView`.",
      "documentation": "Converts window-space bounds, whose origin is the window's top-left corner\nwith y growing downwards, into the origin a bottom-left-origin coordinate\nsystem wants — the convention AppKit uses for a non-flipped `NSView`.\n\n`container_height` is the height of the view the hosted view is placed in.",
      "signature": "pub fn flip_bounds_origin_y (bounds : Bounds<Pixels>, container_height : Pixels) -> Point<Pixels>",
      "cfg": []
    },
    {
      "id": "gpui::platform::platform_view::platform_view_content_origin",
      "name": "platform_view_content_origin",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Places a full-size native view inside a clipped, non-flipped native container.",
      "documentation": "Places a full-size native view inside a clipped, non-flipped native\ncontainer.\n\nBoth inputs use GPUI's top-left-origin window coordinates. The returned\npoint uses the clip container's bottom-left-origin coordinates, as AppKit\ndoes for an ordinary `NSView`.",
      "signature": "pub fn platform_view_content_origin (bounds : Bounds<Pixels>, clip_bounds : Bounds<Pixels>,) -> Point<Pixels>",
      "cfg": []
    },
    {
      "id": "gpui::platform::platform_view::platform_view_physical_bounds",
      "name": "platform_view_physical_bounds",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Converts window-space bounds into the physical-pixel rectangle a platform layer positions a native view at.",
      "documentation": "Converts window-space bounds into the physical-pixel rectangle a platform\nlayer positions a native view at.\n\nWin32 and the other window systems that address windows in physical pixels\nneed this conversion; the size is clamped at zero so a degenerate layout\ncannot ask a native view for a negative extent.",
      "signature": "pub fn platform_view_physical_bounds (bounds : Bounds<Pixels>, scale_factor : f32,) -> Bounds<DevicePixels>",
      "cfg": []
    },
    {
      "id": "gpui::platform::platform_view::reexport-1",
      "name": "handle :: PlatformViewHandle",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use handle::PlatformViewHandle;",
      "cfg": []
    },
    {
      "id": "gpui::platform::platform_view::snap_platform_view_bounds",
      "name": "snap_platform_view_bounds",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::platform_view",
      "path": "gpui::platform::platform_view",
      "source": "crates/gpui/src/platform/platform_view.rs",
      "summary": "Rounds window-space bounds onto the display's device-pixel grid, returning logical pixels again.",
      "documentation": "Rounds window-space bounds onto the display's device-pixel grid, returning\nlogical pixels again.\n\nNative views are positioned in logical points, so honoring the scale factor\nmeans landing on the same grid the renderer rasterizes GPUI content to;\notherwise a hosted view drifts by a fraction of a pixel against the GPUI\ncontent around it.",
      "signature": "pub fn snap_platform_view_bounds (bounds : Bounds<Pixels>, scale_factor : f32) -> Bounds<Pixels>",
      "cfg": []
    },
    {
      "id": "gpui::platform::popup::PopupAnchor",
      "name": "PopupAnchor",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::popup",
      "path": "gpui::platform::popup",
      "source": "crates/gpui/src/platform/popup.rs",
      "summary": "The point of the anchor rectangle that a popup is anchored to.",
      "documentation": "The point of the anchor rectangle that a popup is anchored to.",
      "signature": "# [doc = \" The point of the anchor rectangle that a popup is anchored to.\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq)] pub enum PopupAnchor { # [doc = \" Anchor to the center of the anchor rectangle.\"] # [default] Center, # [doc = \" Anchor to the center of the top edge.\"] Top, # [doc = \" Anchor to the center of the bottom edge.\"] Bottom, # [doc = \" Anchor to the center of the left edge.\"] Left, # [doc = \" Anchor to the center of the right edge.\"] Right, # [doc = \" Anchor to the top-left corner.\"] TopLeft, # [doc = \" Anchor to the bottom-left corner.\"] BottomLeft, # [doc = \" Anchor to the top-right corner.\"] TopRight, # [doc = \" Anchor to the bottom-right corner.\"] BottomRight, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::popup::PopupGravity",
      "name": "PopupGravity",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::popup",
      "path": "gpui::platform::popup",
      "source": "crates/gpui/src/platform/popup.rs",
      "summary": "The direction in which a popup extends away from its anchor point.",
      "documentation": "The direction in which a popup extends away from its anchor point.\n\nFor instance, a gravity of [`PopupGravity::BottomRight`] places the popup below and to the\nright of the anchor point.",
      "signature": "# [doc = \" The direction in which a popup extends away from its anchor point.\"] # [doc = \"\"] # [doc = \" For instance, a gravity of [`PopupGravity::BottomRight`] places the popup below and to the\"] # [doc = \" right of the anchor point.\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq)] pub enum PopupGravity { # [doc = \" The popup is centered over the anchor point.\"] # [default] Center, # [doc = \" The popup extends upwards from the anchor point.\"] Top, # [doc = \" The popup extends downwards from the anchor point.\"] Bottom, # [doc = \" The popup extends to the left of the anchor point.\"] Left, # [doc = \" The popup extends to the right of the anchor point.\"] Right, # [doc = \" The popup extends up and to the left of the anchor point.\"] TopLeft, # [doc = \" The popup extends down and to the left of the anchor point.\"] BottomLeft, # [doc = \" The popup extends up and to the right of the anchor point.\"] TopRight, # [doc = \" The popup extends down and to the right of the anchor point.\"] BottomRight, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::popup::PopupNotSupportedError",
      "name": "PopupNotSupportedError",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::popup",
      "path": "gpui::platform::popup",
      "source": "crates/gpui/src/platform/popup.rs",
      "summary": "Returned when the current platform has no native popup implementation yet.",
      "documentation": "Returned when the current platform has no native popup implementation yet.\n\nNative popups are separate from gpui's in-window popovers, which are drawn as elements inside\nan existing window. A caller that wants a popup on every platform should treat this error as\na cue to fall back to that in-window rendering.",
      "signature": "# [doc = \" Returned when the current platform has no native popup implementation yet.\"] # [doc = \"\"] # [doc = \" Native popups are separate from gpui's in-window popovers, which are drawn as elements inside\"] # [doc = \" an existing window. A caller that wants a popup on every platform should treat this error as\"] # [doc = \" a cue to fall back to that in-window rendering.\"] # [derive (Debug, Error)] # [error (\"popups are not supported on this platform\")] pub struct PopupNotSupportedError;",
      "cfg": []
    },
    {
      "id": "gpui::platform::popup::PopupOptions",
      "name": "PopupOptions",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::popup",
      "path": "gpui::platform::popup",
      "source": "crates/gpui/src/platform/popup.rs",
      "summary": "Options for a parent-anchored popup window such as a menu, dropdown, context menu or tooltip.",
      "documentation": "Options for a parent-anchored popup window such as a menu, dropdown, context menu or tooltip.\n\nA popup is placed relative to an anchor rectangle on its parent window rather than at an\nabsolute screen position. The platform resolves the final position, so this works both on\nsystems where the compositor owns window placement (Wayland) and on platforms with absolute\ncoordinates.\n\nThe popup's size comes from [`WindowOptions::window_bounds`](crate::WindowOptions), whose\norigin is ignored. All coordinates are in logical pixels.",
      "signature": "# [doc = \" Options for a parent-anchored popup window such as a menu, dropdown, context menu or tooltip.\"] # [doc = \"\"] # [doc = \" A popup is placed relative to an anchor rectangle on its parent window rather than at an\"] # [doc = \" absolute screen position. The platform resolves the final position, so this works both on\"] # [doc = \" systems where the compositor owns window placement (Wayland) and on platforms with absolute\"] # [doc = \" coordinates.\"] # [doc = \"\"] # [doc = \" The popup's size comes from [`WindowOptions::window_bounds`](crate::WindowOptions), whose\"] # [doc = \" origin is ignored. All coordinates are in logical pixels.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct PopupOptions { # [doc = \" The window the popup is anchored to.\"] pub parent : AnyWindowHandle, # [doc = \" The rectangle the popup is positioned relative to, in the parent window's coordinate\"] # [doc = \" space (the same space element bounds are in). For example, a dropdown menu uses the\"] # [doc = \" bounds of the button that opened it.\"] pub anchor_rect : Bounds<Pixels>, # [doc = \" Which point of [`Self::anchor_rect`] the popup is anchored to.\"] pub anchor : PopupAnchor, # [doc = \" The direction in which the popup extends away from the anchor point. A dropdown that\"] # [doc = \" drops below its button anchors to [`PopupAnchor::BottomLeft`] with a gravity of\"] # [doc = \" [`PopupGravity::BottomRight`] so it grows down and to the right.\"] pub gravity : PopupGravity, # [doc = \" How the platform may adjust the popup if the requested placement would put it off-screen.\"] pub constraint_adjustment : PopupConstraintAdjustment, # [doc = \" An additional offset applied to the popup after anchoring.\"] pub offset : Point<Pixels>, # [doc = \" Whether the popup should take an explicit input grab.\"] # [doc = \"\"] # [doc = \" Grabbing popups behave like menus: they take keyboard focus and are dismissed when the\"] # [doc = \" user clicks outside of them or presses a dismissing key. Use it for menus and comboboxes,\"] # [doc = \" not for tooltips or other passive popups.\"] # [doc = \"\"] # [doc = \" A grab must be requested while the triggering input is still active, in practice the\"] # [doc = \" press of the mouse button that opens the popup. Open grabbing popups from a mouse-down\"] # [doc = \" handler rather than a click handler, otherwise the grab is refused.\"] # [doc = \"\"] # [doc = \" Automatic dismissal only covers input aimed at other applications. A click elsewhere in\"] # [doc = \" your own application still reaches it as usual, so closing the popup in that case is up\"] # [doc = \" to you. Nested grabbing popups must be closed in the reverse order they were opened.\"] pub grab : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::reexport-1",
      "name": "scheduler :: RunnableMeta",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use scheduler::RunnableMeta;",
      "cfg": []
    },
    {
      "id": "gpui::platform::reexport-2",
      "name": "app_menu :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use app_menu::*;",
      "cfg": []
    },
    {
      "id": "gpui::platform::reexport-3",
      "name": "keyboard :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use keyboard::*;",
      "cfg": []
    },
    {
      "id": "gpui::platform::reexport-4",
      "name": "keystroke :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use keystroke::*;",
      "cfg": []
    },
    {
      "id": "gpui::platform::reexport-5",
      "name": "native_menu :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use native_menu::*;",
      "cfg": []
    },
    {
      "id": "gpui::platform::reexport-6",
      "name": "platform_view :: { PlatformViewHandle , PlatformViewHosting , PlatformViewId , PlatformViewPlacement , PlatformViewUpdate , flip_bounds_origin_y , platform_view_content_origin , platform_view_physical_bounds , snap_platform_view_bounds , }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use platform_view::{ PlatformViewHandle, PlatformViewHosting, PlatformViewId, PlatformViewPlacement, PlatformViewUpdate, flip_bounds_origin_y, platform_view_content_origin, platform_view_physical_bounds, snap_platform_view_bounds, };",
      "cfg": []
    },
    {
      "id": "gpui::platform::reexport-7",
      "name": "test :: { TestDispatcher , TestScreenCaptureSource , TestScreenCaptureStream }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (any (test, feature = \"test-support\"))] pub use test::{ TestDispatcher, TestScreenCaptureSource, TestScreenCaptureStream };",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ]
    },
    {
      "id": "gpui::platform::reexport-8",
      "name": "threaded_dispatcher :: ThreadedDispatcher",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (any (test, feature = \"test-support\"))] pub use threaded_dispatcher::ThreadedDispatcher;",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ]
    },
    {
      "id": "gpui::platform::reexport-9",
      "name": "visual_test :: VisualTestPlatform",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform",
      "path": "gpui::platform",
      "source": "crates/gpui/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (all (target_os = \"macos\", any (test, feature = \"test-support\")))] pub use visual_test::VisualTestPlatform;",
      "cfg": [
        "cfg (all (target_os = \"macos\", any (test, feature = \"test-support\")))"
      ]
    },
    {
      "id": "gpui::platform::scap_screen_capture::scap_screen_sources",
      "name": "scap_screen_sources",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::scap_screen_capture",
      "path": "gpui::platform::scap_screen_capture",
      "source": "crates/gpui/src/platform/scap_screen_capture.rs",
      "summary": "Populates the receiver with the screens that can be captured.",
      "documentation": "Populates the receiver with the screens that can be captured.\n\n`scap_default_target_source` should be used instead on Wayland, since `scap_screen_sources`\nwon't return any results.",
      "signature": "pub fn scap_screen_sources (foreground_executor : & ForegroundExecutor,) -> oneshot::Receiver<Result<Vec<Rc<dyn ScreenCaptureSource>>>>",
      "cfg": []
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher",
      "name": "TestDispatcher",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "TestDispatcher provides deterministic async execution for tests.",
      "documentation": "TestDispatcher provides deterministic async execution for tests.\n\nThis implementation delegates task scheduling to the scheduler crate's `TestScheduler`.\nAccess the scheduler directly via `scheduler()` for clock, rng, and parking control.",
      "signature": "# [doc = \" TestDispatcher provides deterministic async execution for tests.\"] # [doc = \"\"] # [doc = \" This implementation delegates task scheduling to the scheduler crate's `TestScheduler`.\"] # [doc = \" Access the scheduler directly via `scheduler()` for clock, rng, and parking control.\"] # [doc (hidden)] pub struct TestDispatcher { session_id : SessionId, scheduler : Arc<TestScheduler>, num_cpus_override : Arc<AtomicUsize>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::advance_clock",
      "name": "advance_clock",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn advance_clock (& self, by : Duration)",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::advance_clock_to_next_timer",
      "name": "advance_clock_to_next_timer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn advance_clock_to_next_timer (& self) -> bool",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::allow_parking",
      "name": "allow_parking",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn allow_parking (& self)",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::drain_tasks",
      "name": "drain_tasks",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn drain_tasks (& self)",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::forbid_parking",
      "name": "forbid_parking",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn forbid_parking (& self)",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::from_scheduler",
      "name": "from_scheduler",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_scheduler (scheduler : Arc<TestScheduler>) -> Self",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (seed : u64) -> Self",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::num_cpus_override",
      "name": "num_cpus_override",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "Returns the overridden CPU count, or `None` if no override is set.",
      "documentation": "Returns the overridden CPU count, or `None` if no override is set.",
      "signature": "pub fn num_cpus_override (& self) -> Option<usize>",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::run_until_parked",
      "name": "run_until_parked",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn run_until_parked (& self)",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::scheduler",
      "name": "scheduler",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn scheduler (& self) -> & Arc<TestScheduler>",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::session_id",
      "name": "session_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn session_id (& self) -> SessionId",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::set_num_cpus",
      "name": "set_num_cpus",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "Override the value returned by `BackgroundExecutor::num_cpus()` in tests. A value of 0 means no override (the default of 4 is used).",
      "documentation": "Override the value returned by `BackgroundExecutor::num_cpus()` in tests.\nA value of 0 means no override (the default of 4 is used).",
      "signature": "pub fn set_num_cpus (& self, count : usize)",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::simulate_random_delay",
      "name": "simulate_random_delay",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn simulate_random_delay (& self) -> Yield",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::dispatcher::TestDispatcher::tick",
      "name": "tick",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::dispatcher",
      "path": "gpui::platform::test::dispatcher",
      "source": "crates/gpui/src/platform/test/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tick (& self, background_only : bool) -> bool",
      "cfg": [],
      "target": "TestDispatcher"
    },
    {
      "id": "gpui::platform::test::display::TestDisplay::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::display",
      "path": "gpui::platform::test::display",
      "source": "crates/gpui/src/platform/test/display.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "TestDisplay"
    },
    {
      "id": "gpui::platform::test::platform::TestPlatform::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::platform",
      "path": "gpui::platform::test::platform",
      "source": "crates/gpui/src/platform/test/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (executor : BackgroundExecutor, foreground_executor : ForegroundExecutor) -> Rc<Self>",
      "cfg": [],
      "target": "TestPlatform"
    },
    {
      "id": "gpui::platform::test::platform::TestPlatform::with_platform",
      "name": "with_platform",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::platform",
      "path": "gpui::platform::test::platform",
      "source": "crates/gpui/src/platform/test/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_platform (executor : BackgroundExecutor, foreground_executor : ForegroundExecutor, text_system : Arc<dyn PlatformTextSystem>, headless_renderer_factory : Option<Box<dyn Fn () -> Option<Box<dyn PlatformHeadlessRenderer>>>,>,) -> Rc<Self>",
      "cfg": [],
      "target": "TestPlatform"
    },
    {
      "id": "gpui::platform::test::platform::TestPlatform::with_text_system",
      "name": "with_text_system",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::platform",
      "path": "gpui::platform::test::platform",
      "source": "crates/gpui/src/platform/test/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_text_system (executor : BackgroundExecutor, foreground_executor : ForegroundExecutor, text_system : Arc<dyn PlatformTextSystem>,) -> Rc<Self>",
      "cfg": [],
      "target": "TestPlatform"
    },
    {
      "id": "gpui::platform::test::platform::TestScreenCaptureSource",
      "name": "TestScreenCaptureSource",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::platform",
      "path": "gpui::platform::test::platform",
      "source": "crates/gpui/src/platform/test/platform.rs",
      "summary": "A fake screen capture source, used for testing.",
      "documentation": "A fake screen capture source, used for testing.",
      "signature": "# [derive (Clone)] # [doc = \" A fake screen capture source, used for testing.\"] pub struct TestScreenCaptureSource { }",
      "cfg": []
    },
    {
      "id": "gpui::platform::test::platform::TestScreenCaptureSource::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::platform",
      "path": "gpui::platform::test::platform",
      "source": "crates/gpui/src/platform/test/platform.rs",
      "summary": "Create a fake screen capture source, for testing.",
      "documentation": "Create a fake screen capture source, for testing.",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "TestScreenCaptureSource"
    },
    {
      "id": "gpui::platform::test::platform::TestScreenCaptureStream",
      "name": "TestScreenCaptureStream",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::platform",
      "path": "gpui::platform::test::platform",
      "source": "crates/gpui/src/platform/test/platform.rs",
      "summary": "A fake screen capture stream, used for testing.",
      "documentation": "A fake screen capture stream, used for testing.",
      "signature": "# [doc = \" A fake screen capture stream, used for testing.\"] pub struct TestScreenCaptureStream { }",
      "cfg": []
    },
    {
      "id": "gpui::platform::test::reexport-1",
      "name": "dispatcher :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test",
      "path": "gpui::platform::test",
      "source": "crates/gpui/src/platform/test.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use dispatcher::*;",
      "cfg": []
    },
    {
      "id": "gpui::platform::test::reexport-2",
      "name": "platform :: { TestScreenCaptureSource , TestScreenCaptureStream }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test",
      "path": "gpui::platform::test",
      "source": "crates/gpui/src/platform/test.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use platform::{ TestScreenCaptureSource, TestScreenCaptureStream };",
      "cfg": []
    },
    {
      "id": "gpui::platform::test::window::TestAtlas::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::window",
      "path": "gpui::platform::test::window",
      "source": "crates/gpui/src/platform/test/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "TestAtlas"
    },
    {
      "id": "gpui::platform::test::window::TestWindow",
      "name": "TestWindow",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::window",
      "path": "gpui::platform::test::window",
      "source": "crates/gpui/src/platform/test/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone)] pub struct TestWindow (pub (crate) Rc<Mutex<TestWindowState>>);",
      "cfg": []
    },
    {
      "id": "gpui::platform::test::window::TestWindow::external_drag_files",
      "name": "external_drag_files",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::window",
      "path": "gpui::platform::test::window",
      "source": "crates/gpui/src/platform/test/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn external_drag_files (& self) -> Vec<(PathBuf, bool)>",
      "cfg": [],
      "target": "TestWindow"
    },
    {
      "id": "gpui::platform::test::window::TestWindow::set_scene_overlay_supported",
      "name": "set_scene_overlay_supported",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::window",
      "path": "gpui::platform::test::window",
      "source": "crates/gpui/src/platform/test/window.rs",
      "summary": "Simulates a platform that can or cannot lift a scene into an overlay plane, like the neighbouring drag result this is a capability a test declares rather than a value the crate reads back.",
      "documentation": "Simulates a platform that can or cannot lift a scene into an overlay\nplane, like the neighbouring drag result this is a capability a test\ndeclares rather than a value the crate reads back.",
      "signature": "pub fn set_scene_overlay_supported (& self, supported : bool)",
      "cfg": [],
      "target": "TestWindow"
    },
    {
      "id": "gpui::platform::test::window::TestWindow::set_start_external_drag_result",
      "name": "set_start_external_drag_result",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::window",
      "path": "gpui::platform::test::window",
      "source": "crates/gpui/src/platform/test/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_start_external_drag_result (& self, result : bool)",
      "cfg": [],
      "target": "TestWindow"
    },
    {
      "id": "gpui::platform::test::window::TestWindow::set_subpixel_rendering_supported",
      "name": "set_subpixel_rendering_supported",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::window",
      "path": "gpui::platform::test::window",
      "source": "crates/gpui/src/platform/test/window.rs",
      "summary": "Simulates a platform that renders text with or without subpixel coverage.",
      "documentation": "Simulates a platform that renders text with or without subpixel\ncoverage.",
      "signature": "pub fn set_subpixel_rendering_supported (& self, supported : bool)",
      "cfg": [],
      "target": "TestWindow"
    },
    {
      "id": "gpui::platform::test::window::TestWindow::simulate_a11y_activation",
      "name": "simulate_a11y_activation",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::window",
      "path": "gpui::platform::test::window",
      "source": "crates/gpui/src/platform/test/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn simulate_a11y_activation (& self)",
      "cfg": [],
      "target": "TestWindow"
    },
    {
      "id": "gpui::platform::test::window::TestWindow::simulate_appearance_change",
      "name": "simulate_appearance_change",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::window",
      "path": "gpui::platform::test::window",
      "source": "crates/gpui/src/platform/test/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn simulate_appearance_change (& self, appearance : WindowAppearance)",
      "cfg": [],
      "target": "TestWindow"
    },
    {
      "id": "gpui::platform::test::window::TestWindow::simulate_input",
      "name": "simulate_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::window",
      "path": "gpui::platform::test::window",
      "source": "crates/gpui/src/platform/test/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn simulate_input (& mut self, event : PlatformInput) -> bool",
      "cfg": [],
      "target": "TestWindow"
    },
    {
      "id": "gpui::platform::test::window::TestWindow::simulate_request_frame",
      "name": "simulate_request_frame",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::window",
      "path": "gpui::platform::test::window",
      "source": "crates/gpui/src/platform/test/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn simulate_request_frame (& self, options : RequestFrameOptions)",
      "cfg": [],
      "target": "TestWindow"
    },
    {
      "id": "gpui::platform::test::window::TestWindow::simulate_resize",
      "name": "simulate_resize",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::window",
      "path": "gpui::platform::test::window",
      "source": "crates/gpui/src/platform/test/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn simulate_resize (& mut self, size : Size<Pixels>)",
      "cfg": [],
      "target": "TestWindow"
    },
    {
      "id": "gpui::platform::test::window::TestWindow::simulate_window_control_hit_test",
      "name": "simulate_window_control_hit_test",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::test::window",
      "path": "gpui::platform::test::window",
      "source": "crates/gpui/src/platform/test/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn simulate_window_control_hit_test (& self, position : Point<Pixels>,) -> Option<WindowControlArea>",
      "cfg": [],
      "target": "TestWindow"
    },
    {
      "id": "gpui::platform::threaded_dispatcher::ThreadedDispatcher",
      "name": "ThreadedDispatcher",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::threaded_dispatcher",
      "path": "gpui::platform::threaded_dispatcher",
      "source": "crates/gpui/src/platform/threaded_dispatcher.rs",
      "summary": "A multithreaded [`PlatformDispatcher`] for tests and benchmarks.",
      "documentation": "A multithreaded [`PlatformDispatcher`] for tests and benchmarks.\n\nBackground tasks run in parallel on a pool of worker threads and timers fire\nin real time on a dedicated timer thread, mirroring the production\ndispatchers (see `LinuxDispatcher`). Main-thread tasks are queued until the\ncreating thread drains them via [`Self::run_until_idle`], since there is no\nplatform run loop pumping them.\n\nUnlike [`TestDispatcher`](crate::TestDispatcher), which runs everything on a\nsingle thread with a virtual clock, work dispatched through this dispatcher\nexecutes with production concurrency.",
      "signature": "# [doc = \" A multithreaded [`PlatformDispatcher`] for tests and benchmarks.\"] # [doc = \"\"] # [doc = \" Background tasks run in parallel on a pool of worker threads and timers fire\"] # [doc = \" in real time on a dedicated timer thread, mirroring the production\"] # [doc = \" dispatchers (see `LinuxDispatcher`). Main-thread tasks are queued until the\"] # [doc = \" creating thread drains them via [`Self::run_until_idle`], since there is no\"] # [doc = \" platform run loop pumping them.\"] # [doc = \"\"] # [doc = \" Unlike [`TestDispatcher`](crate::TestDispatcher), which runs everything on a\"] # [doc = \" single thread with a virtual clock, work dispatched through this dispatcher\"] # [doc = \" executes with production concurrency.\"] pub struct ThreadedDispatcher { background_sender : PriorityQueueSender<RunnableVariant>, main_sender : PriorityQueueSender<RunnableVariant>, main_receiver : Mutex<PriorityQueueReceiver<RunnableVariant>>, timers : Arc<TimerQueue>, idle : Arc<IdleTracker>, main_thread_id : thread::ThreadId, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::threaded_dispatcher::ThreadedDispatcher::cancel_pending_timers",
      "name": "cancel_pending_timers",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::threaded_dispatcher",
      "path": "gpui::platform::threaded_dispatcher",
      "source": "crates/gpui/src/platform/threaded_dispatcher.rs",
      "summary": "Cancels all pending timers so timers armed by one workload can't fire during a later workload sharing this process-lifetime dispatcher.",
      "documentation": "Cancels all pending timers so timers armed by one workload can't fire\nduring a later workload sharing this process-lifetime dispatcher.\n\nDropping a timer runnable drops its completion sender, waking the task\nawaiting the timer. Call [`Self::run_until_idle`] after this method to\ndrain any work that cancellation unblocks.",
      "signature": "pub fn cancel_pending_timers (& self) -> usize",
      "cfg": [],
      "target": "ThreadedDispatcher"
    },
    {
      "id": "gpui::platform::threaded_dispatcher::ThreadedDispatcher::debug_state",
      "name": "debug_state",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::threaded_dispatcher",
      "path": "gpui::platform::threaded_dispatcher",
      "source": "crates/gpui/src/platform/threaded_dispatcher.rs",
      "summary": "Describes the dispatcher's idle-tracking state, for diagnosing workloads that fail to reach quiescence.",
      "documentation": "Describes the dispatcher's idle-tracking state, for diagnosing\nworkloads that fail to reach quiescence.",
      "signature": "pub fn debug_state (& self) -> String",
      "cfg": [],
      "target": "ThreadedDispatcher"
    },
    {
      "id": "gpui::platform::threaded_dispatcher::ThreadedDispatcher::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::threaded_dispatcher",
      "path": "gpui::platform::threaded_dispatcher",
      "source": "crates/gpui/src/platform/threaded_dispatcher.rs",
      "summary": "Creates a dispatcher whose main thread is the calling thread.",
      "documentation": "Creates a dispatcher whose main thread is the calling thread.\n\nWorker and timer threads live for the lifetime of the process; the\ndispatcher is expected to be created once and reused.",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "ThreadedDispatcher"
    },
    {
      "id": "gpui::platform::threaded_dispatcher::ThreadedDispatcher::run_ready_main_tasks",
      "name": "run_ready_main_tasks",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::threaded_dispatcher",
      "path": "gpui::platform::threaded_dispatcher",
      "source": "crates/gpui/src/platform/threaded_dispatcher.rs",
      "summary": "Runs all main-thread tasks that are queued right now, without waiting for background work or timers to finish.",
      "documentation": "Runs all main-thread tasks that are queued right now, without waiting for\nbackground work or timers to finish.",
      "signature": "pub fn run_ready_main_tasks (& self) -> bool",
      "cfg": [],
      "target": "ThreadedDispatcher"
    },
    {
      "id": "gpui::platform::threaded_dispatcher::ThreadedDispatcher::run_until_idle",
      "name": "run_until_idle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::threaded_dispatcher",
      "path": "gpui::platform::threaded_dispatcher",
      "source": "crates/gpui/src/platform/threaded_dispatcher.rs",
      "summary": "Runs queued main thread tasks and waits until no background or timer work is queued, running, or already due.",
      "documentation": "Runs queued main thread tasks and waits until no background or timer\nwork is queued, running, or already due.\n\nTimers that haven't reached their due time yet are *not* waited for:\nthe dispatcher runs in real time and cannot skip ahead like the\n`TestDispatcher`'s virtual clock, so waiting on a future timer would\nblock for its full real duration. Tasks sleeping on such timers are\nconsidered idle. Must be called on the thread that created this\ndispatcher.",
      "signature": "pub fn run_until_idle (& self)",
      "cfg": [],
      "target": "ThreadedDispatcher"
    },
    {
      "id": "gpui::platform::visual_test::VisualTestPlatform",
      "name": "VisualTestPlatform",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::visual_test",
      "path": "gpui::platform::visual_test",
      "source": "crates/gpui/src/platform/visual_test.rs",
      "summary": "A platform that combines real Mac rendering with controllable TestDispatcher.",
      "documentation": "A platform that combines real Mac rendering with controllable TestDispatcher.\n\nThis allows visual tests to:\n- Render real UI via Metal for accurate screenshots\n- Control task scheduling deterministically via TestDispatcher\n- Advance simulated time for testing time-based behaviors (tooltips, animations, etc.)",
      "signature": "# [doc = \" A platform that combines real Mac rendering with controllable TestDispatcher.\"] # [doc = \"\"] # [doc = \" This allows visual tests to:\"] # [doc = \" - Render real UI via Metal for accurate screenshots\"] # [doc = \" - Control task scheduling deterministically via TestDispatcher\"] # [doc = \" - Advance simulated time for testing time-based behaviors (tooltips, animations, etc.)\"] pub struct VisualTestPlatform { dispatcher : TestDispatcher, background_executor : BackgroundExecutor, foreground_executor : ForegroundExecutor, platform : Rc<dyn Platform>, clipboard : Mutex<Option<ClipboardItem>>, find_pasteboard : Mutex<Option<ClipboardItem>>, }",
      "cfg": []
    },
    {
      "id": "gpui::platform::visual_test::VisualTestPlatform::dispatcher",
      "name": "dispatcher",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::visual_test",
      "path": "gpui::platform::visual_test",
      "source": "crates/gpui/src/platform/visual_test.rs",
      "summary": "Returns a reference to the TestDispatcher for controlling task scheduling and time.",
      "documentation": "Returns a reference to the TestDispatcher for controlling task scheduling and time.",
      "signature": "pub fn dispatcher (& self) -> & TestDispatcher",
      "cfg": [],
      "target": "VisualTestPlatform"
    },
    {
      "id": "gpui::platform::visual_test::VisualTestPlatform::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform::visual_test",
      "path": "gpui::platform::visual_test",
      "source": "crates/gpui/src/platform/visual_test.rs",
      "summary": "Creates a new VisualTestPlatform with the given random seed.",
      "documentation": "Creates a new VisualTestPlatform with the given random seed.\n\nThe seed is used for deterministic random number generation in the TestDispatcher.",
      "signature": "pub fn new (platform : Rc<dyn Platform>, seed : u64) -> Self",
      "cfg": [],
      "target": "VisualTestPlatform"
    },
    {
      "id": "gpui::platform_scheduler::PlatformScheduler",
      "name": "PlatformScheduler",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform_scheduler",
      "path": "gpui::platform_scheduler",
      "source": "crates/gpui/src/platform_scheduler.rs",
      "summary": "A production implementation of [`Scheduler`] that wraps a [`PlatformDispatcher`].",
      "documentation": "A production implementation of [`Scheduler`] that wraps a [`PlatformDispatcher`].\n\nThis allows GPUI to use the scheduler crate's executor types with the platform's\nnative dispatch mechanisms (e.g., Grand Central Dispatch on macOS).",
      "signature": "# [doc = \" A production implementation of [`Scheduler`] that wraps a [`PlatformDispatcher`].\"] # [doc = \"\"] # [doc = \" This allows GPUI to use the scheduler crate's executor types with the platform's\"] # [doc = \" native dispatch mechanisms (e.g., Grand Central Dispatch on macOS).\"] pub struct PlatformScheduler { dispatcher : Arc<dyn PlatformDispatcher>, clock : Arc<PlatformClock>, next_session_id : AtomicU16, }",
      "cfg": []
    },
    {
      "id": "gpui::platform_scheduler::PlatformScheduler::foreground_executor",
      "name": "foreground_executor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform_scheduler",
      "path": "gpui::platform_scheduler",
      "source": "crates/gpui/src/platform_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn foreground_executor (self : & Arc<Self>) -> LocalExecutor",
      "cfg": [],
      "target": "PlatformScheduler"
    },
    {
      "id": "gpui::platform_scheduler::PlatformScheduler::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "platform_scheduler",
      "path": "gpui::platform_scheduler",
      "source": "crates/gpui/src/platform_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (dispatcher : Arc<dyn PlatformDispatcher>) -> Self",
      "cfg": [],
      "target": "PlatformScheduler"
    },
    {
      "id": "gpui::prelude::reexport-1",
      "name": "crate :: { AppContext as _ , BorrowAppContext , Context , Element , InteractiveElement , IntoElement , ParentElement , Refineable , Render , RenderOnce , StatefulInteractiveElement , Styled , StyledImage , TaskExt as _ , VisualContext , util :: FluentBuilder , }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "prelude",
      "path": "gpui::prelude",
      "source": "crates/gpui/src/prelude.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use crate::{ AppContext as _, BorrowAppContext, Context, Element, InteractiveElement, IntoElement, ParentElement, Refineable, Render, RenderOnce, StatefulInteractiveElement, Styled, StyledImage, TaskExt as _, VisualContext, util::FluentBuilder, };",
      "cfg": []
    },
    {
      "id": "gpui::profiler::ActiveTiming",
      "name": "ActiveTiming",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] # [derive (Debug, Copy, Clone)] pub struct ActiveTiming { pub location : & 'static core::panic::Location<'static>, pub spawned : SpawnTime, pub start : Instant, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::FrameStats",
      "name": "FrameStats",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Deterministic structural work performed while drawing one window frame.",
      "documentation": "Deterministic structural work performed while drawing one window frame.\n\nUnlike [`FrameTiming`], these counters do not depend on machine speed. They\nare always collected so tests and diagnostics can enforce that work stays\nproportional to the viewport rather than to the size of a caller's data\nset. Allocation accounting is optional because it is only available when\nGPUI is built with test support.",
      "signature": "# [doc = \" Deterministic structural work performed while drawing one window frame.\"] # [doc = \"\"] # [doc = \" Unlike [`FrameTiming`], these counters do not depend on machine speed. They\"] # [doc = \" are always collected so tests and diagnostics can enforce that work stays\"] # [doc = \" proportional to the viewport rather than to the size of a caller's data\"] # [doc = \" set. Allocation accounting is optional because it is only available when\"] # [doc = \" GPUI is built with test support.\"] # [derive (Debug, Copy, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] pub struct FrameStats { # [doc = \" Monotonically increasing frame number for this window.\"] pub frame_index : u64, # [doc = \" Reactive view entities whose [`crate::Render::render`] method ran.\"] pub entity_renders : u64, # [doc = \" Element request-layout calls.\"] pub request_layout_calls : u64, # [doc = \" Element prepaint calls.\"] pub prepaint_calls : u64, # [doc = \" Element paint calls.\"] pub paint_calls : u64, # [doc = \" Invalidations coalesced into this frame.\"] pub invalidations : u64, # [doc = \" Product semantic nodes published while this frame was painted.\"] pub semantic_nodes : u64, # [doc = \" Native platform-view placements retained by the completed frame.\"] pub platform_view_placements : u64, # [doc = \" Growth in the retained element-arena capacity during this frame.\"] # [doc = \"\"] # [doc = \" `None` means the active build does not include allocator accounting.\"] pub allocator_delta_bytes : Option<i64>, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::FrameSubmissionTiming",
      "name": "FrameSubmissionTiming",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Timing for one newly drawn frame submitted to the platform.",
      "documentation": "Timing for one newly drawn frame submitted to the platform.\n\n`submission_end` is sampled when the synchronous platform draw call\nreturns. It proves that GPUI handed the frame to the platform renderer; it\ndoes not claim that a compositor or display has presented the frame.",
      "signature": "# [doc = \" Timing for one newly drawn frame submitted to the platform.\"] # [doc = \"\"] # [doc = \" `submission_end` is sampled when the synchronous platform draw call\"] # [doc = \" returns. It proves that GPUI handed the frame to the platform renderer; it\"] # [doc = \" does not claim that a compositor or display has presented the frame.\"] # [derive (Debug, Copy, Clone)] pub struct FrameSubmissionTiming { # [doc = \" The draw whose scene was submitted.\"] pub frame : FrameTiming, # [doc = \" When platform submission began.\"] pub submission_start : Instant, # [doc = \" When the platform draw call returned.\"] pub submission_end : Instant, # [doc = \" The first input that invalidated work included in this submission, if\"] # [doc = \" one was observed while tracing was active.\"] pub first_input_at : Option<Instant>, # [doc = \" Number of invalidating top-level input events coalesced into this\"] # [doc = \" submission.\"] pub input_events : u64, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::FrameSubmissionTiming::dirty_to_submission_duration",
      "name": "dirty_to_submission_duration",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Time from the first observed invalidation until platform submission returned.",
      "documentation": "Time from the first observed invalidation until platform submission\nreturned.",
      "signature": "pub fn dirty_to_submission_duration (& self) -> Option<Duration>",
      "cfg": [],
      "target": "FrameSubmissionTiming"
    },
    {
      "id": "gpui::profiler::FrameSubmissionTiming::draw_to_submission_duration",
      "name": "draw_to_submission_duration",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Time from the draw start until platform submission returned.",
      "documentation": "Time from the draw start until platform submission returned.",
      "signature": "pub fn draw_to_submission_duration (& self) -> Duration",
      "cfg": [],
      "target": "FrameSubmissionTiming"
    },
    {
      "id": "gpui::profiler::FrameSubmissionTiming::input_to_submission_duration",
      "name": "input_to_submission_duration",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Time from the first coalesced input until platform submission returned.",
      "documentation": "Time from the first coalesced input until platform submission returned.",
      "signature": "pub fn input_to_submission_duration (& self) -> Option<Duration>",
      "cfg": [],
      "target": "FrameSubmissionTiming"
    },
    {
      "id": "gpui::profiler::FrameSubmissionTiming::submission_duration",
      "name": "submission_duration",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Time spent in the platform submission call.",
      "documentation": "Time spent in the platform submission call.",
      "signature": "pub fn submission_duration (& self) -> Duration",
      "cfg": [],
      "target": "FrameSubmissionTiming"
    },
    {
      "id": "gpui::profiler::FrameSubmissionTimingCollector",
      "name": "FrameSubmissionTimingCollector",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Drains platform-submission timings observed after this collector was created. Each sample belongs to a newly drawn frame; requests that resubmit unchanged scene contents are not included.",
      "documentation": "Drains platform-submission timings observed after this collector was\ncreated. Each sample belongs to a newly drawn frame; requests that resubmit\nunchanged scene contents are not included.",
      "signature": "# [doc = \" Drains platform-submission timings observed after this collector was\"] # [doc = \" created. Each sample belongs to a newly drawn frame; requests that resubmit\"] # [doc = \" unchanged scene contents are not included.\"] pub struct FrameSubmissionTimingCollector { cursor : u64, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::FrameSubmissionTimingCollector::collect_unseen",
      "name": "collect_unseen",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Returns newly observed frame submissions. If the shared ring wrapped since the previous poll, evicted entries are lost.",
      "documentation": "Returns newly observed frame submissions. If the shared ring wrapped\nsince the previous poll, evicted entries are lost.",
      "signature": "pub fn collect_unseen (& mut self) -> Vec<FrameSubmissionTiming>",
      "cfg": [],
      "target": "FrameSubmissionTimingCollector"
    },
    {
      "id": "gpui::profiler::FrameSubmissionTimingCollector::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Creates a collector that only sees submissions recorded from this point on. Hold a [`FrameTraceLease`] for the collector's lifetime.",
      "documentation": "Creates a collector that only sees submissions recorded from this point\non. Hold a [`FrameTraceLease`] for the collector's lifetime.",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "FrameSubmissionTimingCollector"
    },
    {
      "id": "gpui::profiler::FrameTiming",
      "name": "FrameTiming",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Timing for a single drawn window frame.",
      "documentation": "Timing for a single drawn window frame.",
      "signature": "# [doc = \" Timing for a single drawn window frame.\"] # [derive (Debug, Copy, Clone)] pub struct FrameTiming { # [doc = \" The window that was drawn.\"] pub window_id : WindowId, # [doc = \" When the frame first became dirty (its first invalidation). `None` if\"] # [doc = \" frame tracing was not yet enabled when the invalidation occurred.\"] pub dirty_at : Option<Instant>, # [doc = \" Number of invalidations coalesced into this frame.\"] pub invalidations : u64, # [doc = \" When `Window::draw` started.\"] pub draw_start : Instant, # [doc = \" When `Window::draw` finished.\"] pub draw_end : Instant, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::FrameTiming::dirty_to_draw_duration",
      "name": "dirty_to_draw_duration",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Time from the frame's first invalidation to the end of its draw, if the first invalidation was observed.",
      "documentation": "Time from the frame's first invalidation to the end of its draw, if the\nfirst invalidation was observed.",
      "signature": "pub fn dirty_to_draw_duration (& self) -> Option<Duration>",
      "cfg": [],
      "target": "FrameTiming"
    },
    {
      "id": "gpui::profiler::FrameTiming::draw_duration",
      "name": "draw_duration",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Time spent inside `Window::draw`.",
      "documentation": "Time spent inside `Window::draw`.",
      "signature": "pub fn draw_duration (& self) -> Duration",
      "cfg": [],
      "target": "FrameTiming"
    },
    {
      "id": "gpui::profiler::FrameTimingCollector",
      "name": "FrameTimingCollector",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Drains frame timings recorded after this collector was created, tracking a cursor so each call to [`Self::collect_unseen`] returns only new entries.",
      "documentation": "Drains frame timings recorded after this collector was created, tracking a\ncursor so each call to [`Self::collect_unseen`] returns only new entries.",
      "signature": "# [doc = \" Drains frame timings recorded after this collector was created, tracking a\"] # [doc = \" cursor so each call to [`Self::collect_unseen`] returns only new entries.\"] pub struct FrameTimingCollector { cursor : u64, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::FrameTimingCollector::collect_unseen",
      "name": "collect_unseen",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Returns frame timings recorded since the previous call (or since the collector was created). If the ring buffer wrapped around since the previous poll, the evicted entries are lost.",
      "documentation": "Returns frame timings recorded since the previous call (or since the\ncollector was created). If the ring buffer wrapped around since the\nprevious poll, the evicted entries are lost.",
      "signature": "pub fn collect_unseen (& mut self) -> Vec<FrameTiming>",
      "cfg": [],
      "target": "FrameTimingCollector"
    },
    {
      "id": "gpui::profiler::FrameTimingCollector::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Creates a collector that only sees frames recorded from this point on.",
      "documentation": "Creates a collector that only sees frames recorded from this point on.",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "FrameTimingCollector"
    },
    {
      "id": "gpui::profiler::FrameTimingMonitor",
      "name": "FrameTimingMonitor",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Observes existing submitted frames for one window and keeps a bounded history.",
      "documentation": "Observes existing submitted frames for one window and keeps a bounded\nhistory.\n\nThe monitor owns a [`FrameTraceLease`] but never refreshes the window. A\nhost chooses when to call [`Self::collect`] and whether its workload should\nproduce another frame, so displaying diagnostics does not silently create\na continuous redraw loop.",
      "signature": "# [doc = \" Observes existing submitted frames for one window and keeps a bounded\"] # [doc = \" history.\"] # [doc = \"\"] # [doc = \" The monitor owns a [`FrameTraceLease`] but never refreshes the window. A\"] # [doc = \" host chooses when to call [`Self::collect`] and whether its workload should\"] # [doc = \" produce another frame, so displaying diagnostics does not silently create\"] # [doc = \" a continuous redraw loop.\"] pub struct FrameTimingMonitor { window_id : WindowId, capacity : usize, frame_budget : Duration, samples : VecDeque<FrameSubmissionTiming>, collector : FrameSubmissionTimingCollector, _lease : FrameTraceLease, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::FrameTimingMonitor::collect",
      "name": "collect",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Collects newly submitted frames, discarding frames from other windows, and returns the current summary once two target-window submissions exist.",
      "documentation": "Collects newly submitted frames, discarding frames from other windows,\nand returns the current summary once two target-window submissions\nexist.",
      "signature": "pub fn collect (& mut self) -> Option<FrameTimingSummary>",
      "cfg": [],
      "target": "FrameTimingMonitor"
    },
    {
      "id": "gpui::profiler::FrameTimingMonitor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Creates a monitor for `window_id`. A zero capacity retains one sample, although a summary is unavailable until two submissions are observed.",
      "documentation": "Creates a monitor for `window_id`. A zero capacity retains one sample,\nalthough a summary is unavailable until two submissions are observed.",
      "signature": "pub fn new (window_id : WindowId, capacity : usize, frame_budget : Duration) -> Self",
      "cfg": [],
      "target": "FrameTimingMonitor"
    },
    {
      "id": "gpui::profiler::FrameTimingMonitor::sample_count",
      "name": "sample_count",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Number of currently retained target-window submissions.",
      "documentation": "Number of currently retained target-window submissions.",
      "signature": "pub fn sample_count (& self) -> usize",
      "cfg": [],
      "target": "FrameTimingMonitor"
    },
    {
      "id": "gpui::profiler::FrameTimingMonitor::summary",
      "name": "summary",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Summarizes the retained samples without consuming them.",
      "documentation": "Summarizes the retained samples without consuming them.",
      "signature": "pub fn summary (& self) -> Option<FrameTimingSummary>",
      "cfg": [],
      "target": "FrameTimingMonitor"
    },
    {
      "id": "gpui::profiler::FrameTimingMonitor::window_id",
      "name": "window_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "The only window whose draws this monitor retains.",
      "documentation": "The only window whose draws this monitor retains.",
      "signature": "pub fn window_id (& self) -> WindowId",
      "cfg": [],
      "target": "FrameTimingMonitor"
    },
    {
      "id": "gpui::profiler::FrameTimingSummary",
      "name": "FrameTimingSummary",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "A bounded, per-window summary of observed submitted-frame work.",
      "documentation": "A bounded, per-window summary of observed submitted-frame work.",
      "signature": "# [doc = \" A bounded, per-window summary of observed submitted-frame work.\"] # [derive (Debug, Clone, PartialEq)] pub struct FrameTimingSummary { # [doc = \" Number of retained target-window submissions represented by this\"] # [doc = \" summary.\"] pub sample_count : usize, # [doc = \" Newly drawn submissions per second, computed from their completion\"] # [doc = \" timestamps rather than from the monitor's polling cadence.\"] pub frames_per_second : f64, # [doc = \" Caller-supplied threshold used to classify draw-budget overage.\"] pub frame_budget : Duration, # [doc = \" Arithmetic mean of retained `Window::draw` durations.\"] pub mean_draw_duration : Duration, # [doc = \" Nearest-rank 95th percentile of retained draw durations.\"] pub p95_draw_duration : Duration, # [doc = \" Fraction of retained draws whose own duration exceeded `frame_budget`.\"] # [doc = \" This is draw-budget overage, not a claim about display drops.\"] pub over_budget_fraction : f64, # [doc = \" Arithmetic mean of invalidations coalesced into each retained draw.\"] pub mean_invalidations : f64, # [doc = \" Mean first-dirty-to-draw-end latency for samples whose first\"] # [doc = \" invalidation was observed after tracing began.\"] pub mean_dirty_to_draw_duration : Option<Duration>, # [doc = \" Arithmetic mean of time spent in the synchronous platform submission\"] # [doc = \" call. This is not compositor or display presentation time.\"] pub mean_submission_duration : Duration, # [doc = \" Mean first-dirty-to-submission-end latency for samples whose first\"] # [doc = \" invalidation was observed after tracing began.\"] pub mean_dirty_to_submission_duration : Option<Duration>, # [doc = \" Mean first-input-to-submission-end latency for submitted frames caused\"] # [doc = \" by input observed after tracing began.\"] pub mean_input_to_submission_duration : Option<Duration>, # [doc = \" Arithmetic mean of invalidating top-level input events coalesced into a\"] # [doc = \" submitted frame.\"] pub mean_input_events : f64, # [doc = \" Draw durations in retained timestamp order, for caller-owned plots.\"] pub draw_durations : Vec<Duration>, # [doc = \" Platform submission-call durations in retained timestamp order, for\"] # [doc = \" caller-owned plots.\"] pub submission_durations : Vec<Duration>, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::FrameTraceLease",
      "name": "FrameTraceLease",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "A reference-counted owner of frame timing collection.",
      "documentation": "A reference-counted owner of frame timing collection.\n\nAcquire a lease before creating a [`FrameTimingCollector`]. Dropping one\nlease cannot disable tracing requested manually or by another consumer.\nA lease records existing application redraws; it never schedules frames.",
      "signature": "# [doc = \" A reference-counted owner of frame timing collection.\"] # [doc = \"\"] # [doc = \" Acquire a lease before creating a [`FrameTimingCollector`]. Dropping one\"] # [doc = \" lease cannot disable tracing requested manually or by another consumer.\"] # [doc = \" A lease records existing application redraws; it never schedules frames.\"] # [derive (Debug)] pub struct FrameTraceLease { active : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::FrameTraceLease::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Acquires one independent owner of frame timing collection.",
      "documentation": "Acquires one independent owner of frame timing collection.",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "FrameTraceLease"
    },
    {
      "id": "gpui::profiler::GLOBAL_THREAD_TIMINGS",
      "name": "GLOBAL_THREAD_TIMINGS",
      "kind": "static",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub static GLOBAL_THREAD_TIMINGS: spin::Mutex<Vec<GlobalThreadTimings>>",
      "cfg": []
    },
    {
      "id": "gpui::profiler::GlobalThreadTimings",
      "name": "GlobalThreadTimings",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] pub struct GlobalThreadTimings { pub thread_id : ThreadId, pub timings : std::sync::Weak<GuardedTaskTimings>, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::GuardedTaskTimings",
      "name": "GuardedTaskTimings",
      "kind": "type",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] pub type GuardedTaskTimings = spin::Mutex<ThreadTimings>;",
      "cfg": []
    },
    {
      "id": "gpui::profiler::ProfilingCollector",
      "name": "ProfilingCollector",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Tracks which timing events have already been seen so that callers can request only unseen events.",
      "documentation": "Tracks which timing events have already been seen so that callers can request only unseen events.",
      "signature": "# [doc = \" Tracks which timing events have already been seen so that callers can request only unseen events.\"] # [doc (hidden)] pub struct ProfilingCollector { startup_time : Instant, cursors : HashMap<ThreadId, u64>, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::ProfilingCollector::collect_unseen",
      "name": "collect_unseen",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn collect_unseen (& mut self, all_timings : Vec<ThreadTaskTimings>,) -> Vec<ThreadTimingsDelta>",
      "cfg": [],
      "target": "ProfilingCollector"
    },
    {
      "id": "gpui::profiler::ProfilingCollector::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (startup_time : Instant) -> Self",
      "cfg": [],
      "target": "ProfilingCollector"
    },
    {
      "id": "gpui::profiler::ProfilingCollector::reset",
      "name": "reset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn reset (& mut self)",
      "cfg": [],
      "target": "ProfilingCollector"
    },
    {
      "id": "gpui::profiler::ProfilingCollector::startup_time",
      "name": "startup_time",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn startup_time (& self) -> Instant",
      "cfg": [],
      "target": "ProfilingCollector"
    },
    {
      "id": "gpui::profiler::SerializedLocation",
      "name": "SerializedLocation",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Serializable variant of [`core::panic::Location`]",
      "documentation": "Serializable variant of [`core::panic::Location`]",
      "signature": "# [doc = \" Serializable variant of [`core::panic::Location`]\"] # [derive (Debug, Clone, Serialize, Deserialize)] pub struct SerializedLocation { # [doc = \" Name of the source file\"] pub file : SharedString, # [doc = \" Line in the source file\"] pub line : u32, # [doc = \" Column in the source file\"] pub column : u32, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::SerializedTaskTiming",
      "name": "SerializedTaskTiming",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Serializable variant of [`TaskTiming`]",
      "documentation": "Serializable variant of [`TaskTiming`]",
      "signature": "# [doc = \" Serializable variant of [`TaskTiming`]\"] # [derive (Debug, Clone, Serialize, Deserialize)] pub struct SerializedTaskTiming { # [doc = \" Location of the timing\"] pub location : SerializedLocation, # [doc = \" Time at which the measurement was reported in nanoseconds\"] pub start : u128, # [doc = \" Duration of the measurement in nanoseconds\"] pub duration : u128, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::SerializedTaskTiming::convert",
      "name": "convert",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Convert an array of [`TaskTiming`] into their serializable format",
      "documentation": "Convert an array of [`TaskTiming`] into their serializable format\n\n# Params\n\n`anchor` - [`Instant`] that should be earlier than all timings to use as base anchor",
      "signature": "pub fn convert (anchor : Instant, timings : & [TaskTiming]) -> Vec<SerializedTaskTiming>",
      "cfg": [],
      "target": "SerializedTaskTiming"
    },
    {
      "id": "gpui::profiler::SerializedTaskTiming::from",
      "name": "from",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "`anchor` - [`Instant`] that should be earlier than all timings to use as base anchor",
      "documentation": "`anchor` - [`Instant`] that should be earlier than all timings to use as base anchor",
      "signature": "pub fn from (anchor : Instant, timing : TaskTiming) -> SerializedTaskTiming",
      "cfg": [],
      "target": "SerializedTaskTiming"
    },
    {
      "id": "gpui::profiler::SerializedThreadTaskTimings",
      "name": "SerializedThreadTaskTimings",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Serializable variant of [`ThreadTaskTimings`]",
      "documentation": "Serializable variant of [`ThreadTaskTimings`]",
      "signature": "# [doc = \" Serializable variant of [`ThreadTaskTimings`]\"] # [derive (Debug, Clone, Serialize, Deserialize)] pub struct SerializedThreadTaskTimings { # [doc = \" Thread name\"] pub thread_name : Option<String>, # [doc = \" Hash of the thread id\"] pub thread_id : u64, # [doc = \" Timing records for this thread\"] pub timings : Vec<SerializedTaskTiming>, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::SerializedThreadTaskTimings::convert",
      "name": "convert",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Convert [`ThreadTaskTimings`] into their serializable format",
      "documentation": "Convert [`ThreadTaskTimings`] into their serializable format\n\n# Params\n\n`anchor` - [`Instant`] that should be earlier than all timings to use as base anchor",
      "signature": "pub fn convert (anchor : Instant, timings : ThreadTaskTimings) -> SerializedThreadTaskTimings",
      "cfg": [],
      "target": "SerializedThreadTaskTimings"
    },
    {
      "id": "gpui::profiler::TaskStatistics",
      "name": "TaskStatistics",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] # [derive (Debug, Clone)] pub struct TaskStatistics { pub poll_time_to_beat : Duration, pub runtime_to_beat : Duration, pub longest_poll_times : [TaskTiming; 5], pub longest_runtimes : [TaskTiming; 5], }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::TaskTiming",
      "name": "TaskTiming",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] # [derive (Copy, Clone)] pub struct TaskTiming { pub location : & 'static core::panic::Location<'static>, pub spawned : SpawnTime, pub start : Instant, pub end : YieldTime, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::TaskTiming::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "A task timing with a duration of zero. Any task will replace this in history.",
      "documentation": "A task timing with a duration of zero. Any task will replace this in history.",
      "signature": "pub fn placeholder () -> Self",
      "cfg": [],
      "target": "TaskTiming"
    },
    {
      "id": "gpui::profiler::TaskTiming::poll_duration",
      "name": "poll_duration",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn poll_duration (& self) -> Duration",
      "cfg": [],
      "target": "TaskTiming"
    },
    {
      "id": "gpui::profiler::ThreadTaskStatistics",
      "name": "ThreadTaskStatistics",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] # [derive (Debug)] pub struct ThreadTaskStatistics { pub thread_name : Option<String>, pub thread_id : ThreadId, pub stats : TaskStatistics, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::ThreadTaskStatistics::collect_and_reset",
      "name": "collect_and_reset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn collect_and_reset (timings : Vec<(ThreadId, Arc<GuardedTaskTimings>)>, include_running : TasksIncluded,) -> Vec<Self>",
      "cfg": [],
      "target": "ThreadTaskStatistics"
    },
    {
      "id": "gpui::profiler::ThreadTaskTimings",
      "name": "ThreadTaskTimings",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] # [derive (Debug, Clone)] pub struct ThreadTaskTimings { pub thread_name : Option<String>, pub thread_id : ThreadId, pub timings : Vec<TaskTiming>, pub stats : TaskStatistics, pub total_pushed : u64, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::ThreadTaskTimings::collect",
      "name": "collect",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Convert upgraded per-thread timings into their structured format.",
      "documentation": "Convert upgraded per-thread timings into their structured format.",
      "signature": "pub fn collect (timings : Vec<(ThreadId, Arc<GuardedTaskTimings>)>, included : TasksIncluded,) -> Vec<Self>",
      "cfg": [],
      "target": "ThreadTaskTimings"
    },
    {
      "id": "gpui::profiler::ThreadTimings",
      "name": "ThreadTimings",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] pub struct ThreadTimings { pub thread_name : Option<String>, pub thread_id : ThreadId, pub timings : TaskTimings, pub running : Option<ActiveTiming>, pub stats : TaskStatistics, pub total_pushed : u64, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::ThreadTimings::get_thread_task_timings",
      "name": "get_thread_task_timings",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get_thread_task_timings (& self, includes : TasksIncluded) -> ThreadTaskTimings",
      "cfg": [],
      "target": "ThreadTimings"
    },
    {
      "id": "gpui::profiler::ThreadTimings::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (thread_name : Option<String>, thread_id : ThreadId) -> Self",
      "cfg": [],
      "target": "ThreadTimings"
    },
    {
      "id": "gpui::profiler::ThreadTimings::save_task_timing",
      "name": "save_task_timing",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "summary": "",
      "declarations": [
        {
          "source": "crates/gpui/src/profiler.rs",
          "documentation": "",
          "signature": "pub fn save_task_timing (& mut self, _ : YieldTime)",
          "cfg": [
            "cfg (not (feature = \"profiler\"))"
          ],
          "target": "ThreadTimings"
        },
        {
          "source": "crates/gpui/src/profiler.rs",
          "documentation": "",
          "signature": "pub fn save_task_timing (& mut self, ended : YieldTime)",
          "cfg": [
            "cfg (feature = \"profiler\")"
          ],
          "target": "ThreadTimings"
        }
      ]
    },
    {
      "id": "gpui::profiler::ThreadTimings::update_running_task",
      "name": "update_running_task",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "summary": "",
      "declarations": [
        {
          "source": "crates/gpui/src/profiler.rs",
          "documentation": "",
          "signature": "pub fn update_running_task (& mut self, _ : SpawnTime, _ : & 'static std::panic::Location<'_>)",
          "cfg": [
            "cfg (not (feature = \"profiler\"))"
          ],
          "target": "ThreadTimings"
        },
        {
          "source": "crates/gpui/src/profiler.rs",
          "documentation": "",
          "signature": "pub fn update_running_task (& mut self, spawned : SpawnTime, location : & 'static std::panic::Location<'_>,)",
          "cfg": [
            "cfg (feature = \"profiler\")"
          ],
          "target": "ThreadTimings"
        }
      ]
    },
    {
      "id": "gpui::profiler::ThreadTimingsDelta",
      "name": "ThreadTimingsDelta",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] # [derive (Debug, Clone)] pub struct ThreadTimingsDelta { # [doc = \" Hashed thread id\"] pub thread_id : u64, # [doc = \" Thread name, if known\"] pub thread_name : Option<String>, # [doc = \" New timings since the last call. If the circular buffer wrapped around\"] # [doc = \" since the previous poll, some entries may have been lost.\"] pub new_timings : Vec<SerializedTaskTiming>, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::YieldTime",
      "name": "YieldTime",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] # [derive (Debug, Copy, Clone)] pub struct YieldTime (pub Instant);",
      "cfg": []
    },
    {
      "id": "gpui::profiler::actions::ActionStatistics",
      "name": "ActionStatistics",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler::actions",
      "path": "gpui::profiler::actions",
      "source": "crates/gpui/src/profiler/actions.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] # [derive (Clone)] pub struct ActionStatistics { runtime_to_beat : Duration, longest_runtimes : heapless::Vec<ActionTiming, 5>, running : Option<(& 'static str, Instant)>, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::actions::ActionStatistics::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler::actions",
      "path": "gpui::profiler::actions",
      "source": "crates/gpui/src/profiler/actions.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "ActionStatistics"
    },
    {
      "id": "gpui::profiler::actions::ActionStatistics::longest_runtimes",
      "name": "longest_runtimes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler::actions",
      "path": "gpui::profiler::actions",
      "source": "crates/gpui/src/profiler/actions.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn longest_runtimes (& self, include_running : bool) -> impl Iterator<Item = ActionTiming>",
      "cfg": [],
      "target": "ActionStatistics"
    },
    {
      "id": "gpui::profiler::actions::ActionStatistics::save_action_timing",
      "name": "save_action_timing",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler::actions",
      "path": "gpui::profiler::actions",
      "summary": "",
      "declarations": [
        {
          "source": "crates/gpui/src/profiler/actions.rs",
          "documentation": "",
          "signature": "pub fn save_action_timing (& mut self)",
          "cfg": [
            "cfg (feature = \"profiler\")"
          ],
          "target": "ActionStatistics"
        },
        {
          "source": "crates/gpui/src/profiler/actions.rs",
          "documentation": "",
          "signature": "pub fn save_action_timing (& mut self)",
          "cfg": [
            "cfg (not (feature = \"profiler\"))"
          ],
          "target": "ActionStatistics"
        }
      ]
    },
    {
      "id": "gpui::profiler::actions::ActionStatistics::take",
      "name": "take",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler::actions",
      "path": "gpui::profiler::actions",
      "source": "crates/gpui/src/profiler/actions.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn take (& mut self) -> Self",
      "cfg": [],
      "target": "ActionStatistics"
    },
    {
      "id": "gpui::profiler::actions::ActionStatistics::update_running_action",
      "name": "update_running_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler::actions",
      "path": "gpui::profiler::actions",
      "summary": "",
      "declarations": [
        {
          "source": "crates/gpui/src/profiler/actions.rs",
          "documentation": "",
          "signature": "pub fn update_running_action (& mut self, _action : & 'static str, _started : Instant)",
          "cfg": [
            "cfg (not (feature = \"profiler\"))"
          ],
          "target": "ActionStatistics"
        },
        {
          "source": "crates/gpui/src/profiler/actions.rs",
          "documentation": "",
          "signature": "pub fn update_running_action (& mut self, action : & 'static str, started : Instant)",
          "cfg": [
            "cfg (feature = \"profiler\")"
          ],
          "target": "ActionStatistics"
        }
      ]
    },
    {
      "id": "gpui::profiler::actions::ActionTiming",
      "name": "ActionTiming",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler::actions",
      "path": "gpui::profiler::actions",
      "source": "crates/gpui/src/profiler/actions.rs",
      "summary": "UNSTABLE only for use in the profiler and zed-reliability",
      "documentation": "UNSTABLE only for use in the profiler and zed-reliability",
      "signature": "# [doc (hidden)] # [doc = \" UNSTABLE only for use in the profiler and zed-reliability\"] # [derive (Copy, Clone)] pub struct ActionTiming { pub name : & 'static str, pub start : Instant, pub end : Instant, }",
      "cfg": []
    },
    {
      "id": "gpui::profiler::actions::ActionTiming::duration",
      "name": "duration",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler::actions",
      "path": "gpui::profiler::actions",
      "source": "crates/gpui/src/profiler/actions.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn duration (& self) -> Duration",
      "cfg": [],
      "target": "ActionTiming"
    },
    {
      "id": "gpui::profiler::actions::ActionTiming::runtime",
      "name": "runtime",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler::actions",
      "path": "gpui::profiler::actions",
      "source": "crates/gpui/src/profiler/actions.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn runtime (& self) -> Duration",
      "cfg": [],
      "target": "ActionTiming"
    },
    {
      "id": "gpui::profiler::actions::take_action_stats",
      "name": "take_action_stats",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler::actions",
      "path": "gpui::profiler::actions",
      "summary": "",
      "declarations": [
        {
          "source": "crates/gpui/src/profiler/actions.rs",
          "documentation": "",
          "signature": "pub fn take_action_stats () -> ActionStatistics",
          "cfg": [
            "cfg (feature = \"profiler\")"
          ]
        },
        {
          "source": "crates/gpui/src/profiler/actions.rs",
          "documentation": "",
          "signature": "pub fn take_action_stats () -> ActionStatistics",
          "cfg": [
            "cfg (not (feature = \"profiler\"))"
          ]
        }
      ]
    },
    {
      "id": "gpui::profiler::frame_trace_enabled",
      "name": "frame_trace_enabled",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Returns whether frame timing collection is enabled.",
      "documentation": "Returns whether frame timing collection is enabled.",
      "signature": "pub fn frame_trace_enabled () -> bool",
      "cfg": []
    },
    {
      "id": "gpui::profiler::get_all_timings",
      "name": "get_all_timings",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "summary": "",
      "declarations": [
        {
          "source": "crates/gpui/src/profiler.rs",
          "documentation": "",
          "signature": "pub fn get_all_timings (_included : gpui::TasksIncluded) -> Vec<gpui::ThreadTaskTimings>",
          "cfg": [
            "cfg (not (feature = \"profiler\"))"
          ]
        },
        {
          "source": "crates/gpui/src/profiler.rs",
          "documentation": "",
          "signature": "pub fn get_all_timings (included : gpui::TasksIncluded) -> Vec<gpui::ThreadTaskTimings>",
          "cfg": [
            "cfg (feature = \"profiler\")"
          ]
        }
      ]
    },
    {
      "id": "gpui::profiler::get_current_thread_task_timings",
      "name": "get_current_thread_task_timings",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get_current_thread_task_timings (include_running : TasksIncluded) -> ThreadTaskTimings",
      "cfg": []
    },
    {
      "id": "gpui::profiler::get_current_thread_timings",
      "name": "get_current_thread_timings",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "summary": "",
      "declarations": [
        {
          "source": "crates/gpui/src/profiler.rs",
          "documentation": "",
          "signature": "pub fn get_current_thread_timings (_included : TasksIncluded) -> gpui::ThreadTaskTimings",
          "cfg": [
            "cfg (not (feature = \"profiler\"))"
          ]
        },
        {
          "source": "crates/gpui/src/profiler.rs",
          "documentation": "",
          "signature": "pub fn get_current_thread_timings (included : TasksIncluded) -> gpui::ThreadTaskTimings",
          "cfg": [
            "cfg (feature = \"profiler\")"
          ]
        }
      ]
    },
    {
      "id": "gpui::profiler::record_frame_timing",
      "name": "record_frame_timing",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Records the timing of a drawn window frame.",
      "documentation": "Records the timing of a drawn window frame.\n\nNo-op unless frame tracing is enabled via [`set_frame_trace_enabled`].",
      "signature": "pub fn record_frame_timing (timing : FrameTiming)",
      "cfg": []
    },
    {
      "id": "gpui::profiler::reexport-1",
      "name": "actions :: { ActionStatistics , ActionTiming , take_action_stats }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use actions::{ ActionStatistics, ActionTiming, take_action_stats };",
      "cfg": []
    },
    {
      "id": "gpui::profiler::save_task_timing",
      "name": "save_task_timing",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn save_task_timing ()",
      "cfg": []
    },
    {
      "id": "gpui::profiler::set_frame_trace_enabled",
      "name": "set_frame_trace_enabled",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Enables or disables the manual owner of frame timing collection at runtime.",
      "documentation": "Enables or disables the manual owner of frame timing collection at runtime.\n\nCollection remains enabled while any [`FrameTraceLease`] exists. When the\nfinal owner releases tracing, buffered timings are cleared so stale data is\nnot reported after a later re-enable. Returns false if the manual owner's\nvalue was unchanged.",
      "signature": "pub fn set_frame_trace_enabled (enabled : bool) -> bool",
      "cfg": []
    },
    {
      "id": "gpui::profiler::set_trace_enabled",
      "name": "set_trace_enabled",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Enables or disables task timing trace collection at runtime.",
      "documentation": "Enables or disables task timing trace collection at runtime.\n\nWhen transitioning from enabled to disabled, `add_task_timing` becomes a\ncheaper since only cheap statistics are gathered. The existing per-thread\nbuffers for traces are cleared so stale data isn't reported after a later\nre-enable. Calls with the current value are a no-op.",
      "signature": "pub fn set_trace_enabled (enabled : bool) -> bool",
      "cfg": []
    },
    {
      "id": "gpui::profiler::take_all_stats",
      "name": "take_all_stats",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "summary": "",
      "declarations": [
        {
          "source": "crates/gpui/src/profiler.rs",
          "documentation": "",
          "signature": "pub fn take_all_stats (_included : TasksIncluded) -> Vec<gpui::ThreadTaskStatistics>",
          "cfg": [
            "cfg (not (feature = \"profiler\"))"
          ]
        },
        {
          "source": "crates/gpui/src/profiler.rs",
          "documentation": "",
          "signature": "pub fn take_all_stats (included : TasksIncluded) -> Vec<gpui::ThreadTaskStatistics>",
          "cfg": [
            "cfg (feature = \"profiler\")"
          ]
        }
      ]
    },
    {
      "id": "gpui::profiler::trace_enabled",
      "name": "trace_enabled",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "Returns whether task timing tracing is enabled.",
      "documentation": "Returns whether task timing tracing is enabled.",
      "signature": "pub fn trace_enabled () -> bool",
      "cfg": []
    },
    {
      "id": "gpui::profiler::update_running_task",
      "name": "update_running_task",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "profiler",
      "path": "gpui::profiler",
      "source": "crates/gpui/src/profiler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update_running_task (spawned : SpawnTime, location : & 'static std::panic::Location<'_>)",
      "cfg": []
    },
    {
      "id": "gpui::queue::Iter",
      "name": "Iter",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] pub struct Iter<T> (PriorityQueueReceiver<T>);",
      "cfg": []
    },
    {
      "id": "gpui::queue::PriorityQueueReceiver",
      "name": "PriorityQueueReceiver",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] pub struct PriorityQueueReceiver<T> { state : Arc<PriorityQueueState<T>>, rand : SmallRng, disconnected : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::queue::PriorityQueueReceiver::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "Returns whether the queue currently contains no elements.",
      "documentation": "Returns whether the queue currently contains no elements.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "PriorityQueueReceiver<T>"
    },
    {
      "id": "gpui::queue::PriorityQueueReceiver::iter",
      "name": "iter",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "Returns an iterator over the elements of the queue this iterator will wait for new elements if the queue is empty.",
      "documentation": "Returns an iterator over the elements of the queue\nthis iterator will wait for new elements if the queue is empty.",
      "signature": "pub fn iter (self) -> Iter<T>",
      "cfg": [],
      "target": "PriorityQueueReceiver<T>"
    },
    {
      "id": "gpui::queue::PriorityQueueReceiver::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> (PriorityQueueSender<T>, Self)",
      "cfg": [],
      "target": "PriorityQueueReceiver<T>"
    },
    {
      "id": "gpui::queue::PriorityQueueReceiver::pop",
      "name": "pop",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "Pops an element from the priority queue blocking if necessary.",
      "documentation": "Pops an element from the priority queue blocking if necessary.\n\nThis method is best suited if you only intend to pop one element, for better performance\non large queues see [`Self::iter``]\n\n# Errors\n\nIf the sender was dropped",
      "signature": "pub fn pop (& mut self) -> Result<T, RecvError>",
      "cfg": [],
      "target": "PriorityQueueReceiver<T>"
    },
    {
      "id": "gpui::queue::PriorityQueueReceiver::spin_try_pop",
      "name": "spin_try_pop",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn spin_try_pop (& mut self) -> Result<Option<T>, RecvError>",
      "cfg": [],
      "target": "PriorityQueueReceiver<T>"
    },
    {
      "id": "gpui::queue::PriorityQueueReceiver::try_iter",
      "name": "try_iter",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "Returns an iterator over the elements of the queue this iterator will end when all elements have been consumed and will not wait for new ones.",
      "documentation": "Returns an iterator over the elements of the queue\nthis iterator will end when all elements have been consumed and will not wait for new ones.",
      "signature": "pub fn try_iter (self) -> TryIter<T>",
      "cfg": [],
      "target": "PriorityQueueReceiver<T>"
    },
    {
      "id": "gpui::queue::PriorityQueueReceiver::try_pop",
      "name": "try_pop",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "Tries to pop one element from the priority queue without blocking.",
      "documentation": "Tries to pop one element from the priority queue without blocking.\n\nThis will early return if there are no elements in the queue.\n\nThis method is best suited if you only intend to pop one element, for better performance\non large queues see [`Self::try_iter`]\n\n# Errors\n\nIf the sender was dropped",
      "signature": "pub fn try_pop (& mut self) -> Result<Option<T>, RecvError>",
      "cfg": [],
      "target": "PriorityQueueReceiver<T>"
    },
    {
      "id": "gpui::queue::PriorityQueueSender",
      "name": "PriorityQueueSender",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] pub struct PriorityQueueSender<T> { state : Arc<PriorityQueueState<T>>, }",
      "cfg": []
    },
    {
      "id": "gpui::queue::PriorityQueueSender::send",
      "name": "send",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn send (& self, priority : Priority, item : T) -> Result<(), SendError<T>>",
      "cfg": [],
      "target": "PriorityQueueSender<T>"
    },
    {
      "id": "gpui::queue::PriorityQueueSender::spin_send",
      "name": "spin_send",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn spin_send (& self, priority : Priority, item : T) -> Result<(), SendError<T>>",
      "cfg": [],
      "target": "PriorityQueueSender<T>"
    },
    {
      "id": "gpui::queue::RecvError",
      "name": "RecvError",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug)] # [doc (hidden)] pub struct RecvError;",
      "cfg": []
    },
    {
      "id": "gpui::queue::SendError",
      "name": "SendError",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] pub struct SendError<T> (pub T);",
      "cfg": []
    },
    {
      "id": "gpui::queue::TryIter",
      "name": "TryIter",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "queue",
      "path": "gpui::queue",
      "source": "crates/gpui/src/queue.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [doc (hidden)] pub struct TryIter<T> { receiver : PriorityQueueReceiver<T>, ended : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::renderer_timing::GpuExecutionTime",
      "name": "GpuExecutionTime",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "renderer_timing",
      "path": "gpui::renderer_timing",
      "source": "crates/gpui/src/renderer_timing.rs",
      "summary": "GPU clock evidence, never a CPU completion or pixel-readback duration.",
      "documentation": "GPU clock evidence, never a CPU completion or pixel-readback duration.",
      "signature": "# [doc = \" GPU clock evidence, never a CPU completion or pixel-readback duration.\"] # [derive (Clone, Debug)] pub enum GpuExecutionTime { # [doc = \" This adapter/API cannot provide usable execution timestamps.\"] Unsupported (String), # [doc = \" Elapsed GPU time between commands bracketing the scene's render commands.\"] Measured (Duration), }",
      "cfg": []
    },
    {
      "id": "gpui::renderer_timing::GpuExecutionTime::from_timestamps",
      "name": "from_timestamps",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "renderer_timing",
      "path": "gpui::renderer_timing",
      "source": "crates/gpui/src/renderer_timing.rs",
      "summary": "Validate a completed submission's timestamps. Callers must supply fresh, submission-owned storage, not a cached result from an earlier frame.",
      "documentation": "Validate a completed submission's timestamps. Callers must supply fresh,\nsubmission-owned storage, not a cached result from an earlier frame.",
      "signature": "pub fn from_timestamps (start : f64, end : f64, seconds_per_tick : f64) -> anyhow::Result<Self>",
      "cfg": [],
      "target": "GpuExecutionTime"
    },
    {
      "id": "gpui::renderer_timing::RendererFrameTiming",
      "name": "RendererFrameTiming",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "renderer_timing",
      "path": "gpui::renderer_timing",
      "source": "crates/gpui/src/renderer_timing.rs",
      "summary": "One synchronously measured headless render attempt. IDs increase per renderer; a failed attempt returns an error, never the previous attempt's measurement.",
      "documentation": "One synchronously measured headless render attempt. IDs increase per renderer;\na failed attempt returns an error, never the previous attempt's measurement.",
      "signature": "# [doc = \" One synchronously measured headless render attempt. IDs increase per renderer;\"] # [doc = \" a failed attempt returns an error, never the previous attempt's measurement.\"] # [derive (Clone, Debug)] pub struct RendererFrameTiming { # [doc = \" Monotonically increasing measurement attempt ID, local to this renderer.\"] pub submission_id : u64, # [doc = \" CPU target preparation, encoding and submission; not GPU time.\"] pub cpu_encode_submit : Duration, # [doc = \" CPU wall time from submit returning until completion is observed. Includes\"] # [doc = \" scheduling/poll overhead; not GPU execution and not presentation latency.\"] pub submit_to_completion : Duration, # [doc = \" Execution-clock evidence or an explicit unsupported capability reason.\"] pub gpu_execution : GpuExecutionTime, # [doc = \" GPU query resolve/copy, mapping and CPU extraction after render completion.\"] # [doc = \" Absent when no timestamp query readback is performed.\"] pub timestamp_readback : Option<Duration>, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::BackdropGlass",
      "name": "BackdropGlass",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "A within-window glass surface: the renderer snapshots everything painted below this order, optionally derives a blurred source, and paints it back through the surface's shape and material. See [`crate::Window::paint_backdrop_glass`].",
      "documentation": "A within-window glass surface: the renderer snapshots everything painted\nbelow this order, optionally derives a blurred source, and paints it back\nthrough the surface's shape and material. See\n[`crate::Window::paint_backdrop_glass`].",
      "signature": "# [doc = \" A within-window glass surface: the renderer snapshots everything painted\"] # [doc = \" below this order, optionally derives a blurred source, and paints it back\"] # [doc = \" through the surface's shape and material. See\"] # [doc = \" [`crate::Window::paint_backdrop_glass`].\"] # [derive (Debug, Copy, Clone)] # [repr (C)] # [expect (missing_docs)] pub struct BackdropGlass { pub order : DrawOrder, # [doc = \" The region the surface occupies. With more than one lobe this is the\"] # [doc = \" union's bounding box, which is what the renderer rasterizes and what\"] # [doc = \" clips the blur; the shape inside it comes from `lobes`.\"] pub bounds : Bounds<ScaledPixels>, pub content_mask : ContentMask<ScaledPixels>, # [doc = \" The rounding used when `lobe_count` is 0.\"] pub corner_radii : Corners<ScaledPixels>, pub material : GlassMaterial<ScaledPixels>, # [doc = \" The length is written out rather than named so that the C header\"] # [doc = \" generated for the Metal shaders carries a literal bound, which needs no\"] # [doc = \" integer typedef and no include. [`MAX_GLASS_LOBES`] is asserted equal\"] # [doc = \" to it below, so the two cannot drift.\"] pub lobes : [GlassLobe<ScaledPixels>; 8], # [doc = \" How many entries of `lobes` are real. Zero means the surface is the\"] # [doc = \" single rounded rect named by `bounds` and `corner_radii`.\"] pub lobe_count : u32, pub clip_id : crate::ClipId, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::BackdropGlass::gaussian_pass_count",
      "name": "gaussian_pass_count",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "How many separable gaussian passes this surface's blur needs, or `None` when it needs more than [`MAX_GLASS_GAUSSIAN_PASSES`] and the renderer should leave the backdrop unblurred rather than spend an unbounded amount of the frame on it.",
      "documentation": "How many separable gaussian passes this surface's blur needs, or\n`None` when it needs more than [`MAX_GLASS_GAUSSIAN_PASSES`] and the\nrenderer should leave the backdrop unblurred rather than spend an\nunbounded amount of the frame on it.\n\nA renderer that hands the blur to the platform (Metal, through\n`MPSImageGaussianBlur`) has no use for this. The two that convolve it\nthemselves both do, and they share this rather than each deriving it,\nbecause the number is a property of the shader's tap budget and the\ntwo shaders have the same one.",
      "signature": "pub fn gaussian_pass_count (& self) -> Option<u32>",
      "cfg": [],
      "target": "BackdropGlass"
    },
    {
      "id": "gpui::scene::BackdropGlass::optical_bevel",
      "name": "optical_bevel",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Geometrically admissible depth of the optical profile, in device pixels. A rounded corner's inward parallel curves collapse at its radius. Extending the dome past that point leaves a nonzero slope at the arc centre, concentrating directional highlights into a pointed wedge. Bound the entire profile (refraction and lighting together), not its brightness, so it is flat before any rounded arc collapses. One depth across the union avoids seams between lobes or unequal corner radii. Square corners retain their intentional incident-face crease.",
      "documentation": "Geometrically admissible depth of the optical profile, in device pixels.\nA rounded corner's inward parallel curves collapse at its radius.\nExtending the dome past that point leaves a nonzero slope at the arc\ncentre, concentrating directional highlights into a pointed wedge.\nBound the entire profile (refraction and lighting together), not its\nbrightness, so it is flat before any rounded arc collapses. One depth\nacross the union avoids seams between lobes or unequal corner radii.\nSquare corners retain their intentional incident-face crease.",
      "signature": "pub fn optical_bevel (& self) -> ScaledPixels",
      "cfg": [],
      "target": "BackdropGlass"
    },
    {
      "id": "gpui::scene::BackdropGlass::optical_thickness",
      "name": "optical_thickness",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Maximum height of the elliptical edge profile, shared by upload and sampling bounds. Its analytic derivative defines the Snell and lighting normal. The profile joins a flat interior before a corner collapses.",
      "documentation": "Maximum height of the elliptical edge profile, shared by upload and\nsampling bounds. Its analytic derivative defines the Snell and lighting\nnormal. The profile joins a flat interior before a corner collapses.",
      "signature": "pub fn optical_thickness (& self) -> ScaledPixels",
      "cfg": [],
      "target": "BackdropGlass"
    },
    {
      "id": "gpui::scene::BackdropGlass::probe_sample_points",
      "name": "probe_sample_points",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Where this surface's luminance probe samples its sharp or blurred optical source: the centre of the surface and the four quarter points, in device pixels, each clamped inside a `width` by `height` texture.",
      "documentation": "Where this surface's luminance probe samples its sharp or blurred\noptical source: the centre of the surface and the four quarter points,\nin device pixels, each clamped inside a `width` by `height` texture.\n\nFive points rather than one because a probe summarises the whole\nsurface: for frost the blur has already averaged each point's\nneighbourhood, while for clear glass the cross keeps one bright stripe\nunder the centre from speaking for the corners. Every renderer copies\nexactly these texels, which is what makes one probe value mean the same\nthing on each of them.",
      "signature": "pub fn probe_sample_points (& self, width : f32, height : f32,) -> [[f32; 2]; LUMINANCE_PROBE_SAMPLES]",
      "cfg": [],
      "target": "BackdropGlass"
    },
    {
      "id": "gpui::scene::BackdropGlass::render_region",
      "name": "render_region",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The clipped output and conservative scratch region for this surface.",
      "documentation": "The clipped output and conservative scratch region for this surface.\n\n`gaussian_passes` is the number of same-variance passes the backend\nwill apply. A platform Gaussian is one pass; a clear surface is zero.\nThe Gaussian support is three standard deviations per pass. For a\nnormally incident ray entering index n, Snell's law bounds the ray's\nlateral slope by sqrt(n² - 1), including at a grazing surface normal.\nUse the largest channel index and maximum optical-plane distance, plus\none pixel for bilinear filtering. No shader displacement cap is needed.\nBoth regions are rounded outwards and clamped to `viewport`.\nWhen the material requests a valid luminance probe, `sampling` also\nretains each probe texel and its blur dependencies even when the\ncontent mask clips that point out of `visible`.",
      "signature": "pub fn render_region (& self, gaussian_passes : u32, viewport : Size<DevicePixels>,) -> Option<BackdropRenderRegion>",
      "cfg": [],
      "target": "BackdropGlass"
    },
    {
      "id": "gpui::scene::BackdropGlass::shape",
      "name": "shape",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The lobes that make up the shape, which is the explicit list when there is one and the surface's own rounded rect when there is not.",
      "documentation": "The lobes that make up the shape, which is the explicit list when\nthere is one and the surface's own rounded rect when there is not.\n\nCallers that evaluate the shape must go through this rather than\nreading `lobes` directly, so that the single-lobe case cannot drift\naway from the many-lobe case.",
      "signature": "pub fn shape (& self) -> ([GlassLobe; MAX_GLASS_LOBES], usize)",
      "cfg": [],
      "target": "BackdropGlass"
    },
    {
      "id": "gpui::scene::BackdropRenderRegion",
      "name": "BackdropRenderRegion",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Integral device-pixel regions a backdrop renderer must preserve.",
      "documentation": "Integral device-pixel regions a backdrop renderer must preserve.\n\n`visible` is the surface clipped by its content mask. `sampling` expands\nthat region by every blur pass's finite Gaussian support and the material's\nmaximum refracted displacement, and preserves any requested probe samples.\nA renderer may leave pixels outside `sampling` untouched in scratch\ntextures because neither a fragment in `visible` nor a probe can read them.",
      "signature": "# [doc = \" Integral device-pixel regions a backdrop renderer must preserve.\"] # [doc = \"\"] # [doc = \" `visible` is the surface clipped by its content mask. `sampling` expands\"] # [doc = \" that region by every blur pass's finite Gaussian support and the material's\"] # [doc = \" maximum refracted displacement, and preserves any requested probe samples.\"] # [doc = \" A renderer may leave pixels outside `sampling` untouched in scratch\"] # [doc = \" textures because neither a fragment in `visible` nor a probe can read them.\"] # [derive (Copy, Clone, Debug, Eq, PartialEq)] pub struct BackdropRenderRegion { # [doc = \" The integral pixels where the surface can produce fragments.\"] pub visible : Bounds<DevicePixels>, # [doc = \" The integral pixels that can contribute to those fragments.\"] pub sampling : Bounds<DevicePixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::BorderStyle",
      "name": "BorderStyle",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The style of a border.",
      "documentation": "The style of a border.",
      "signature": "# [doc = \" The style of a border.\"] # [derive (Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] # [repr (C)] pub enum BorderStyle { # [doc = \" A solid border.\"] # [default] Solid = 0, # [doc = \" A dashed border.\"] Dashed = 1, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::DrawOrder",
      "name": "DrawOrder",
      "kind": "type",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [expect (missing_docs)] pub type DrawOrder = u32;",
      "cfg": []
    },
    {
      "id": "gpui::scene::GlassEdge",
      "name": "GlassEdge",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Which edge a glass surface fades from, for a scroll-edge or similar ramp.",
      "documentation": "Which edge a glass surface fades from, for a scroll-edge or similar ramp.",
      "signature": "# [doc = \" Which edge a glass surface fades from, for a scroll-edge or similar ramp.\"] # [derive (Debug, Copy, Clone, Default, PartialEq, Eq)] # [repr (u32)] pub enum GlassEdge { # [doc = \" No fade; the surface applies its optics uniformly.\"] # [default] None = 0, # [doc = \" Full optics at the top edge, fading toward the bottom of the band.\"] Top = 1, # [doc = \" Full optics at the bottom edge, fading toward the top of the band.\"] Bottom = 2, # [doc = \" Full optics at the left edge, fading toward the right of the band.\"] Left = 3, # [doc = \" Full optics at the right edge, fading toward the left of the band.\"] Right = 4, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::GlassEdge::as_f32",
      "name": "as_f32",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The GPU-facing discriminant, as a float so the material struct stays one packed run of 32-bit words.",
      "documentation": "The GPU-facing discriminant, as a float so the material struct stays\none packed run of 32-bit words.",
      "signature": "pub fn as_f32 (self) -> f32",
      "cfg": [],
      "target": "GlassEdge"
    },
    {
      "id": "gpui::scene::GlassField",
      "name": "GlassField",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The shape of a glass surface at a point: how far outside it the point is, and which way the surface falls away from there.",
      "documentation": "The shape of a glass surface at a point: how far outside it the point is,\nand which way the surface falls away from there.",
      "signature": "# [doc = \" The shape of a glass surface at a point: how far outside it the point is,\"] # [doc = \" and which way the surface falls away from there.\"] # [derive (Debug, Copy, Clone, PartialEq)] pub struct GlassField { # [doc = \" Signed distance to the surface's edge, negative inside.\"] pub distance : f32, # [doc = \" The analytic distance derivative, not normalized. Preserve its magnitude\"] # [doc = \" when deriving the height-field normal across a union. At a lobe's medial\"] # [doc = \" axis choose an actual incident face, not their fictitious bisector.\"] # [doc = \" Zero for an empty field or cancelling smooth-union derivatives.\"] pub gradient : Point<f32>, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::GlassLength",
      "name": "GlassLength",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "A length carried by a glass surface, in whichever pixel unit the surface is expressed in.",
      "documentation": "A length carried by a glass surface, in whichever pixel unit the surface\nis expressed in.\n\n[`GlassMaterial`] and [`GlassLobe`] are parameterised over their unit for\nthe same reason [`Bounds`] is: a caller states a surface in logical pixels\nand [`crate::Window::paint_backdrop_glass`] scales it, so the two are\ndifferent types and the conversion is the one operation that turns one\ninto the other. This trait is what lets the shared arithmetic be written\nonce instead of twice.",
      "signature": "# [doc = \" A length carried by a glass surface, in whichever pixel unit the surface\"] # [doc = \" is expressed in.\"] # [doc = \"\"] # [doc = \" [`GlassMaterial`] and [`GlassLobe`] are parameterised over their unit for\"] # [doc = \" the same reason [`Bounds`] is: a caller states a surface in logical pixels\"] # [doc = \" and [`crate::Window::paint_backdrop_glass`] scales it, so the two are\"] # [doc = \" different types and the conversion is the one operation that turns one\"] # [doc = \" into the other. This trait is what lets the shared arithmetic be written\"] # [doc = \" once instead of twice.\"] pub trait GlassLength : Copy + Default + std::fmt::Debug + PartialEq { # [doc = \" The length as a bare pixel count.\"] fn raw (self) -> f32; # [doc = \" A length of this unit from a bare pixel count.\"] fn from_raw (raw : f32) -> Self; }",
      "cfg": []
    },
    {
      "id": "gpui::scene::GlassLobe",
      "name": "GlassLobe",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "One rounded rectangle of a glass surface's shape.",
      "documentation": "One rounded rectangle of a glass surface's shape.\n\nA surface with a single lobe is an ordinary rounded rect. Several lobes\nare combined by a smooth minimum, so two that come within\n[`GlassMaterial::smoothing`] of each other join into one body instead of\noverlapping as two outlines.",
      "signature": "# [doc = \" One rounded rectangle of a glass surface's shape.\"] # [doc = \"\"] # [doc = \" A surface with a single lobe is an ordinary rounded rect. Several lobes\"] # [doc = \" are combined by a smooth minimum, so two that come within\"] # [doc = \" [`GlassMaterial::smoothing`] of each other join into one body instead of\"] # [doc = \" overlapping as two outlines.\"] # [derive (Debug, Copy, Clone, Default, PartialEq)] # [repr (C)] # [expect (missing_docs)] pub struct GlassLobe<P : GlassLength = ScaledPixels> { pub bounds : Bounds<P>, pub corner_radii : Corners<P>, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::GlassLobe::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The same lobe in device pixels.",
      "documentation": "The same lobe in device pixels.",
      "signature": "pub fn scale (self, factor : f32) -> GlassLobe<ScaledPixels>",
      "cfg": [],
      "target": "GlassLobe<Pixels>"
    },
    {
      "id": "gpui::scene::GlassMaterial",
      "name": "GlassMaterial",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The complete optical response of a glass surface.",
      "documentation": "The complete optical response of a glass surface.\n\nBlur is scattering, not a prerequisite for glass. [`GlassMaterial::clear`]\nsnapshots the sharp backdrop and leaves it unchanged; callers independently\nadd refraction, dispersion, transmission, an optical lift, or edge light.\n[`GlassMaterial::frosted`] adds only scattering. Refraction samples that\nscattered source throughout the surface, including the rim. The retained\nsharp snapshot restores the original backdrop only under an explicit edge mask.",
      "signature": "# [doc = \" The complete optical response of a glass surface.\"] # [doc = \"\"] # [doc = \" Blur is scattering, not a prerequisite for glass. [`GlassMaterial::clear`]\"] # [doc = \" snapshots the sharp backdrop and leaves it unchanged; callers independently\"] # [doc = \" add refraction, dispersion, transmission, an optical lift, or edge light.\"] # [doc = \" [`GlassMaterial::frosted`] adds only scattering. Refraction samples that\"] # [doc = \" scattered source throughout the surface, including the rim. The retained\"] # [doc = \" sharp snapshot restores the original backdrop only under an explicit edge mask.\"] # [derive (Debug, Copy, Clone, PartialEq)] # [repr (C)] pub struct GlassMaterial<P = ScaledPixels> { # [doc = \" Gaussian sigma applied to the backdrop snapshot. Zero keeps the source\"] # [doc = \" sharp while still allowing every other optical field to act on it.\"] pub blur_radius : P, # [doc = \" How far in from the edge the bevel that bends the backdrop reaches.\"] # [doc = \" Zero leaves the backdrop flat however large the other fields are,\"] # [doc = \" because there is no slope for them to act on.\"] # [doc = \" Renderers bound this requested depth by the shape's rounded-corner\"] # [doc = \" reach; see [`BackdropGlass::optical_bevel`].\"] pub bevel : P, # [doc = \" Signed multiplier of the surface thickness. Zero flattens the surface;\"] # [doc = \" positive values describe a convex face, negative values a concave face.\"] # [doc = \" This scales both the height and its derivative, including lighting.\"] pub refraction : f32, # [doc = \" Maximum profile height before applying `refraction`. Zero follows the\"] # [doc = \" geometrically bounded bevel. Explicit heights do not widen the bevel.\"] pub thickness : P, # [doc = \" Dielectric index relative to air, sanitized to 1..=2.5. One removes\"] # [doc = \" refraction and Fresnel reflection. Clear constructors use 1.5.\"] pub refractive_index : f32, # [doc = \" Effective distance below the profile base to the sampled optical plane.\"] # [doc = \" The refracted ray propagates through this distance in the same medium:\"] # [doc = \" this is not an air gap behind a second dielectric interface. Screen-space\"] # [doc = \" glass has no scene depth, hidden geometry or multi-bounce ray tracing.\"] pub backdrop_depth : P, # [doc = \" Fractional variation of `refractive_index - 1` for red and blue.\"] # [doc = \" Zero uses the same Snell ray for all channels, not a post-sample fringe.\"] pub dispersion : f32, # [doc = \" Strength of the Fresnel-weighted directional environment reflection,\"] # [doc = \" 0 for none. Reflection and transmission share the profile's normal.\"] pub specular : f32, # [doc = \" Multiplicative transmission applied after sampling. One preserves the\"] # [doc = \" backdrop; values above one model the measured light gain of clear glass.\"] pub transmission_gain : f32, # [doc = \" Saturation of the sampled backdrop, including the refracted rim, before\"] # [doc = \" transmission gain. One preserves colour, zero uses Rec. 709 luminance.\"] # [doc = \" Values above one intensify colour; negative results are clamped to zero.\"] pub saturation : f32, # [doc = \" Straight-alpha source-over material colour after saturation and\"] # [doc = \" transmission gain, before optical lift and edge light. RGB and alpha\"] # [doc = \" are independently clamped to 0..=1; non-finite channels become zero.\"] # [doc = \" Neutral washes and caller tints cover the refracted rim and fused\"] # [doc = \" bridges, unlike a foreground element fill.\"] pub wash : Rgba, # [doc = \" A colour added after transmission, as `rgb * alpha`. This is not\"] # [doc = \" source-over tint: it lifts the light already passing through the glass.\"] pub optical_lift : Rgba, # [doc = \" Width of the consistently lit edge in pixels. Zero paints no hairline.\"] pub hairline : P, # [doc = \" Where the light is, in radians clockwise from straight up.\"] pub light_angle : f32, # [doc = \" How tight the specular lobe is. Larger is a smaller, harder highlight.\"] pub specular_sharpness : f32, # [doc = \" How far apart two lobes may be and still join. Zero makes the union a\"] # [doc = \" plain minimum, so lobes meet at a crease.\"] pub smoothing : P, # [doc = \" Opaque [`crate::LuminanceProbeLease::id`], or [`NO_LUMINANCE_PROBE`].\"] # [doc = \" The u32 carries a generation and physical slot; retain its lease and\"] # [doc = \" never substitute the decoded slot when querying the cache.\"] # [doc = \"\"] # [doc = \" A probed surface has the mean luminance of its optical source reported\"] # [doc = \" back through [`crate::Window::backdrop_luminance`], one frame later.\"] # [doc = \" That source is sharp for clear glass and blurred for frosted glass. See\"] # [doc = \" that method for what the delay means for a caller.\"] pub probe : u32, # [doc = \" Which edge a linear mask fades from. Zero is none; 1 top, 2 bottom,\"] # [doc = \" 3 left, 4 right. Stored as a float so the GPU struct stays one packed\"] # [doc = \" run of 32-bit words.\"] pub edge_mask_edge : f32, # [doc = \" How far that fade reaches from the named edge, in the surface's unit.\"] # [doc = \" Zero disables the mask even when [`Self::edge_mask_edge`] is set.\"] pub edge_mask_band : P, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::GlassMaterial::bends_light",
      "name": "bends_light",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Whether the backdrop sample is displaced at all.",
      "documentation": "Whether the backdrop sample is displaced at all.",
      "signature": "pub fn bends_light (& self) -> bool",
      "cfg": [],
      "target": "GlassMaterial<P>"
    },
    {
      "id": "gpui::scene::GlassMaterial::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Preserve the sharp backdrop and apply no optics.",
      "documentation": "Preserve the sharp backdrop and apply no optics.\n\nThis is a function rather than a constant because the zero length\ndepends on the unit; every field in it is nevertheless fixed.",
      "signature": "pub fn clear () -> Self",
      "cfg": [],
      "target": "GlassMaterial<P>"
    },
    {
      "id": "gpui::scene::GlassMaterial::frosted",
      "name": "frosted",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Blur the backdrop and apply no other optics.",
      "documentation": "Blur the backdrop and apply no other optics.",
      "signature": "pub fn frosted (blur_radius : P) -> Self",
      "cfg": [],
      "target": "GlassMaterial<P>"
    },
    {
      "id": "gpui::scene::GlassMaterial::is_flat",
      "name": "is_flat",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Whether this material asks the renderer for anything beyond passing through its sharp or blurred source unchanged.",
      "documentation": "Whether this material asks the renderer for anything beyond passing\nthrough its sharp or blurred source unchanged.",
      "signature": "pub fn is_flat (& self) -> bool",
      "cfg": [],
      "target": "GlassMaterial<P>"
    },
    {
      "id": "gpui::scene::GlassMaterial::needs_backdrop",
      "name": "needs_backdrop",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Whether a renderer must snapshot the framebuffer for this material. A clear refractive surface returns true even though its blur is zero.",
      "documentation": "Whether a renderer must snapshot the framebuffer for this material.\nA clear refractive surface returns true even though its blur is zero.",
      "signature": "pub fn needs_backdrop (& self) -> bool",
      "cfg": [],
      "target": "GlassMaterial<P>"
    },
    {
      "id": "gpui::scene::GlassMaterial::sanitized",
      "name": "sanitized",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Replaces every field that a renderer could not act on with one it can: non-finite values become zero, and negative values that have no meaning below zero are clamped there. A caller that computed a material from an animation gets a legible surface rather than a hole.",
      "documentation": "Replaces every field that a renderer could not act on with one it can:\nnon-finite values become zero, and negative values that have no\nmeaning below zero are clamped there. A caller that computed a\nmaterial from an animation gets a legible surface rather than a hole.",
      "signature": "pub fn sanitized (mut self) -> Self",
      "cfg": [],
      "target": "GlassMaterial<P>"
    },
    {
      "id": "gpui::scene::GlassMaterial::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The same material in device pixels. Only its lengths change: every other field is a ratio, an angle or a slot index, and means the same thing at any scale.",
      "documentation": "The same material in device pixels. Only its lengths change: every\nother field is a ratio, an angle or a slot index, and means the same\nthing at any scale.",
      "signature": "pub fn scale (self, factor : f32) -> GlassMaterial<ScaledPixels>",
      "cfg": [],
      "target": "GlassMaterial<Pixels>"
    },
    {
      "id": "gpui::scene::GlassMaterial::with_edge_mask",
      "name": "with_edge_mask",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Fade this surface from `edge` over `band`, mixing the optical result back into the undisplaced sharp snapshot so the inner side of the ramp is the content itself.",
      "documentation": "Fade this surface from `edge` over `band`, mixing the optical result\nback into the undisplaced sharp snapshot so the inner side of the\nramp is the content itself.",
      "signature": "pub fn with_edge_mask (mut self, edge : GlassEdge, band : P) -> Self",
      "cfg": [],
      "target": "GlassMaterial<P>"
    },
    {
      "id": "gpui::scene::LUMINANCE_PROBE_SAMPLES",
      "name": "LUMINANCE_PROBE_SAMPLES",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "How many points of the sharp or blurred backdrop one probe averages.",
      "documentation": "How many points of the sharp or blurred backdrop one probe averages.",
      "signature": "pub const LUMINANCE_PROBE_SAMPLES: usize",
      "cfg": []
    },
    {
      "id": "gpui::scene::MAX_BACKDROP_GLASS_SURFACES_PER_FRAME",
      "name": "MAX_BACKDROP_GLASS_SURFACES_PER_FRAME",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The most backdrop-glass surfaces a scene admits in one frame.",
      "documentation": "The most backdrop-glass surfaces a scene admits in one frame.\n\nEvery admitted surface snapshots the full framebuffer before compositing\nits optics, even when its blur spends no Gaussian passes. Bounding surfaces\nseparately from the Gaussian budget therefore bounds that fixed work on\nMetal, DirectX, native WGPU, and browser WGPU alike. Admission follows\npaint order. Valid intents past the limit remain replayable and callers may\nsupply an ordinary-fill fallback through\n[`crate::Window::paint_backdrop_glass_with_fallback`].",
      "signature": "pub const MAX_BACKDROP_GLASS_SURFACES_PER_FRAME: usize",
      "cfg": []
    },
    {
      "id": "gpui::scene::MAX_GLASS_GAUSSIAN_PASSES",
      "name": "MAX_GLASS_GAUSSIAN_PASSES",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The most gaussian passes one glass surface may be given.",
      "documentation": "The most gaussian passes one glass surface may be given.",
      "signature": "pub const MAX_GLASS_GAUSSIAN_PASSES: u32",
      "cfg": []
    },
    {
      "id": "gpui::scene::MAX_GLASS_LOBES",
      "name": "MAX_GLASS_LOBES",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "How many rounded rectangles one glass surface may be made of.",
      "documentation": "How many rounded rectangles one glass surface may be made of.\n\nThe shape is evaluated per fragment and per hit test, so the count is\nbounded rather than allocated: a loop a shader can unroll is the reason\nthis is a fixed array inside the instance rather than a second buffer.",
      "signature": "pub const MAX_GLASS_LOBES: usize",
      "cfg": []
    },
    {
      "id": "gpui::scene::MAX_GLASS_SIGMA_PER_PASS",
      "name": "MAX_GLASS_SIGMA_PER_PASS",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The largest standard deviation one separable gaussian pass can carry.",
      "documentation": "The largest standard deviation one separable gaussian pass can carry.\n\nThe shaders take 64 taps either side of centre and a gaussian is spent by\nthree standard deviations, so a pass wider than this is sampling a kernel\nit has already run out of room for. Wider blurs are split into several\npasses, whose variances add.",
      "signature": "pub const MAX_GLASS_SIGMA_PER_PASS: f32",
      "cfg": []
    },
    {
      "id": "gpui::scene::MAX_LUMINANCE_PROBES",
      "name": "MAX_LUMINANCE_PROBES",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "How many luminance probe slots a window carries.",
      "documentation": "How many luminance probe slots a window carries.\n\nA probe is a slot a glass surface fills each frame and a caller reads a\nframe later, so the count bounds the readback buffer every renderer keeps,\nthe same way [`MAX_GLASS_LOBES`] bounds the instance.",
      "signature": "pub const MAX_LUMINANCE_PROBES: usize",
      "cfg": []
    },
    {
      "id": "gpui::scene::MonochromeSprite",
      "name": "MonochromeSprite",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Copy, Clone, Debug)] # [repr (C)] # [expect (missing_docs)] pub struct MonochromeSprite { pub order : DrawOrder, pub pad : u32, pub bounds : Bounds<ScaledPixels>, pub content_mask : ContentMask<ScaledPixels>, pub color : Hsla, pub tile : AtlasTile, pub transformation : TransformationMatrix, pub clip_id : crate::ClipId, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::NO_LUMINANCE_PROBE",
      "name": "NO_LUMINANCE_PROBE",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The value of [`GlassMaterial::probe`] that asks for no luminance probe.",
      "documentation": "The value of [`GlassMaterial::probe`] that asks for no luminance probe.",
      "signature": "pub const NO_LUMINANCE_PROBE: u32",
      "cfg": []
    },
    {
      "id": "gpui::scene::PaddedBool32",
      "name": "PaddedBool32",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "A boolean stored as a `u32` so that GPU-facing structs contain no compiler-inserted padding bytes, which would be undefined behavior to reinterpret as `&[u8]` when writing instance buffers. Guaranteed to be `0` or `1` by construction; shaders read it as a `u32`/`uint`.",
      "documentation": "A boolean stored as a `u32` so that GPU-facing structs contain no\ncompiler-inserted padding bytes, which would be undefined behavior to\nreinterpret as `&[u8]` when writing instance buffers. Guaranteed to be\n`0` or `1` by construction; shaders read it as a `u32`/`uint`.",
      "signature": "# [doc = \" A boolean stored as a `u32` so that GPU-facing structs contain no\"] # [doc = \" compiler-inserted padding bytes, which would be undefined behavior to\"] # [doc = \" reinterpret as `&[u8]` when writing instance buffers. Guaranteed to be\"] # [doc = \" `0` or `1` by construction; shaders read it as a `u32`/`uint`.\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq)] # [repr (transparent)] pub struct PaddedBool32 (u32);",
      "cfg": []
    },
    {
      "id": "gpui::scene::PaintSurface",
      "name": "PaintSurface",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug)] # [allow (missing_docs)] pub struct PaintSurface { pub order : DrawOrder, pub bounds : Bounds<ScaledPixels>, pub content_mask : ContentMask<ScaledPixels>, pub clip_id : crate::ClipId, # [cfg (target_os = \"macos\")] pub image_buffer : core_video::pixel_buffer::CVPixelBuffer, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::Path",
      "name": "Path",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "A line made up of a series of vertices and control points.",
      "documentation": "A line made up of a series of vertices and control points.",
      "signature": "# [doc = \" A line made up of a series of vertices and control points.\"] # [derive (Clone, Debug)] # [expect (missing_docs)] pub struct Path<P : Clone + Debug + Default + PartialEq> { pub id : PathId, pub order : DrawOrder, pub bounds : Bounds<P>, pub content_mask : ContentMask<P>, pub vertices : Vec<PathVertex<P>>, pub color : Background, pub clip_id : crate::ClipId, start : Point<P>, current : Point<P>, contour_count : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::Path::clipped_bounds",
      "name": "clipped_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clipped_bounds (& self) -> Bounds<T>",
      "cfg": [],
      "target": "Path<T>"
    },
    {
      "id": "gpui::scene::Path::curve_to",
      "name": "curve_to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Draw a curve from the current point to the given point, using the given control point.",
      "documentation": "Draw a curve from the current point to the given point, using the given control point.",
      "signature": "pub fn curve_to (& mut self, to : Point<Pixels>, ctrl : Point<Pixels>)",
      "cfg": [],
      "target": "Path<Pixels>"
    },
    {
      "id": "gpui::scene::Path::line_to",
      "name": "line_to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Draw a straight line from the current point to the given point.",
      "documentation": "Draw a straight line from the current point to the given point.",
      "signature": "pub fn line_to (& mut self, to : Point<Pixels>)",
      "cfg": [],
      "target": "Path<Pixels>"
    },
    {
      "id": "gpui::scene::Path::move_to",
      "name": "move_to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Move the start, current point to the given point.",
      "documentation": "Move the start, current point to the given point.",
      "signature": "pub fn move_to (& mut self, to : Point<Pixels>)",
      "cfg": [],
      "target": "Path<Pixels>"
    },
    {
      "id": "gpui::scene::Path::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Create a new path with the given starting point.",
      "documentation": "Create a new path with the given starting point.",
      "signature": "pub fn new (start : Point<Pixels>) -> Self",
      "cfg": [],
      "target": "Path<Pixels>"
    },
    {
      "id": "gpui::scene::Path::push_triangle",
      "name": "push_triangle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Push a triangle to the Path.",
      "documentation": "Push a triangle to the Path.",
      "signature": "pub fn push_triangle (& mut self, xy : (Point<Pixels>, Point<Pixels>, Point<Pixels>), st : (Point<f32>, Point<f32>, Point<f32>),)",
      "cfg": [],
      "target": "Path<Pixels>"
    },
    {
      "id": "gpui::scene::Path::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Scale this path by the given factor.",
      "documentation": "Scale this path by the given factor.",
      "signature": "pub fn scale (& self, factor : f32) -> Path<ScaledPixels>",
      "cfg": [],
      "target": "Path<Pixels>"
    },
    {
      "id": "gpui::scene::PathId",
      "name": "PathId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Copy, Clone, Debug, PartialEq, Eq, Hash)] # [expect (missing_docs)] pub struct PathId (pub usize);",
      "cfg": []
    },
    {
      "id": "gpui::scene::PathVertex",
      "name": "PathVertex",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug)] # [repr (C)] # [expect (missing_docs)] pub struct PathVertex<P : Clone + Debug + Default + PartialEq> { pub xy_position : Point<P>, pub st_position : Point<f32>, pub content_mask : ContentMask<P>, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::PathVertex::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn scale (& self, factor : f32) -> PathVertex<ScaledPixels>",
      "cfg": [],
      "target": "PathVertex<Pixels>"
    },
    {
      "id": "gpui::scene::PathVertex_ScaledPixels",
      "name": "PathVertex_ScaledPixels",
      "kind": "type",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [allow (non_camel_case_types, unused)] # [expect (missing_docs)] pub type PathVertex_ScaledPixels = PathVertex<ScaledPixels>;",
      "cfg": []
    },
    {
      "id": "gpui::scene::PolychromeSprite",
      "name": "PolychromeSprite",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Copy, Clone, Debug)] # [repr (C)] # [expect (missing_docs)] pub struct PolychromeSprite { pub order : DrawOrder, pub blend_mode : SpriteBlendMode, pub color_mode : SpriteColorMode, pub sample_inset : PaddedBool32, pub bounds : Bounds<ScaledPixels>, pub content_mask : ContentMask<ScaledPixels>, pub corner_radii : Corners<ScaledPixels>, pub tile : AtlasTile, pub transformation : TransformationMatrix, pub tint : Hsla, pub opacity : f32, pub pad : u32, pub clip_id : crate::ClipId, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::Primitive",
      "name": "Primitive",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone)] # [expect (missing_docs)] pub enum Primitive { Shadow (Shadow), Quad (Quad), Path (Path<ScaledPixels>), Underline (Underline), MonochromeSprite (MonochromeSprite), SubpixelSprite (SubpixelSprite), PolychromeSprite (PolychromeSprite), Surface (PaintSurface), }",
      "cfg": []
    },
    {
      "id": "gpui::scene::Primitive::bounds",
      "name": "bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bounds (& self) -> & Bounds<ScaledPixels>",
      "cfg": [],
      "target": "Primitive"
    },
    {
      "id": "gpui::scene::Primitive::clip_id",
      "name": "clip_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Rounded subtree clip in the owning scene.",
      "documentation": "Rounded subtree clip in the owning scene.",
      "signature": "pub fn clip_id (& self) -> crate::ClipId",
      "cfg": [],
      "target": "Primitive"
    },
    {
      "id": "gpui::scene::Primitive::content_mask",
      "name": "content_mask",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn content_mask (& self) -> & ContentMask<ScaledPixels>",
      "cfg": [],
      "target": "Primitive"
    },
    {
      "id": "gpui::scene::PrimitiveBatch",
      "name": "PrimitiveBatch",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug)] # [cfg_attr (all (any (target_os = \"linux\", target_os = \"freebsd\"), not (any (feature = \"x11\", feature = \"wayland\"))), allow (dead_code))] # [allow (missing_docs)] pub enum PrimitiveBatch { Shadows (Range<usize>), Quads (Range<usize>), Paths (Range<usize>), Underlines (Range<usize>), MonochromeSprites { texture_id : AtlasTextureId, range : Range<usize>, }, # [cfg_attr (target_os = \"macos\", allow (dead_code))] SubpixelSprites { texture_id : AtlasTextureId, range : Range<usize>, }, PolychromeSprites { texture_id : AtlasTextureId, blend_mode : SpriteBlendMode, range : Range<usize>, }, Surfaces (Range<usize>), }",
      "cfg": []
    },
    {
      "id": "gpui::scene::PrimitiveBatch::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> String",
      "cfg": [],
      "target": "PrimitiveBatch"
    },
    {
      "id": "gpui::scene::Quad",
      "name": "Quad",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Default, Debug, Copy, Clone)] # [repr (C)] # [expect (missing_docs)] pub struct Quad { pub order : DrawOrder, pub border_style : BorderStyle, pub bounds : Bounds<ScaledPixels>, pub content_mask : ContentMask<ScaledPixels>, pub background : Background, pub border_color : Hsla, pub corner_radii : Corners<ScaledPixels>, pub border_widths : Edges<ScaledPixels>, pub clip_id : crate::ClipId, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::Scene",
      "name": "Scene",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Default)] # [expect (missing_docs)] pub struct Scene { pub (crate) paint_operations : Vec<PaintOperation>, pub (crate) paint_epoch : std::sync::Arc<()>, pub (crate) paint_leases : Vec<(Range<usize>, crate::AtlasLease)>, # [doc = \" Rounded subtree geometry, separate from rectangular culling and optical\"] # [doc = \" capture bounds. Indices belong to this scene and expire on `clear`.\"] pub clip_nodes : crate::ClipNodes, active_clip : crate::ClipId, visual_transform : TransformationMatrix, primitive_bounds : BoundsTree<ScaledPixels>, layer_stack : Vec<(DrawOrder, Bounds<ScaledPixels>)>, # [cfg (test)] recording_work : std::cell::Cell<usize>, pub shadows : Vec<Shadow>, pub quads : Vec<Quad>, pub paths : Vec<Path<ScaledPixels>>, pub underlines : Vec<Underline>, pub monochrome_sprites : Vec<MonochromeSprite>, pub subpixel_sprites : Vec<SubpixelSprite>, pub polychrome_sprites : Vec<PolychromeSprite>, pub surfaces : Vec<PaintSurface>, # [doc = \" Glass surfaces — deliberately outside the primitive batch stream so\"] # [doc = \" renderers can snapshot the framebuffer at each surface's order.\"] pub backdrop_glass : Vec<BackdropGlass>, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::Scene::batches",
      "name": "batches",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn batches (& self) -> impl Iterator<Item = PrimitiveBatch> + '_",
      "cfg": [],
      "target": "Scene"
    },
    {
      "id": "gpui::scene::Scene::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "Scene"
    },
    {
      "id": "gpui::scene::Scene::finish",
      "name": "finish",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn finish (& mut self)",
      "cfg": [],
      "target": "Scene"
    },
    {
      "id": "gpui::scene::Scene::insert_backdrop_glass",
      "name": "insert_backdrop_glass",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn insert_backdrop_glass (& mut self, glass : BackdropGlass)",
      "cfg": [],
      "target": "Scene"
    },
    {
      "id": "gpui::scene::Scene::insert_primitive",
      "name": "insert_primitive",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn insert_primitive (& mut self, primitive : impl Into<Primitive>)",
      "cfg": [],
      "target": "Scene"
    },
    {
      "id": "gpui::scene::Scene::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Returns whether the scene contains no drawable primitives.",
      "documentation": "Returns whether the scene contains no drawable primitives.\n\nA scene may have paint operations that only open and close empty layers,\nso `len() == 0` is not equivalent to having no visible/input-relevant\noverlay content.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "Scene"
    },
    {
      "id": "gpui::scene::Scene::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "Scene"
    },
    {
      "id": "gpui::scene::Scene::paint_resources_valid",
      "name": "paint_resources_valid",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Renderer submission must refuse a scene whose frozen resources reset after replay. No renderer may resolve its stale atlas coordinates.",
      "documentation": "Renderer submission must refuse a scene whose frozen resources reset\nafter replay. No renderer may resolve its stale atlas coordinates.",
      "signature": "pub fn paint_resources_valid (& self) -> bool",
      "cfg": [],
      "target": "Scene"
    },
    {
      "id": "gpui::scene::Scene::pop_layer",
      "name": "pop_layer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn pop_layer (& mut self)",
      "cfg": [],
      "target": "Scene"
    },
    {
      "id": "gpui::scene::Scene::push_layer",
      "name": "push_layer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn push_layer (& mut self, bounds : Bounds<ScaledPixels>)",
      "cfg": [],
      "target": "Scene"
    },
    {
      "id": "gpui::scene::Scene::replay",
      "name": "replay",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn replay (& mut self, range : Range<usize>, prev_scene : & Scene)",
      "cfg": [],
      "target": "Scene"
    },
    {
      "id": "gpui::scene::Scene::with_clip_chain",
      "name": "with_clip_chain",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Paint a scope using a value-typed clip chain in window coordinates. Rectangular culling and backdrop sampling remain independent of this chain.",
      "documentation": "Paint a scope using a value-typed clip chain in window coordinates.\nRectangular culling and backdrop sampling remain independent of this chain.",
      "signature": "pub fn with_clip_chain<R> (& mut self, chain : & crate::ClipChain, scale : f32, paint : impl FnOnce (& mut Self) -> R,) -> R",
      "cfg": [],
      "target": "Scene"
    },
    {
      "id": "gpui::scene::Scene::with_visual_transform",
      "name": "with_visual_transform",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Applies a complete inherited visual transform to subsequent emission. Geometry is baked before culling/batching; replay is already transformed.",
      "documentation": "Applies a complete inherited visual transform to subsequent emission.\nGeometry is baked before culling/batching; replay is already transformed.",
      "signature": "pub fn with_visual_transform<R> (& mut self, transform : crate::VisualTransform, device_scale : f32, paint : impl FnOnce (& mut Self) -> R,) -> R",
      "cfg": [],
      "target": "Scene"
    },
    {
      "id": "gpui::scene::Shadow",
      "name": "Shadow",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Copy, Clone)] # [repr (C)] # [expect (missing_docs)] pub struct Shadow { pub order : DrawOrder, pub blur_radius : ScaledPixels, pub bounds : Bounds<ScaledPixels>, pub corner_radii : Corners<ScaledPixels>, pub content_mask : ContentMask<ScaledPixels>, pub color : Hsla, pub element_bounds : Bounds<ScaledPixels>, pub element_corner_radii : Corners<ScaledPixels>, # [doc = \" 0 = drop shadow (rendered outside the element), 1 = inset shadow (rendered inside).\"] pub inset : u32, # [doc = \" 1 = cut the element's own rounded shape out of the shadow, so it reads\"] # [doc = \" as a ring rather than painting under the element. Only consulted for a\"] # [doc = \" drop shadow; an inset shadow is already clipped to the element.\"] pub outer_only : u32, pub clip_id : crate::ClipId, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::SpriteBlendMode",
      "name": "SpriteBlendMode",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The fixed-function compositing equation used for a sprite batch.",
      "documentation": "The fixed-function compositing equation used for a sprite batch.\n\nBlending is selected per batch rather than per fragment so all renderer\nbackends use the same hardware equation. Source-over is appropriate for\npictures and portraits, additive for emitted light, and screen for soft\nglows that should retain detail in the backdrop.",
      "signature": "# [doc = \" The fixed-function compositing equation used for a sprite batch.\"] # [doc = \"\"] # [doc = \" Blending is selected per batch rather than per fragment so all renderer\"] # [doc = \" backends use the same hardware equation. Source-over is appropriate for\"] # [doc = \" pictures and portraits, additive for emitted light, and screen for soft\"] # [doc = \" glows that should retain detail in the backdrop.\"] # [derive (Copy, Clone, Debug, Default, Eq, PartialEq, Ord, PartialOrd)] # [repr (C)] pub enum SpriteBlendMode { # [doc = \" Ordinary source-over alpha compositing.\"] # [default] Normal = 0, # [doc = \" Adds source light without attenuating the destination color.\"] Additive = 1, # [doc = \" Lightens using `source + destination × (1 - source)`.\"] Screen = 2, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::SpriteColorMode",
      "name": "SpriteColorMode",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "How a sprite sample becomes visible color.",
      "documentation": "How a sprite sample becomes visible color.",
      "signature": "# [doc = \" How a sprite sample becomes visible color.\"] # [derive (Copy, Clone, Debug, Default, Eq, PartialEq)] # [repr (C)] pub enum SpriteColorMode { # [doc = \" Preserve all sampled color channels and alpha.\"] # [default] Color = 0, # [doc = \" Convert sampled RGB to luminance while preserving sampled alpha.\"] Grayscale = 1, # [doc = \" Use sampled alpha as a mask for [`SpriteInstance::tint`].\"] AlphaMask = 2, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::SpriteInstance",
      "name": "SpriteInstance",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "One independently transformed image sample in a composited sprite batch.",
      "documentation": "One independently transformed image sample in a composited sprite batch.\n\n`source` is a half-open pixel rectangle in the selected image frame. The\nrenderer narrows atlas UVs without creating another texture or cache entry.\nA sprite is paint-only: source-alpha holes and rounded corners do not invent\nhitboxes or accessibility nodes for the caller.",
      "signature": "# [doc = \" One independently transformed image sample in a composited sprite batch.\"] # [doc = \"\"] # [doc = \" `source` is a half-open pixel rectangle in the selected image frame. The\"] # [doc = \" renderer narrows atlas UVs without creating another texture or cache entry.\"] # [doc = \" A sprite is paint-only: source-alpha holes and rounded corners do not invent\"] # [doc = \" hitboxes or accessibility nodes for the caller.\"] # [derive (Copy, Clone, Debug, PartialEq)] pub struct SpriteInstance { # [doc = \" Destination bounds before [`SpriteTransform`] is applied.\"] pub destination : Bounds<Pixels>, # [doc = \" Half-open source rectangle in physical pixels of the image frame.\"] pub source : Bounds<DevicePixels>, # [doc = \" Destination-local transform around the destination center.\"] pub transform : SpriteTransform, # [doc = \" Rounded destination mask, transformed together with the destination.\"] pub corner_radii : Corners<Pixels>, # [doc = \" Additional opacity, clamped to `0.0..=1.0` while painting.\"] pub opacity : f32, # [doc = \" Sample-to-color conversion.\"] pub color_mode : SpriteColorMode, # [doc = \" Fixed-function batch compositing equation.\"] pub blend_mode : SpriteBlendMode, # [doc = \" Color used by [`SpriteColorMode::AlphaMask`].\"] pub tint : Hsla, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::SpriteInstance::blend_mode",
      "name": "blend_mode",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Sets the fixed-function batch compositing equation.",
      "documentation": "Sets the fixed-function batch compositing equation.",
      "signature": "pub fn blend_mode (mut self, blend_mode : SpriteBlendMode) -> Self",
      "cfg": [],
      "target": "SpriteInstance"
    },
    {
      "id": "gpui::scene::SpriteInstance::color_mode",
      "name": "color_mode",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Sets the sample-to-color conversion and mask tint.",
      "documentation": "Sets the sample-to-color conversion and mask tint.",
      "signature": "pub fn color_mode (mut self, color_mode : SpriteColorMode, tint : Hsla) -> Self",
      "cfg": [],
      "target": "SpriteInstance"
    },
    {
      "id": "gpui::scene::SpriteInstance::corner_radii",
      "name": "corner_radii",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Sets the rounded destination mask.",
      "documentation": "Sets the rounded destination mask.",
      "signature": "pub fn corner_radii (mut self, corner_radii : Corners<Pixels>) -> Self",
      "cfg": [],
      "target": "SpriteInstance"
    },
    {
      "id": "gpui::scene::SpriteInstance::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Creates a normal, opaque color sprite from an explicit source rectangle.",
      "documentation": "Creates a normal, opaque color sprite from an explicit source rectangle.",
      "signature": "pub fn new (destination : Bounds<Pixels>, source : Bounds<DevicePixels>) -> Self",
      "cfg": [],
      "target": "SpriteInstance"
    },
    {
      "id": "gpui::scene::SpriteInstance::opacity",
      "name": "opacity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Sets additional sprite opacity.",
      "documentation": "Sets additional sprite opacity.",
      "signature": "pub fn opacity (mut self, opacity : f32) -> Self",
      "cfg": [],
      "target": "SpriteInstance"
    },
    {
      "id": "gpui::scene::SpriteInstance::transform",
      "name": "transform",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Sets the destination-local transform.",
      "documentation": "Sets the destination-local transform.",
      "signature": "pub fn transform (mut self, transform : SpriteTransform) -> Self",
      "cfg": [],
      "target": "SpriteInstance"
    },
    {
      "id": "gpui::scene::SpriteTransform",
      "name": "SpriteTransform",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "A destination-local sprite transform applied around the destination center.",
      "documentation": "A destination-local sprite transform applied around the destination center.",
      "signature": "# [doc = \" A destination-local sprite transform applied around the destination center.\"] # [derive (Copy, Clone, Debug, PartialEq)] pub struct SpriteTransform { # [doc = \" Non-uniform scale around the destination center.\"] pub scale : Size<f32>, # [doc = \" Clockwise rotation around the destination center.\"] pub rotation : Radians, # [doc = \" Logical-pixel translation applied after scale and rotation.\"] pub translation : Point<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::SpriteTransform::identity",
      "name": "identity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Returns the identity transform.",
      "documentation": "Returns the identity transform.",
      "signature": "pub fn identity () -> Self",
      "cfg": [],
      "target": "SpriteTransform"
    },
    {
      "id": "gpui::scene::SpriteTransform::rotate",
      "name": "rotate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Sets the clockwise rotation around the destination center.",
      "documentation": "Sets the clockwise rotation around the destination center.",
      "signature": "pub fn rotate (mut self, rotation : Radians) -> Self",
      "cfg": [],
      "target": "SpriteTransform"
    },
    {
      "id": "gpui::scene::SpriteTransform::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Sets the scale around the destination center.",
      "documentation": "Sets the scale around the destination center.",
      "signature": "pub fn scale (mut self, scale : Size<f32>) -> Self",
      "cfg": [],
      "target": "SpriteTransform"
    },
    {
      "id": "gpui::scene::SpriteTransform::translate",
      "name": "translate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Sets the logical-pixel translation after scale and rotation.",
      "documentation": "Sets the logical-pixel translation after scale and rotation.",
      "signature": "pub fn translate (mut self, translation : Point<Pixels>) -> Self",
      "cfg": [],
      "target": "SpriteTransform"
    },
    {
      "id": "gpui::scene::SubpixelSprite",
      "name": "SubpixelSprite",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Copy, Clone, Debug)] # [repr (C)] # [expect (missing_docs)] pub struct SubpixelSprite { pub order : DrawOrder, pub pad : u32, pub bounds : Bounds<ScaledPixels>, pub content_mask : ContentMask<ScaledPixels>, pub color : Hsla, pub tile : AtlasTile, pub transformation : TransformationMatrix, pub clip_id : crate::ClipId, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::TransformationMatrix",
      "name": "TransformationMatrix",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "A data type representing a 2 dimensional transformation that can be applied to an element.",
      "documentation": "A data type representing a 2 dimensional transformation that can be applied to an element.",
      "signature": "# [doc = \" A data type representing a 2 dimensional transformation that can be applied to an element.\"] # [derive (Debug, Clone, Copy, PartialEq)] # [repr (C)] pub struct TransformationMatrix { # [doc = \" 2x2 matrix containing rotation and scale,\"] # [doc = \" stored row-major\"] pub rotation_scale : [[f32; 2]; 2], # [doc = \" translation vector\"] pub translation : [f32; 2], }",
      "cfg": []
    },
    {
      "id": "gpui::scene::TransformationMatrix::apply",
      "name": "apply",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Apply transformation to a point, mainly useful for debugging",
      "documentation": "Apply transformation to a point, mainly useful for debugging",
      "signature": "pub fn apply (& self, point : Point<Pixels>) -> Point<Pixels>",
      "cfg": [],
      "target": "TransformationMatrix"
    },
    {
      "id": "gpui::scene::TransformationMatrix::compose",
      "name": "compose",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Perform matrix multiplication with another transformation to produce a new transformation that is the result of applying both transformations: first, `other`, then `self`.",
      "documentation": "Perform matrix multiplication with another transformation\nto produce a new transformation that is the result of\napplying both transformations: first, `other`, then `self`.",
      "signature": "pub fn compose (self, other : TransformationMatrix) -> TransformationMatrix",
      "cfg": [],
      "target": "TransformationMatrix"
    },
    {
      "id": "gpui::scene::TransformationMatrix::rotate",
      "name": "rotate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Clockwise rotation in radians around the origin",
      "documentation": "Clockwise rotation in radians around the origin",
      "signature": "pub fn rotate (self, angle : Radians) -> Self",
      "cfg": [],
      "target": "TransformationMatrix"
    },
    {
      "id": "gpui::scene::TransformationMatrix::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Scale around the origin",
      "documentation": "Scale around the origin",
      "signature": "pub fn scale (self, size : Size<f32>) -> Self",
      "cfg": [],
      "target": "TransformationMatrix"
    },
    {
      "id": "gpui::scene::TransformationMatrix::transform_bounds",
      "name": "transform_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Returns the axis-aligned device-pixel bounds that contain a transformed rectangle.",
      "documentation": "Returns the axis-aligned device-pixel bounds that contain a transformed rectangle.",
      "signature": "pub fn transform_bounds (& self, bounds : Bounds<ScaledPixels>) -> Bounds<ScaledPixels>",
      "cfg": [],
      "target": "TransformationMatrix"
    },
    {
      "id": "gpui::scene::TransformationMatrix::translate",
      "name": "translate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Move the origin by a given point",
      "documentation": "Move the origin by a given point",
      "signature": "pub fn translate (mut self, point : Point<ScaledPixels>) -> Self",
      "cfg": [],
      "target": "TransformationMatrix"
    },
    {
      "id": "gpui::scene::TransformationMatrix::unit",
      "name": "unit",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The unit matrix, has no effect.",
      "documentation": "The unit matrix, has no effect.",
      "signature": "pub fn unit () -> Self",
      "cfg": [],
      "target": "TransformationMatrix"
    },
    {
      "id": "gpui::scene::Underline",
      "name": "Underline",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Copy, Clone)] # [repr (C)] # [expect (missing_docs)] pub struct Underline { pub order : DrawOrder, pub pad : u32, pub bounds : Bounds<ScaledPixels>, pub content_mask : ContentMask<ScaledPixels>, pub color : Hsla, pub thickness : ScaledPixels, pub wavy : PaddedBool32, pub clip_id : crate::ClipId, }",
      "cfg": []
    },
    {
      "id": "gpui::scene::glass_edge_mask",
      "name": "glass_edge_mask",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "How strongly a surface's optics apply at `point`, given a linear edge mask.",
      "documentation": "How strongly a surface's optics apply at `point`, given a linear edge mask.\n\n1 keeps the optical result; 0 restores the undisplaced sharp snapshot.\nThe three shaders implement this same ramp.",
      "signature": "pub fn glass_edge_mask (point : Point<f32>, bounds : Bounds<f32>, edge : f32, band : f32) -> f32",
      "cfg": []
    },
    {
      "id": "gpui::scene::glass_field",
      "name": "glass_field",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The distance to the union of `lobes` and the direction it increases in.",
      "documentation": "The distance to the union of `lobes` and the direction it increases in.\n\nMirrors the three shaders' analytic rounded-rect and smooth-min gradients.\nA stencil across a medial-axis crease invents a bisector normal and hence\na specular ridge. Choose one incident face at ties instead. A bevel wider\nthan its corner radius still has a real crease; this does not smooth it or\nchange the silhouette. For a smooth union, blend derivatives by h/2 (the\nderivative of the polynomial correction). Do not normalize away the union's\nslope attenuation; the final three-dimensional surface normal is normalized.",
      "signature": "pub fn glass_field (at : Point<f32>, lobes : & [GlassLobe], smoothing : f32) -> GlassField",
      "cfg": []
    },
    {
      "id": "gpui::scene::glass_lobe_sdf",
      "name": "glass_lobe_sdf",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "Signed distance from `point` to one lobe, negative inside.",
      "documentation": "Signed distance from `point` to one lobe, negative inside.\n\nThis mirrors `quad_sdf` in the shaders exactly, including the unrounded\nfast path, because the two must not disagree about where an edge is.",
      "signature": "pub fn glass_lobe_sdf (point : Point<f32>, lobe : & GlassLobe) -> f32",
      "cfg": []
    },
    {
      "id": "gpui::scene::glass_smooth_min",
      "name": "glass_smooth_min",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The polynomial smooth minimum, which is what makes two lobes join into one body rather than cross as two outlines.",
      "documentation": "The polynomial smooth minimum, which is what makes two lobes join into one\nbody rather than cross as two outlines.\n\n`smoothing` of zero is an ordinary minimum, so a caller that wants a crease\ngets one without a second code path.",
      "signature": "pub fn glass_smooth_min (a : f32, b : f32, smoothing : f32) -> f32",
      "cfg": []
    },
    {
      "id": "gpui::scene::probe_sample_luminance",
      "name": "probe_sample_luminance",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "scene",
      "path": "gpui::scene",
      "source": "crates/gpui/src/scene.rs",
      "summary": "The relative luminance of one probe sample, from encoded channel values in `0..=1`.",
      "documentation": "The relative luminance of one probe sample, from encoded channel values in\n`0..=1`.\n\nThe weights are Rec. 709. The values are the encoded bytes the framebuffer\nholds rather than linearized light, which every renderer shares, so a probe\nmeans the same thing on each of them: a perceptual reading, not a photometric\none.",
      "signature": "pub fn probe_sample_luminance (red : f32, green : f32, blue : f32) -> f32",
      "cfg": []
    },
    {
      "id": "gpui::shared_uri::SharedUri",
      "name": "SharedUri",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "shared_uri",
      "path": "gpui::shared_uri",
      "source": "crates/gpui/src/shared_uri.rs",
      "summary": "A [`SharedString`] containing a URI.",
      "documentation": "A [`SharedString`] containing a URI.",
      "signature": "# [doc = \" A [`SharedString`] containing a URI.\"] # [derive (Deref, DerefMut, Default, PartialEq, Eq, Hash, Clone)] pub struct SharedUri (SharedString);",
      "cfg": []
    },
    {
      "id": "gpui::spring::AnimationPhase",
      "name": "AnimationPhase",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "A potentially overshooting coordinate within an animation.",
      "documentation": "A potentially overshooting coordinate within an animation.\n\nPhases are not restricted to 0..1. Multi-stage animations can assign each\nstage its own coordinate and interpolate over ranges such as 1..=2.",
      "signature": "# [doc = \" A potentially overshooting coordinate within an animation.\"] # [doc = \"\"] # [doc = \" Phases are not restricted to 0..1. Multi-stage animations can assign each\"] # [doc = \" stage its own coordinate and interpolate over ranges such as 1..=2.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, PartialOrd)] pub struct AnimationPhase (# [doc = \" The unbounded phase coordinate.\"] pub f32,);",
      "cfg": []
    },
    {
      "id": "gpui::spring::AnimationPhase::clamp",
      "name": "clamp",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Restricts this phase to the bounds of a range.",
      "documentation": "Restricts this phase to the bounds of a range.",
      "signature": "pub fn clamp (self, range : RangeInclusive<f32>) -> Self",
      "cfg": [],
      "target": "AnimationPhase"
    },
    {
      "id": "gpui::spring::AnimationPhase::interpolate",
      "name": "interpolate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Interpolates between values using 0 and 1 as their phase coordinates.",
      "documentation": "Interpolates between values using 0 and 1 as their phase coordinates.",
      "signature": "pub fn interpolate<T : Interpolate> (self, from : T, to : T) -> T",
      "cfg": [],
      "target": "AnimationPhase"
    },
    {
      "id": "gpui::spring::AnimationPhase::interpolate_between",
      "name": "interpolate_between",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Interpolates between values assigned to arbitrary phase coordinates.",
      "documentation": "Interpolates between values assigned to arbitrary phase coordinates.",
      "signature": "pub fn interpolate_between<T : Interpolate> (self, range : RangeInclusive<f32>, from : T, to : T,) -> T",
      "cfg": [],
      "target": "AnimationPhase"
    },
    {
      "id": "gpui::spring::AnimationPhase::interpolate_between_clamped",
      "name": "interpolate_between_clamped",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Interpolates over arbitrary phase coordinates without extrapolating.",
      "documentation": "Interpolates over arbitrary phase coordinates without extrapolating.",
      "signature": "pub fn interpolate_between_clamped<T : Interpolate> (self, range : RangeInclusive<f32>, from : T, to : T,) -> T",
      "cfg": [],
      "target": "AnimationPhase"
    },
    {
      "id": "gpui::spring::AnimationPhase::interpolate_clamped",
      "name": "interpolate_clamped",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Interpolates between values without extrapolating beyond 0 and 1.",
      "documentation": "Interpolates between values without extrapolating beyond 0 and 1.",
      "signature": "pub fn interpolate_clamped<T : Interpolate> (self, from : T, to : T) -> T",
      "cfg": [],
      "target": "AnimationPhase"
    },
    {
      "id": "gpui::spring::Interpolate",
      "name": "Interpolate",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "A value that supports linear interpolation and extrapolation.",
      "documentation": "A value that supports linear interpolation and extrapolation.",
      "signature": "# [doc = \" A value that supports linear interpolation and extrapolation.\"] pub trait Interpolate : Sized { # [doc = \" Resolves the value at `phase`, where 0 is `from` and 1 is `to`.\"] fn interpolate (from : Self, to : Self, phase : f32) -> Self; }",
      "cfg": []
    },
    {
      "id": "gpui::spring::SpringAnimation",
      "name": "SpringAnimation",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "A stateful spring animation targeting a value or projected path.",
      "documentation": "A stateful spring animation targeting a value or projected path.",
      "signature": "# [doc = \" A stateful spring animation targeting a value or projected path.\"] # [derive (Clone, Debug)] pub struct SpringAnimation<T = ()> { pub (crate) config : SpringConfig, pub (crate) target : T, pub (crate) epsilon : f32, pub (crate) initial : Option<f32>, pub (crate) playback : SpringPlayback, }",
      "cfg": []
    },
    {
      "id": "gpui::spring::SpringAnimation::from",
      "name": "from",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Sets the coordinate used when this element has no prior spring state.",
      "documentation": "Sets the coordinate used when this element has no prior spring state.",
      "signature": "pub fn from (mut self, initial : T) -> Self",
      "cfg": [],
      "target": "SpringAnimation<T>"
    },
    {
      "id": "gpui::spring::SpringAnimation::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Creates a spring animation builder.",
      "documentation": "Creates a spring animation builder.",
      "signature": "pub fn new (config : SpringConfig) -> Self",
      "cfg": [],
      "target": "SpringAnimation<()>"
    },
    {
      "id": "gpui::spring::SpringAnimation::playback",
      "name": "playback",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Sets how the spring advances or resolves its current value.",
      "documentation": "Sets how the spring advances or resolves its current value.",
      "signature": "pub fn playback (mut self, playback : SpringPlayback) -> Self",
      "cfg": [],
      "target": "SpringAnimation<T>"
    },
    {
      "id": "gpui::spring::SpringAnimation::to",
      "name": "to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Sets the value or path targeted by this spring.",
      "documentation": "Sets the value or path targeted by this spring.",
      "signature": "pub fn to<T : SpringTarget> (self, target : T) -> SpringAnimation<T>",
      "cfg": [],
      "target": "SpringAnimation<()>"
    },
    {
      "id": "gpui::spring::SpringAnimation::with_epsilon",
      "name": "with_epsilon",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Sets the settling tolerance in the target's scalar coordinate space.",
      "documentation": "Sets the settling tolerance in the target's scalar coordinate space.",
      "signature": "pub fn with_epsilon (mut self, epsilon : f32) -> Self",
      "cfg": [],
      "target": "SpringAnimation<T>"
    },
    {
      "id": "gpui::spring::SpringConfig",
      "name": "SpringConfig",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "The physical parameters of a damped harmonic oscillator.",
      "documentation": "The physical parameters of a damped harmonic oscillator.\n\n`stiffness` and `mass` must be finite and positive. `damping` must be finite\nand non-negative.",
      "signature": "# [doc = \" The physical parameters of a damped harmonic oscillator.\"] # [doc = \"\"] # [doc = \" `stiffness` and `mass` must be finite and positive. `damping` must be finite\"] # [doc = \" and non-negative.\"] # [derive (Clone, Copy, Debug, PartialEq)] pub struct SpringConfig { # [doc = \" The spring stiffness, conventionally written as $k$.\"] pub stiffness : f32, # [doc = \" The viscous damping coefficient, conventionally written as $c$.\"] pub damping : f32, # [doc = \" The moving mass, conventionally written as $m$.\"] pub mass : f32, }",
      "cfg": []
    },
    {
      "id": "gpui::spring::SpringConfig::canonical",
      "name": "canonical",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Returns the natural angular frequency and damping ratio $(\\omega_0, \\zeta)$.",
      "documentation": "Returns the natural angular frequency and damping ratio $(\\omega_0, \\zeta)$.",
      "signature": "pub fn canonical (& self) -> (f32, f32)",
      "cfg": [],
      "target": "SpringConfig"
    },
    {
      "id": "gpui::spring::SpringConfig::is_settled",
      "name": "is_settled",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Tests both displacement and velocity against a positional tolerance.",
      "documentation": "Tests both displacement and velocity against a positional tolerance.\n\nVelocity is compared with `epsilon * natural_frequency`, giving it the\ncorresponding animated-units-per-second scale.",
      "signature": "pub fn is_settled (& self, state : SpringState, target : f32, epsilon : f32) -> bool",
      "cfg": [],
      "target": "SpringConfig"
    },
    {
      "id": "gpui::spring::SpringConfig::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Creates a spring from its physical parameters.",
      "documentation": "Creates a spring from its physical parameters.",
      "signature": "pub const fn new (stiffness : f32, damping : f32, mass : f32) -> Self",
      "cfg": [],
      "target": "SpringConfig"
    },
    {
      "id": "gpui::spring::SpringConfig::propagator",
      "name": "propagator",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Returns the exact state-transition matrix for a constant target.",
      "documentation": "Returns the exact state-transition matrix for a constant target.\n\nMaterializing this matrix is useful when many springs share the same\nconfiguration and frame delta. A matrix must not be reused when the\nframe delta changes.",
      "signature": "pub fn propagator (& self, delta_time : f32) -> [[f32; 2]; 2]",
      "cfg": [],
      "target": "SpringConfig"
    },
    {
      "id": "gpui::spring::SpringConfig::settle_time",
      "name": "settle_time",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Returns a conservative time after which the spring remains settled.",
      "documentation": "Returns a conservative time after which the spring remains settled.\n\nAn undamped spring has no finite settling time and returns\n[`Duration::MAX`].",
      "signature": "pub fn settle_time (& self, state : SpringState, target : f32, epsilon : f32) -> Duration",
      "cfg": [],
      "target": "SpringConfig"
    },
    {
      "id": "gpui::spring::SpringConfig::step",
      "name": "step",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Advances a spring toward a target that remains fixed for `delta_time`.",
      "documentation": "Advances a spring toward a target that remains fixed for `delta_time`.\n\nThis analytic step is independent of frame rate and preserves velocity,\nallowing an interrupted spring to be retargeted without restarting it.",
      "signature": "pub fn step (& self, state : SpringState, target : f32, delta_time : f32) -> SpringState",
      "cfg": [],
      "target": "SpringConfig"
    },
    {
      "id": "gpui::spring::SpringConfig::step_ramp",
      "name": "step_ramp",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Advances a spring toward a target moving at a constant velocity.",
      "documentation": "Advances a spring toward a target moving at a constant velocity.\n\nA first-order hold avoids the frame-rate-dependent lag introduced by\ntreating a dragged target as stationary between frames.",
      "signature": "pub fn step_ramp (& self, state : SpringState, target : f32, target_velocity : f32, delta_time : f32,) -> SpringState",
      "cfg": [],
      "target": "SpringConfig"
    },
    {
      "id": "gpui::spring::SpringPlayback",
      "name": "SpringPlayback",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Controls how a spring advances and resolves its presentation value.",
      "documentation": "Controls how a spring advances and resolves its presentation value.",
      "signature": "# [doc = \" Controls how a spring advances and resolves its presentation value.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub enum SpringPlayback { # [doc = \" Advances toward the latest target, preserving velocity across retargets.\"] # [default] Running, # [doc = \" Holds the current position and velocity until playback resumes.\"] Paused, # [doc = \" Holds the current position and discards velocity.\"] Stopped, # [doc = \" Snaps to the latest target and discards velocity.\"] Completed, # [doc = \" Returns to the initial value and discards velocity.\"] Cancelled, }",
      "cfg": []
    },
    {
      "id": "gpui::spring::SpringState",
      "name": "SpringState",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "The instantaneous position and velocity of a spring.",
      "documentation": "The instantaneous position and velocity of a spring.",
      "signature": "# [doc = \" The instantaneous position and velocity of a spring.\"] # [derive (Clone, Copy, Debug, Default, PartialEq)] pub struct SpringState { # [doc = \" The current value in the animated unit.\"] pub position : f32, # [doc = \" The current value's change per second.\"] pub velocity : f32, }",
      "cfg": []
    },
    {
      "id": "gpui::spring::SpringTarget",
      "name": "SpringTarget",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "A value that can be targeted by a one-dimensional spring.",
      "documentation": "A value that can be targeted by a one-dimensional spring.\n\nImplementations may project the spring coordinate into a richer output,\nallowing a discrete state or a path through a multidimensional value to be\ndriven by one spring.",
      "signature": "# [doc = \" A value that can be targeted by a one-dimensional spring.\"] # [doc = \"\"] # [doc = \" Implementations may project the spring coordinate into a richer output,\"] # [doc = \" allowing a discrete state or a path through a multidimensional value to be\"] # [doc = \" driven by one spring.\"] pub trait SpringTarget : 'static { # [doc = \" The value supplied to the spring animator.\"] type Output; # [doc = \" Returns the target in the spring's coordinate space.\"] fn target (& self) -> f32; # [doc = \" Projects a spring coordinate into the animated output.\"] fn resolve (& self, value : f32) -> Self::Output; }",
      "cfg": []
    },
    {
      "id": "gpui::spring::sampled_easing",
      "name": "sampled_easing",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "spring",
      "path": "gpui::spring",
      "source": "crates/gpui/src/spring.rs",
      "summary": "Adapts a spring starting at zero with no velocity to GPUI's duration-based easing API.",
      "documentation": "Adapts a spring starting at zero with no velocity to GPUI's duration-based easing API.\n\nThe returned easing can overshoot the normalized 0..1 output range. Retargeting\nthis duration-based form restarts the spring; use [`SpringConfig::step`] when\npreserving velocity matters.",
      "signature": "pub fn sampled_easing (config : SpringConfig, epsilon : f32) -> (Duration, impl Fn (f32) -> f32)",
      "cfg": []
    },
    {
      "id": "gpui::style::AlignContent",
      "name": "AlignContent",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Sets the distribution of space between and around content items For Flexbox it controls alignment in the cross axis For Grid it controls alignment in the block axis",
      "documentation": "Sets the distribution of space between and around content items\nFor Flexbox it controls alignment in the cross axis\nFor Grid it controls alignment in the block axis\n\n[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/align-content)",
      "signature": "# [doc = \" Sets the distribution of space between and around content items\"] # [doc = \" For Flexbox it controls alignment in the cross axis\"] # [doc = \" For Grid it controls alignment in the block axis\"] # [doc = \"\"] # [doc = \" [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/align-content)\"] # [derive (Copy, Clone, PartialEq, Eq, Debug, Serialize, Deserialize, JsonSchema)] pub enum AlignContent { # [doc = \" Items are packed toward the start of the axis\"] Start, # [doc = \" Items are packed toward the end of the axis\"] End, # [doc = \" Items are packed towards the flex-relative start of the axis.\"] # [doc = \"\"] # [doc = \" For flex containers with flex_direction RowReverse or ColumnReverse this is equivalent\"] # [doc = \" to End. In all other cases it is equivalent to Start.\"] FlexStart, # [doc = \" Items are packed towards the flex-relative end of the axis.\"] # [doc = \"\"] # [doc = \" For flex containers with flex_direction RowReverse or ColumnReverse this is equivalent\"] # [doc = \" to Start. In all other cases it is equivalent to End.\"] FlexEnd, # [doc = \" Items are centered around the middle of the axis\"] Center, # [doc = \" Items are stretched to fill the container\"] Stretch, # [doc = \" The first and last items are aligned flush with the edges of the container (no gap)\"] # [doc = \" The gap between items is distributed evenly.\"] SpaceBetween, # [doc = \" The gap between the first and last items is exactly THE SAME as the gap between items.\"] # [doc = \" The gaps are distributed evenly\"] SpaceEvenly, # [doc = \" The gap between the first and last items is exactly HALF the gap between items.\"] # [doc = \" The gaps are distributed evenly in proportion to these ratios.\"] SpaceAround, }",
      "cfg": []
    },
    {
      "id": "gpui::style::AlignItems",
      "name": "AlignItems",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Used to control how child nodes are aligned. For Flexbox it controls alignment in the cross axis For Grid it controls alignment in the block axis",
      "documentation": "Used to control how child nodes are aligned.\nFor Flexbox it controls alignment in the cross axis\nFor Grid it controls alignment in the block axis\n\n[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/align-items)",
      "signature": "# [doc = \" Used to control how child nodes are aligned.\"] # [doc = \" For Flexbox it controls alignment in the cross axis\"] # [doc = \" For Grid it controls alignment in the block axis\"] # [doc = \"\"] # [doc = \" [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/align-items)\"] # [derive (Copy, Clone, PartialEq, Eq, Debug, Serialize, Deserialize, JsonSchema)] pub enum AlignItems { # [doc = \" Items are packed toward the start of the axis\"] Start, # [doc = \" Items are packed toward the end of the axis\"] End, # [doc = \" Items are packed towards the flex-relative start of the axis.\"] # [doc = \"\"] # [doc = \" For flex containers with flex_direction RowReverse or ColumnReverse this is equivalent\"] # [doc = \" to End. In all other cases it is equivalent to Start.\"] FlexStart, # [doc = \" Items are packed towards the flex-relative end of the axis.\"] # [doc = \"\"] # [doc = \" For flex containers with flex_direction RowReverse or ColumnReverse this is equivalent\"] # [doc = \" to Start. In all other cases it is equivalent to End.\"] FlexEnd, # [doc = \" Items are packed along the center of the cross axis\"] Center, # [doc = \" Items are aligned such as their baselines align\"] Baseline, # [doc = \" Stretch to fill the container\"] Stretch, }",
      "cfg": []
    },
    {
      "id": "gpui::style::AlignSelf",
      "name": "AlignSelf",
      "kind": "type",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Used to control how the specified nodes is aligned. Overrides the parent Node's `AlignItems` property. For Flexbox it controls alignment in the cross axis For Grid it controls alignment in the block axis",
      "documentation": "Used to control how the specified nodes is aligned.\nOverrides the parent Node's `AlignItems` property.\nFor Flexbox it controls alignment in the cross axis\nFor Grid it controls alignment in the block axis\n\n[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/align-self)",
      "signature": "# [doc = \" Used to control how the specified nodes is aligned.\"] # [doc = \" Overrides the parent Node's `AlignItems` property.\"] # [doc = \" For Flexbox it controls alignment in the cross axis\"] # [doc = \" For Grid it controls alignment in the block axis\"] # [doc = \"\"] # [doc = \" [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/align-self)\"] pub type AlignSelf = AlignItems;",
      "cfg": []
    },
    {
      "id": "gpui::style::BoxShadow",
      "name": "BoxShadow",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "The possible values of the box-shadow property",
      "documentation": "The possible values of the box-shadow property",
      "signature": "# [doc = \" The possible values of the box-shadow property\"] # [derive (Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema)] pub struct BoxShadow { # [doc = \" What color should the shadow have?\"] pub color : Hsla, # [doc = \" How should it be offset from its element?\"] pub offset : Point<Pixels>, # [doc = \" How much should the shadow be blurred?\"] pub blur_radius : Pixels, # [doc = \" How much should the shadow spread?\"] pub spread_radius : Pixels, # [doc = \" Whether the shadow is cast outward, outward-clipped, or inward.\"] pub style : ShadowStyle, }",
      "cfg": []
    },
    {
      "id": "gpui::style::BoxShadow::blur_radius",
      "name": "blur_radius",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Sets the shadow blur radius.",
      "documentation": "Sets the shadow blur radius.",
      "signature": "pub fn blur_radius (mut self, blur_radius : Pixels) -> Self",
      "cfg": [],
      "target": "BoxShadow"
    },
    {
      "id": "gpui::style::BoxShadow::inset",
      "name": "inset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Marks the shadow as inset (drawn inside the element's bounds).",
      "documentation": "Marks the shadow as inset (drawn inside the element's bounds).",
      "signature": "pub fn inset (mut self) -> Self",
      "cfg": [],
      "target": "BoxShadow"
    },
    {
      "id": "gpui::style::BoxShadow::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Creates a new [`BoxShadow`] with the given offset and color, matching the order of the CSS `box-shadow` property. Use the builder methods to set blur radius, spread radius, and inset.",
      "documentation": "Creates a new [`BoxShadow`] with the given offset and color, matching the order\nof the CSS `box-shadow` property. Use the builder methods to set blur radius,\nspread radius, and inset.",
      "signature": "pub fn new (offset_x : Pixels, offset_y : Pixels, color : Hsla) -> Self",
      "cfg": [],
      "target": "BoxShadow"
    },
    {
      "id": "gpui::style::BoxShadow::ring",
      "name": "ring",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Cuts the element's own shape out of the shadow, so it reads as a ring whether or not the element it rings has a fill.",
      "documentation": "Cuts the element's own shape out of the shadow, so it reads as a ring\nwhether or not the element it rings has a fill.",
      "signature": "pub fn ring (mut self) -> Self",
      "cfg": [],
      "target": "BoxShadow"
    },
    {
      "id": "gpui::style::BoxShadow::spread_radius",
      "name": "spread_radius",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Sets the shadow spread radius.",
      "documentation": "Sets the shadow spread radius.",
      "signature": "pub fn spread_radius (mut self, spread_radius : Pixels) -> Self",
      "cfg": [],
      "target": "BoxShadow"
    },
    {
      "id": "gpui::style::DebugBelow",
      "name": "DebugBelow",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Use this struct for interfacing with the 'debug_below' styling from your own elements. If a parent element has this style set on it, then this struct will be set as a global in GPUI.",
      "documentation": "Use this struct for interfacing with the 'debug_below' styling from your own elements.\nIf a parent element has this style set on it, then this struct will be set as a global in\nGPUI.",
      "signature": "# [doc = \" Use this struct for interfacing with the 'debug_below' styling from your own elements.\"] # [doc = \" If a parent element has this style set on it, then this struct will be set as a global in\"] # [doc = \" GPUI.\"] # [cfg (debug_assertions)] pub struct DebugBelow;",
      "cfg": [
        "cfg (debug_assertions)"
      ]
    },
    {
      "id": "gpui::style::Display",
      "name": "Display",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Sets the layout used for the children of this node",
      "documentation": "Sets the layout used for the children of this node\n\nThe default values depends on on which feature flags are enabled. The order of precedence is: Flex, Grid, Block, None.",
      "signature": "# [doc = \" Sets the layout used for the children of this node\"] # [doc = \"\"] # [doc = \" The default values depends on on which feature flags are enabled. The order of precedence is: Flex, Grid, Block, None.\"] # [derive (Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, JsonSchema)] pub enum Display { # [doc = \" The children will follow the block layout algorithm\"] Block, # [doc = \" The children will follow the flexbox layout algorithm\"] # [default] Flex, # [doc = \" The children will follow the CSS Grid layout algorithm\"] Grid, # [doc = \" The children will not be laid out, and will follow absolute positioning\"] None, }",
      "cfg": []
    },
    {
      "id": "gpui::style::Fill",
      "name": "Fill",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "The kinds of fill that can be applied to a shape.",
      "documentation": "The kinds of fill that can be applied to a shape.",
      "signature": "# [doc = \" The kinds of fill that can be applied to a shape.\"] # [derive (Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema)] pub enum Fill { # [doc = \" A solid color fill.\"] Color (Background), }",
      "cfg": []
    },
    {
      "id": "gpui::style::Fill::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Unwrap this fill into a solid color, if it is one.",
      "documentation": "Unwrap this fill into a solid color, if it is one.\n\nIf the fill is not a solid color, this method returns `None`.",
      "signature": "pub fn color (& self) -> Option<Background>",
      "cfg": [],
      "target": "Fill"
    },
    {
      "id": "gpui::style::FlexDirection",
      "name": "FlexDirection",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "The direction of the flexbox layout main axis.",
      "documentation": "The direction of the flexbox layout main axis.\n\nThere are always two perpendicular layout axes: main (or primary) and cross (or secondary).\nAdding items will cause them to be positioned adjacent to each other along the main axis.\nBy varying this value throughout your tree, you can create complex axis-aligned layouts.\n\nItems are always aligned relative to the cross axis, and justified relative to the main axis.\n\nThe default behavior is [`FlexDirection::Row`].\n\n[Specification](https://www.w3.org/TR/css-flexbox-1/#flex-direction-property)",
      "signature": "# [doc = \" The direction of the flexbox layout main axis.\"] # [doc = \"\"] # [doc = \" There are always two perpendicular layout axes: main (or primary) and cross (or secondary).\"] # [doc = \" Adding items will cause them to be positioned adjacent to each other along the main axis.\"] # [doc = \" By varying this value throughout your tree, you can create complex axis-aligned layouts.\"] # [doc = \"\"] # [doc = \" Items are always aligned relative to the cross axis, and justified relative to the main axis.\"] # [doc = \"\"] # [doc = \" The default behavior is [`FlexDirection::Row`].\"] # [doc = \"\"] # [doc = \" [Specification](https://www.w3.org/TR/css-flexbox-1/#flex-direction-property)\"] # [derive (Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, JsonSchema)] pub enum FlexDirection { # [doc = \" Defines +x as the main axis\"] # [doc = \"\"] # [doc = \" Items will be added from left to right in a row.\"] # [default] Row, # [doc = \" Defines +y as the main axis\"] # [doc = \"\"] # [doc = \" Items will be added from top to bottom in a column.\"] Column, # [doc = \" Defines -x as the main axis\"] # [doc = \"\"] # [doc = \" Items will be added from right to left in a row.\"] RowReverse, # [doc = \" Defines -y as the main axis\"] # [doc = \"\"] # [doc = \" Items will be added from bottom to top in a column.\"] ColumnReverse, }",
      "cfg": []
    },
    {
      "id": "gpui::style::FlexWrap",
      "name": "FlexWrap",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Controls whether flex items are forced onto one line or can wrap onto multiple lines.",
      "documentation": "Controls whether flex items are forced onto one line or can wrap onto multiple lines.\n\nDefaults to [`FlexWrap::NoWrap`]\n\n[Specification](https://www.w3.org/TR/css-flexbox-1/#flex-wrap-property)",
      "signature": "# [doc = \" Controls whether flex items are forced onto one line or can wrap onto multiple lines.\"] # [doc = \"\"] # [doc = \" Defaults to [`FlexWrap::NoWrap`]\"] # [doc = \"\"] # [doc = \" [Specification](https://www.w3.org/TR/css-flexbox-1/#flex-wrap-property)\"] # [derive (Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, JsonSchema)] pub enum FlexWrap { # [doc = \" Items will not wrap and stay on a single line\"] # [default] NoWrap, # [doc = \" Items will wrap according to this item's [`FlexDirection`]\"] Wrap, # [doc = \" Items will wrap in the opposite direction to this item's [`FlexDirection`]\"] WrapReverse, }",
      "cfg": []
    },
    {
      "id": "gpui::style::GridTemplate",
      "name": "GridTemplate",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "A simplified representation of the grid-template-* value",
      "documentation": "A simplified representation of the grid-template-* value",
      "signature": "# [doc = \" A simplified representation of the grid-template-* value\"] # [derive (Copy, Clone, Refineable, PartialEq, Eq, PartialOrd, Ord, Debug, Default, JsonSchema, Serialize, Deserialize,)] pub struct GridTemplate { # [doc = \" How this template directive should be repeated\"] pub repeat : u16, # [doc = \" The minimum size in the repeat(<>, minmax(_, 1fr)) equation\"] pub min_size : GridTemplateMinSize, }",
      "cfg": []
    },
    {
      "id": "gpui::style::GridTemplateMinSize",
      "name": "GridTemplateMinSize",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "The minimum size of a column or row in a grid layout",
      "documentation": "The minimum size of a column or row in a grid layout",
      "signature": "# [doc = \" The minimum size of a column or row in a grid layout\"] # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Default, JsonSchema, Serialize, Deserialize,)] pub enum GridTemplateMinSize { # [doc = \" The column or row size may be 0\"] # [default] Zero, # [doc = \" The column or row size can be determined by the min content\"] MinContent, # [doc = \" The column or row size can be determined by the max content\"] MaxContent, }",
      "cfg": []
    },
    {
      "id": "gpui::style::HighlightStyle",
      "name": "HighlightStyle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "A highlight style to apply, similar to a `TextStyle` except for a single font, uniformly sized and spaced text.",
      "documentation": "A highlight style to apply, similar to a `TextStyle` except\nfor a single font, uniformly sized and spaced text.",
      "signature": "# [doc = \" A highlight style to apply, similar to a `TextStyle` except\"] # [doc = \" for a single font, uniformly sized and spaced text.\"] # [derive (Copy, Clone, Debug, Default, PartialEq)] pub struct HighlightStyle { # [doc = \" The color of the text\"] pub color : Option<Hsla>, # [doc = \" The font weight, e.g. bold\"] pub font_weight : Option<FontWeight>, # [doc = \" The font style, e.g. italic\"] pub font_style : Option<FontStyle>, # [doc = \" The background color of the text\"] pub background_color : Option<Hsla>, # [doc = \" A uniform corner radius for each painted fragment of the background.\"] pub background_radius : Option<Pixels>, # [doc = \" How far each painted fragment of the background reaches past the run's\"] # [doc = \" glyphs, horizontally, on each side.\"] # [doc = \"\"] # [doc = \" Decoration, so it grows the quad and moves nothing: the run keeps the\"] # [doc = \" advance width it was shaped to, the glyphs stay where they were laid\"] # [doc = \" out, and the text around them does not reflow. That is the whole reason\"] # [doc = \" this is here rather than in the layout — a marked word inside a\"] # [doc = \" sentence cannot pay for its own breathing room by pushing the sentence\"] # [doc = \" apart.\"] # [doc = \"\"] # [doc = \" Without it a background is painted exactly on the glyph advances, so a\"] # [doc = \" highlighted word is jammed against its own fill on both sides, and\"] # [doc = \" [`Self::background_radius`] makes it worse rather than better by\"] # [doc = \" rounding a corner into the first and last letter.\"] pub background_padding : Option<Pixels>, # [doc = \" The underline style of the text\"] pub underline : Option<UnderlineStyle>, # [doc = \" The underline style of the text\"] pub strikethrough : Option<StrikethroughStyle>, # [doc = \" Similar to the CSS `opacity` property, this will cause the text to be less vibrant.\"] pub fade_out : Option<f32>, }",
      "cfg": []
    },
    {
      "id": "gpui::style::HighlightStyle::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Create a highlight style with just a color",
      "documentation": "Create a highlight style with just a color",
      "signature": "pub fn color (color : Hsla) -> Self",
      "cfg": [],
      "target": "HighlightStyle"
    },
    {
      "id": "gpui::style::HighlightStyle::highlight",
      "name": "highlight",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Blend this highlight style with another. Non-continuous properties, like font_weight and font_style, are overwritten.",
      "documentation": "Blend this highlight style with another.\nNon-continuous properties, like font_weight and font_style, are overwritten.",
      "signature": "pub fn highlight (self, other : HighlightStyle) -> Self",
      "cfg": [],
      "target": "HighlightStyle"
    },
    {
      "id": "gpui::style::JustifyContent",
      "name": "JustifyContent",
      "kind": "type",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Sets the distribution of space between and around content items For Flexbox it controls alignment in the main axis For Grid it controls alignment in the inline axis",
      "documentation": "Sets the distribution of space between and around content items\nFor Flexbox it controls alignment in the main axis\nFor Grid it controls alignment in the inline axis\n\n[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content)",
      "signature": "# [doc = \" Sets the distribution of space between and around content items\"] # [doc = \" For Flexbox it controls alignment in the main axis\"] # [doc = \" For Grid it controls alignment in the inline axis\"] # [doc = \"\"] # [doc = \" [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content)\"] pub type JustifyContent = AlignContent;",
      "cfg": []
    },
    {
      "id": "gpui::style::JustifyItems",
      "name": "JustifyItems",
      "kind": "type",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Used to control how child nodes are aligned. Does not apply to Flexbox, and will be ignored if specified on a flex container For Grid it controls alignment in the inline axis",
      "documentation": "Used to control how child nodes are aligned.\nDoes not apply to Flexbox, and will be ignored if specified on a flex container\nFor Grid it controls alignment in the inline axis\n\n[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/justify-items)",
      "signature": "# [doc = \" Used to control how child nodes are aligned.\"] # [doc = \" Does not apply to Flexbox, and will be ignored if specified on a flex container\"] # [doc = \" For Grid it controls alignment in the inline axis\"] # [doc = \"\"] # [doc = \" [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/justify-items)\"] pub type JustifyItems = AlignItems;",
      "cfg": []
    },
    {
      "id": "gpui::style::JustifySelf",
      "name": "JustifySelf",
      "kind": "type",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Used to control how the specified nodes is aligned. Overrides the parent Node's `JustifyItems` property. Does not apply to Flexbox, and will be ignored if specified on a flex child For Grid it controls alignment in the inline axis",
      "documentation": "Used to control how the specified nodes is aligned.\nOverrides the parent Node's `JustifyItems` property.\nDoes not apply to Flexbox, and will be ignored if specified on a flex child\nFor Grid it controls alignment in the inline axis\n\n[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/justify-self)",
      "signature": "# [doc = \" Used to control how the specified nodes is aligned.\"] # [doc = \" Overrides the parent Node's `JustifyItems` property.\"] # [doc = \" Does not apply to Flexbox, and will be ignored if specified on a flex child\"] # [doc = \" For Grid it controls alignment in the inline axis\"] # [doc = \"\"] # [doc = \" [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/justify-self)\"] pub type JustifySelf = AlignItems;",
      "cfg": []
    },
    {
      "id": "gpui::style::ObjectFit",
      "name": "ObjectFit",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "How to fit the image into the bounds of the element.",
      "documentation": "How to fit the image into the bounds of the element.",
      "signature": "# [doc = \" How to fit the image into the bounds of the element.\"] pub enum ObjectFit { # [doc = \" The image will be stretched to fill the bounds of the element.\"] Fill, # [doc = \" The image will be scaled to fit within the bounds of the element.\"] Contain, # [doc = \" The image will be scaled to cover the bounds of the element.\"] Cover, # [doc = \" The image will be scaled down to fit within the bounds of the element.\"] ScaleDown, # [doc = \" The image will maintain its original size.\"] None, }",
      "cfg": []
    },
    {
      "id": "gpui::style::ObjectFit::get_bounds",
      "name": "get_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Get the bounds of the image within the given bounds.",
      "documentation": "Get the bounds of the image within the given bounds.",
      "signature": "pub fn get_bounds (& self, bounds : Bounds<Pixels>, image_size : Size<DevicePixels>,) -> Bounds<Pixels>",
      "cfg": [],
      "target": "ObjectFit"
    },
    {
      "id": "gpui::style::Overflow",
      "name": "Overflow",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "How children overflowing their container should affect layout",
      "documentation": "How children overflowing their container should affect layout\n\nIn CSS the primary effect of this property is to control whether contents of a parent container that overflow that container should\nbe displayed anyway, be clipped, or trigger the container to become a scroll container. However it also has secondary effects on layout,\nthe main ones being:\n\n- The automatic minimum size Flexbox/CSS Grid items with non-`Visible` overflow is `0` rather than being content based\n- `Overflow::Scroll` nodes have space in the layout reserved for a scrollbar (width controlled by the `scrollbar_width` property)\n\nIn Taffy, we only implement the layout related secondary effects as we are not concerned with drawing/painting. The amount of space reserved for\na scrollbar is controlled by the `scrollbar_width` property. If this is `0` then `Scroll` behaves identically to `Hidden`.\n\n<https://developer.mozilla.org/en-US/docs/Web/CSS/overflow>",
      "signature": "# [doc = \" How children overflowing their container should affect layout\"] # [doc = \"\"] # [doc = \" In CSS the primary effect of this property is to control whether contents of a parent container that overflow that container should\"] # [doc = \" be displayed anyway, be clipped, or trigger the container to become a scroll container. However it also has secondary effects on layout,\"] # [doc = \" the main ones being:\"] # [doc = \"\"] # [doc = \" - The automatic minimum size Flexbox/CSS Grid items with non-`Visible` overflow is `0` rather than being content based\"] # [doc = \" - `Overflow::Scroll` nodes have space in the layout reserved for a scrollbar (width controlled by the `scrollbar_width` property)\"] # [doc = \"\"] # [doc = \" In Taffy, we only implement the layout related secondary effects as we are not concerned with drawing/painting. The amount of space reserved for\"] # [doc = \" a scrollbar is controlled by the `scrollbar_width` property. If this is `0` then `Scroll` behaves identically to `Hidden`.\"] # [doc = \"\"] # [doc = \" <https://developer.mozilla.org/en-US/docs/Web/CSS/overflow>\"] # [derive (Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, JsonSchema)] pub enum Overflow { # [doc = \" The automatic minimum size of this node as a flexbox/grid item should be based on the size of its content.\"] # [doc = \" Content that overflows this node *should* contribute to the scroll region of its parent.\"] # [default] Visible, # [doc = \" The automatic minimum size of this node as a flexbox/grid item should be based on the size of its content.\"] # [doc = \" Content that overflows this node should *not* contribute to the scroll region of its parent.\"] Clip, # [doc = \" The automatic minimum size of this node as a flexbox/grid item should be `0`.\"] # [doc = \" Content that overflows this node should *not* contribute to the scroll region of its parent.\"] Hidden, # [doc = \" The automatic minimum size of this node as a flexbox/grid item should be `0`. Additionally, space should be reserved\"] # [doc = \" for a scrollbar. The amount of space reserved is controlled by the `scrollbar_width` property.\"] # [doc = \" Content that overflows this node should *not* contribute to the scroll region of its parent.\"] Scroll, }",
      "cfg": []
    },
    {
      "id": "gpui::style::Position",
      "name": "Position",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "The positioning strategy for this item.",
      "documentation": "The positioning strategy for this item.\n\nThis controls both how the origin is determined for the [`Style::position`] field,\nand whether or not the item will be controlled by flexbox's layout algorithm.\n\nWARNING: this enum follows the behavior of [CSS's `position` property](https://developer.mozilla.org/en-US/docs/Web/CSS/position),\nwhich can be unintuitive.\n\n[`Position::Relative`] is the default value, in contrast to the default behavior in CSS.",
      "signature": "# [doc = \" The positioning strategy for this item.\"] # [doc = \"\"] # [doc = \" This controls both how the origin is determined for the [`Style::position`] field,\"] # [doc = \" and whether or not the item will be controlled by flexbox's layout algorithm.\"] # [doc = \"\"] # [doc = \" WARNING: this enum follows the behavior of [CSS's `position` property](https://developer.mozilla.org/en-US/docs/Web/CSS/position),\"] # [doc = \" which can be unintuitive.\"] # [doc = \"\"] # [doc = \" [`Position::Relative`] is the default value, in contrast to the default behavior in CSS.\"] # [derive (Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, JsonSchema)] pub enum Position { # [doc = \" The offset is computed relative to the final position given by the layout algorithm.\"] # [doc = \" Offsets do not affect the position of any other items; they are effectively a correction factor applied at the end.\"] # [default] Relative, # [doc = \" The offset is computed relative to this item's closest positioned ancestor, if any.\"] # [doc = \" Otherwise, it is placed relative to the origin.\"] # [doc = \" No space is created for the item in the page layout, and its size will not be altered.\"] # [doc = \"\"] # [doc = \" WARNING: to opt-out of layouting entirely, you must use [`Display::None`] instead on your [`Style`] object.\"] Absolute, }",
      "cfg": []
    },
    {
      "id": "gpui::style::ShadowStyle",
      "name": "ShadowStyle",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "How a shadow is cast relative to the element that owns it.",
      "documentation": "How a shadow is cast relative to the element that owns it.\n\nThe three are genuinely different pictures, which is why this is not two\nbooleans: a shadow cannot be cast inward and clipped outward at once.",
      "signature": "# [doc = \" How a shadow is cast relative to the element that owns it.\"] # [doc = \"\"] # [doc = \" The three are genuinely different pictures, which is why this is not two\"] # [doc = \" booleans: a shadow cannot be cast inward and clipped outward at once.\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)] pub enum ShadowStyle { # [doc = \" Cast outward, and painted under the element as well as around it.\"] # [doc = \"\"] # [doc = \" A translucent or empty element shows it, which is what lets a glow\"] # [doc = \" reach into the body of the thing casting it instead of stopping at its\"] # [doc = \" perimeter.\"] # [default] Drop, # [doc = \" Cast outward and clipped to outside the element's own rounded shape,\"] # [doc = \" the way CSS clips an outer `box-shadow` to the border box.\"] # [doc = \"\"] # [doc = \" This is what a halo wants. A `Drop` halo reads as a ring only because\"] # [doc = \" the element it rings happens to be opaque; on a transparent element the\"] # [doc = \" same shadow floods the element instead. A `Ring` reads as a ring\"] # [doc = \" whatever it is drawn on.\"] Ring, # [doc = \" Cast inward, inside the element's bounds.\"] Inset, }",
      "cfg": []
    },
    {
      "id": "gpui::style::ShadowStyle::is_inset",
      "name": "is_inset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Whether the shadow is drawn inside the element.",
      "documentation": "Whether the shadow is drawn inside the element.",
      "signature": "pub fn is_inset (self) -> bool",
      "cfg": [],
      "target": "ShadowStyle"
    },
    {
      "id": "gpui::style::ShadowStyle::is_ring",
      "name": "is_ring",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Whether the element's own shape is cut out of the shadow.",
      "documentation": "Whether the element's own shape is cut out of the shadow.",
      "signature": "pub fn is_ring (self) -> bool",
      "cfg": [],
      "target": "ShadowStyle"
    },
    {
      "id": "gpui::style::StrikethroughStyle",
      "name": "StrikethroughStyle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "The properties that can be applied to a strikethrough.",
      "documentation": "The properties that can be applied to a strikethrough.",
      "signature": "# [doc = \" The properties that can be applied to a strikethrough.\"] # [derive (Refineable, Copy, Clone, Default, Debug, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema,)] pub struct StrikethroughStyle { # [doc = \" The thickness of the strikethrough.\"] pub thickness : Pixels, # [doc = \" The color of the strikethrough.\"] pub color : Option<Hsla>, }",
      "cfg": []
    },
    {
      "id": "gpui::style::Style",
      "name": "Style",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "The CSS styling that can be applied to an element via the `Styled` trait",
      "documentation": "The CSS styling that can be applied to an element via the `Styled` trait",
      "signature": "# [doc = \" The CSS styling that can be applied to an element via the `Styled` trait\"] # [derive (Clone, Refineable, Debug)] # [refineable (Debug, PartialEq, Serialize, Deserialize, JsonSchema)] pub struct Style { # [doc = \" What layout strategy should be used?\"] pub display : Display, # [doc = \" Should the element be painted on screen?\"] pub visibility : Visibility, # [doc = \" How children overflowing their container should affect layout\"] # [refineable] pub overflow : Point<Overflow>, # [doc = \" How much space (in points) should be reserved for the scrollbars of `Overflow::Scroll` and `Overflow::Auto` nodes.\"] pub scrollbar_width : AbsoluteLength, # [doc = \" Whether both x and y axis should be scrollable at the same time.\"] pub allow_concurrent_scroll : bool, # [doc = \" Whether scrolling should be restricted to the input gesture's axis.\"] # [doc = \"\"] # [doc = \" Pixel-based scroll gestures are locked to their initially dominant axis. The lock may be\"] # [doc = \" released when the gesture changes direction strongly. Touch phases delimit gestures when\"] # [doc = \" available, with a timeout fallback for platforms that only emit moved events.\"] # [doc = \"\"] # [doc = \" This also prevents input from being remapped to another axis. For example, horizontal input\"] # [doc = \" will not scroll a container that only has vertical overflow enabled. Mouse wheel platforms\"] # [doc = \" typically report ordinary wheel input on the Y axis and Shift-modified input on the X axis.\"] # [doc = \"\"] # [doc = \" ## Motivation\"] # [doc = \"\"] # [doc = \" On the web when scrolling with the mouse wheel, scrolling up and down will always scroll the Y axis, even when\"] # [doc = \" the mouse is over a horizontally-scrollable element.\"] # [doc = \"\"] # [doc = \" The only way to scroll horizontally is to hold down `Shift` while scrolling, which then changes the scroll axis\"] # [doc = \" to the X axis.\"] # [doc = \"\"] # [doc = \" Currently, GPUI operates differently from the web in that it will scroll an element in either the X or Y axis\"] # [doc = \" when scrolling with just the mouse wheel. This causes problems when scrolling in a vertical list that contains\"] # [doc = \" horizontally-scrollable elements, as when you get to the horizontally-scrollable elements the scroll will be\"] # [doc = \" hijacked.\"] # [doc = \"\"] # [doc = \" Ideally we would match the web's behavior and not have a need for this, but right now we're adding this opt-in\"] # [doc = \" style property to limit the potential blast radius.\"] pub restrict_scroll_to_axis : bool, # [doc = \" What should the `position` value of this struct use as a base offset?\"] pub position : Position, # [doc = \" How should the position of this element be tweaked relative to the layout defined?\"] # [refineable] pub inset : Edges<Length>, # [doc = \" Sets the initial size of the item\"] # [refineable] pub size : Size<Length>, # [doc = \" Controls the minimum size of the item\"] # [refineable] pub min_size : Size<Length>, # [doc = \" Controls the maximum size of the item\"] # [refineable] pub max_size : Size<Length>, # [doc = \" Sets the preferred aspect ratio for the item. The ratio is calculated as width divided by height.\"] pub aspect_ratio : Option<f32>, # [doc = \" How large should the margin be on each side?\"] # [refineable] pub margin : Edges<Length>, # [doc = \" How large should the padding be on each side?\"] # [refineable] pub padding : Edges<DefiniteLength>, # [doc = \" How large should the border be on each side?\"] # [refineable] pub border_widths : Edges<AbsoluteLength>, # [doc = \" How this node's children aligned in the cross/block axis?\"] pub align_items : Option<AlignItems>, # [doc = \" How this node should be aligned in the cross/block axis. Falls back to the parents [`AlignItems`] if not set\"] pub align_self : Option<AlignSelf>, # [doc = \" How should content contained within this item be aligned in the cross/block axis\"] pub align_content : Option<AlignContent>, # [doc = \" How should contained within this item be aligned in the main/inline axis\"] pub justify_content : Option<JustifyContent>, # [doc = \" How large should the gaps between items in a flex container be?\"] # [refineable] pub gap : Size<DefiniteLength>, # [doc = \" Which direction does the main axis flow in?\"] pub flex_direction : FlexDirection, # [doc = \" Should elements wrap, or stay in a single line?\"] pub flex_wrap : FlexWrap, # [doc = \" Sets the initial main axis size of the item\"] pub flex_basis : Length, # [doc = \" The relative rate at which this item grows when it is expanding to fill space, 0.0 is the default value, and this value must be positive.\"] pub flex_grow : f32, # [doc = \" The relative rate at which this item shrinks when it is contracting to fit into space, 1.0 is the default value, and this value must be positive.\"] pub flex_shrink : f32, # [doc = \" The fill color of this element\"] pub background : Option<Fill>, # [doc = \" The border color of this element\"] pub border_color : Option<Hsla>, # [doc = \" The border style of this element\"] pub border_style : BorderStyle, # [doc = \" The radius of the corners of this element\"] # [refineable] pub corner_radii : Corners<AbsoluteLength>, # [doc = \" Box shadow of the element\"] pub box_shadow : Vec<BoxShadow>, # [doc = \" The text style of this element\"] # [refineable] pub text : TextStyleRefinement, # [doc = \" The mouse cursor style shown when the mouse pointer is over an element.\"] pub mouse_cursor : Option<CursorStyle>, # [doc = \" The opacity of this element\"] pub opacity : Option<f32>, # [doc = \" The grid columns of this element\"] # [doc = \" Roughly equivalent to the Tailwind `grid-cols-<number>`\"] pub grid_cols : Option<GridTemplate>, # [doc = \" The row span of this element\"] # [doc = \" Equivalent to the Tailwind `grid-rows-<number>`\"] pub grid_rows : Option<GridTemplate>, # [doc = \" The grid location of this element\"] pub grid_location : Option<GridLocation>, # [doc = \" Whether to draw a red debugging outline around this element\"] # [cfg (debug_assertions)] pub debug : bool, # [doc = \" Whether to draw a red debugging outline around this element and all of its conforming children\"] # [cfg (debug_assertions)] pub debug_below : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::style::Style::has_opaque_background",
      "name": "has_opaque_background",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Returns true if the style is visible and the background is opaque.",
      "documentation": "Returns true if the style is visible and the background is opaque.",
      "signature": "pub fn has_opaque_background (& self) -> bool",
      "cfg": [],
      "target": "Style"
    },
    {
      "id": "gpui::style::Style::overflow_mask",
      "name": "overflow_mask",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Get the content mask for this element style, based on the given bounds. If the element does not hide its overflow, this will return `None`.",
      "documentation": "Get the content mask for this element style, based on the given bounds.\nIf the element does not hide its overflow, this will return `None`.",
      "signature": "pub fn overflow_mask (& self, bounds : Bounds<Pixels>, rem_size : Pixels,) -> Option<ContentMask<Pixels>>",
      "cfg": [],
      "target": "Style"
    },
    {
      "id": "gpui::style::Style::paint",
      "name": "paint",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Paints the background of an element styled with this style.",
      "documentation": "Paints the background of an element styled with this style.",
      "signature": "pub fn paint (& self, bounds : Bounds<Pixels>, window : & mut Window, cx : & mut App, continuation : impl FnOnce (& mut Window, & mut App),)",
      "cfg": [],
      "target": "Style"
    },
    {
      "id": "gpui::style::Style::text_style",
      "name": "text_style",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Get the text style in this element style.",
      "documentation": "Get the text style in this element style.",
      "signature": "pub fn text_style (& self) -> Option<& TextStyleRefinement>",
      "cfg": [],
      "target": "Style"
    },
    {
      "id": "gpui::style::StyleRefinement::grid_location_mut",
      "name": "grid_location_mut",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "The grid location of this element",
      "documentation": "The grid location of this element",
      "signature": "pub fn grid_location_mut (& mut self) -> & mut GridLocation",
      "cfg": [],
      "target": "StyleRefinement"
    },
    {
      "id": "gpui::style::TextAlign",
      "name": "TextAlign",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "How to align text within the element",
      "documentation": "How to align text within the element",
      "signature": "# [doc = \" How to align text within the element\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)] pub enum TextAlign { # [doc = \" Align the text to the left of the element\"] # [default] Left, # [doc = \" Center the text within the element\"] Center, # [doc = \" Align the text to the right of the element\"] Right, }",
      "cfg": []
    },
    {
      "id": "gpui::style::TextOverflow",
      "name": "TextOverflow",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "How to truncate text that overflows the width of the element",
      "documentation": "How to truncate text that overflows the width of the element",
      "signature": "# [doc = \" How to truncate text that overflows the width of the element\"] # [derive (Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)] pub enum TextOverflow { # [doc = \" Truncate the text at the end when it doesn't fit, and represent this truncation by\"] # [doc = \" displaying the provided string (e.g., \\\"very long te…\\\").\"] Truncate (SharedString), # [doc = \" Truncate the text at the start when it doesn't fit, and represent this truncation by\"] # [doc = \" displaying the provided string at the beginning (e.g., \\\"…ong text here\\\").\"] # [doc = \" Typically more adequate for file paths where the end is more important than the beginning.\"] TruncateStart (SharedString), # [doc = \" Truncate the text in the middle when it doesn't fit, preserving both the start and end\"] # [doc = \" of the string (e.g., \\\"long fi…name.rs\\\"). Useful for filenames where both the prefix\"] # [doc = \" and the extension are important context.\"] TruncateMiddle (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui::style::TextStyle",
      "name": "TextStyle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "The properties that can be used to style text in GPUI",
      "documentation": "The properties that can be used to style text in GPUI",
      "signature": "# [doc = \" The properties that can be used to style text in GPUI\"] # [derive (Refineable, Clone, Debug, PartialEq)] # [refineable (Debug, PartialEq, Serialize, Deserialize, JsonSchema)] pub struct TextStyle { # [doc = \" The color of the text\"] pub color : Hsla, # [doc = \" The font family to use\"] pub font_family : SharedString, # [doc = \" The font features to use\"] pub font_features : FontFeatures, # [doc = \" The fallback fonts to use\"] pub font_fallbacks : Option<FontFallbacks>, # [doc = \" The font size to use, in pixels or rems.\"] pub font_size : AbsoluteLength, # [doc = \" The line height to use, in pixels or fractions\"] pub line_height : DefiniteLength, # [doc = \" The font weight, e.g. bold\"] pub font_weight : FontWeight, # [doc = \" The font style, e.g. italic\"] pub font_style : FontStyle, # [doc = \" The background color of the text\"] pub background_color : Option<Hsla>, # [doc = \" The underline style of the text\"] pub underline : Option<UnderlineStyle>, # [doc = \" The strikethrough style of the text\"] pub strikethrough : Option<StrikethroughStyle>, # [doc = \" How to handle whitespace in the text\"] pub white_space : WhiteSpace, # [doc = \" The text should be truncated if it overflows the width of the element\"] pub text_overflow : Option<TextOverflow>, # [doc = \" How the text should be aligned within the element\"] pub text_align : TextAlign, # [doc = \" The number of lines to display before truncating the text\"] pub line_clamp : Option<usize>, }",
      "cfg": []
    },
    {
      "id": "gpui::style::TextStyle::font",
      "name": "font",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Get the font configured for this text style.",
      "documentation": "Get the font configured for this text style.",
      "signature": "pub fn font (& self) -> Font",
      "cfg": [],
      "target": "TextStyle"
    },
    {
      "id": "gpui::style::TextStyle::highlight",
      "name": "highlight",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Create a new text style with the given highlighting applied.",
      "documentation": "Create a new text style with the given highlighting applied.",
      "signature": "pub fn highlight (mut self, style : impl Into<HighlightStyle>) -> Self",
      "cfg": [],
      "target": "TextStyle"
    },
    {
      "id": "gpui::style::TextStyle::line_height_in_pixels",
      "name": "line_height_in_pixels",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Returns the rounded line height in pixels.",
      "documentation": "Returns the rounded line height in pixels.",
      "signature": "pub fn line_height_in_pixels (& self, rem_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "TextStyle"
    },
    {
      "id": "gpui::style::TextStyle::to_run",
      "name": "to_run",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Convert this text style into a [`TextRun`], for the given length of the text.",
      "documentation": "Convert this text style into a [`TextRun`], for the given length of the text.",
      "signature": "pub fn to_run (& self, len : usize) -> TextRun",
      "cfg": [],
      "target": "TextStyle"
    },
    {
      "id": "gpui::style::UnderlineStyle",
      "name": "UnderlineStyle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "The properties that can be applied to an underline.",
      "documentation": "The properties that can be applied to an underline.",
      "signature": "# [doc = \" The properties that can be applied to an underline.\"] # [derive (Refineable, Copy, Clone, Default, Debug, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema,)] pub struct UnderlineStyle { # [doc = \" The thickness of the underline.\"] pub thickness : Pixels, # [doc = \" The color of the underline.\"] pub color : Option<Hsla>, # [doc = \" Whether the underline should be wavy, like in a spell checker.\"] pub wavy : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::style::Visibility",
      "name": "Visibility",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "The value of the visibility property, similar to the CSS property `visibility`",
      "documentation": "The value of the visibility property, similar to the CSS property `visibility`",
      "signature": "# [doc = \" The value of the visibility property, similar to the CSS property `visibility`\"] # [derive (Default, Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, JsonSchema)] pub enum Visibility { # [doc = \" The element should be drawn as normal.\"] # [default] Visible, # [doc = \" The element should not be drawn, but should still take up space in the layout.\"] Hidden, }",
      "cfg": []
    },
    {
      "id": "gpui::style::WhiteSpace",
      "name": "WhiteSpace",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "How to handle whitespace in text",
      "documentation": "How to handle whitespace in text",
      "signature": "# [doc = \" How to handle whitespace in text\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)] pub enum WhiteSpace { # [doc = \" Normal line wrapping when text overflows the width of the element\"] # [default] Normal, # [doc = \" No line wrapping, text will overflow the width of the element\"] Nowrap, }",
      "cfg": []
    },
    {
      "id": "gpui::style::combine_highlights",
      "name": "combine_highlights",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "style",
      "path": "gpui::style",
      "source": "crates/gpui/src/style.rs",
      "summary": "Combine and merge the highlights and ranges in the two iterators.",
      "documentation": "Combine and merge the highlights and ranges in the two iterators.",
      "signature": "pub fn combine_highlights (a : impl IntoIterator<Item = (Range<usize>, HighlightStyle)>, b : impl IntoIterator<Item = (Range<usize>, HighlightStyle)>,) -> impl Iterator<Item = (Range<usize>, HighlightStyle)>",
      "cfg": []
    },
    {
      "id": "gpui::styled::Styled",
      "name": "Styled",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "styled",
      "path": "gpui::styled",
      "source": "crates/gpui/src/styled.rs",
      "summary": "A trait for elements that can be styled. Use this to opt-in to a utility CSS-like styling API.",
      "documentation": "A trait for elements that can be styled.\nUse this to opt-in to a utility CSS-like styling API.",
      "signature": "# [doc = \" A trait for elements that can be styled.\"] # [doc = \" Use this to opt-in to a utility CSS-like styling API.\"] # [cfg_attr (all (any (feature = \"inspector\", debug_assertions), not (rust_analyzer)), gpui_macros::derive_inspector_reflection)] pub trait Styled : Sized { # [doc = \" Returns a reference to the style memory of this element.\"] fn style (& mut self) -> & mut StyleRefinement; gpui_macros::style_helpers ! (); gpui_macros::visibility_style_methods ! (); gpui_macros::margin_style_methods ! (); gpui_macros::padding_style_methods ! (); gpui_macros::position_style_methods ! (); gpui_macros::overflow_style_methods ! (); gpui_macros::cursor_style_methods ! (); gpui_macros::border_style_methods ! (); gpui_macros::box_shadow_style_methods ! (); # [doc = \" Sets the display type of the element to `block`.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/display)\"] fn block (mut self) -> Self { self . style () . display = Some (Display::Block); self } # [doc = \" Sets the display type of the element to `flex`.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/display)\"] fn flex (mut self) -> Self { self . style () . display = Some (Display::Flex); self } # [doc = \" Sets the display type of the element to `grid`.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/display)\"] fn grid (mut self) -> Self { self . style () . display = Some (Display::Grid); self } # [doc = \" Sets the display type of the element to `none`.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/display)\"] fn hidden (mut self) -> Self { self . style () . display = Some (Display::None); self } # [doc = \" Set the space to be reserved for rendering the scrollbar.\"] # [doc = \"\"] # [doc = \" This will only affect the layout of the element when overflow for this element is set to\"] # [doc = \" `Overflow::Scroll`.\"] fn scrollbar_width (mut self, width : impl Into<AbsoluteLength>) -> Self { self . style () . scrollbar_width = Some (width . into ()); self } # [doc = \" Sets the whitespace of the element to `normal`.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/whitespace#normal)\"] fn whitespace_normal (mut self) -> Self { self . text_style () . white_space = Some (WhiteSpace::Normal); self } # [doc = \" Sets the whitespace of the element to `nowrap`.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/whitespace#nowrap)\"] fn whitespace_nowrap (mut self) -> Self { self . text_style () . white_space = Some (WhiteSpace::Nowrap); self } # [doc = \" Sets the truncate overflowing text with an ellipsis (…) at the end if needed.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/text-overflow#ellipsis)\"] fn text_ellipsis (mut self) -> Self { self . text_style () . text_overflow = Some (TextOverflow::Truncate (ELLIPSIS)); self } # [doc = \" Sets the truncate overflowing text with an ellipsis (…) at the start if needed.\"] # [doc = \" Typically more adequate for file paths where the end is more important than the beginning.\"] # [doc = \" Note: This doesn't exist in Tailwind CSS.\"] fn text_ellipsis_start (mut self) -> Self { self . text_style () . text_overflow = Some (TextOverflow::TruncateStart (ELLIPSIS)); self } # [doc = \" Sets the truncate overflowing text with an ellipsis (…) in the middle if needed.\"] # [doc = \" Preserves the beginning and end of the text. Useful for filenames.\"] # [doc = \" Note: This doesn't exist in Tailwind CSS.\"] fn text_ellipsis_middle (mut self) -> Self { self . text_style () . text_overflow = Some (TextOverflow::TruncateMiddle (ELLIPSIS)); self } # [doc = \" Sets the text overflow behavior of the element.\"] fn text_overflow (mut self, overflow : TextOverflow) -> Self { self . text_style () . text_overflow = Some (overflow); self } # [doc = \" Set the text alignment of the element.\"] fn text_align (mut self, align : TextAlign) -> Self { self . text_style () . text_align = Some (align); self } # [doc = \" Sets the text alignment to left\"] fn text_left (mut self) -> Self { self . text_align (TextAlign::Left) } # [doc = \" Sets the text alignment to center\"] fn text_center (mut self) -> Self { self . text_align (TextAlign::Center) } # [doc = \" Sets the text alignment to right\"] fn text_right (mut self) -> Self { self . text_align (TextAlign::Right) } # [doc = \" Sets the truncate to prevent text from wrapping and truncate overflowing text with an ellipsis (…) if needed.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/text-overflow#truncate)\"] fn truncate (mut self) -> Self { self . overflow_hidden () . whitespace_nowrap () . text_ellipsis () } # [doc = \" Sets number of lines to show before truncating the text.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/line-clamp)\"] fn line_clamp (mut self, lines : usize) -> Self { let mut text_style = self . text_style (); text_style . line_clamp = Some (lines); self . overflow_hidden () } # [doc = \" Sets the flex direction of the element to `column`.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-direction#column)\"] fn flex_col (mut self) -> Self { self . style () . flex_direction = Some (FlexDirection::Column); self } # [doc = \" Sets the flex direction of the element to `column-reverse`.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-direction#column-reverse)\"] fn flex_col_reverse (mut self) -> Self { self . style () . flex_direction = Some (FlexDirection::ColumnReverse); self } # [doc = \" Sets the flex direction of the element to `row`.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-direction#row)\"] fn flex_row (mut self) -> Self { self . style () . flex_direction = Some (FlexDirection::Row); self } # [doc = \" Sets the flex direction of the element to `row-reverse`.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-direction#row-reverse)\"] fn flex_row_reverse (mut self) -> Self { self . style () . flex_direction = Some (FlexDirection::RowReverse); self } # [doc = \" Sets the element to allow a flex item to grow and shrink as needed, ignoring its initial size.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex#flex-1)\"] fn flex_1 (mut self) -> Self { self . style () . flex_grow = Some (1.); self . style () . flex_shrink = Some (1.); self . style () . flex_basis = Some (relative (0.) . into ()); self } # [doc = \" Sets the element to allow a flex item to grow and shrink, taking into account its initial size.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex#auto)\"] fn flex_auto (mut self) -> Self { self . style () . flex_grow = Some (1.); self . style () . flex_shrink = Some (1.); self . style () . flex_basis = Some (Length::Auto); self } # [doc = \" Sets the element to allow a flex item to shrink but not grow, taking into account its initial size.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex#initial)\"] fn flex_initial (mut self) -> Self { self . style () . flex_grow = Some (0.); self . style () . flex_shrink = Some (1.); self . style () . flex_basis = Some (Length::Auto); self } # [doc = \" Sets the element to prevent a flex item from growing or shrinking.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex#none)\"] fn flex_none (mut self) -> Self { self . style () . flex_grow = Some (0.); self . style () . flex_shrink = Some (0.); self . style () . flex_basis = Some (Length::Auto); self } # [doc = \" Sets the initial size of flex items for this element.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-basis)\"] fn flex_basis (mut self, basis : impl Into<Length>) -> Self { self . style () . flex_basis = Some (basis . into ()); self } # [doc = \" Sets the flex item's grow factor.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-grow)\"] fn flex_grow (mut self, grow : f32) -> Self { self . style () . flex_grow = Some (grow); self } # [doc = \" Disables flex item growth (flex-grow: 0).\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-grow#dont-grow)\"] fn flex_grow_0 (mut self) -> Self { self . style () . flex_grow = Some (0.); self } # [doc = \" Enables flex item growth (flex-grow: 1).\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-grow#grow-1)\"] fn flex_grow_1 (mut self) -> Self { self . style () . flex_grow = Some (1.); self } # [doc = \" Sets the flex item's shrink factor.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-shrink)\"] fn flex_shrink (mut self, shrink : f32) -> Self { self . style () . flex_shrink = Some (shrink); self } # [doc = \" Disables flex item shrinking (flex-shrink: 0).\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-shrink#dont-shrink)\"] fn flex_shrink_0 (mut self) -> Self { self . style () . flex_shrink = Some (0.); self } # [doc = \" Enables flex item shrinking (flex-shrink: 1).\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-shrink#shrink-1)\"] fn flex_shrink_1 (mut self) -> Self { self . style () . flex_shrink = Some (1.); self } # [doc = \" Sets the element to allow flex items to wrap.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-wrap#wrap-normally)\"] fn flex_wrap (mut self) -> Self { self . style () . flex_wrap = Some (FlexWrap::Wrap); self } # [doc = \" Sets the element wrap flex items in the reverse direction.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-wrap#wrap-reversed)\"] fn flex_wrap_reverse (mut self) -> Self { self . style () . flex_wrap = Some (FlexWrap::WrapReverse); self } # [doc = \" Sets the element to prevent flex items from wrapping, causing inflexible items to overflow the container if necessary.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/flex-wrap#dont-wrap)\"] fn flex_nowrap (mut self) -> Self { self . style () . flex_wrap = Some (FlexWrap::NoWrap); self } # [doc = \" Sets the element to align flex items to the start of the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-items#start)\"] fn items_start (mut self) -> Self { self . style () . align_items = Some (AlignItems::FlexStart); self } # [doc = \" Sets the element to align flex items to the end of the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-items#end)\"] fn items_end (mut self) -> Self { self . style () . align_items = Some (AlignItems::FlexEnd); self } # [doc = \" Sets the element to align flex items along the center of the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-items#center)\"] fn items_center (mut self) -> Self { self . style () . align_items = Some (AlignItems::Center); self } # [doc = \" Sets the element to align flex items along the baseline of the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-items#baseline)\"] fn items_baseline (mut self) -> Self { self . style () . align_items = Some (AlignItems::Baseline); self } # [doc = \" Sets the element to stretch flex items to fill the available space along the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-items#stretch)\"] fn items_stretch (mut self) -> Self { self . style () . align_items = Some (AlignItems::Stretch); self } # [doc = \" Sets how this specific element is aligned along the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-self#start)\"] fn self_start (mut self) -> Self { self . style () . align_self = Some (AlignSelf::Start); self } # [doc = \" Sets this element to align against the end of the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-self#end)\"] fn self_end (mut self) -> Self { self . style () . align_self = Some (AlignSelf::End); self } # [doc = \" Sets this element to align against the start of the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-self#start)\"] fn self_flex_start (mut self) -> Self { self . style () . align_self = Some (AlignSelf::FlexStart); self } # [doc = \" Sets this element to align against the end of the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-self#end)\"] fn self_flex_end (mut self) -> Self { self . style () . align_self = Some (AlignSelf::FlexEnd); self } # [doc = \" Sets this element to align along the center of the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-self#center)\"] fn self_center (mut self) -> Self { self . style () . align_self = Some (AlignSelf::Center); self } # [doc = \" Sets this element to align along the baseline of the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-self#baseline)\"] fn self_baseline (mut self) -> Self { self . style () . align_self = Some (AlignSelf::Baseline); self } # [doc = \" Sets this element to stretch to fill the available space along the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-self#stretch)\"] fn self_stretch (mut self) -> Self { self . style () . align_self = Some (AlignSelf::Stretch); self } # [doc = \" Sets the element to justify flex items against the start of the container's main axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/justify-content#start)\"] fn justify_start (mut self) -> Self { self . style () . justify_content = Some (JustifyContent::Start); self } # [doc = \" Sets the element to justify flex items against the end of the container's main axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/justify-content#end)\"] fn justify_end (mut self) -> Self { self . style () . justify_content = Some (JustifyContent::End); self } # [doc = \" Sets the element to justify flex items along the center of the container's main axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/justify-content#center)\"] fn justify_center (mut self) -> Self { self . style () . justify_content = Some (JustifyContent::Center); self } # [doc = \" Sets the element to justify flex items along the container's main axis\"] # [doc = \" such that there is an equal amount of space between each item.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/justify-content#space-between)\"] fn justify_between (mut self) -> Self { self . style () . justify_content = Some (JustifyContent::SpaceBetween); self } # [doc = \" Sets the element to justify items along the container's main axis such\"] # [doc = \" that there is an equal amount of space on each side of each item.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/justify-content#space-around)\"] fn justify_around (mut self) -> Self { self . style () . justify_content = Some (JustifyContent::SpaceAround); self } # [doc = \" Sets the element to justify items along the container's main axis such\"] # [doc = \" that there is an equal amount of space around each item, but also\"] # [doc = \" accounting for the doubling of space you would normally see between\"] # [doc = \" each item when using justify-around.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/justify-content#space-evenly)\"] fn justify_evenly (mut self) -> Self { self . style () . justify_content = Some (JustifyContent::SpaceEvenly); self } # [doc = \" Sets the element to pack content items in their default position as if no align-content value was set.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-content#normal)\"] fn content_normal (mut self) -> Self { self . style () . align_content = None; self } # [doc = \" Sets the element to pack content items in the center of the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-content#center)\"] fn content_center (mut self) -> Self { self . style () . align_content = Some (AlignContent::Center); self } # [doc = \" Sets the element to pack content items against the start of the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-content#start)\"] fn content_start (mut self) -> Self { self . style () . align_content = Some (AlignContent::FlexStart); self } # [doc = \" Sets the element to pack content items against the end of the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-content#end)\"] fn content_end (mut self) -> Self { self . style () . align_content = Some (AlignContent::FlexEnd); self } # [doc = \" Sets the element to pack content items along the container's cross axis\"] # [doc = \" such that there is an equal amount of space between each item.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-content#space-between)\"] fn content_between (mut self) -> Self { self . style () . align_content = Some (AlignContent::SpaceBetween); self } # [doc = \" Sets the element to pack content items along the container's cross axis\"] # [doc = \" such that there is an equal amount of space on each side of each item.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-content#space-around)\"] fn content_around (mut self) -> Self { self . style () . align_content = Some (AlignContent::SpaceAround); self } # [doc = \" Sets the element to pack content items along the container's cross axis\"] # [doc = \" such that there is an equal amount of space between each item.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-content#space-evenly)\"] fn content_evenly (mut self) -> Self { self . style () . align_content = Some (AlignContent::SpaceEvenly); self } # [doc = \" Sets the element to allow content items to fill the available space along the container's cross axis.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/align-content#stretch)\"] fn content_stretch (mut self) -> Self { self . style () . align_content = Some (AlignContent::Stretch); self } # [doc = \" Sets the aspect ratio of the element.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/aspect-ratio)\"] fn aspect_ratio (mut self, ratio : f32) -> Self { self . style () . aspect_ratio = Some (ratio); self } # [doc = \" Sets the aspect ratio of the element to 1/1 – equal width and height.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/aspect-ratio)\"] fn aspect_square (mut self) -> Self { self . style () . aspect_ratio = Some (1.0); self } # [doc = \" Sets the background color of the element.\"] fn bg<F> (mut self, fill : F) -> Self where F : Into<Fill>, Self : Sized, { self . style () . background = Some (fill . into ()); self } # [doc = \" Sets the border style of the element.\"] fn border_dashed (mut self) -> Self { self . style () . border_style = Some (BorderStyle::Dashed); self } # [doc = \" Returns a mutable reference to the text style that has been configured on this element.\"] fn text_style (& mut self) -> & mut TextStyleRefinement { let style : & mut StyleRefinement = self . style (); & mut style . text } # [doc = \" Sets the text color of this element.\"] # [doc = \"\"] # [doc = \" This value cascades to its child elements.\"] fn text_color (mut self, color : impl Into<Hsla>) -> Self { self . text_style () . color = Some (color . into ()); self } # [doc = \" Sets the font weight of this element\"] # [doc = \"\"] # [doc = \" This value cascades to its child elements.\"] fn font_weight (mut self, weight : FontWeight) -> Self { self . text_style () . font_weight = Some (weight); self } # [doc = \" Sets the background color of this element.\"] # [doc = \"\"] # [doc = \" This value cascades to its child elements.\"] fn text_bg (mut self, bg : impl Into<Hsla>) -> Self { self . text_style () . background_color = Some (bg . into ()); self } # [doc = \" Sets the text size of this element.\"] # [doc = \"\"] # [doc = \" This value cascades to its child elements.\"] fn text_size (mut self, size : impl Into<AbsoluteLength>) -> Self { self . text_style () . font_size = Some (size . into ()); self } # [doc = \" Sets the text size to 'extra small'.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/font-size#setting-the-font-size)\"] fn text_xs (mut self) -> Self { self . text_style () . font_size = Some (rems (0.75) . into ()); self } # [doc = \" Sets the text size to 'small'.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/font-size#setting-the-font-size)\"] fn text_sm (mut self) -> Self { self . text_style () . font_size = Some (rems (0.875) . into ()); self } # [doc = \" Sets the text size to 'base'.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/font-size#setting-the-font-size)\"] fn text_base (mut self) -> Self { self . text_style () . font_size = Some (rems (1.0) . into ()); self } # [doc = \" Sets the text size to 'large'.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/font-size#setting-the-font-size)\"] fn text_lg (mut self) -> Self { self . text_style () . font_size = Some (rems (1.125) . into ()); self } # [doc = \" Sets the text size to 'extra large'.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/font-size#setting-the-font-size)\"] fn text_xl (mut self) -> Self { self . text_style () . font_size = Some (rems (1.25) . into ()); self } # [doc = \" Sets the text size to 'extra extra large'.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/font-size#setting-the-font-size)\"] fn text_2xl (mut self) -> Self { self . text_style () . font_size = Some (rems (1.5) . into ()); self } # [doc = \" Sets the text size to 'extra extra extra large'.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/font-size#setting-the-font-size)\"] fn text_3xl (mut self) -> Self { self . text_style () . font_size = Some (rems (1.875) . into ()); self } # [doc = \" Sets the font style of the element to italic.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/font-style#italicizing-text)\"] fn italic (mut self) -> Self { self . text_style () . font_style = Some (FontStyle::Italic); self } # [doc = \" Sets the font style of the element to normal (not italic).\"] # [doc = \" [Docs](https://tailwindcss.com/docs/font-style#displaying-text-normally)\"] fn not_italic (mut self) -> Self { self . text_style () . font_style = Some (FontStyle::Normal); self } # [doc = \" Sets the text decoration to underline.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/text-decoration-line#underling-text)\"] fn underline (mut self) -> Self { let style = self . text_style (); style . underline = Some (UnderlineStyle { thickness : px (1.), .. Default::default () }); self } # [doc = \" Sets the decoration of the text to have a line through it.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/text-decoration-line#adding-a-line-through-text)\"] fn line_through (mut self) -> Self { let style = self . text_style (); style . strikethrough = Some (StrikethroughStyle { thickness : px (1.), .. Default::default () }); self } # [doc = \" Removes the text decoration on this element.\"] # [doc = \"\"] # [doc = \" This value cascades to its child elements.\"] fn text_decoration_none (mut self) -> Self { self . text_style () . underline = None; self } # [doc = \" Sets the color for the underline on this element\"] fn text_decoration_color (mut self, color : impl Into<Hsla>) -> Self { let style = self . text_style (); let underline = style . underline . get_or_insert_with (Default::default); underline . color = Some (color . into ()); self } # [doc = \" Sets the text decoration style to a solid line.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/text-decoration-style)\"] fn text_decoration_solid (mut self) -> Self { let style = self . text_style (); let underline = style . underline . get_or_insert_with (Default::default); underline . wavy = false; self } # [doc = \" Sets the text decoration style to a wavy line.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/text-decoration-style)\"] fn text_decoration_wavy (mut self) -> Self { let style = self . text_style (); let underline = style . underline . get_or_insert_with (Default::default); underline . wavy = true; self } # [doc = \" Sets the text decoration to be 0px thick.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/text-decoration-thickness)\"] fn text_decoration_0 (mut self) -> Self { let style = self . text_style (); let underline = style . underline . get_or_insert_with (Default::default); underline . thickness = px (0.); self } # [doc = \" Sets the text decoration to be 1px thick.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/text-decoration-thickness)\"] fn text_decoration_1 (mut self) -> Self { let style = self . text_style (); let underline = style . underline . get_or_insert_with (Default::default); underline . thickness = px (1.); self } # [doc = \" Sets the text decoration to be 2px thick.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/text-decoration-thickness)\"] fn text_decoration_2 (mut self) -> Self { let style = self . text_style (); let underline = style . underline . get_or_insert_with (Default::default); underline . thickness = px (2.); self } # [doc = \" Sets the text decoration to be 4px thick.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/text-decoration-thickness)\"] fn text_decoration_4 (mut self) -> Self { let style = self . text_style (); let underline = style . underline . get_or_insert_with (Default::default); underline . thickness = px (4.); self } # [doc = \" Sets the text decoration to be 8px thick.\"] # [doc = \" [Docs](https://tailwindcss.com/docs/text-decoration-thickness)\"] fn text_decoration_8 (mut self) -> Self { let style = self . text_style (); let underline = style . underline . get_or_insert_with (Default::default); underline . thickness = px (8.); self } # [doc = \" Sets the font family of this element and its children.\"] fn font_family (mut self, family_name : impl Into<SharedString>) -> Self { self . text_style () . font_family = Some (family_name . into ()); self } # [doc = \" Sets the font features of this element and its children.\"] fn font_features (mut self, features : FontFeatures) -> Self { self . text_style () . font_features = Some (features); self } # [doc = \" Sets the ordered fallback font families of this element and its children.\"] fn font_fallbacks (mut self, fallbacks : FontFallbacks) -> Self { self . text_style () . font_fallbacks = Some (fallbacks); self } # [doc = \" Sets the font of this element and its children.\"] fn font (mut self, font : Font) -> Self { let Font { family, features, fallbacks, weight, style, } = font; let text_style = self . text_style (); text_style . font_family = Some (family); text_style . font_features = Some (features); text_style . font_weight = Some (weight); text_style . font_style = Some (style); text_style . font_fallbacks = fallbacks; self } # [doc = \" Sets the line height of this element and its children.\"] fn line_height (mut self, line_height : impl Into<DefiniteLength>) -> Self { self . text_style () . line_height = Some (line_height . into ()); self } # [doc = \" Sets the opacity of this element and its children.\"] fn opacity (mut self, opacity : f32) -> Self { self . style () . opacity = Some (opacity); self } # [doc = \" Sets the grid columns of this element.\"] fn grid_cols (mut self, cols : u16) -> Self { self . style () . grid_cols = Some (GridTemplate { repeat : cols, min_size : GridTemplateMinSize::Zero, }); self } # [doc = \" Sets the grid columns with min-content minimum sizing.\"] # [doc = \" Unlike grid_cols, it won't shrink to width 0 in AvailableSpace::MinContent constraints.\"] fn grid_cols_min_content (mut self, cols : u16) -> Self { self . style () . grid_cols = Some (GridTemplate { repeat : cols, min_size : GridTemplateMinSize::MinContent, }); self } # [doc = \" Sets the grid columns with max-content maximum sizing for content-based column widths.\"] fn grid_cols_max_content (mut self, cols : u16) -> Self { self . style () . grid_cols = Some (GridTemplate { repeat : cols, min_size : GridTemplateMinSize::MaxContent, }); self } # [doc = \" Sets the grid rows of this element.\"] fn grid_rows (mut self, rows : u16) -> Self { self . style () . grid_rows = Some (GridTemplate { repeat : rows, min_size : GridTemplateMinSize::Zero, }); self } # [doc = \" Sets the grid rows with min-content minimum sizing.\"] # [doc = \" Unlike grid_rows, it won't shrink to height 0 in AvailableSpace::MinContent constraints.\"] fn grid_rows_min_content (mut self, rows : u16) -> Self { self . style () . grid_rows = Some (GridTemplate { repeat : rows, min_size : GridTemplateMinSize::MinContent, }); self } # [doc = \" Sets the grid rows with max-content maximum sizing for content-based row heights.\"] fn grid_rows_max_content (mut self, rows : u16) -> Self { self . style () . grid_rows = Some (GridTemplate { repeat : rows, min_size : GridTemplateMinSize::MaxContent, }); self } # [doc = \" Sets the column start of this element.\"] fn col_start (mut self, start : i16) -> Self { let grid_location = self . style () . grid_location_mut (); grid_location . column . start = GridPlacement::Line (start); self } # [doc = \" Sets the column start of this element to auto.\"] fn col_start_auto (mut self) -> Self { let grid_location = self . style () . grid_location_mut (); grid_location . column . start = GridPlacement::Auto; self } # [doc = \" Sets the column end of this element.\"] fn col_end (mut self, end : i16) -> Self { let grid_location = self . style () . grid_location_mut (); grid_location . column . end = GridPlacement::Line (end); self } # [doc = \" Sets the column end of this element to auto.\"] fn col_end_auto (mut self) -> Self { let grid_location = self . style () . grid_location_mut (); grid_location . column . end = GridPlacement::Auto; self } # [doc = \" Sets the column span of this element.\"] fn col_span (mut self, span : u16) -> Self { let grid_location = self . style () . grid_location_mut (); grid_location . column = GridPlacement::Span (span) .. GridPlacement::Span (span); self } # [doc = \" Sets the row span of this element.\"] fn col_span_full (mut self) -> Self { let grid_location = self . style () . grid_location_mut (); grid_location . column = GridPlacement::Line (1) .. GridPlacement::Line (- 1); self } # [doc = \" Sets the row start of this element.\"] fn row_start (mut self, start : i16) -> Self { let grid_location = self . style () . grid_location_mut (); grid_location . row . start = GridPlacement::Line (start); self } # [doc = \" Sets the row start of this element to \\\"auto\\\"\"] fn row_start_auto (mut self) -> Self { let grid_location = self . style () . grid_location_mut (); grid_location . row . start = GridPlacement::Auto; self } # [doc = \" Sets the row end of this element.\"] fn row_end (mut self, end : i16) -> Self { let grid_location = self . style () . grid_location_mut (); grid_location . row . end = GridPlacement::Line (end); self } # [doc = \" Sets the row end of this element to \\\"auto\\\"\"] fn row_end_auto (mut self) -> Self { let grid_location = self . style () . grid_location_mut (); grid_location . row . end = GridPlacement::Auto; self } # [doc = \" Sets the row span of this element.\"] fn row_span (mut self, span : u16) -> Self { let grid_location = self . style () . grid_location_mut (); grid_location . row = GridPlacement::Span (span) .. GridPlacement::Span (span); self } # [doc = \" Sets the row span of this element.\"] fn row_span_full (mut self) -> Self { let grid_location = self . style () . grid_location_mut (); grid_location . row = GridPlacement::Line (1) .. GridPlacement::Line (- 1); self } # [doc = \" Draws a debug border around this element.\"] # [cfg (debug_assertions)] fn debug (mut self) -> Self { self . style () . debug = Some (true); self } # [doc = \" Draws a debug border on all conforming elements below this element.\"] # [cfg (debug_assertions)] fn debug_below (mut self) -> Self { self . style () . debug_below = Some (true); self } }",
      "cfg": []
    },
    {
      "id": "gpui::styled::reexport-1",
      "name": "gpui_macros :: { border_style_methods , box_shadow_style_methods , cursor_style_methods , margin_style_methods , overflow_style_methods , padding_style_methods , position_style_methods , visibility_style_methods , }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "styled",
      "path": "gpui::styled",
      "source": "crates/gpui/src/styled.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui_macros::{ border_style_methods, box_shadow_style_methods, cursor_style_methods, margin_style_methods, overflow_style_methods, padding_style_methods, position_style_methods, visibility_style_methods, };",
      "cfg": []
    },
    {
      "id": "gpui::subscription::SubscriberSet::insert",
      "name": "insert",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subscription",
      "path": "gpui::subscription",
      "source": "crates/gpui/src/subscription.rs",
      "summary": "Inserts a new [`Subscription`] for the given `emitter_key`. By default, subscriptions are inert, meaning that they won't be listed when calling `[SubscriberSet::remove]` or `[SubscriberSet::retain]`. This method returns a tuple of a [`Subscription`] and an `impl FnOnce`, and you can use the latter to activate the [`Subscription`].",
      "documentation": "Inserts a new [`Subscription`] for the given `emitter_key`. By default, subscriptions\nare inert, meaning that they won't be listed when calling `[SubscriberSet::remove]` or `[SubscriberSet::retain]`.\nThis method returns a tuple of a [`Subscription`] and an `impl FnOnce`, and you can use the latter\nto activate the [`Subscription`].",
      "signature": "pub fn insert (& self, emitter_key : EmitterKey, callback : Callback,) -> (Subscription, impl FnOnce () + use<EmitterKey, Callback>)",
      "cfg": [],
      "target": "SubscriberSet<EmitterKey, Callback>"
    },
    {
      "id": "gpui::subscription::SubscriberSet::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subscription",
      "path": "gpui::subscription",
      "source": "crates/gpui/src/subscription.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "SubscriberSet<EmitterKey, Callback>"
    },
    {
      "id": "gpui::subscription::SubscriberSet::remove",
      "name": "remove",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subscription",
      "path": "gpui::subscription",
      "source": "crates/gpui/src/subscription.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn remove (& self, emitter : & EmitterKey,) -> impl IntoIterator<Item = Callback> + use<EmitterKey, Callback>",
      "cfg": [],
      "target": "SubscriberSet<EmitterKey, Callback>"
    },
    {
      "id": "gpui::subscription::SubscriberSet::retain",
      "name": "retain",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subscription",
      "path": "gpui::subscription",
      "source": "crates/gpui/src/subscription.rs",
      "summary": "Call the given callback for each subscriber to the given emitter. If the callback returns false, the subscriber is removed.",
      "documentation": "Call the given callback for each subscriber to the given emitter.\nIf the callback returns false, the subscriber is removed.",
      "signature": "pub fn retain<F> (& self, emitter : & EmitterKey, mut f : F) where F : FnMut (& mut Callback) -> bool,",
      "cfg": [],
      "target": "SubscriberSet<EmitterKey, Callback>"
    },
    {
      "id": "gpui::subscription::Subscription",
      "name": "Subscription",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subscription",
      "path": "gpui::subscription",
      "source": "crates/gpui/src/subscription.rs",
      "summary": "A handle to a subscription created by GPUI. When dropped, the subscription is cancelled and the callback will no longer be invoked.",
      "documentation": "A handle to a subscription created by GPUI. When dropped, the subscription\nis cancelled and the callback will no longer be invoked.",
      "signature": "# [doc = \" A handle to a subscription created by GPUI. When dropped, the subscription\"] # [doc = \" is cancelled and the callback will no longer be invoked.\"] # [must_use] pub struct Subscription { unsubscribe : Option<Box<dyn FnOnce () + 'static>>, }",
      "cfg": []
    },
    {
      "id": "gpui::subscription::Subscription::detach",
      "name": "detach",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subscription",
      "path": "gpui::subscription",
      "source": "crates/gpui/src/subscription.rs",
      "summary": "Detaches the subscription from this handle. The callback will continue to be invoked until the entities it has been subscribed to are dropped",
      "documentation": "Detaches the subscription from this handle. The callback will\ncontinue to be invoked until the entities it has been\nsubscribed to are dropped",
      "signature": "pub fn detach (mut self)",
      "cfg": [],
      "target": "Subscription"
    },
    {
      "id": "gpui::subscription::Subscription::join",
      "name": "join",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subscription",
      "path": "gpui::subscription",
      "source": "crates/gpui/src/subscription.rs",
      "summary": "Joins two subscriptions into a single subscription. Detach will detach both interior subscriptions.",
      "documentation": "Joins two subscriptions into a single subscription. Detach will\ndetach both interior subscriptions.",
      "signature": "pub fn join (mut subscription_a : Self, mut subscription_b : Self) -> Self",
      "cfg": [],
      "target": "Subscription"
    },
    {
      "id": "gpui::subscription::Subscription::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subscription",
      "path": "gpui::subscription",
      "source": "crates/gpui/src/subscription.rs",
      "summary": "Creates a new subscription with a callback that gets invoked when this subscription is dropped.",
      "documentation": "Creates a new subscription with a callback that gets invoked when\nthis subscription is dropped.",
      "signature": "pub fn new (unsubscribe : impl 'static + FnOnce ()) -> Self",
      "cfg": [],
      "target": "Subscription"
    },
    {
      "id": "gpui::subtree_clip::ClipChain",
      "name": "ClipChain",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Value-typed inherited clips. Cloning is cheap and equality compares geometry, not allocation or scene-local indices, so this can be retained across frames.",
      "documentation": "Value-typed inherited clips. Cloning is cheap and equality compares geometry,\nnot allocation or scene-local indices, so this can be retained across frames.\n\nFlat storage also makes traversal and destruction independent of nesting\ndepth; neither operation consumes a recursive call stack.",
      "signature": "# [doc = \" Value-typed inherited clips. Cloning is cheap and equality compares geometry,\"] # [doc = \" not allocation or scene-local indices, so this can be retained across frames.\"] # [doc = \"\"] # [doc = \" Flat storage also makes traversal and destruction independent of nesting\"] # [doc = \" depth; neither operation consumes a recursive call stack.\"] # [derive (Clone, Debug, Default, PartialEq, Eq)] pub struct ClipChain (Arc<Vec<RoundedClip>>);",
      "cfg": []
    },
    {
      "id": "gpui::subtree_clip::ClipChain::accessible_bounds",
      "name": "accessible_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Conservative rectangular bounds for accessibility APIs such as AccessKit that cannot represent curved regions. Corner pixels may belong to this rectangle while being rejected by visual clipping and pointer hit tests. This is not an approximation used for pointer input or fragment coverage.",
      "documentation": "Conservative rectangular bounds for accessibility APIs such as AccessKit\nthat cannot represent curved regions. Corner pixels may belong to this\nrectangle while being rejected by visual clipping and pointer hit tests.\nThis is not an approximation used for pointer input or fragment coverage.",
      "signature": "pub fn accessible_bounds (& self, bounds : Bounds<Pixels>) -> Bounds<Pixels>",
      "cfg": [],
      "target": "ClipChain"
    },
    {
      "id": "gpui::subtree_clip::ClipChain::clips",
      "name": "clips",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Ordered outermost to innermost.",
      "documentation": "Ordered outermost to innermost.",
      "signature": "pub fn clips (& self) -> & [RoundedClip]",
      "cfg": [],
      "target": "ClipChain"
    },
    {
      "id": "gpui::subtree_clip::ClipChain::contains",
      "name": "contains",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "True only if every ancestor admits this point. No depth limit applies.",
      "documentation": "True only if every ancestor admits this point. No depth limit applies.",
      "signature": "pub fn contains (& self, position : Point<Pixels>) -> bool",
      "cfg": [],
      "target": "ClipChain"
    },
    {
      "id": "gpui::subtree_clip::ClipChain::pop",
      "name": "pop",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Removes the innermost clip, returning it if present.",
      "documentation": "Removes the innermost clip, returning it if present.",
      "signature": "pub fn pop (& mut self) -> Option<RoundedClip>",
      "cfg": [],
      "target": "ClipChain"
    },
    {
      "id": "gpui::subtree_clip::ClipChain::push",
      "name": "push",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Adds a clip to this value without changing clones retained elsewhere.",
      "documentation": "Adds a clip to this value without changing clones retained elsewhere.",
      "signature": "pub fn push (& mut self, clip : RoundedClip)",
      "cfg": [],
      "target": "ClipChain"
    },
    {
      "id": "gpui::subtree_clip::ClipId",
      "name": "ClipId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Scene-local linked clip index. Zero means no clip; nodes are one-based.",
      "documentation": "Scene-local linked clip index. Zero means no clip; nodes are one-based.",
      "signature": "# [doc = \" Scene-local linked clip index. Zero means no clip; nodes are one-based.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq, Hash)] # [repr (C)] pub struct ClipId { index : u32, padding : u32, }",
      "cfg": []
    },
    {
      "id": "gpui::subtree_clip::ClipId::as_u32",
      "name": "as_u32",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Integer used in GPU records. Nonzero indices are meaningful only in the scene that issued them.",
      "documentation": "Integer used in GPU records. Nonzero indices are meaningful only in the\nscene that issued them.",
      "signature": "pub fn as_u32 (self) -> u32",
      "cfg": [],
      "target": "ClipId"
    },
    {
      "id": "gpui::subtree_clip::ClipNode",
      "name": "ClipNode",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "GPU-facing rounded clip record (ten 32-bit words, with no implicit padding). Parent is always zero or less than this node's one-based index. Renderers can walk until zero without a depth cap or cycle detection.",
      "documentation": "GPU-facing rounded clip record (ten 32-bit words, with no implicit padding).\nParent is always zero or less than this node's one-based index. Renderers can\nwalk until zero without a depth cap or cycle detection.",
      "signature": "# [doc = \" GPU-facing rounded clip record (ten 32-bit words, with no implicit padding).\"] # [doc = \" Parent is always zero or less than this node's one-based index. Renderers can\"] # [doc = \" walk until zero without a depth cap or cycle detection.\"] # [derive (Clone, Copy, Debug, PartialEq)] # [repr (C)] pub struct ClipNode { # [doc = \" Device-space bounds; never a replacement for a primitive's content mask.\"] pub bounds : Bounds<ScaledPixels>, # [doc = \" Fitted device-space corner radii.\"] pub corner_radii : Corners<ScaledPixels>, # [doc = \" Parent's one-based index, or zero.\"] pub parent : ClipId, }",
      "cfg": []
    },
    {
      "id": "gpui::subtree_clip::ClipNodes",
      "name": "ClipNodes",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Scene-owned clip storage. Only validated append operations can create nodes, ensuring that GPU traversal always terminates.",
      "documentation": "Scene-owned clip storage. Only validated append operations can create nodes,\nensuring that GPU traversal always terminates.",
      "signature": "# [doc = \" Scene-owned clip storage. Only validated append operations can create nodes,\"] # [doc = \" ensuring that GPU traversal always terminates.\"] # [derive (Default)] pub struct ClipNodes (Vec<ClipNode>);",
      "cfg": []
    },
    {
      "id": "gpui::subtree_clip::ClipNodes::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Clears frame-local indices along with the owning scene.",
      "documentation": "Clears frame-local indices along with the owning scene.",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "ClipNodes"
    },
    {
      "id": "gpui::subtree_clip::ClipNodes::insert",
      "name": "insert",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Encodes a CPU chain in device coordinates, returning its innermost node. Fails clearly on invalid scale or exhausting the 32-bit index space.",
      "documentation": "Encodes a CPU chain in device coordinates, returning its innermost node.\nFails clearly on invalid scale or exhausting the 32-bit index space.",
      "signature": "pub fn insert (& mut self, chain : & ClipChain, scale : f32) -> ClipId",
      "cfg": [],
      "target": "ClipNodes"
    },
    {
      "id": "gpui::subtree_clip::ClipNodes::nodes",
      "name": "nodes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "GPU upload records, in parent-first order.",
      "documentation": "GPU upload records, in parent-first order.",
      "signature": "pub fn nodes (& self) -> & [ClipNode]",
      "cfg": [],
      "target": "ClipNodes"
    },
    {
      "id": "gpui::subtree_clip::ClipNodes::replay",
      "name": "replay",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Copies one old chain parent-first into this scene. It never treats an old index as a new index, even when destination nodes already occupy that slot. Callers replaying many primitives should memoize the returned old/new pair.",
      "documentation": "Copies one old chain parent-first into this scene. It never treats an old\nindex as a new index, even when destination nodes already occupy that slot.\nCallers replaying many primitives should memoize the returned old/new pair.",
      "signature": "pub fn replay (& mut self, old : ClipId, source : & Self) -> ClipId",
      "cfg": [],
      "target": "ClipNodes"
    },
    {
      "id": "gpui::subtree_clip::RoundedClip",
      "name": "RoundedClip",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "A rounded rectangle in window coordinates.",
      "documentation": "A rounded rectangle in window coordinates.\n\nRadii are fitted exactly as for framework quads: each radius is nonnegative\nand at most half the shortest side. This makes quadrant selection in the\nrounded rectangle distance function unambiguous.",
      "signature": "# [doc = \" A rounded rectangle in window coordinates.\"] # [doc = \"\"] # [doc = \" Radii are fitted exactly as for framework quads: each radius is nonnegative\"] # [doc = \" and at most half the shortest side. This makes quadrant selection in the\"] # [doc = \" rounded rectangle distance function unambiguous.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub struct RoundedClip { bounds : Bounds<Pixels>, corner_radii : Corners<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::subtree_clip::RoundedClip::bounds",
      "name": "bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "The rectangle enclosing the rounded clip.",
      "documentation": "The rectangle enclosing the rounded clip.",
      "signature": "pub fn bounds (& self) -> Bounds<Pixels>",
      "cfg": [],
      "target": "RoundedClip"
    },
    {
      "id": "gpui::subtree_clip::RoundedClip::contains",
      "name": "contains",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Tests the same rounded rectangle distance used by renderer shaders.",
      "documentation": "Tests the same rounded rectangle distance used by renderer shaders.",
      "signature": "pub fn contains (& self, position : Point<Pixels>) -> bool",
      "cfg": [],
      "target": "RoundedClip"
    },
    {
      "id": "gpui::subtree_clip::RoundedClip::corner_radii",
      "name": "corner_radii",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Fitted corner radii in top-left, top-right, bottom-right, bottom-left order.",
      "documentation": "Fitted corner radii in top-left, top-right, bottom-right, bottom-left order.",
      "signature": "pub fn corner_radii (& self) -> Corners<Pixels>",
      "cfg": [],
      "target": "RoundedClip"
    },
    {
      "id": "gpui::subtree_clip::RoundedClip::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "subtree_clip",
      "path": "gpui::subtree_clip",
      "source": "crates/gpui/src/subtree_clip.rs",
      "summary": "Constructs finite geometry. Empty bounds represent an empty clip.",
      "documentation": "Constructs finite geometry. Empty bounds represent an empty clip.\n\nPanics for nonfinite coordinates or radii rather than admitting an\nundefined CPU/GPU disagreement.",
      "signature": "pub fn new (bounds : Bounds<Pixels>, corner_radii : Corners<Pixels>) -> Self",
      "cfg": [],
      "target": "RoundedClip"
    },
    {
      "id": "gpui::svg_renderer::RenderSvgParams",
      "name": "RenderSvgParams",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "svg_renderer",
      "path": "gpui::svg_renderer",
      "source": "crates/gpui/src/svg_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, PartialEq, Hash, Eq)] # [expect (missing_docs)] pub struct RenderSvgParams { pub path : SharedString, pub size : Size<DevicePixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::svg_renderer::SMOOTH_SVG_SCALE_FACTOR",
      "name": "SMOOTH_SVG_SCALE_FACTOR",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "svg_renderer",
      "path": "gpui::svg_renderer",
      "source": "crates/gpui/src/svg_renderer.rs",
      "summary": "When rendering SVGs, we render them at twice the size to get a higher-quality result.",
      "documentation": "When rendering SVGs, we render them at twice the size to get a higher-quality result.",
      "signature": "pub const SMOOTH_SVG_SCALE_FACTOR: f32",
      "cfg": []
    },
    {
      "id": "gpui::svg_renderer::SvgRenderer",
      "name": "SvgRenderer",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "svg_renderer",
      "path": "gpui::svg_renderer",
      "source": "crates/gpui/src/svg_renderer.rs",
      "summary": "A struct holding everything necessary to render SVGs.",
      "documentation": "A struct holding everything necessary to render SVGs.",
      "signature": "# [derive (Clone)] # [doc = \" A struct holding everything necessary to render SVGs.\"] pub struct SvgRenderer { asset_source : Arc<dyn AssetSource>, usvg_options : Arc<usvg::Options<'static>>, }",
      "cfg": []
    },
    {
      "id": "gpui::svg_renderer::SvgRenderer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "svg_renderer",
      "path": "gpui::svg_renderer",
      "source": "crates/gpui/src/svg_renderer.rs",
      "summary": "Creates a new SVG renderer with the provided asset source.",
      "documentation": "Creates a new SVG renderer with the provided asset source.",
      "signature": "pub fn new (asset_source : Arc<dyn AssetSource>) -> Self",
      "cfg": [],
      "target": "SvgRenderer"
    },
    {
      "id": "gpui::svg_renderer::SvgRenderer::render_single_frame",
      "name": "render_single_frame",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "svg_renderer",
      "path": "gpui::svg_renderer",
      "source": "crates/gpui/src/svg_renderer.rs",
      "summary": "Renders the given bytes into an image buffer.",
      "documentation": "Renders the given bytes into an image buffer.",
      "signature": "pub fn render_single_frame (& self, bytes : & [u8], scale_factor : f32,) -> Result<Arc<RenderImage>, usvg::Error>",
      "cfg": [],
      "target": "SvgRenderer"
    },
    {
      "id": "gpui::svg_renderer::SvgSize",
      "name": "SvgSize",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "svg_renderer",
      "path": "gpui::svg_renderer",
      "source": "crates/gpui/src/svg_renderer.rs",
      "summary": "The size in which to render the SVG.",
      "documentation": "The size in which to render the SVG.",
      "signature": "# [doc = \" The size in which to render the SVG.\"] pub enum SvgSize { # [doc = \" An absolute size in device pixels.\"] Size (Size<DevicePixels>), # [doc = \" A scaling factor to apply to the size provided by the SVG.\"] ScaleFactor (f32), }",
      "cfg": []
    },
    {
      "id": "gpui::tab_stop::TabStopMap::begin_group",
      "name": "begin_group",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "tab_stop",
      "path": "gpui::tab_stop",
      "source": "crates/gpui/src/tab_stop.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn begin_group (& mut self, tab_index : isize)",
      "cfg": [],
      "target": "TabStopMap"
    },
    {
      "id": "gpui::tab_stop::TabStopMap::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "tab_stop",
      "path": "gpui::tab_stop",
      "source": "crates/gpui/src/tab_stop.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "TabStopMap"
    },
    {
      "id": "gpui::tab_stop::TabStopMap::end_group",
      "name": "end_group",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "tab_stop",
      "path": "gpui::tab_stop",
      "source": "crates/gpui/src/tab_stop.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn end_group (& mut self)",
      "cfg": [],
      "target": "TabStopMap"
    },
    {
      "id": "gpui::tab_stop::TabStopMap::insert",
      "name": "insert",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "tab_stop",
      "path": "gpui::tab_stop",
      "source": "crates/gpui/src/tab_stop.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn insert (& mut self, focus_handle : & FocusHandle)",
      "cfg": [],
      "target": "TabStopMap"
    },
    {
      "id": "gpui::tab_stop::TabStopMap::next",
      "name": "next",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "tab_stop",
      "path": "gpui::tab_stop",
      "source": "crates/gpui/src/tab_stop.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn next (& self, focused_id : Option<& FocusId>) -> Option<FocusHandle>",
      "cfg": [],
      "target": "TabStopMap"
    },
    {
      "id": "gpui::tab_stop::TabStopMap::paint_index",
      "name": "paint_index",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "tab_stop",
      "path": "gpui::tab_stop",
      "source": "crates/gpui/src/tab_stop.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn paint_index (& self) -> usize",
      "cfg": [],
      "target": "TabStopMap"
    },
    {
      "id": "gpui::tab_stop::TabStopMap::prev",
      "name": "prev",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "tab_stop",
      "path": "gpui::tab_stop",
      "source": "crates/gpui/src/tab_stop.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn prev (& self, focused_id : Option<& FocusId>) -> Option<FocusHandle>",
      "cfg": [],
      "target": "TabStopMap"
    },
    {
      "id": "gpui::tab_stop::TabStopMap::replay",
      "name": "replay",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "tab_stop",
      "path": "gpui::tab_stop",
      "source": "crates/gpui/src/tab_stop.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn replay (& mut self, nodes : & [TabStopOperation])",
      "cfg": [],
      "target": "TabStopMap"
    },
    {
      "id": "gpui::tab_stop::TabStopOperation",
      "name": "TabStopOperation",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "tab_stop",
      "path": "gpui::tab_stop",
      "source": "crates/gpui/src/tab_stop.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone)] pub enum TabStopOperation { Insert (FocusHandle), Group (TabIndex), GroupEnd, }",
      "cfg": []
    },
    {
      "id": "gpui::taffy::AvailableSpace",
      "name": "AvailableSpace",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "taffy",
      "path": "gpui::taffy",
      "source": "crates/gpui/src/taffy.rs",
      "summary": "The space available for an element to be laid out in",
      "documentation": "The space available for an element to be laid out in",
      "signature": "# [doc = \" The space available for an element to be laid out in\"] # [derive (Copy, Clone, Default, Debug, Eq, PartialEq)] pub enum AvailableSpace { # [doc = \" The amount of space available is the specified number of pixels\"] Definite (Pixels), # [doc = \" The amount of space available is indefinite and the node should be laid out under a min-content constraint\"] # [default] MinContent, # [doc = \" The amount of space available is indefinite and the node should be laid out under a max-content constraint\"] MaxContent, }",
      "cfg": []
    },
    {
      "id": "gpui::taffy::AvailableSpace::min_size",
      "name": "min_size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "taffy",
      "path": "gpui::taffy",
      "source": "crates/gpui/src/taffy.rs",
      "summary": "Returns a `Size` with both width and height set to `AvailableSpace::MinContent`.",
      "documentation": "Returns a `Size` with both width and height set to `AvailableSpace::MinContent`.\n\nThis function is useful when you want to create a `Size` with the minimum content constraints\nfor both dimensions.\n\n# Examples\n\n```\nuse gpui::AvailableSpace;\nlet min_content_size = AvailableSpace::min_size();\nassert_eq!(min_content_size.width, AvailableSpace::MinContent);\nassert_eq!(min_content_size.height, AvailableSpace::MinContent);\n```",
      "signature": "pub const fn min_size () -> Size<Self>",
      "cfg": [],
      "target": "AvailableSpace"
    },
    {
      "id": "gpui::taffy::LayoutId",
      "name": "LayoutId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "taffy",
      "path": "gpui::taffy",
      "source": "crates/gpui/src/taffy.rs",
      "summary": "A unique identifier for a layout node, generated when requesting a layout from Taffy",
      "documentation": "A unique identifier for a layout node, generated when requesting a layout from Taffy",
      "signature": "# [doc = \" A unique identifier for a layout node, generated when requesting a layout from Taffy\"] # [derive (Copy, Clone, Eq, PartialEq, Debug)] # [repr (transparent)] pub struct LayoutId (NodeId);",
      "cfg": []
    },
    {
      "id": "gpui::taffy::TaffyLayoutEngine",
      "name": "TaffyLayoutEngine",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "taffy",
      "path": "gpui::taffy",
      "source": "crates/gpui/src/taffy.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct TaffyLayoutEngine { taffy : TaffyTree<NodeContext>, layouts : FxHashMap<NodeId, taffy::Layout>, absolute_layout_bounds : FxHashMap<LayoutId, Bounds<Pixels>>, # [doc = \" Unrounded absolute border-box top-left per-node coordinate in device pixels.\"] absolute_outer_origins : FxHashMap<LayoutId, Point<f32>>, computed_layouts : FxHashSet<LayoutId>, layout_bounds_scratch_space : Vec<LayoutId>, }",
      "cfg": []
    },
    {
      "id": "gpui::taffy::TaffyLayoutEngine::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "taffy",
      "path": "gpui::taffy",
      "source": "crates/gpui/src/taffy.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "TaffyLayoutEngine"
    },
    {
      "id": "gpui::taffy::TaffyLayoutEngine::compute_layout",
      "name": "compute_layout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "taffy",
      "path": "gpui::taffy",
      "source": "crates/gpui/src/taffy.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn compute_layout (& mut self, id : LayoutId, available_space : Size<AvailableSpace>, window : & mut Window, cx : & mut App,)",
      "cfg": [],
      "target": "TaffyLayoutEngine"
    },
    {
      "id": "gpui::taffy::TaffyLayoutEngine::compute_layout_with_size",
      "name": "compute_layout_with_size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "taffy",
      "path": "gpui::taffy",
      "source": "crates/gpui/src/taffy.rs",
      "summary": "Assign a root border box for one computation without changing its authored style for later natural measurements. Descendants keep their styles; padding/borders may impose a larger minimum actual box.",
      "documentation": "Assign a root border box for one computation without changing its\nauthored style for later natural measurements. Descendants keep their\nstyles; padding/borders may impose a larger minimum actual box.",
      "signature": "pub fn compute_layout_with_size (& mut self, id : LayoutId, available_space : Size<AvailableSpace>, assigned : Size<Pixels>, window : & mut Window, cx : & mut App,)",
      "cfg": [],
      "target": "TaffyLayoutEngine"
    },
    {
      "id": "gpui::taffy::TaffyLayoutEngine::layout_bounds",
      "name": "layout_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "taffy",
      "path": "gpui::taffy",
      "source": "crates/gpui/src/taffy.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn layout_bounds (& mut self, id : LayoutId, scale_factor : f32) -> Bounds<Pixels>",
      "cfg": [],
      "target": "TaffyLayoutEngine"
    },
    {
      "id": "gpui::taffy::TaffyLayoutEngine::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "taffy",
      "path": "gpui::taffy",
      "source": "crates/gpui/src/taffy.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "TaffyLayoutEngine"
    },
    {
      "id": "gpui::taffy::TaffyLayoutEngine::request_intrinsic_layout",
      "name": "request_intrinsic_layout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "taffy",
      "path": "gpui::taffy",
      "source": "crates/gpui/src/taffy.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn request_intrinsic_layout (& mut self, style : Style, intrinsic : Size<Pixels>, rem_size : Pixels, scale_factor : f32,) -> LayoutId",
      "cfg": [],
      "target": "TaffyLayoutEngine"
    },
    {
      "id": "gpui::taffy::TaffyLayoutEngine::request_layout",
      "name": "request_layout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "taffy",
      "path": "gpui::taffy",
      "source": "crates/gpui/src/taffy.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn request_layout (& mut self, style : Style, rem_size : Pixels, scale_factor : f32, children : & [LayoutId],) -> LayoutId",
      "cfg": [],
      "target": "TaffyLayoutEngine"
    },
    {
      "id": "gpui::taffy::TaffyLayoutEngine::request_measured_layout",
      "name": "request_measured_layout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "taffy",
      "path": "gpui::taffy",
      "source": "crates/gpui/src/taffy.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn request_measured_layout (& mut self, style : Style, rem_size : Pixels, scale_factor : f32, measure : impl FnMut (Size<Option<Pixels>>, Size<AvailableSpace>, & mut Window, & mut App,) -> Size<Pixels> + 'static,) -> LayoutId",
      "cfg": [],
      "target": "TaffyLayoutEngine"
    },
    {
      "id": "gpui::taffy::TaffyLayoutEngine::stretch_auto_size_to_fill",
      "name": "stretch_auto_size_to_fill",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "taffy",
      "path": "gpui::taffy",
      "source": "crates/gpui/src/taffy.rs",
      "summary": "Treats any `auto` dimension of the given node's style as filling `size`.",
      "documentation": "Treats any `auto` dimension of the given node's style as filling `size`.\n\nThis is applied to window roots before layout so they behave like the\nroot element on the web, which stretches to fill the initial containing\nblock (the viewport) unless given an explicit size. Explicitly styled\ndimensions are preserved.",
      "signature": "pub fn stretch_auto_size_to_fill (& mut self, id : LayoutId, size : Size<Pixels>, scale_factor : f32,)",
      "cfg": [],
      "target": "TaffyLayoutEngine"
    },
    {
      "id": "gpui::test::Observation",
      "name": "Observation",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "test",
      "path": "gpui::test",
      "source": "crates/gpui/src/test.rs",
      "summary": "A test struct for converting an observation callback into a stream.",
      "documentation": "A test struct for converting an observation callback into a stream.",
      "signature": "# [doc = \" A test struct for converting an observation callback into a stream.\"] pub struct Observation<T> { rx : Pin<Box<async_channel::Receiver<T>>>, _subscription : Subscription, }",
      "cfg": []
    },
    {
      "id": "gpui::test::apply_seed_to_proptest_config",
      "name": "apply_seed_to_proptest_config",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "test",
      "path": "gpui::test",
      "source": "crates/gpui/src/test.rs",
      "summary": "Applies a fixed RNG seed to a proptest config so that case generation is deterministic. Uses `$SEED` if set, otherwise defaults to `0`. This bridges the GPUI `SEED` env var to proptest's RNG seed, so that a single variable controls both the scheduler seed and case generation.",
      "documentation": "Applies a fixed RNG seed to a proptest config so that case generation\nis deterministic. Uses `$SEED` if set, otherwise defaults to `0`.\nThis bridges the GPUI `SEED` env var to proptest's RNG seed, so that\na single variable controls both the scheduler seed and case generation.\n\nNote: this function is not intended to be used directly. Rather, it is\npublic so that it can be used from the `property_test` macro.",
      "signature": "pub fn apply_seed_to_proptest_config (mut config : proptest::test_runner::Config,) -> proptest::test_runner::Config",
      "cfg": []
    },
    {
      "id": "gpui::test::observe",
      "name": "observe",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "test",
      "path": "gpui::test",
      "source": "crates/gpui/src/test.rs",
      "summary": "observe returns a stream of the change events from the given `Entity`",
      "documentation": "observe returns a stream of the change events from the given `Entity`",
      "signature": "pub fn observe<T : 'static> (entity : & Entity<T>, cx : & mut TestAppContext) -> Observation<()>",
      "cfg": []
    },
    {
      "id": "gpui::test::run_test",
      "name": "run_test",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "test",
      "path": "gpui::test",
      "source": "crates/gpui/src/test.rs",
      "summary": "Run the given test function with the configured parameters. This is intended for use with the `gpui::test` macro and generally should not be used directly.",
      "documentation": "Run the given test function with the configured parameters.\nThis is intended for use with the `gpui::test` macro\nand generally should not be used directly.",
      "signature": "pub fn run_test (num_iterations : usize, explicit_seeds : & [u64], max_retries : usize, test_fn : & mut (dyn RefUnwindSafe + Fn (TestDispatcher, u64)), on_fail_fn : Option<fn ()>,)",
      "cfg": []
    },
    {
      "id": "gpui::test::run_test_once",
      "name": "run_test_once",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "test",
      "path": "gpui::test",
      "source": "crates/gpui/src/test.rs",
      "summary": "Similar to [`run_test`], but only runs the callback once, allowing [`FnOnce`] callbacks. This is intended for use with the `gpui::property_test` macro and generally should not be used directly.",
      "documentation": "Similar to [`run_test`], but only runs the callback once, allowing\n[`FnOnce`] callbacks. This is intended for use with the\n`gpui::property_test` macro and generally should not be used directly.\n\nDoesn't support many features of [`run_test`], since these are provided by\nproptest.",
      "signature": "pub fn run_test_once<R> (seed : u64, test_fn : Box<dyn UnwindSafe + FnOnce (TestDispatcher) -> R>,) -> R",
      "cfg": []
    },
    {
      "id": "gpui::test::seed_strategy",
      "name": "seed_strategy",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "test",
      "path": "gpui::test",
      "source": "crates/gpui/src/test.rs",
      "summary": "Strategy injected into `#[gpui::property_test]` tests to control the seed given to the scheduler. Doesn't shrink, since all scheduler seeds are equivalent in complexity. If `$SEED` is set, it always uses that value.",
      "documentation": "Strategy injected into `#[gpui::property_test]` tests to control the seed\ngiven to the scheduler. Doesn't shrink, since all scheduler seeds are\nequivalent in complexity. If `$SEED` is set, it always uses that value.\n\nNote: this function is not intended to be used directly. Rather, it is\npublic so that it can be used from the `property_test` macro.",
      "signature": "pub fn seed_strategy () -> impl Strategy<Value = u64>",
      "cfg": []
    },
    {
      "id": "gpui::text_system::Font",
      "name": "Font",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "The configuration details for identifying a specific font.",
      "documentation": "The configuration details for identifying a specific font.",
      "signature": "# [doc = \" The configuration details for identifying a specific font.\"] # [derive (Clone, Debug, Eq, PartialEq, Hash)] pub struct Font { # [doc = \" The font family name.\"] # [doc = \"\"] # [doc = \" The special name \\\".SystemUIFont\\\" is used to identify the system UI font, which varies based on platform.\"] pub family : SharedString, # [doc = \" The font features to use.\"] pub features : FontFeatures, # [doc = \" The fallbacks fonts to use.\"] pub fallbacks : Option<FontFallbacks>, # [doc = \" The font weight.\"] pub weight : FontWeight, # [doc = \" The font style.\"] pub style : FontStyle, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::Font::bold",
      "name": "bold",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Set this Font to be bold",
      "documentation": "Set this Font to be bold",
      "signature": "pub fn bold (mut self) -> Self",
      "cfg": [],
      "target": "Font"
    },
    {
      "id": "gpui::text_system::Font::italic",
      "name": "italic",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Set this Font to be italic",
      "documentation": "Set this Font to be italic",
      "signature": "pub fn italic (mut self) -> Self",
      "cfg": [],
      "target": "Font"
    },
    {
      "id": "gpui::text_system::FontFamilyId",
      "name": "FontFamilyId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "An opaque identifier for a specific font family.",
      "documentation": "An opaque identifier for a specific font family.",
      "signature": "# [doc = \" An opaque identifier for a specific font family.\"] # [derive (Hash, PartialEq, Eq, Clone, Copy, Debug)] pub struct FontFamilyId (pub usize);",
      "cfg": []
    },
    {
      "id": "gpui::text_system::FontId",
      "name": "FontId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "An opaque identifier for a specific font.",
      "documentation": "An opaque identifier for a specific font.",
      "signature": "# [doc = \" An opaque identifier for a specific font.\"] # [derive (Hash, PartialEq, Eq, Clone, Copy, Debug)] # [repr (C)] pub struct FontId (pub usize);",
      "cfg": []
    },
    {
      "id": "gpui::text_system::FontMetrics",
      "name": "FontMetrics",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "A struct for storing font metrics. It is used to define the measurements of a typeface.",
      "documentation": "A struct for storing font metrics.\nIt is used to define the measurements of a typeface.",
      "signature": "# [doc = \" A struct for storing font metrics.\"] # [doc = \" It is used to define the measurements of a typeface.\"] # [derive (Clone, Copy, Debug)] pub struct FontMetrics { # [doc = \" The number of font units that make up the \\\"em square\\\",\"] # [doc = \" a scalable grid for determining the size of a typeface.\"] pub units_per_em : u32, # [doc = \" The vertical distance from the baseline of the font to the top of the glyph covers.\"] pub ascent : f32, # [doc = \" The vertical distance from the baseline of the font to the bottom of the glyph covers.\"] pub descent : f32, # [doc = \" The recommended additional space to add between lines of type.\"] pub line_gap : f32, # [doc = \" The suggested position of the underline.\"] pub underline_position : f32, # [doc = \" The suggested thickness of the underline.\"] pub underline_thickness : f32, # [doc = \" The height of a capital letter measured from the baseline of the font.\"] pub cap_height : f32, # [doc = \" The height of a lowercase x.\"] pub x_height : f32, # [doc = \" The outer limits of the area that the font covers.\"] # [doc = \" Corresponds to the xMin / xMax / yMin / yMax values in the OpenType `head` table\"] pub bounding_box : Bounds<f32>, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::FontMetrics::ascent",
      "name": "ascent",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the vertical distance from the baseline of the font to the top of the glyph covers in pixels.",
      "documentation": "Returns the vertical distance from the baseline of the font to the top of the glyph covers in pixels.",
      "signature": "pub fn ascent (& self, font_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "FontMetrics"
    },
    {
      "id": "gpui::text_system::FontMetrics::bounding_box",
      "name": "bounding_box",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the outer limits of the area that the font covers in pixels.",
      "documentation": "Returns the outer limits of the area that the font covers in pixels.",
      "signature": "pub fn bounding_box (& self, font_size : Pixels) -> Bounds<Pixels>",
      "cfg": [],
      "target": "FontMetrics"
    },
    {
      "id": "gpui::text_system::FontMetrics::cap_height",
      "name": "cap_height",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the height of a capital letter measured from the baseline of the font in pixels.",
      "documentation": "Returns the height of a capital letter measured from the baseline of the font in pixels.",
      "signature": "pub fn cap_height (& self, font_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "FontMetrics"
    },
    {
      "id": "gpui::text_system::FontMetrics::descent",
      "name": "descent",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the vertical distance from the baseline of the font to the bottom of the glyph covers in pixels.",
      "documentation": "Returns the vertical distance from the baseline of the font to the bottom of the glyph covers in pixels.",
      "signature": "pub fn descent (& self, font_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "FontMetrics"
    },
    {
      "id": "gpui::text_system::FontMetrics::line_gap",
      "name": "line_gap",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the recommended additional space to add between lines of type in pixels.",
      "documentation": "Returns the recommended additional space to add between lines of type in pixels.",
      "signature": "pub fn line_gap (& self, font_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "FontMetrics"
    },
    {
      "id": "gpui::text_system::FontMetrics::underline_position",
      "name": "underline_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the suggested position of the underline in pixels.",
      "documentation": "Returns the suggested position of the underline in pixels.",
      "signature": "pub fn underline_position (& self, font_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "FontMetrics"
    },
    {
      "id": "gpui::text_system::FontMetrics::underline_thickness",
      "name": "underline_thickness",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the suggested thickness of the underline in pixels.",
      "documentation": "Returns the suggested thickness of the underline in pixels.",
      "signature": "pub fn underline_thickness (& self, font_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "FontMetrics"
    },
    {
      "id": "gpui::text_system::FontMetrics::x_height",
      "name": "x_height",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the height of a lowercase x in pixels.",
      "documentation": "Returns the height of a lowercase x in pixels.",
      "signature": "pub fn x_height (& self, font_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "FontMetrics"
    },
    {
      "id": "gpui::text_system::FontStyle",
      "name": "FontStyle",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Allows italic or oblique faces to be selected.",
      "documentation": "Allows italic or oblique faces to be selected.",
      "signature": "# [doc = \" Allows italic or oblique faces to be selected.\"] # [derive (Clone, Copy, Eq, PartialEq, Debug, Hash, Default, Serialize, Deserialize, JsonSchema)] pub enum FontStyle { # [doc = \" A face that is neither italic not obliqued.\"] # [default] Normal, # [doc = \" A form that is generally cursive in nature.\"] Italic, # [doc = \" A typically-sloped version of the regular face.\"] Oblique, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::FontWeight",
      "name": "FontWeight",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "The degree of blackness or stroke thickness of a font. This value ranges from 100.0 to 900.0, with 400.0 as normal.",
      "documentation": "The degree of blackness or stroke thickness of a font. This value ranges from 100.0 to 900.0,\nwith 400.0 as normal.",
      "signature": "# [doc = \" The degree of blackness or stroke thickness of a font. This value ranges from 100.0 to 900.0,\"] # [doc = \" with 400.0 as normal.\"] # [derive (Clone, Copy, Debug, PartialEq, PartialOrd, Serialize, Deserialize, Add, Sub, FromStr)] # [serde (transparent)] pub struct FontWeight (pub f32);",
      "cfg": []
    },
    {
      "id": "gpui::text_system::GlyphId",
      "name": "GlyphId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "An identifier for a specific glyph, as returned by [`WindowTextSystem::layout_line`].",
      "documentation": "An identifier for a specific glyph, as returned by [`WindowTextSystem::layout_line`].",
      "signature": "# [doc = \" An identifier for a specific glyph, as returned by [`WindowTextSystem::layout_line`].\"] # [derive (Copy, Clone, Debug, Eq, PartialEq, Hash)] # [repr (C)] pub struct GlyphId (pub u32);",
      "cfg": []
    },
    {
      "id": "gpui::text_system::LineWrapperHandle",
      "name": "LineWrapperHandle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "A handle into the text system, which can be used to compute the wrapped layout of text",
      "documentation": "A handle into the text system, which can be used to compute the wrapped layout of text",
      "signature": "# [doc = \" A handle into the text system, which can be used to compute the wrapped layout of text\"] pub struct LineWrapperHandle { wrapper : Option<LineWrapper>, text_system : Arc<TextSystem>, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::RenderGlyphParams",
      "name": "RenderGlyphParams",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Parameters for rendering a glyph, used as cache keys for raster bounds.",
      "documentation": "Parameters for rendering a glyph, used as cache keys for raster bounds.\n\nThis struct identifies a specific glyph rendering configuration including\nfont, size, subpixel positioning, and scale factor. It's used to look up\ncached raster bounds and sprite atlas entries.",
      "signature": "# [doc = \" Parameters for rendering a glyph, used as cache keys for raster bounds.\"] # [doc = \"\"] # [doc = \" This struct identifies a specific glyph rendering configuration including\"] # [doc = \" font, size, subpixel positioning, and scale factor. It's used to look up\"] # [doc = \" cached raster bounds and sprite atlas entries.\"] # [derive (Clone, Debug, PartialEq)] # [expect (missing_docs)] pub struct RenderGlyphParams { pub font_id : FontId, pub glyph_id : GlyphId, pub font_size : Pixels, pub subpixel_variant : Point<u8>, pub scale_factor : f32, pub is_emoji : bool, pub subpixel_rendering : bool, pub dilation : u8, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::SUBPIXEL_VARIANTS_X",
      "name": "SUBPIXEL_VARIANTS_X",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Number of subpixel glyph variants along the X axis.",
      "documentation": "Number of subpixel glyph variants along the X axis.",
      "signature": "pub const SUBPIXEL_VARIANTS_X: u8",
      "cfg": []
    },
    {
      "id": "gpui::text_system::SUBPIXEL_VARIANTS_Y",
      "name": "SUBPIXEL_VARIANTS_Y",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Number of subpixel glyph variants along the Y axis.",
      "documentation": "Number of subpixel glyph variants along the Y axis.",
      "signature": "pub const SUBPIXEL_VARIANTS_Y: u8",
      "cfg": []
    },
    {
      "id": "gpui::text_system::TextRun",
      "name": "TextRun",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "A styled run of text, for use in [`crate::TextLayout`].",
      "documentation": "A styled run of text, for use in [`crate::TextLayout`].",
      "signature": "# [doc = \" A styled run of text, for use in [`crate::TextLayout`].\"] # [derive (Clone, Debug, PartialEq, Eq, Default)] pub struct TextRun { # [doc = \" A number of utf8 bytes\"] pub len : usize, # [doc = \" The font to use for this run.\"] pub font : Font, # [doc = \" The color\"] pub color : Hsla, # [doc = \" The background color (if any)\"] pub background_color : Option<Hsla>, # [doc = \" A uniform corner radius for each background fragment.\"] pub background_radius : Option<Pixels>, # [doc = \" How far each background fragment reaches past this run's glyphs,\"] # [doc = \" horizontally, on each side. Paint only; the run keeps its advances.\"] pub background_padding : Option<Pixels>, # [doc = \" The underline style (if any)\"] pub underline : Option<UnderlineStyle>, # [doc = \" The strikethrough style (if any)\"] pub strikethrough : Option<StrikethroughStyle>, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::TextSystem",
      "name": "TextSystem",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "The GPUI text rendering sub system.",
      "documentation": "The GPUI text rendering sub system.",
      "signature": "# [doc = \" The GPUI text rendering sub system.\"] pub struct TextSystem { platform_text_system : Arc<dyn PlatformTextSystem>, font_ids_by_font : RwLock<FxHashMap<Font, Result<FontId>>>, font_metrics : RwLock<FxHashMap<FontId, FontMetrics>>, raster_bounds : RwLock<FxHashMap<RenderGlyphParams, Bounds<DevicePixels>>>, wrapper_pool : Mutex<FxHashMap<FontIdWithSize, Vec<LineWrapper>>>, font_runs_pool : Mutex<Vec<Vec<FontRun>>>, fallback_font_stack : SmallVec<[Font; 2]>, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::TextSystem::add_fonts",
      "name": "add_fonts",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Add a font's data to the text system.",
      "documentation": "Add a font's data to the text system.",
      "signature": "pub fn add_fonts (& self, fonts : Vec<Cow<'static, [u8]>>) -> Result<()>",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::advance",
      "name": "advance",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Get the advance width for the given character, in the given font and size.",
      "documentation": "Get the advance width for the given character, in the given font and size.",
      "signature": "pub fn advance (& self, font_id : FontId, font_size : Pixels, ch : char) -> Result<Size<Pixels>>",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::all_font_names",
      "name": "all_font_names",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Get a list of all available font names from the operating system.",
      "documentation": "Get a list of all available font names from the operating system.",
      "signature": "pub fn all_font_names (& self) -> Vec<String>",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::ascent",
      "name": "ascent",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Get the recommended distance from the baseline for the given font",
      "documentation": "Get the recommended distance from the baseline for the given font",
      "signature": "pub fn ascent (& self, font_id : FontId, font_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::baseline_offset",
      "name": "baseline_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Get the recommended baseline offset for the given font and line height.",
      "documentation": "Get the recommended baseline offset for the given font and line height.",
      "signature": "pub fn baseline_offset (& self, font_id : FontId, font_size : Pixels, line_height : Pixels,) -> Pixels",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::bounding_box",
      "name": "bounding_box",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Get the bounding box for the given font and font size. A font's bounding box is the smallest rectangle that could enclose all glyphs in the font. superimposed over one another.",
      "documentation": "Get the bounding box for the given font and font size.\nA font's bounding box is the smallest rectangle that could enclose all glyphs\nin the font. superimposed over one another.",
      "signature": "pub fn bounding_box (& self, font_id : FontId, font_size : Pixels) -> Bounds<Pixels>",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::cap_height",
      "name": "cap_height",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Get the height of a capital letter in the given font and size.",
      "documentation": "Get the height of a capital letter in the given font and size.",
      "signature": "pub fn cap_height (& self, font_id : FontId, font_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::ch_advance",
      "name": "ch_advance",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the advance width of an `ch`.",
      "documentation": "Returns the advance width of an `ch`.\n\nUses the advance width of the `0` character in the given font and size.",
      "signature": "pub fn ch_advance (& self, font_id : FontId, font_size : Pixels) -> Result<Pixels>",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::ch_width",
      "name": "ch_width",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the width of an `ch`.",
      "documentation": "Returns the width of an `ch`.\n\nUses the width of the `0` character in the given font and size.",
      "signature": "pub fn ch_width (& self, font_id : FontId, font_size : Pixels) -> Result<Pixels>",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::descent",
      "name": "descent",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Get the recommended distance below the baseline for the given font, in single spaced text.",
      "documentation": "Get the recommended distance below the baseline for the given font,\nin single spaced text.",
      "signature": "pub fn descent (& self, font_id : FontId, font_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::em_advance",
      "name": "em_advance",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the advance width of an `em`.",
      "documentation": "Returns the advance width of an `em`.\n\nUses the advance width of the `m` character in the given font and size.",
      "signature": "pub fn em_advance (& self, font_id : FontId, font_size : Pixels) -> Result<Pixels>",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::em_width",
      "name": "em_width",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the width of an `em`.",
      "documentation": "Returns the width of an `em`.\n\nUses the width of the `m` character in the given font and size.",
      "signature": "pub fn em_width (& self, font_id : FontId, font_size : Pixels) -> Result<Pixels>",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::get_font_for_id",
      "name": "get_font_for_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Get the Font for the Font Id.",
      "documentation": "Get the Font for the Font Id.",
      "signature": "pub fn get_font_for_id (& self, id : FontId) -> Option<Font>",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::layout_width",
      "name": "layout_width",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the shaped layout width of for the given character, in the given font and size.",
      "documentation": "Returns the shaped layout width of for the given character, in the given font and size.",
      "signature": "pub fn layout_width (& self, font_id : FontId, font_size : Pixels, ch : char) -> Pixels",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::line_wrapper",
      "name": "line_wrapper",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns a handle to a line wrapper, for the given font and font size.",
      "documentation": "Returns a handle to a line wrapper, for the given font and font size.",
      "signature": "pub fn line_wrapper (self : & Arc<Self>, font : Font, font_size : Pixels) -> LineWrapperHandle",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Create a new TextSystem with the given platform text system.",
      "documentation": "Create a new TextSystem with the given platform text system.",
      "signature": "pub fn new (platform_text_system : Arc<dyn PlatformTextSystem>) -> Self",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::resolve_font",
      "name": "resolve_font",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Resolves the specified font, falling back to the default font stack if the font fails to load.",
      "documentation": "Resolves the specified font, falling back to the default font stack if\nthe font fails to load.\n\n# Panics\n\nPanics if the font and none of the fallbacks can be resolved.",
      "signature": "pub fn resolve_font (& self, font : & Font) -> FontId",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::typographic_bounds",
      "name": "typographic_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Get the typographic bounds for the given character, in the given font and size.",
      "documentation": "Get the typographic bounds for the given character, in the given font and size.",
      "signature": "pub fn typographic_bounds (& self, font_id : FontId, font_size : Pixels, character : char,) -> Result<Bounds<Pixels>>",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::units_per_em",
      "name": "units_per_em",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Get the number of font size units per 'em square', Per MDN: \"an abstract square whose height is the intended distance between lines of type in the same type size\"",
      "documentation": "Get the number of font size units per 'em square',\nPer MDN: \"an abstract square whose height is the intended distance between\nlines of type in the same type size\"",
      "signature": "pub fn units_per_em (& self, font_id : FontId) -> u32",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::TextSystem::x_height",
      "name": "x_height",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Get the height of the x character in the given font and size.",
      "documentation": "Get the height of the x character in the given font and size.",
      "signature": "pub fn x_height (& self, font_id : FontId, font_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "TextSystem"
    },
    {
      "id": "gpui::text_system::WindowTextSystem",
      "name": "WindowTextSystem",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "The GPUI text layout subsystem.",
      "documentation": "The GPUI text layout subsystem.",
      "signature": "# [doc = \" The GPUI text layout subsystem.\"] # [derive (Deref)] pub struct WindowTextSystem { line_layout_cache : LineLayoutCache, # [deref] text_system : Arc<TextSystem>, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::WindowTextSystem::em_layout_width",
      "name": "em_layout_width",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the shaped layout width of an `em`.",
      "documentation": "Returns the shaped layout width of an `em`.",
      "signature": "pub fn em_layout_width (& self, font_id : FontId, font_size : Pixels) -> Pixels",
      "cfg": [],
      "target": "WindowTextSystem"
    },
    {
      "id": "gpui::text_system::WindowTextSystem::layout_line",
      "name": "layout_line",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Layout the given line of text, at the given font_size. Subsets of the line can be styled independently with the `runs` parameter. Generally, you should prefer to use [`Self::shape_line`] instead, which can be painted directly.",
      "documentation": "Layout the given line of text, at the given font_size.\nSubsets of the line can be styled independently with the `runs` parameter.\nGenerally, you should prefer to use [`Self::shape_line`] instead, which\ncan be painted directly.",
      "signature": "pub fn layout_line (& self, text : & str, font_size : Pixels, runs : & [TextRun], force_width : Option<Pixels>,) -> Arc<LineLayout>",
      "cfg": [],
      "target": "WindowTextSystem"
    },
    {
      "id": "gpui::text_system::WindowTextSystem::layout_line_by_hash",
      "name": "layout_line_by_hash",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Layout the given line of text using a caller-provided content hash as the cache key.",
      "documentation": "Layout the given line of text using a caller-provided content hash as the cache key.\n\nThis enables cache hits without materializing a contiguous `SharedString` for the text.\nIf the cache misses, `materialize_text` is invoked to produce the `SharedString` for shaping.\n\nContract (caller enforced):\n- Same `text_hash` implies identical text content (collision risk accepted by caller).\n- `text_len` should be the UTF-8 byte length of the text (helps reduce accidental collisions).",
      "signature": "pub fn layout_line_by_hash (& self, text_hash : u64, text_len : usize, font_size : Pixels, runs : & [TextRun], force_width : Option<Pixels>, materialize_text : impl FnOnce () -> SharedString,) -> Arc<LineLayout>",
      "cfg": [],
      "target": "WindowTextSystem"
    },
    {
      "id": "gpui::text_system::WindowTextSystem::layout_width",
      "name": "layout_width",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Returns the shaped layout width of for the given character, in the given font and size.",
      "documentation": "Returns the shaped layout width of for the given character, in the given font and size.",
      "signature": "pub fn layout_width (& self, font_id : FontId, font_size : Pixels, ch : char) -> Pixels",
      "cfg": [],
      "target": "WindowTextSystem"
    },
    {
      "id": "gpui::text_system::WindowTextSystem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Create a new WindowTextSystem with the given TextSystem.",
      "documentation": "Create a new WindowTextSystem with the given TextSystem.",
      "signature": "pub fn new (text_system : Arc<TextSystem>) -> Self",
      "cfg": [],
      "target": "WindowTextSystem"
    },
    {
      "id": "gpui::text_system::WindowTextSystem::shape_line",
      "name": "shape_line",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Shape the given line, at the given font_size, for painting to the screen. Subsets of the line can be styled independently with the `runs` parameter.",
      "documentation": "Shape the given line, at the given font_size, for painting to the screen.\nSubsets of the line can be styled independently with the `runs` parameter.\n\nNote that this method can only shape a single line of text. It will panic\nif the text contains newlines. If you need to shape multiple lines of text,\nuse [`Self::shape_text`] instead.",
      "signature": "pub fn shape_line (& self, text : SharedString, font_size : Pixels, runs : & [TextRun], force_width : Option<Pixels>,) -> ShapedLine",
      "cfg": [],
      "target": "WindowTextSystem"
    },
    {
      "id": "gpui::text_system::WindowTextSystem::shape_line_by_hash",
      "name": "shape_line_by_hash",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Shape the given line using a caller-provided content hash as the cache key.",
      "documentation": "Shape the given line using a caller-provided content hash as the cache key.\n\nThis enables cache hits without materializing a contiguous `SharedString` for the text.\nIf the cache misses, `materialize_text` is invoked to produce the `SharedString` for shaping.\n\nContract (caller enforced):\n- Same `text_hash` implies identical text content (collision risk accepted by caller).\n- `text_len` should be the UTF-8 byte length of the text (helps reduce accidental collisions).\n\nLike [`Self::shape_line`], this must be used only for single-line text (no `\\n`).",
      "signature": "pub fn shape_line_by_hash (& self, text_hash : u64, text_len : usize, font_size : Pixels, runs : & [TextRun], force_width : Option<Pixels>, materialize_text : impl FnOnce () -> SharedString,) -> ShapedLine",
      "cfg": [],
      "target": "WindowTextSystem"
    },
    {
      "id": "gpui::text_system::WindowTextSystem::shape_text",
      "name": "shape_text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Shape a multi line string of text, at the given font_size, for painting to the screen. Subsets of the text can be styled independently with the `runs` parameter. If `wrap_width` is provided, the line breaks will be adjusted to fit within the given width.",
      "documentation": "Shape a multi line string of text, at the given font_size, for painting to the screen.\nSubsets of the text can be styled independently with the `runs` parameter.\nIf `wrap_width` is provided, the line breaks will be adjusted to fit within the given width.",
      "signature": "pub fn shape_text (& self, text : SharedString, font_size : Pixels, runs : & [TextRun], wrap_width : Option<Pixels>, line_clamp : Option<usize>,) -> Result<SmallVec<[WrappedLine; 1]>>",
      "cfg": [],
      "target": "WindowTextSystem"
    },
    {
      "id": "gpui::text_system::WindowTextSystem::try_layout_line_by_hash",
      "name": "try_layout_line_by_hash",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Probe the line layout cache using a caller-provided content hash, without allocating.",
      "documentation": "Probe the line layout cache using a caller-provided content hash, without allocating.\n\nReturns `Some(layout)` if the layout is already cached in either the current frame\nor the previous frame. Returns `None` if it is not cached.\n\nContract (caller enforced):\n- Same `text_hash` implies identical text content (collision risk accepted by caller).\n- `text_len` should be the UTF-8 byte length of the text (helps reduce accidental collisions).",
      "signature": "pub fn try_layout_line_by_hash (& self, text_hash : u64, text_len : usize, font_size : Pixels, runs : & [TextRun], force_width : Option<Pixels>,) -> Option<Arc<LineLayout>>",
      "cfg": [],
      "target": "WindowTextSystem"
    },
    {
      "id": "gpui::text_system::font",
      "name": "font",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Get a [`Font`] for a given name.",
      "documentation": "Get a [`Font`] for a given name.",
      "signature": "pub fn font (family : impl Into<SharedString>) -> Font",
      "cfg": []
    },
    {
      "id": "gpui::text_system::font_fallbacks::FontFallbacks",
      "name": "FontFallbacks",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::font_fallbacks",
      "path": "gpui::text_system::font_fallbacks",
      "source": "crates/gpui/src/text_system/font_fallbacks.rs",
      "summary": "The fallback fonts that can be configured for a given font. Fallback fonts family names are stored here.",
      "documentation": "The fallback fonts that can be configured for a given font.\nFallback fonts family names are stored here.",
      "signature": "# [doc = \" The fallback fonts that can be configured for a given font.\"] # [doc = \" Fallback fonts family names are stored here.\"] # [derive (Default, Clone, Eq, PartialEq, Hash, Debug, Deserialize, Serialize, JsonSchema)] pub struct FontFallbacks (pub Arc<Vec<String>>);",
      "cfg": []
    },
    {
      "id": "gpui::text_system::font_fallbacks::FontFallbacks::fallback_list",
      "name": "fallback_list",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::font_fallbacks",
      "path": "gpui::text_system::font_fallbacks",
      "source": "crates/gpui/src/text_system/font_fallbacks.rs",
      "summary": "Get the fallback fonts family names",
      "documentation": "Get the fallback fonts family names",
      "signature": "pub fn fallback_list (& self) -> & [String]",
      "cfg": [],
      "target": "FontFallbacks"
    },
    {
      "id": "gpui::text_system::font_fallbacks::FontFallbacks::from_fonts",
      "name": "from_fonts",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::font_fallbacks",
      "path": "gpui::text_system::font_fallbacks",
      "source": "crates/gpui/src/text_system/font_fallbacks.rs",
      "summary": "Create a font fallback from a list of strings",
      "documentation": "Create a font fallback from a list of strings",
      "signature": "pub fn from_fonts (fonts : Vec<String>) -> Self",
      "cfg": [],
      "target": "FontFallbacks"
    },
    {
      "id": "gpui::text_system::font_features::FontFeatures",
      "name": "FontFeatures",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::font_features",
      "path": "gpui::text_system::font_features",
      "source": "crates/gpui/src/text_system/font_features.rs",
      "summary": "The OpenType features that can be configured for a given font.",
      "documentation": "The OpenType features that can be configured for a given font.",
      "signature": "# [doc = \" The OpenType features that can be configured for a given font.\"] # [derive (Default, Clone, Eq, PartialEq, Hash)] pub struct FontFeatures (pub Arc<Vec<(String, u32)>>);",
      "cfg": []
    },
    {
      "id": "gpui::text_system::font_features::FontFeatures::disable_ligatures",
      "name": "disable_ligatures",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::font_features",
      "path": "gpui::text_system::font_features",
      "source": "crates/gpui/src/text_system/font_features.rs",
      "summary": "Turns off every ligature feature a shaper applies without being asked.",
      "documentation": "Turns off every ligature feature a shaper applies without being asked.\n\nAll three, because they are on by default and a caller that says\n\"no ligatures\" and still gets `liga` has been told something untrue:\n`liga` is the standard set, `clig` the contextual one, and `calt` the\nalternates most programming faces hang their arrows and arrows-like\nforms on. Discretionary `dlig` is off unless someone asks for it, so\nthere is nothing here to turn off.",
      "signature": "pub fn disable_ligatures () -> Self",
      "cfg": [],
      "target": "FontFeatures"
    },
    {
      "id": "gpui::text_system::font_features::FontFeatures::is_calt_enabled",
      "name": "is_calt_enabled",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::font_features",
      "path": "gpui::text_system::font_features",
      "source": "crates/gpui/src/text_system/font_features.rs",
      "summary": "Returns whether the `calt` feature is enabled.",
      "documentation": "Returns whether the `calt` feature is enabled.\n\nReturns `None` if the feature is not present.",
      "signature": "pub fn is_calt_enabled (& self) -> Option<bool>",
      "cfg": [],
      "target": "FontFeatures"
    },
    {
      "id": "gpui::text_system::font_features::FontFeatures::tag_value_list",
      "name": "tag_value_list",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::font_features",
      "path": "gpui::text_system::font_features",
      "source": "crates/gpui/src/text_system/font_features.rs",
      "summary": "Get the tag name list of the font OpenType features only enabled or disabled features are returned",
      "documentation": "Get the tag name list of the font OpenType features\nonly enabled or disabled features are returned",
      "signature": "pub fn tag_value_list (& self) -> & [(String, u32)]",
      "cfg": [],
      "target": "FontFeatures"
    },
    {
      "id": "gpui::text_system::font_name_with_fallbacks",
      "name": "font_name_with_fallbacks",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Maps well-known virtual font names to their concrete equivalents.",
      "documentation": "Maps well-known virtual font names to their concrete equivalents.",
      "signature": "pub fn font_name_with_fallbacks<'a> (name : & 'a str, system : & 'a str) -> & 'a str",
      "cfg": []
    },
    {
      "id": "gpui::text_system::font_name_with_fallbacks_shared",
      "name": "font_name_with_fallbacks_shared",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "Like [`font_name_with_fallbacks`] but accepts and returns [`SharedString`] references.",
      "documentation": "Like [`font_name_with_fallbacks`] but accepts and returns [`SharedString`] references.",
      "signature": "pub fn font_name_with_fallbacks_shared<'a> (name : & 'a SharedString, system : & 'a SharedString,) -> & 'a SharedString",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line::DecorationRun",
      "name": "DecorationRun",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line",
      "path": "gpui::text_system::line",
      "source": "crates/gpui/src/text_system/line.rs",
      "summary": "Set the text decoration for a run of text.",
      "documentation": "Set the text decoration for a run of text.",
      "signature": "# [doc = \" Set the text decoration for a run of text.\"] # [derive (Debug, Clone)] pub struct DecorationRun { # [doc = \" The length of the run in utf-8 bytes.\"] pub len : u32, # [doc = \" The color for this run\"] pub color : Hsla, # [doc = \" The background color for this run\"] pub background_color : Option<Hsla>, # [doc = \" A uniform corner radius for each background fragment.\"] pub background_radius : Option<Pixels>, # [doc = \" How far each background fragment reaches past this run's glyphs,\"] # [doc = \" horizontally, on each side. Paint only: the run keeps its advance\"] # [doc = \" width, so growing the fill reflows nothing around it.\"] pub background_padding : Option<Pixels>, # [doc = \" The underline style for this run\"] pub underline : Option<UnderlineStyle>, # [doc = \" The strikethrough style for this run\"] pub strikethrough : Option<StrikethroughStyle>, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line::GlyphRasterData",
      "name": "GlyphRasterData",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line",
      "path": "gpui::text_system::line",
      "source": "crates/gpui/src/text_system/line.rs",
      "summary": "Pre-computed glyph data for efficient painting without per-glyph cache lookups.",
      "documentation": "Pre-computed glyph data for efficient painting without per-glyph cache lookups.\n\nThis is produced by `ShapedLine::compute_glyph_raster_data` during prepaint\nand consumed by `ShapedLine::paint_with_raster_data` during paint.",
      "signature": "# [doc = \" Pre-computed glyph data for efficient painting without per-glyph cache lookups.\"] # [doc = \"\"] # [doc = \" This is produced by `ShapedLine::compute_glyph_raster_data` during prepaint\"] # [doc = \" and consumed by `ShapedLine::paint_with_raster_data` during paint.\"] # [derive (Clone, Debug)] pub struct GlyphRasterData { # [doc = \" The raster bounds for each glyph, in paint order.\"] pub bounds : Vec<Bounds<DevicePixels>>, # [doc = \" The render params for each glyph (needed for sprite atlas lookup).\"] pub params : Vec<RenderGlyphParams>, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line::ShapedLine",
      "name": "ShapedLine",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line",
      "path": "gpui::text_system::line",
      "source": "crates/gpui/src/text_system/line.rs",
      "summary": "A line of text that has been shaped and decorated.",
      "documentation": "A line of text that has been shaped and decorated.",
      "signature": "# [doc = \" A line of text that has been shaped and decorated.\"] # [derive (Clone, Default, Debug, Deref, DerefMut)] pub struct ShapedLine { # [deref] # [deref_mut] pub (crate) layout : Arc<LineLayout>, # [doc = \" The text that was shaped for this line.\"] pub text : SharedString, pub (crate) decoration_runs : SmallVec<[DecorationRun; 32]>, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line::ShapedLine::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line",
      "path": "gpui::text_system::line",
      "source": "crates/gpui/src/text_system/line.rs",
      "summary": "The length of the line in utf-8 bytes.",
      "documentation": "The length of the line in utf-8 bytes.",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "ShapedLine"
    },
    {
      "id": "gpui::text_system::line::ShapedLine::paint",
      "name": "paint",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line",
      "path": "gpui::text_system::line",
      "source": "crates/gpui/src/text_system/line.rs",
      "summary": "Paint the line of text to the window.",
      "documentation": "Paint the line of text to the window.",
      "signature": "pub fn paint (& self, origin : Point<Pixels>, line_height : Pixels, align : TextAlign, align_width : Option<Pixels>, window : & mut Window, cx : & mut App,) -> Result<()>",
      "cfg": [],
      "target": "ShapedLine"
    },
    {
      "id": "gpui::text_system::line::ShapedLine::paint_background",
      "name": "paint_background",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line",
      "path": "gpui::text_system::line",
      "source": "crates/gpui/src/text_system/line.rs",
      "summary": "Paint the background of the line to the window.",
      "documentation": "Paint the background of the line to the window.",
      "signature": "pub fn paint_background (& self, origin : Point<Pixels>, line_height : Pixels, align : TextAlign, align_width : Option<Pixels>, window : & mut Window, cx : & mut App,) -> Result<()>",
      "cfg": [],
      "target": "ShapedLine"
    },
    {
      "id": "gpui::text_system::line::ShapedLine::split_at",
      "name": "split_at",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line",
      "path": "gpui::text_system::line",
      "source": "crates/gpui/src/text_system/line.rs",
      "summary": "Split this shaped line at a byte index, returning `(prefix, suffix)`.",
      "documentation": "Split this shaped line at a byte index, returning `(prefix, suffix)`.\n\n- `prefix` contains glyphs for bytes `[0, byte_index)` with original positions.\nIts width equals the x-advance up to the split point.\n- `suffix` contains glyphs for bytes `[byte_index, len)` with positions\nshifted left so the first glyph starts at x=0, and byte indices rebased to 0.\n- Decoration runs are partitioned at the boundary; a run that straddles it is\nsplit into two with adjusted lengths.\n- `font_size`, `ascent`, and `descent` are copied to both halves.",
      "signature": "pub fn split_at (& self, byte_index : usize) -> (ShapedLine, ShapedLine)",
      "cfg": [],
      "target": "ShapedLine"
    },
    {
      "id": "gpui::text_system::line::ShapedLine::width",
      "name": "width",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line",
      "path": "gpui::text_system::line",
      "source": "crates/gpui/src/text_system/line.rs",
      "summary": "The width of the shaped line in pixels.",
      "documentation": "The width of the shaped line in pixels.\n\nThis is the glyph advance width computed by the text shaping system and is useful for\nincrementally advancing a \"pen\" when painting multiple fragments on the same row.",
      "signature": "pub fn width (& self) -> Pixels",
      "cfg": [],
      "target": "ShapedLine"
    },
    {
      "id": "gpui::text_system::line::ShapedLine::with_len",
      "name": "with_len",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line",
      "path": "gpui::text_system::line",
      "source": "crates/gpui/src/text_system/line.rs",
      "summary": "Override the len, useful if you're rendering text a as text b (e.g. rendering invisibles).",
      "documentation": "Override the len, useful if you're rendering text a\nas text b (e.g. rendering invisibles).",
      "signature": "pub fn with_len (mut self, len : usize) -> Self",
      "cfg": [],
      "target": "ShapedLine"
    },
    {
      "id": "gpui::text_system::line::WrappedLine",
      "name": "WrappedLine",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line",
      "path": "gpui::text_system::line",
      "source": "crates/gpui/src/text_system/line.rs",
      "summary": "A line of text that has been shaped, decorated, and wrapped by the text layout system.",
      "documentation": "A line of text that has been shaped, decorated, and wrapped by the text layout system.",
      "signature": "# [doc = \" A line of text that has been shaped, decorated, and wrapped by the text layout system.\"] # [derive (Default, Debug, Deref, DerefMut)] pub struct WrappedLine { # [deref] # [deref_mut] pub (crate) layout : Arc<WrappedLineLayout>, # [doc = \" The text that was shaped for this line.\"] pub text : SharedString, pub (crate) decoration_runs : Vec<DecorationRun>, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line::WrappedLine::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line",
      "path": "gpui::text_system::line",
      "source": "crates/gpui/src/text_system/line.rs",
      "summary": "The length of the underlying, unwrapped layout, in utf-8 bytes.",
      "documentation": "The length of the underlying, unwrapped layout, in utf-8 bytes.",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "WrappedLine"
    },
    {
      "id": "gpui::text_system::line::WrappedLine::paint",
      "name": "paint",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line",
      "path": "gpui::text_system::line",
      "source": "crates/gpui/src/text_system/line.rs",
      "summary": "Paint this line of text to the window.",
      "documentation": "Paint this line of text to the window.",
      "signature": "pub fn paint (& self, origin : Point<Pixels>, line_height : Pixels, align : TextAlign, bounds : Option<Bounds<Pixels>>, window : & mut Window, cx : & mut App,) -> Result<()>",
      "cfg": [],
      "target": "WrappedLine"
    },
    {
      "id": "gpui::text_system::line::WrappedLine::paint_background",
      "name": "paint_background",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line",
      "path": "gpui::text_system::line",
      "source": "crates/gpui/src/text_system/line.rs",
      "summary": "Paint the background of line of text to the window.",
      "documentation": "Paint the background of line of text to the window.",
      "signature": "pub fn paint_background (& self, origin : Point<Pixels>, line_height : Pixels, align : TextAlign, bounds : Option<Bounds<Pixels>>, window : & mut Window, cx : & mut App,) -> Result<()>",
      "cfg": [],
      "target": "WrappedLine"
    },
    {
      "id": "gpui::text_system::line_layout::FontRun",
      "name": "FontRun",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "A run of text with a single font.",
      "documentation": "A run of text with a single font.",
      "signature": "# [doc = \" A run of text with a single font.\"] # [derive (Copy, Clone, Debug, Eq, PartialEq, Hash)] # [expect (missing_docs)] pub struct FontRun { pub len : usize, pub font_id : FontId, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line_layout::LineLayout",
      "name": "LineLayout",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "A laid out and styled line of text",
      "documentation": "A laid out and styled line of text",
      "signature": "# [doc = \" A laid out and styled line of text\"] # [derive (Default, Debug)] pub struct LineLayout { # [doc = \" The font size for this line\"] pub font_size : Pixels, # [doc = \" The width of the line\"] pub width : Pixels, # [doc = \" The ascent of the line\"] pub ascent : Pixels, # [doc = \" The descent of the line\"] pub descent : Pixels, # [doc = \" The shaped runs that make up this line\"] pub runs : Vec<ShapedRun>, # [doc = \" The length of the line in utf-8 bytes\"] pub len : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line_layout::LineLayout::closest_index_for_x",
      "name": "closest_index_for_x",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "closest_index_for_x returns the character boundary closest to the given x coordinate (e.g. to handle aligning up/down arrow keys)",
      "documentation": "closest_index_for_x returns the character boundary closest to the given x coordinate\n(e.g. to handle aligning up/down arrow keys)",
      "signature": "pub fn closest_index_for_x (& self, x : Pixels) -> usize",
      "cfg": [],
      "target": "LineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::LineLayout::font_id_for_index",
      "name": "font_id_for_index",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The corresponding Font at the given index",
      "documentation": "The corresponding Font at the given index",
      "signature": "pub fn font_id_for_index (& self, index : usize) -> Option<FontId>",
      "cfg": [],
      "target": "LineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::LineLayout::index_for_x",
      "name": "index_for_x",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The index for the character at the given x coordinate",
      "documentation": "The index for the character at the given x coordinate",
      "signature": "pub fn index_for_x (& self, x : Pixels) -> Option<usize>",
      "cfg": [],
      "target": "LineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::LineLayout::x_for_index",
      "name": "x_for_index",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The x position of the character at the given index",
      "documentation": "The x position of the character at the given index",
      "signature": "pub fn x_for_index (& self, index : usize) -> Pixels",
      "cfg": [],
      "target": "LineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::LineLayoutCache::finish_frame",
      "name": "finish_frame",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn finish_frame (& self)",
      "cfg": [],
      "target": "LineLayoutCache"
    },
    {
      "id": "gpui::text_system::line_layout::LineLayoutCache::layout_index",
      "name": "layout_index",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn layout_index (& self) -> LineLayoutIndex",
      "cfg": [],
      "target": "LineLayoutCache"
    },
    {
      "id": "gpui::text_system::line_layout::LineLayoutCache::layout_line",
      "name": "layout_line",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn layout_line<Text> (& self, text : Text, font_size : Pixels, runs : & [FontRun], force_width : Option<Pixels>,) -> Arc<LineLayout> where Text : AsRef<str>, SharedString : From<Text>,",
      "cfg": [],
      "target": "LineLayoutCache"
    },
    {
      "id": "gpui::text_system::line_layout::LineLayoutCache::layout_line_by_hash",
      "name": "layout_line_by_hash",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "Layout a line of text using a caller-provided content hash as the cache key.",
      "documentation": "Layout a line of text using a caller-provided content hash as the cache key.\n\nThis enables cache hits without materializing a contiguous `SharedString` for `text`.\nIf the cache misses, `materialize_text` is invoked to produce the `SharedString` for shaping.\n\nContract (caller enforced):\n- Same `text_hash` implies identical text content (collision risk accepted by caller).\n- `text_len` should be the UTF-8 byte length of the text (helps reduce accidental collisions).",
      "signature": "pub fn layout_line_by_hash (& self, text_hash : u64, text_len : usize, font_size : Pixels, runs : & [FontRun], force_width : Option<Pixels>, materialize_text : impl FnOnce () -> SharedString,) -> Arc<LineLayout>",
      "cfg": [],
      "target": "LineLayoutCache"
    },
    {
      "id": "gpui::text_system::line_layout::LineLayoutCache::layout_wrapped_line",
      "name": "layout_wrapped_line",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn layout_wrapped_line<Text> (& self, text : Text, font_size : Pixels, runs : & [FontRun], wrap_width : Option<Pixels>, max_lines : Option<usize>,) -> Arc<WrappedLineLayout> where Text : AsRef<str>, SharedString : From<Text>,",
      "cfg": [],
      "target": "LineLayoutCache"
    },
    {
      "id": "gpui::text_system::line_layout::LineLayoutCache::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (platform_text_system : Arc<dyn PlatformTextSystem>) -> Self",
      "cfg": [],
      "target": "LineLayoutCache"
    },
    {
      "id": "gpui::text_system::line_layout::LineLayoutCache::reuse_layouts",
      "name": "reuse_layouts",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn reuse_layouts (& self, range : Range<LineLayoutIndex>)",
      "cfg": [],
      "target": "LineLayoutCache"
    },
    {
      "id": "gpui::text_system::line_layout::LineLayoutCache::truncate_layouts",
      "name": "truncate_layouts",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn truncate_layouts (& self, index : LineLayoutIndex)",
      "cfg": [],
      "target": "LineLayoutCache"
    },
    {
      "id": "gpui::text_system::line_layout::LineLayoutCache::try_layout_line_by_hash",
      "name": "try_layout_line_by_hash",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "Try to retrieve a previously-shaped line layout using a caller-provided content hash.",
      "documentation": "Try to retrieve a previously-shaped line layout using a caller-provided content hash.\n\nThis is a *non-allocating* cache probe: it does not materialize any text. If the layout\nis not already cached in either the current frame or previous frame, returns `None`.\n\nContract (caller enforced):\n- Same `text_hash` implies identical text content (collision risk accepted by caller).\n- `text_len` should be the UTF-8 byte length of the text (helps reduce accidental collisions).",
      "signature": "pub fn try_layout_line_by_hash (& self, text_hash : u64, text_len : usize, font_size : Pixels, runs : & [FontRun], force_width : Option<Pixels>,) -> Option<Arc<LineLayout>>",
      "cfg": [],
      "target": "LineLayoutCache"
    },
    {
      "id": "gpui::text_system::line_layout::ShapedGlyph",
      "name": "ShapedGlyph",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "A single glyph, ready to paint.",
      "documentation": "A single glyph, ready to paint.",
      "signature": "# [doc = \" A single glyph, ready to paint.\"] # [derive (Clone, Debug)] pub struct ShapedGlyph { # [doc = \" The ID for this glyph, as determined by the text system.\"] pub id : GlyphId, # [doc = \" The position of this glyph in its containing line.\"] pub position : Point<Pixels>, # [doc = \" The index of this glyph in the original text.\"] pub index : usize, # [doc = \" Whether this glyph is an emoji\"] pub is_emoji : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line_layout::ShapedRun",
      "name": "ShapedRun",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "A run of text that has been shaped .",
      "documentation": "A run of text that has been shaped .",
      "signature": "# [doc = \" A run of text that has been shaped .\"] # [derive (Debug, Clone)] pub struct ShapedRun { # [doc = \" The font id for this run\"] pub font_id : FontId, # [doc = \" The glyphs that make up this run\"] pub glyphs : Vec<ShapedGlyph>, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line_layout::WrapBoundary",
      "name": "WrapBoundary",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "A boundary at which a line was wrapped",
      "documentation": "A boundary at which a line was wrapped",
      "signature": "# [doc = \" A boundary at which a line was wrapped\"] # [derive (Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct WrapBoundary { # [doc = \" The index in the run just before the line was wrapped\"] pub run_ix : usize, # [doc = \" The index of the glyph just before the line was wrapped\"] pub glyph_ix : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout",
      "name": "WrappedLineLayout",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "A line of text that has been wrapped to fit a given width",
      "documentation": "A line of text that has been wrapped to fit a given width",
      "signature": "# [doc = \" A line of text that has been wrapped to fit a given width\"] # [derive (Default, Debug)] pub struct WrappedLineLayout { # [doc = \" The line layout, pre-wrapping.\"] pub unwrapped_layout : Arc<LineLayout>, # [doc = \" The boundaries at which the line was wrapped\"] pub wrap_boundaries : SmallVec<[WrapBoundary; 1]>, # [doc = \" The width of the line, if it was wrapped\"] pub wrap_width : Option<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::ascent",
      "name": "ascent",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The ascent of a line in this layout",
      "documentation": "The ascent of a line in this layout",
      "signature": "pub fn ascent (& self) -> Pixels",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::bounds_for_range",
      "name": "bounds_for_range",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "Returns the painted rectangles occupied by a UTF-8 byte range.",
      "documentation": "Returns the painted rectangles occupied by a UTF-8 byte range.\n\nRectangles follow visual glyph order, so a logical range crossing a\nbidirectional run may produce more than one rectangle on a row. The\ncaller is responsible for snapping the range to grapheme boundaries.",
      "signature": "pub fn bounds_for_range (& self, range : Range<usize>, origin : Point<Pixels>, line_height : Pixels, align : TextAlign, align_width : Pixels,) -> Vec<Bounds<Pixels>>",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::closest_index_for_position",
      "name": "closest_index_for_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The closest index to a given position in this layout for the given line height.",
      "documentation": "The closest index to a given position in this layout for the given line height.\n\nClosest means the character boundary closest to the given position.\n\nSee also [`LineLayout::closest_index_for_x`].",
      "signature": "pub fn closest_index_for_position (& self, position : Point<Pixels>, line_height : Pixels,) -> Result<usize, usize>",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::closest_index_for_position_aligned",
      "name": "closest_index_for_position_aligned",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The closest index to a painted position when visual rows use an alignment.",
      "documentation": "The closest index to a painted position when visual rows use an\nalignment.",
      "signature": "pub fn closest_index_for_position_aligned (& self, position : Point<Pixels>, line_height : Pixels, align : TextAlign, align_width : Pixels,) -> Result<usize, usize>",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::descent",
      "name": "descent",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The descent of a line in this layout",
      "documentation": "The descent of a line in this layout",
      "signature": "pub fn descent (& self) -> Pixels",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::font_size",
      "name": "font_size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The font size of this layout",
      "documentation": "The font size of this layout",
      "signature": "pub fn font_size (& self) -> Pixels",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::index_for_position",
      "name": "index_for_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The index corresponding to a given position in this layout for the given line height.",
      "documentation": "The index corresponding to a given position in this layout for the given line height.\n\nSee also [`Self::closest_index_for_position`].",
      "signature": "pub fn index_for_position (& self, position : Point<Pixels>, line_height : Pixels,) -> Result<usize, usize>",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::index_for_position_aligned",
      "name": "index_for_position_aligned",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The index at a painted position when visual rows use an alignment.",
      "documentation": "The index at a painted position when visual rows use an alignment.\n\n`align_width` must be the same width passed while painting. This keeps\neditable hit testing on centered and right-aligned text in the same\ngeometry authority as the glyphs rather than making an editor reverse\nthe paint offset itself.",
      "signature": "pub fn index_for_position_aligned (& self, position : Point<Pixels>, line_height : Pixels, align : TextAlign, align_width : Pixels,) -> Result<usize, usize>",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The length of the underlying text, in utf8 bytes.",
      "documentation": "The length of the underlying text, in utf8 bytes.",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::position_for_index",
      "name": "position_for_index",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "Returns the pixel position for the given byte index.",
      "documentation": "Returns the pixel position for the given byte index.",
      "signature": "pub fn position_for_index (& self, index : usize, line_height : Pixels) -> Option<Point<Pixels>>",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::position_for_index_aligned",
      "name": "position_for_index_aligned",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "Returns the painted pixel position for a byte index when visual rows use an alignment.",
      "documentation": "Returns the painted pixel position for a byte index when visual rows\nuse an alignment.\n\nThe returned x coordinate includes the alignment offset inside\n`align_width`; y remains relative to the line origin.",
      "signature": "pub fn position_for_index_aligned (& self, index : usize, line_height : Pixels, align : TextAlign, align_width : Pixels,) -> Option<Point<Pixels>>",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::runs",
      "name": "runs",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The runs in this layout, sans wrapping",
      "documentation": "The runs in this layout, sans wrapping",
      "signature": "pub fn runs (& self) -> & [ShapedRun]",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::size",
      "name": "size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The size of the whole wrapped text, for the given line_height. can span multiple lines if there are multiple wrap boundaries.",
      "documentation": "The size of the whole wrapped text, for the given line_height.\ncan span multiple lines if there are multiple wrap boundaries.",
      "signature": "pub fn size (& self, line_height : Pixels) -> Size<Pixels>",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::width",
      "name": "width",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The width of this line, in pixels, whether or not it was wrapped.",
      "documentation": "The width of this line, in pixels, whether or not it was wrapped.",
      "signature": "pub fn width (& self) -> Pixels",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_layout::WrappedLineLayout::wrap_boundaries",
      "name": "wrap_boundaries",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_layout",
      "path": "gpui::text_system::line_layout",
      "source": "crates/gpui/src/text_system/line_layout.rs",
      "summary": "The wrap boundaries in this layout",
      "documentation": "The wrap boundaries in this layout",
      "signature": "pub fn wrap_boundaries (& self) -> & [WrapBoundary]",
      "cfg": [],
      "target": "WrappedLineLayout"
    },
    {
      "id": "gpui::text_system::line_wrapper::Boundary",
      "name": "Boundary",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_wrapper",
      "path": "gpui::text_system::line_wrapper",
      "source": "crates/gpui/src/text_system/line_wrapper.rs",
      "summary": "A boundary between two lines of text.",
      "documentation": "A boundary between two lines of text.",
      "signature": "# [doc = \" A boundary between two lines of text.\"] # [derive (Copy, Clone, Debug, PartialEq, Eq)] pub struct Boundary { # [doc = \" The index of the last character in a line\"] pub ix : usize, # [doc = \" The indent of the next line.\"] pub next_indent : u32, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line_wrapper::LineFragment",
      "name": "LineFragment",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_wrapper",
      "path": "gpui::text_system::line_wrapper",
      "source": "crates/gpui/src/text_system/line_wrapper.rs",
      "summary": "A fragment of a line that can be wrapped.",
      "documentation": "A fragment of a line that can be wrapped.",
      "signature": "# [doc = \" A fragment of a line that can be wrapped.\"] pub enum LineFragment<'a> { # [doc = \" A text fragment consisting of characters.\"] Text { # [doc = \" The text content of the fragment.\"] text : & 'a str, }, # [doc = \" A non-text element with a fixed width.\"] Element { # [doc = \" The width of the element in pixels.\"] width : Pixels, # [doc = \" The UTF-8 encoded length of the element.\"] len_utf8 : usize, }, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line_wrapper::LineFragment::element",
      "name": "element",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_wrapper",
      "path": "gpui::text_system::line_wrapper",
      "source": "crates/gpui/src/text_system/line_wrapper.rs",
      "summary": "Creates a new non-text element with the given width and UTF-8 encoded length.",
      "documentation": "Creates a new non-text element with the given width and UTF-8 encoded length.",
      "signature": "pub fn element (width : Pixels, len_utf8 : usize) -> Self",
      "cfg": [],
      "target": "LineFragment<'a>"
    },
    {
      "id": "gpui::text_system::line_wrapper::LineFragment::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_wrapper",
      "path": "gpui::text_system::line_wrapper",
      "source": "crates/gpui/src/text_system/line_wrapper.rs",
      "summary": "Creates a new text fragment from the given text.",
      "documentation": "Creates a new text fragment from the given text.",
      "signature": "pub fn text (text : & 'a str) -> Self",
      "cfg": [],
      "target": "LineFragment<'a>"
    },
    {
      "id": "gpui::text_system::line_wrapper::LineWrapper",
      "name": "LineWrapper",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_wrapper",
      "path": "gpui::text_system::line_wrapper",
      "source": "crates/gpui/src/text_system/line_wrapper.rs",
      "summary": "The GPUI line wrapper, used to wrap lines of text to a given width.",
      "documentation": "The GPUI line wrapper, used to wrap lines of text to a given width.",
      "signature": "# [doc = \" The GPUI line wrapper, used to wrap lines of text to a given width.\"] pub struct LineWrapper { text_system : Arc<TextSystem>, pub (crate) font_id : FontId, pub (crate) font_size : Pixels, cached_ascii_char_widths : [Option<Pixels>; 128], cached_other_char_widths : HashMap<char, Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line_wrapper::LineWrapper::should_truncate_line",
      "name": "should_truncate_line",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_wrapper",
      "path": "gpui::text_system::line_wrapper",
      "source": "crates/gpui/src/text_system/line_wrapper.rs",
      "summary": "Determines if a line should be truncated based on its width.",
      "documentation": "Determines if a line should be truncated based on its width.\n\nReturns the truncation index in `line`.",
      "signature": "pub fn should_truncate_line (& mut self, line : & str, truncate_width : Pixels, truncation_affix : & str, truncate_from : TruncateFrom,) -> Option<usize>",
      "cfg": [],
      "target": "LineWrapper"
    },
    {
      "id": "gpui::text_system::line_wrapper::LineWrapper::truncate_line",
      "name": "truncate_line",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_wrapper",
      "path": "gpui::text_system::line_wrapper",
      "source": "crates/gpui/src/text_system/line_wrapper.rs",
      "summary": "Truncate a line of text to the given width with this wrapper's font and font size.",
      "documentation": "Truncate a line of text to the given width with this wrapper's font and font size.",
      "signature": "pub fn truncate_line<'a> (& mut self, line : SharedString, truncate_width : Pixels, truncation_affix : & str, runs : & 'a [TextRun], truncate_from : TruncateFrom,) -> (SharedString, Cow<'a, [TextRun]>)",
      "cfg": [],
      "target": "LineWrapper"
    },
    {
      "id": "gpui::text_system::line_wrapper::LineWrapper::truncate_wrapped_line",
      "name": "truncate_wrapped_line",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_wrapper",
      "path": "gpui::text_system::line_wrapper",
      "source": "crates/gpui/src/text_system/line_wrapper.rs",
      "summary": "Truncate text to fit within a given number of wrapped lines.",
      "documentation": "Truncate text to fit within a given number of wrapped lines.\n\nUnlike `truncate_line` which treats the text as a flat width budget\n(`width * max_lines`), this method uses `wrap_line`'s Unicode boundaries\nand continuation indent, then fits the affix on the last allowed line.\n\nFor `max_lines == 1`, this delegates to `truncate_line`.",
      "signature": "pub fn truncate_wrapped_line<'a> (& mut self, text : SharedString, wrap_width : Pixels, max_lines : usize, truncation_affix : & str, runs : & 'a [TextRun], truncate_from : TruncateFrom,) -> (SharedString, Cow<'a, [TextRun]>)",
      "cfg": [],
      "target": "LineWrapper"
    },
    {
      "id": "gpui::text_system::line_wrapper::LineWrapper::wrap_line",
      "name": "wrap_line",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_wrapper",
      "path": "gpui::text_system::line_wrapper",
      "source": "crates/gpui/src/text_system/line_wrapper.rs",
      "summary": "Wrap a line of text to the given width with this wrapper's font and font size. UAX #14 supplies break opportunities across fragment boundaries. Inline elements behave as object replacement characters, but returned indices retain their caller-supplied UTF-8 lengths. When no opportunity fits, emergency wrapping still breaks before the overflowing character/item.",
      "documentation": "Wrap a line of text to the given width with this wrapper's font and font size.\nUAX #14 supplies break opportunities across fragment boundaries. Inline\nelements behave as object replacement characters, but returned indices\nretain their caller-supplied UTF-8 lengths. When no opportunity fits,\nemergency wrapping still breaks before the overflowing character/item.",
      "signature": "pub fn wrap_line<'a> (& 'a mut self, fragments : & 'a [LineFragment], wrap_width : Pixels,) -> impl Iterator<Item = Boundary> + 'a",
      "cfg": [],
      "target": "LineWrapper"
    },
    {
      "id": "gpui::text_system::line_wrapper::TruncateFrom",
      "name": "TruncateFrom",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_wrapper",
      "path": "gpui::text_system::line_wrapper",
      "source": "crates/gpui/src/text_system/line_wrapper.rs",
      "summary": "Determines whether to truncate text from the start or end.",
      "documentation": "Determines whether to truncate text from the start or end.",
      "signature": "# [doc = \" Determines whether to truncate text from the start or end.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum TruncateFrom { # [doc = \" Truncate text from the start.\"] Start, # [doc = \" Truncate text from the end.\"] End, # [doc = \" Truncate text from the middle, preserving the start and end.\"] Middle, }",
      "cfg": []
    },
    {
      "id": "gpui::text_system::line_wrapper::WrapBoundaryCandidate::len_utf8",
      "name": "len_utf8",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system::line_wrapper",
      "path": "gpui::text_system::line_wrapper",
      "source": "crates/gpui/src/text_system/line_wrapper.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn len_utf8 (& self) -> usize",
      "cfg": [],
      "target": "WrapBoundaryCandidate"
    },
    {
      "id": "gpui::text_system::reexport-1",
      "name": "font_fallbacks :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use font_fallbacks::*;",
      "cfg": []
    },
    {
      "id": "gpui::text_system::reexport-2",
      "name": "font_features :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use font_features::*;",
      "cfg": []
    },
    {
      "id": "gpui::text_system::reexport-3",
      "name": "line :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use line::*;",
      "cfg": []
    },
    {
      "id": "gpui::text_system::reexport-4",
      "name": "line_layout :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use line_layout::*;",
      "cfg": []
    },
    {
      "id": "gpui::text_system::reexport-5",
      "name": "line_wrapper :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "text_system",
      "path": "gpui::text_system",
      "source": "crates/gpui/src/text_system.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use line_wrapper::*;",
      "cfg": []
    },
    {
      "id": "gpui::util::FluentBuilder",
      "name": "FluentBuilder",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "util",
      "path": "gpui::util",
      "source": "crates/gpui/src/util.rs",
      "summary": "A helper trait for building complex objects with imperative conditionals in a fluent style.",
      "documentation": "A helper trait for building complex objects with imperative conditionals in a fluent style.",
      "signature": "# [doc = \" A helper trait for building complex objects with imperative conditionals in a fluent style.\"] pub trait FluentBuilder { # [doc = \" Imperatively modify self with the given closure.\"] fn map<U> (self, f : impl FnOnce (Self) -> U) -> U where Self : Sized, { f (self) } # [doc = \" Conditionally modify self with the given closure.\"] fn when (self, condition : bool, then : impl FnOnce (Self) -> Self) -> Self where Self : Sized, { self . map (| this | if condition { then (this) } else { this }) } # [doc = \" Conditionally modify self with the given closure.\"] fn when_else (self, condition : bool, then : impl FnOnce (Self) -> Self, else_fn : impl FnOnce (Self) -> Self,) -> Self where Self : Sized, { self . map (| this | if condition { then (this) } else { else_fn (this) }) } # [doc = \" Conditionally unwrap and modify self with the given closure, if the given option is Some.\"] fn when_some<T> (self, option : Option<T>, then : impl FnOnce (Self, T) -> Self) -> Self where Self : Sized, { self . map (| this | { if let Some (value) = option { then (this, value) } else { this } }) } # [doc = \" Conditionally unwrap and modify self with the given closure, if the given option is None.\"] fn when_none<T> (self, option : & Option<T>, then : impl FnOnce (Self) -> Self) -> Self where Self : Sized, { self . map (| this | if option . is_some () { this } else { then (this) }) } }",
      "cfg": []
    },
    {
      "id": "gpui::util::FutureExt",
      "name": "FutureExt",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "util",
      "path": "gpui::util",
      "source": "crates/gpui/src/util.rs",
      "summary": "Extensions for Future types that provide additional combinators and utilities.",
      "documentation": "Extensions for Future types that provide additional combinators and utilities.",
      "signature": "# [doc = \" Extensions for Future types that provide additional combinators and utilities.\"] pub trait FutureExt { # [doc = \" Requires a Future to complete before the specified duration has elapsed.\"] # [doc = \" Similar to tokio::timeout.\"] fn with_timeout (self, timeout : Duration, executor : & BackgroundExecutor) -> WithTimeout<Self> where Self : Sized; }",
      "cfg": []
    },
    {
      "id": "gpui::util::Timeout",
      "name": "Timeout",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "util",
      "path": "gpui::util",
      "source": "crates/gpui/src/util.rs",
      "summary": "Error returned by with_timeout when the timeout duration elapsed before the future resolved",
      "documentation": "Error returned by with_timeout when the timeout duration elapsed before the future resolved",
      "signature": "# [derive (Debug, thiserror::Error)] # [error (\"Timed out before future resolved\")] # [doc = \" Error returned by with_timeout when the timeout duration elapsed before the future resolved\"] pub struct Timeout;",
      "cfg": []
    },
    {
      "id": "gpui::util::WithTimeout",
      "name": "WithTimeout",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "util",
      "path": "gpui::util",
      "source": "crates/gpui/src/util.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [pin_project::pin_project] pub struct WithTimeout<T> { # [pin] future : T, # [pin] timer : Task<()>, }",
      "cfg": []
    },
    {
      "id": "gpui::view::AnyView",
      "name": "AnyView",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "view",
      "path": "gpui::view",
      "source": "crates/gpui/src/view.rs",
      "summary": "A dynamically-typed view handle that can be downcast to a specific `Entity<V>`.",
      "documentation": "A dynamically-typed view handle that can be downcast to a specific `Entity<V>`.\n\nThis is the type-erased counterpart to [`ViewElement`]: it holds an entity plus\na function pointer to its render, and is itself a [`View`], so embedding it as an\nelement goes through the same [`ViewElement`] machinery as any other view.",
      "signature": "# [doc = \" A dynamically-typed view handle that can be downcast to a specific `Entity<V>`.\"] # [doc = \"\"] # [doc = \" This is the type-erased counterpart to [`ViewElement`]: it holds an entity plus\"] # [doc = \" a function pointer to its render, and is itself a [`View`], so embedding it as an\"] # [doc = \" element goes through the same [`ViewElement`] machinery as any other view.\"] # [derive (Clone, Debug)] pub struct AnyView { entity : AnyEntity, render : fn (& AnyView, & mut Window, & mut App) -> AnyElement, }",
      "cfg": []
    },
    {
      "id": "gpui::view::AnyView::cached",
      "name": "cached",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "view",
      "path": "gpui::view",
      "source": "crates/gpui/src/view.rs",
      "summary": "Embed this view as a cached [`ViewElement`] laid out at `style`.",
      "documentation": "Embed this view as a cached [`ViewElement`] laid out at `style`.\n\nThe rendered subtree is recycled from the previous frame unless\n[Context::notify] was called on the backing entity since it was rendered\n(or [Window::refresh] is called, which ignores caching).",
      "signature": "pub fn cached (self, style : StyleRefinement) -> ViewElement<AnyView>",
      "cfg": [],
      "target": "AnyView"
    },
    {
      "id": "gpui::view::AnyView::downcast",
      "name": "downcast",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "view",
      "path": "gpui::view",
      "source": "crates/gpui/src/view.rs",
      "summary": "Convert this to a [Entity] of a specific type. If this handle does not contain a view of the specified type, returns itself in an `Err` variant.",
      "documentation": "Convert this to a [Entity] of a specific type.\nIf this handle does not contain a view of the specified type, returns itself in an `Err` variant.",
      "signature": "pub fn downcast<T : 'static> (self) -> Result<Entity<T>, Self>",
      "cfg": [],
      "target": "AnyView"
    },
    {
      "id": "gpui::view::AnyView::downgrade",
      "name": "downgrade",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "view",
      "path": "gpui::view",
      "source": "crates/gpui/src/view.rs",
      "summary": "Convert this to a weak handle.",
      "documentation": "Convert this to a weak handle.",
      "signature": "pub fn downgrade (& self) -> AnyWeakView",
      "cfg": [],
      "target": "AnyView"
    },
    {
      "id": "gpui::view::AnyView::entity_id",
      "name": "entity_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "view",
      "path": "gpui::view",
      "source": "crates/gpui/src/view.rs",
      "summary": "The [`EntityId`] of this view.",
      "documentation": "The [`EntityId`] of this view.",
      "signature": "pub fn entity_id (& self) -> EntityId",
      "cfg": [],
      "target": "AnyView"
    },
    {
      "id": "gpui::view::AnyView::entity_type",
      "name": "entity_type",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "view",
      "path": "gpui::view",
      "source": "crates/gpui/src/view.rs",
      "summary": "Gets the [TypeId] of the underlying view.",
      "documentation": "Gets the [TypeId] of the underlying view.",
      "signature": "pub fn entity_type (& self) -> TypeId",
      "cfg": [],
      "target": "AnyView"
    },
    {
      "id": "gpui::view::AnyWeakView",
      "name": "AnyWeakView",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "view",
      "path": "gpui::view",
      "source": "crates/gpui/src/view.rs",
      "summary": "A weak, dynamically-typed view handle.",
      "documentation": "A weak, dynamically-typed view handle.",
      "signature": "# [doc = \" A weak, dynamically-typed view handle.\"] pub struct AnyWeakView { entity : AnyWeakEntity, render : fn (& AnyView, & mut Window, & mut App) -> AnyElement, }",
      "cfg": []
    },
    {
      "id": "gpui::view::AnyWeakView::upgrade",
      "name": "upgrade",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "view",
      "path": "gpui::view",
      "source": "crates/gpui/src/view.rs",
      "summary": "Upgrade to a strong `AnyView` handle, if the view is still alive.",
      "documentation": "Upgrade to a strong `AnyView` handle, if the view is still alive.",
      "signature": "pub fn upgrade (& self) -> Option<AnyView>",
      "cfg": [],
      "target": "AnyWeakView"
    },
    {
      "id": "gpui::view::EmptyView",
      "name": "EmptyView",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "view",
      "path": "gpui::view",
      "source": "crates/gpui/src/view.rs",
      "summary": "A view that renders nothing",
      "documentation": "A view that renders nothing",
      "signature": "# [doc = \" A view that renders nothing\"] pub struct EmptyView;",
      "cfg": []
    },
    {
      "id": "gpui::view::Entity::cached",
      "name": "cached",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "view",
      "path": "gpui::view",
      "source": "crates/gpui/src/view.rs",
      "summary": "Embed this entity as a cached [`ViewElement`] laid out at `style`.",
      "documentation": "Embed this entity as a cached [`ViewElement`] laid out at `style`.\n\nThe rendered subtree is reused until the entity is notified (or the\ncached bounds / text style change). Caching requires a definite size:\na cached view is laid out from `style` and is *not* measured from its\ncontents. Use [`ViewElement::new`] (or `.child(entity)`) for the\nuncached case.",
      "signature": "pub fn cached (self, style : StyleRefinement) -> ViewElement<Entity<T>>",
      "cfg": [],
      "target": "Entity<T>"
    },
    {
      "id": "gpui::view::View",
      "name": "View",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "view",
      "path": "gpui::view",
      "source": "crates/gpui/src/view.rs",
      "summary": "A renderable that participates in GPUI's reactive graph — the unifying model behind [`Render`] and [`RenderOnce`].",
      "documentation": "A renderable that participates in GPUI's reactive graph — the unifying model\nbehind [`Render`] and [`RenderOnce`].\n\nWhen `entity_id()` returns `Some`, that id becomes the view's identity: it gets\na unique element-id space (so internal `use_state` / `.id(..)` never collide\nacross siblings) and `cx.notify()` on that entity re-renders only this view's\nsubtree. `None` behaves like a stateless component.\n\nYou rarely implement `View` directly. `Entity<T: Render>` and any `T: RenderOnce`\nget a blanket impl below; implement it by hand only when a component needs both\nparent-supplied props *and* a backing entity for identity.",
      "signature": "# [doc = \" A renderable that participates in GPUI's reactive graph — the unifying model\"] # [doc = \" behind [`Render`] and [`RenderOnce`].\"] # [doc = \"\"] # [doc = \" When `entity_id()` returns `Some`, that id becomes the view's identity: it gets\"] # [doc = \" a unique element-id space (so internal `use_state` / `.id(..)` never collide\"] # [doc = \" across siblings) and `cx.notify()` on that entity re-renders only this view's\"] # [doc = \" subtree. `None` behaves like a stateless component.\"] # [doc = \"\"] # [doc = \" You rarely implement `View` directly. `Entity<T: Render>` and any `T: RenderOnce`\"] # [doc = \" get a blanket impl below; implement it by hand only when a component needs both\"] # [doc = \" parent-supplied props *and* a backing entity for identity.\"] pub trait View : 'static + Sized { # [doc = \" This view's identity, if it has one. A view typically holds the backing\"] # [doc = \" entity as a field and returns its [`EntityId`] here.\"] # [doc = \"\"] # [doc = \" The id becomes this view's [`ElementId`], so two views keyed on the same\"] # [doc = \" entity must not be rendered at the same position in the element tree\"] # [doc = \" (e.g. as siblings under the same parent): their internal element state\"] # [doc = \" (`use_state`, scroll offsets, etc.) would silently collide. Nesting is\"] # [doc = \" fine — the id is scoped by the parent path.\"] fn entity_id (& self) -> Option<EntityId>; # [doc = \" Render this view into an element tree, consuming `self`.\"] fn render (self, window : & mut Window, cx : & mut App) -> impl IntoElement; }",
      "cfg": []
    },
    {
      "id": "gpui::view::ViewElement",
      "name": "ViewElement",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "view",
      "path": "gpui::view",
      "source": "crates/gpui/src/view.rs",
      "summary": "The element type for [`View`] implementations. Wraps a `View` and hooks it into layout, prepaint, and paint. Constructed via [`ViewElement::new`].",
      "documentation": "The element type for [`View`] implementations. Wraps a `View` and hooks it\ninto layout, prepaint, and paint. Constructed via [`ViewElement::new`].",
      "signature": "# [doc = \" The element type for [`View`] implementations. Wraps a `View` and hooks it\"] # [doc = \" into layout, prepaint, and paint. Constructed via [`ViewElement::new`].\"] # [doc (hidden)] pub struct ViewElement<V : View> { view : Option<V>, entity_id : Option<EntityId>, cached_style : Option<StyleRefinement>, # [cfg (debug_assertions)] source : & 'static core::panic::Location<'static>, }",
      "cfg": []
    },
    {
      "id": "gpui::view::ViewElement::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "view",
      "path": "gpui::view",
      "source": "crates/gpui/src/view.rs",
      "summary": "Wrap a [`View`] as an element.",
      "documentation": "Wrap a [`View`] as an element.",
      "signature": "pub fn new (view : V) -> Self",
      "cfg": [],
      "target": "ViewElement<V>"
    },
    {
      "id": "gpui::visual_transform::VisualTransform",
      "name": "VisualTransform",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "visual_transform",
      "path": "gpui::visual_transform",
      "source": "crates/gpui/src/visual_transform.rs",
      "summary": "A positive uniform scale and translation from layout/window coordinates to displayed window coordinates. Events remain displayed window coordinates. Capture this value during prepaint for later event handlers and semantic measurement; do not read the current scope from an asynchronous handler.",
      "documentation": "A positive uniform scale and translation from layout/window coordinates to\ndisplayed window coordinates. Events remain displayed window coordinates.\nCapture this value during prepaint for later event handlers and semantic\nmeasurement; do not read the current scope from an asynchronous handler.",
      "signature": "# [doc = \" A positive uniform scale and translation from layout/window coordinates to\"] # [doc = \" displayed window coordinates. Events remain displayed window coordinates.\"] # [doc = \" Capture this value during prepaint for later event handlers and semantic\"] # [doc = \" measurement; do not read the current scope from an asynchronous handler.\"] # [derive (Clone, Copy, Debug, PartialEq)] pub struct VisualTransform { scale : f32, offset : Point<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui::visual_transform::VisualTransform::compose",
      "name": "compose",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "visual_transform",
      "path": "gpui::visual_transform",
      "source": "crates/gpui/src/visual_transform.rs",
      "summary": "Apply `inner` first, then this transform. Nested origins are therefore expressed in the same unscaled layout coordinates as descendant bounds.",
      "documentation": "Apply `inner` first, then this transform. Nested origins are therefore\nexpressed in the same unscaled layout coordinates as descendant bounds.",
      "signature": "pub fn compose (self, inner : Self) -> Self",
      "cfg": [],
      "target": "VisualTransform"
    },
    {
      "id": "gpui::visual_transform::VisualTransform::map_bounds",
      "name": "map_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "visual_transform",
      "path": "gpui::visual_transform",
      "source": "crates/gpui/src/visual_transform.rs",
      "summary": "Displayed bounds for semantic measurement and accessibility. Layout callbacks still receive original bounds; this never requests new layout.",
      "documentation": "Displayed bounds for semantic measurement and accessibility. Layout\ncallbacks still receive original bounds; this never requests new layout.",
      "signature": "pub fn map_bounds (self, bounds : Bounds<Pixels>) -> Bounds<Pixels>",
      "cfg": [],
      "target": "VisualTransform"
    },
    {
      "id": "gpui::visual_transform::VisualTransform::map_point",
      "name": "map_point",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "visual_transform",
      "path": "gpui::visual_transform",
      "source": "crates/gpui/src/visual_transform.rs",
      "summary": "Map a layout point to displayed window coordinates.",
      "documentation": "Map a layout point to displayed window coordinates.",
      "signature": "pub fn map_point (self, point : Point<Pixels>) -> Point<Pixels>",
      "cfg": [],
      "target": "VisualTransform"
    },
    {
      "id": "gpui::visual_transform::VisualTransform::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "visual_transform",
      "path": "gpui::visual_transform",
      "source": "crates/gpui/src/visual_transform.rs",
      "summary": "Effective uniform raster/length multiplier, excluding display DPI.",
      "documentation": "Effective uniform raster/length multiplier, excluding display DPI.",
      "signature": "pub fn scale (self) -> f32",
      "cfg": [],
      "target": "VisualTransform"
    },
    {
      "id": "gpui::visual_transform::VisualTransform::scale_about",
      "name": "scale_about",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "visual_transform",
      "path": "gpui::visual_transform",
      "source": "crates/gpui/src/visual_transform.rs",
      "summary": "Scale about an origin in the enclosing scope's untransformed window coordinates. Zero, negative and nonfinite scales/origins are refused.",
      "documentation": "Scale about an origin in the enclosing scope's untransformed window\ncoordinates. Zero, negative and nonfinite scales/origins are refused.",
      "signature": "pub fn scale_about (scale : f32, origin : Point<Pixels>) -> Self",
      "cfg": [],
      "target": "VisualTransform"
    },
    {
      "id": "gpui::visual_transform::VisualTransform::unmap_bounds",
      "name": "unmap_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "visual_transform",
      "path": "gpui::visual_transform",
      "source": "crates/gpui/src/visual_transform.rs",
      "summary": "Convert an enclosing displayed rectangle into this scope's coordinates.",
      "documentation": "Convert an enclosing displayed rectangle into this scope's coordinates.",
      "signature": "pub fn unmap_bounds (self, bounds : Bounds<Pixels>) -> Bounds<Pixels>",
      "cfg": [],
      "target": "VisualTransform"
    },
    {
      "id": "gpui::visual_transform::VisualTransform::unmap_point",
      "name": "unmap_point",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "visual_transform",
      "path": "gpui::visual_transform",
      "source": "crates/gpui/src/visual_transform.rs",
      "summary": "Map a window-global event position back to this scope's layout coordinates.",
      "documentation": "Map a window-global event position back to this scope's layout coordinates.",
      "signature": "pub fn unmap_point (self, point : Point<Pixels>) -> Point<Pixels>",
      "cfg": [],
      "target": "VisualTransform"
    },
    {
      "id": "gpui::window::AnyWindowHandle",
      "name": "AnyWindowHandle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "A handle to a window with any root view type, which can be downcast to a window with a specific root view type.",
      "documentation": "A handle to a window with any root view type, which can be downcast to a window with a specific root view type.",
      "signature": "# [doc = \" A handle to a window with any root view type, which can be downcast to a window with a specific root view type.\"] # [derive (Copy, Clone, PartialEq, Eq, Hash, Debug)] pub struct AnyWindowHandle { pub (crate) id : WindowId, state_type : TypeId, }",
      "cfg": []
    },
    {
      "id": "gpui::window::AnyWindowHandle::downcast",
      "name": "downcast",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Attempt to convert this handle to a window handle with a specific root view type. If the types do not match, this will return `None`.",
      "documentation": "Attempt to convert this handle to a window handle with a specific root view type.\nIf the types do not match, this will return `None`.",
      "signature": "pub fn downcast<T : 'static> (& self) -> Option<WindowHandle<T>>",
      "cfg": [],
      "target": "AnyWindowHandle"
    },
    {
      "id": "gpui::window::AnyWindowHandle::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Read the state of the root view of this window.",
      "documentation": "Read the state of the root view of this window.\n\nThis will fail if the window has been closed.",
      "signature": "pub fn read<T, C, R> (self, cx : & C, read : impl FnOnce (Entity<T>, & App) -> R) -> Result<R> where C : AppContext, T : 'static,",
      "cfg": [],
      "target": "AnyWindowHandle"
    },
    {
      "id": "gpui::window::AnyWindowHandle::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Updates the state of the root view of this window.",
      "documentation": "Updates the state of the root view of this window.\n\nThis will fail if the window has been closed.",
      "signature": "pub fn update<C, R> (self, cx : & mut C, update : impl FnOnce (AnyView, & mut Window, & mut App) -> R,) -> Result<R> where C : AppContext,",
      "cfg": [],
      "target": "AnyWindowHandle"
    },
    {
      "id": "gpui::window::AnyWindowHandle::window_id",
      "name": "window_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Get the ID of this window.",
      "documentation": "Get the ID of this window.",
      "signature": "pub fn window_id (& self) -> WindowId",
      "cfg": [],
      "target": "AnyWindowHandle"
    },
    {
      "id": "gpui::window::ArenaClearNeeded",
      "name": "ArenaClearNeeded",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returned when the element arena has been used and so must be cleared before the next draw.",
      "documentation": "Returned when the element arena has been used and so must be cleared before the next draw.",
      "signature": "# [doc = \" Returned when the element arena has been used and so must be cleared before the next draw.\"] # [must_use] pub struct ArenaClearNeeded { # [doc = \" Identity of the arena that was drawn into. Only ever compared against\"] # [doc = \" another pointer in `clear`; never dereferenced.\"] arena : * const RefCell<Arena>, }",
      "cfg": []
    },
    {
      "id": "gpui::window::ArenaClearNeeded::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Clear the element arena of the App the draw ran against. If an enclosing draw is still in progress (this draw was nested inside it), the clear is deferred to the enclosing draw's own `ArenaClearNeeded` so that its live allocations aren't freed.",
      "documentation": "Clear the element arena of the App the draw ran against. If an enclosing\ndraw is still in progress (this draw was nested inside it), the clear is\ndeferred to the enclosing draw's own `ArenaClearNeeded` so that its live\nallocations aren't freed.\n\nPanics if passed a different App than the draw ran against, since\nclearing another App's arena could free memory its draws still\nreference.",
      "signature": "pub fn clear (self, cx : & mut App)",
      "cfg": [],
      "target": "ArenaClearNeeded"
    },
    {
      "id": "gpui::window::ContentMask",
      "name": "ContentMask",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Indicates which region of the window is visible. Content falling outside of this mask will not be rendered. Currently, only rectangular content masks are supported, but we give the mask its own type to leave room to support more complex shapes in the future.",
      "documentation": "Indicates which region of the window is visible. Content falling outside of this mask will not be\nrendered. Currently, only rectangular content masks are supported, but we give the mask its own type\nto leave room to support more complex shapes in the future.",
      "signature": "# [doc = \" Indicates which region of the window is visible. Content falling outside of this mask will not be\"] # [doc = \" rendered. Currently, only rectangular content masks are supported, but we give the mask its own type\"] # [doc = \" to leave room to support more complex shapes in the future.\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq)] # [repr (C)] pub struct ContentMask<P : Clone + Debug + Default + PartialEq> { # [doc = \" The bounds\"] pub bounds : Bounds<P>, }",
      "cfg": []
    },
    {
      "id": "gpui::window::ContentMask::intersect",
      "name": "intersect",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Intersect the content mask with the given content mask.",
      "documentation": "Intersect the content mask with the given content mask.",
      "signature": "pub fn intersect (& self, other : & Self) -> Self",
      "cfg": [],
      "target": "ContentMask<Pixels>"
    },
    {
      "id": "gpui::window::ContentMask::scale",
      "name": "scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Scale the content mask's pixel units by the given scaling factor.",
      "documentation": "Scale the content mask's pixel units by the given scaling factor.",
      "signature": "pub fn scale (& self, factor : f32) -> ContentMask<ScaledPixels>",
      "cfg": [],
      "target": "ContentMask<Pixels>"
    },
    {
      "id": "gpui::window::DEFAULT_ADDITIONAL_WINDOW_SIZE",
      "name": "DEFAULT_ADDITIONAL_WINDOW_SIZE",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "A 6:5 aspect ratio minimum window size to be used for functional, additional-to-main-Zed windows, like the settings and rules library windows.",
      "documentation": "A 6:5 aspect ratio minimum window size to be used for functional,\nadditional-to-main-Zed windows, like the settings and rules library windows.",
      "signature": "pub const DEFAULT_ADDITIONAL_WINDOW_SIZE: Size<Pixels>",
      "cfg": []
    },
    {
      "id": "gpui::window::DEFAULT_WINDOW_SIZE",
      "name": "DEFAULT_WINDOW_SIZE",
      "kind": "constant",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Default window size used when no explicit size is provided.",
      "documentation": "Default window size used when no explicit size is provided.",
      "signature": "pub const DEFAULT_WINDOW_SIZE: Size<Pixels>",
      "cfg": []
    },
    {
      "id": "gpui::window::DismissEvent",
      "name": "DismissEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Emitted by implementers of [`ManagedView`] to indicate the view should be dismissed, such as when a view is presented as a modal.",
      "documentation": "Emitted by implementers of [`ManagedView`] to indicate the view should be dismissed, such as when a view is presented as a modal.",
      "signature": "# [doc = \" Emitted by implementers of [`ManagedView`] to indicate the view should be dismissed, such as when a view is presented as a modal.\"] pub struct DismissEvent;",
      "cfg": []
    },
    {
      "id": "gpui::window::DispatchEventResult",
      "name": "DispatchEventResult",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, Default, PartialEq, Eq)] # [expect (missing_docs)] pub struct DispatchEventResult { pub propagate : bool, pub default_prevented : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::window::DispatchPhase",
      "name": "DispatchPhase",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Represents the two different phases when dispatching events.",
      "documentation": "Represents the two different phases when dispatching events.",
      "signature": "# [doc = \" Represents the two different phases when dispatching events.\"] # [derive (Default, Copy, Clone, Debug, Eq, PartialEq)] pub enum DispatchPhase { # [doc = \" After the capture phase comes the bubble phase, in which mouse event listeners are\"] # [doc = \" invoked front to back and keyboard event listeners are invoked from the focused element\"] # [doc = \" to the root of the element tree. This is the phase you'll most commonly want to use when\"] # [doc = \" registering event listeners.\"] # [default] Bubble, # [doc = \" During the initial capture phase, mouse event listeners are invoked back to front, and keyboard\"] # [doc = \" listeners are invoked from the root of the tree downward toward the focused element. This phase\"] # [doc = \" is used for special purposes such as clearing the \\\"pressed\\\" state for click events. If\"] # [doc = \" you stop event propagation during this phase, you need to know what you're doing. Handlers\"] # [doc = \" outside of the immediate region may rely on detecting non-local events during this phase.\"] Capture, }",
      "cfg": []
    },
    {
      "id": "gpui::window::DispatchPhase::bubble",
      "name": "bubble",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns true if this represents the \"bubble\" phase.",
      "documentation": "Returns true if this represents the \"bubble\" phase.",
      "signature": "pub fn bubble (self) -> bool",
      "cfg": [],
      "target": "DispatchPhase"
    },
    {
      "id": "gpui::window::DispatchPhase::capture",
      "name": "capture",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns true if this represents the \"capture\" phase.",
      "documentation": "Returns true if this represents the \"capture\" phase.",
      "signature": "pub fn capture (self) -> bool",
      "cfg": [],
      "target": "DispatchPhase"
    },
    {
      "id": "gpui::window::EdgeFade",
      "name": "EdgeFade",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "A scoped vertical edge fade (see [`Window::with_edge_fade`]): primitives painted inside the scope get their opacity multiplied by a ramp that runs from 0 at an active edge of `bounds` to 1 a `band` further in. Built for scroll-edge fades over translucent/blurred window backgrounds, where a backdrop-colored gradient overlay cannot exist (there is no paintable color equal to \"what is behind the window\").",
      "documentation": "A scoped vertical edge fade (see [`Window::with_edge_fade`]): primitives\npainted inside the scope get their opacity multiplied by a ramp that runs\nfrom 0 at an active edge of `bounds` to 1 a `band` further in. Built for\nscroll-edge fades over translucent/blurred window backgrounds, where a\nbackdrop-colored gradient overlay cannot exist (there is no paintable\ncolor equal to \"what is behind the window\").",
      "signature": "# [doc = \" A scoped vertical edge fade (see [`Window::with_edge_fade`]): primitives\"] # [doc = \" painted inside the scope get their opacity multiplied by a ramp that runs\"] # [doc = \" from 0 at an active edge of `bounds` to 1 a `band` further in. Built for\"] # [doc = \" scroll-edge fades over translucent/blurred window backgrounds, where a\"] # [doc = \" backdrop-colored gradient overlay cannot exist (there is no paintable\"] # [doc = \" color equal to \\\"what is behind the window\\\").\"] # [derive (Clone, Copy, Debug, PartialEq)] pub struct EdgeFade { # [doc = \" The faded region, in window coordinates.\"] pub bounds : Bounds<Pixels>, # [doc = \" Ramp height inside each active edge.\"] pub band : Pixels, # [doc = \" Fade primitives approaching the region's top edge.\"] pub top : bool, # [doc = \" Fade primitives approaching the region's bottom edge.\"] pub bottom : bool, # [doc = \" Fade primitives approaching the region's left edge.\"] pub left : bool, # [doc = \" Fade primitives approaching the region's right edge.\"] pub right : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::window::ElementId",
      "name": "ElementId",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "An identifier for an [`Element`].",
      "documentation": "An identifier for an [`Element`].\n\nCan be constructed with a string, a number, or both, as well\nas other internal representations.",
      "signature": "# [doc = \" An identifier for an [`Element`].\"] # [doc = \"\"] # [doc = \" Can be constructed with a string, a number, or both, as well\"] # [doc = \" as other internal representations.\"] # [derive (Clone, Debug, Eq, PartialEq, Hash)] pub enum ElementId { # [doc = \" The ID of a View element\"] View (EntityId), # [doc = \" An integer ID.\"] Integer (u64), # [doc = \" A string based ID.\"] Name (SharedString), # [doc = \" A UUID.\"] Uuid (Uuid), # [doc = \" An ID that's equated with a focus handle.\"] FocusHandle (FocusId), # [doc = \" A combination of a name and an integer.\"] NamedInteger (SharedString, u64), # [doc = \" A path.\"] Path (Arc<std::path::Path>), # [doc = \" A code location.\"] CodeLocation (core::panic::Location<'static>), # [doc = \" A labeled child of an element.\"] NamedChild (Arc<ElementId>, SharedString), # [doc = \" A byte array ID (used for text-anchors)\"] OpaqueId ([u8; 20]), }",
      "cfg": []
    },
    {
      "id": "gpui::window::ElementId::named_usize",
      "name": "named_usize",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Constructs an `ElementId::NamedInteger` from a name and `usize`.",
      "documentation": "Constructs an `ElementId::NamedInteger` from a name and `usize`.",
      "signature": "pub fn named_usize (name : impl Into<SharedString>, integer : usize) -> ElementId",
      "cfg": [],
      "target": "ElementId"
    },
    {
      "id": "gpui::window::FocusHandle",
      "name": "FocusHandle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "A handle which can be used to track and manipulate the focused element in a window.",
      "documentation": "A handle which can be used to track and manipulate the focused element in a window.",
      "signature": "# [doc = \" A handle which can be used to track and manipulate the focused element in a window.\"] pub struct FocusHandle { pub (crate) id : FocusId, handles : Arc<FocusMap>, # [doc = \" The index of this element in the tab order.\"] pub tab_index : isize, # [doc = \" Whether this element can be focused by tab navigation.\"] pub tab_stop : bool, }",
      "cfg": []
    },
    {
      "id": "gpui::window::FocusHandle::contains",
      "name": "contains",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Obtains whether this handle contains the given handle in the most recently rendered frame.",
      "documentation": "Obtains whether this handle contains the given handle in the most recently rendered frame.",
      "signature": "pub fn contains (& self, other : & Self, window : & Window) -> bool",
      "cfg": [],
      "target": "FocusHandle"
    },
    {
      "id": "gpui::window::FocusHandle::contains_focused",
      "name": "contains_focused",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Obtains whether the element associated with this handle contains the focused element or is itself focused.",
      "documentation": "Obtains whether the element associated with this handle contains the focused\nelement or is itself focused.",
      "signature": "pub fn contains_focused (& self, window : & Window, cx : & App) -> bool",
      "cfg": [],
      "target": "FocusHandle"
    },
    {
      "id": "gpui::window::FocusHandle::dispatch_action",
      "name": "dispatch_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Dispatch an action on the element that rendered this focus handle",
      "documentation": "Dispatch an action on the element that rendered this focus handle",
      "signature": "pub fn dispatch_action (& self, action : & dyn Action, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "FocusHandle"
    },
    {
      "id": "gpui::window::FocusHandle::downgrade",
      "name": "downgrade",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Converts this focus handle into a weak variant, which does not prevent it from being released.",
      "documentation": "Converts this focus handle into a weak variant, which does not prevent it from being released.",
      "signature": "pub fn downgrade (& self) -> WeakFocusHandle",
      "cfg": [],
      "target": "FocusHandle"
    },
    {
      "id": "gpui::window::FocusHandle::focus",
      "name": "focus",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Moves the focus to the element associated with this handle.",
      "documentation": "Moves the focus to the element associated with this handle.",
      "signature": "pub fn focus (& self, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "FocusHandle"
    },
    {
      "id": "gpui::window::FocusHandle::is_focused",
      "name": "is_focused",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Obtains whether the element associated with this handle is currently focused.",
      "documentation": "Obtains whether the element associated with this handle is currently focused.",
      "signature": "pub fn is_focused (& self, window : & Window) -> bool",
      "cfg": [],
      "target": "FocusHandle"
    },
    {
      "id": "gpui::window::FocusHandle::tab_index",
      "name": "tab_index",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets the tab index of the element associated with this handle.",
      "documentation": "Sets the tab index of the element associated with this handle.",
      "signature": "pub fn tab_index (mut self, index : isize) -> Self",
      "cfg": [],
      "target": "FocusHandle"
    },
    {
      "id": "gpui::window::FocusHandle::tab_stop",
      "name": "tab_stop",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets whether the element associated with this handle is a tab stop.",
      "documentation": "Sets whether the element associated with this handle is a tab stop.\n\nWhen `false`, the element will not be included in the tab order.",
      "signature": "pub fn tab_stop (mut self, tab_stop : bool) -> Self",
      "cfg": [],
      "target": "FocusHandle"
    },
    {
      "id": "gpui::window::FocusHandle::within_focused",
      "name": "within_focused",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Obtains whether the element associated with this handle is contained within the focused element or is itself focused.",
      "documentation": "Obtains whether the element associated with this handle is contained within the\nfocused element or is itself focused.",
      "signature": "pub fn within_focused (& self, window : & Window, cx : & mut App) -> bool",
      "cfg": [],
      "target": "FocusHandle"
    },
    {
      "id": "gpui::window::FocusId::contains_focused",
      "name": "contains_focused",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Obtains whether the element associated with this handle contains the focused element or is itself focused.",
      "documentation": "Obtains whether the element associated with this handle contains the focused\nelement or is itself focused.",
      "signature": "pub fn contains_focused (& self, window : & Window, cx : & App) -> bool",
      "cfg": [],
      "target": "FocusId"
    },
    {
      "id": "gpui::window::FocusId::is_focused",
      "name": "is_focused",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Obtains whether the element associated with this handle is currently focused.",
      "documentation": "Obtains whether the element associated with this handle is currently focused.",
      "signature": "pub fn is_focused (& self, window : & Window) -> bool",
      "cfg": [],
      "target": "FocusId"
    },
    {
      "id": "gpui::window::FocusId::within_focused",
      "name": "within_focused",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Obtains whether the element associated with this handle is contained within the focused element or is itself focused.",
      "documentation": "Obtains whether the element associated with this handle is contained within the\nfocused element or is itself focused.",
      "signature": "pub fn within_focused (& self, window : & Window, cx : & App) -> bool",
      "cfg": [],
      "target": "FocusId"
    },
    {
      "id": "gpui::window::FocusOutEvent",
      "name": "FocusOutEvent",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "This is provided when subscribing for `Context::on_focus_out` events.",
      "documentation": "This is provided when subscribing for `Context::on_focus_out` events.",
      "signature": "# [doc = \" This is provided when subscribing for `Context::on_focus_out` events.\"] pub struct FocusOutEvent { # [doc = \" A weak focus handle representing what was blurred.\"] pub blurred : WeakFocusHandle, }",
      "cfg": []
    },
    {
      "id": "gpui::window::Focusable",
      "name": "Focusable",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Focusable allows users of your view to easily focus it (using window.focus_view(cx, view))",
      "documentation": "Focusable allows users of your view to easily\nfocus it (using window.focus_view(cx, view))",
      "signature": "# [doc = \" Focusable allows users of your view to easily\"] # [doc = \" focus it (using window.focus_view(cx, view))\"] pub trait Focusable : 'static { # [doc = \" Returns the focus handle associated with this view.\"] fn focus_handle (& self, cx : & App) -> FocusHandle; }",
      "cfg": []
    },
    {
      "id": "gpui::window::Hitbox",
      "name": "Hitbox",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "A rectangular region that potentially blocks hitboxes inserted prior. See [Window::insert_hitbox] for more details.",
      "documentation": "A rectangular region that potentially blocks hitboxes inserted prior.\nSee [Window::insert_hitbox] for more details.",
      "signature": "# [doc = \" A rectangular region that potentially blocks hitboxes inserted prior.\"] # [doc = \" See [Window::insert_hitbox] for more details.\"] # [derive (Clone, Debug, Deref)] pub struct Hitbox { # [doc = \" A unique identifier for the hitbox.\"] pub id : HitboxId, # [doc = \" The bounds of the hitbox.\"] # [deref] pub bounds : Bounds<Pixels>, # [doc = \" The content mask when the hitbox was inserted.\"] pub content_mask : ContentMask<Pixels>, # [doc = \" Rounded ancestor clips captured during prepaint.\"] pub clip_chain : crate::ClipChain, # [doc = \" Captured mapping for window-global pointer positions and semantic bounds.\"] pub visual_transform : crate::VisualTransform, # [doc = \" Flags that specify hitbox behavior.\"] pub behavior : HitboxBehavior, }",
      "cfg": []
    },
    {
      "id": "gpui::window::Hitbox::contains",
      "name": "contains",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Tests a window-global point against this hitbox and its inherited clips, without testing occlusion by later elements. `bounds` stays layout-space.",
      "documentation": "Tests a window-global point against this hitbox and its inherited clips,\nwithout testing occlusion by later elements. `bounds` stays layout-space.",
      "signature": "pub fn contains (& self, position : & Point<Pixels>) -> bool",
      "cfg": [],
      "target": "Hitbox"
    },
    {
      "id": "gpui::window::Hitbox::displayed_bounds",
      "name": "displayed_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Displayed rectangle for semantic measurement. Rounded clipping may reject corners inside this conservative rectangle.",
      "documentation": "Displayed rectangle for semantic measurement. Rounded clipping may reject\ncorners inside this conservative rectangle.",
      "signature": "pub fn displayed_bounds (& self) -> Bounds<Pixels>",
      "cfg": [],
      "target": "Hitbox"
    },
    {
      "id": "gpui::window::Hitbox::is_hovered",
      "name": "is_hovered",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Checks if the hitbox is currently hovered. Returns `false` during keyboard input modality so that keyboard navigation suppresses hover highlights. Except when handling `ScrollWheelEvent`, this is typically what you want when determining whether to handle mouse events or paint hover styles.",
      "documentation": "Checks if the hitbox is currently hovered. Returns `false` during keyboard input modality\nso that keyboard navigation suppresses hover highlights. Except when handling\n`ScrollWheelEvent`, this is typically what you want when determining whether to handle mouse\nevents or paint hover styles.\n\nThis can return `false` even when the hitbox contains the mouse, if a hitbox in front of\nthis sets `HitboxBehavior::BlockMouse` (`InteractiveElement::occlude`) or\n`HitboxBehavior::BlockMouseExceptScroll` (`InteractiveElement::block_mouse_except_scroll`),\nor if the current input modality is keyboard (see [`Window::last_input_was_keyboard`]).\n\nHandling of `ScrollWheelEvent` should typically use `should_handle_scroll` instead.\nConcretely, this is due to use-cases like overlays that cause the elements under to be\nnon-interactive while still allowing scrolling. More abstractly, this is because\n`is_hovered` is about element interactions directly under the mouse - mouse moves, clicks,\nhover styling, etc. In contrast, scrolling is about finding the current outer scrollable\ncontainer.",
      "signature": "pub fn is_hovered (& self, window : & Window) -> bool",
      "cfg": [],
      "target": "Hitbox"
    },
    {
      "id": "gpui::window::Hitbox::should_handle_scroll",
      "name": "should_handle_scroll",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Checks if the hitbox contains the mouse and should handle scroll events. Typically this should only be used when handling `ScrollWheelEvent`, and otherwise `is_hovered` should be used. See the documentation of `Hitbox::is_hovered` for details about this distinction.",
      "documentation": "Checks if the hitbox contains the mouse and should handle scroll events. Typically this\nshould only be used when handling `ScrollWheelEvent`, and otherwise `is_hovered` should be\nused. See the documentation of `Hitbox::is_hovered` for details about this distinction.\n\nThis can return `false` even when the hitbox contains the mouse, if a hitbox in front of\nthis sets `HitboxBehavior::BlockMouse` (`InteractiveElement::occlude`).",
      "signature": "pub fn should_handle_scroll (& self, window : & Window) -> bool",
      "cfg": [],
      "target": "Hitbox"
    },
    {
      "id": "gpui::window::HitboxBehavior",
      "name": "HitboxBehavior",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "How the hitbox affects mouse behavior.",
      "documentation": "How the hitbox affects mouse behavior.",
      "signature": "# [doc = \" How the hitbox affects mouse behavior.\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq)] pub enum HitboxBehavior { # [doc = \" Normal hitbox mouse behavior, doesn't affect mouse handling for other hitboxes.\"] # [default] Normal, # [doc = \" All hitboxes behind this hitbox will be ignored and so will have `hitbox.is_hovered() ==\"] # [doc = \" false` and `hitbox.should_handle_scroll() == false`. Typically for elements this causes\"] # [doc = \" skipping of all mouse events, hover styles, and tooltips. This flag is set by\"] # [doc = \" [`InteractiveElement::occlude`].\"] # [doc = \"\"] # [doc = \" For mouse handlers that check those hitboxes, this behaves the same as registering a\"] # [doc = \" bubble-phase handler for every mouse event type:\"] # [doc = \"\"] # [doc = \" ```ignore\"] # [doc = \" window.on_mouse_event(move |_: &EveryMouseEventTypeHere, phase, window, cx| {\"] # [doc = \" if phase == DispatchPhase::Capture && hitbox.is_hovered(window) {\"] # [doc = \" cx.stop_propagation();\"] # [doc = \" }\"] # [doc = \" })\"] # [doc = \" ```\"] # [doc = \"\"] # [doc = \" This has effects beyond event handling - any use of hitbox checking, such as hover\"] # [doc = \" styles and tooltips. These other behaviors are the main point of this mechanism. An\"] # [doc = \" alternative might be to not affect mouse event handling - but this would allow\"] # [doc = \" inconsistent UI where clicks and moves interact with elements that are not considered to\"] # [doc = \" be hovered.\"] BlockMouse, # [doc = \" All hitboxes behind this hitbox will have `hitbox.is_hovered() == false`, even when\"] # [doc = \" `hitbox.should_handle_scroll() == true`. Typically for elements this causes all mouse\"] # [doc = \" interaction except scroll events to be ignored - see the documentation of\"] # [doc = \" [`Hitbox::is_hovered`] for details. This flag is set by\"] # [doc = \" [`InteractiveElement::block_mouse_except_scroll`].\"] # [doc = \"\"] # [doc = \" For mouse handlers that check those hitboxes, this behaves the same as registering a\"] # [doc = \" bubble-phase handler for every mouse event type **except** `ScrollWheelEvent`:\"] # [doc = \"\"] # [doc = \" ```ignore\"] # [doc = \" window.on_mouse_event(move |_: &EveryMouseEventTypeExceptScroll, phase, window, cx| {\"] # [doc = \" if phase == DispatchPhase::Bubble && hitbox.should_handle_scroll(window) {\"] # [doc = \" cx.stop_propagation();\"] # [doc = \" }\"] # [doc = \" })\"] # [doc = \" ```\"] # [doc = \"\"] # [doc = \" See the documentation of [`Hitbox::is_hovered`] for details of why `ScrollWheelEvent` is\"] # [doc = \" handled differently than other mouse events. If also blocking these scroll events is\"] # [doc = \" desired, then a `cx.stop_propagation()` handler like the one above can be used.\"] # [doc = \"\"] # [doc = \" This has effects beyond event handling - this affects any use of `is_hovered`, such as\"] # [doc = \" hover styles and tooltips. These other behaviors are the main point of this mechanism.\"] # [doc = \" An alternative might be to not affect mouse event handling - but this would allow\"] # [doc = \" inconsistent UI where clicks and moves interact with elements that are not considered to\"] # [doc = \" be hovered.\"] BlockMouseExceptScroll, }",
      "cfg": []
    },
    {
      "id": "gpui::window::HitboxId",
      "name": "HitboxId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "An identifier for a [Hitbox] which also includes [HitboxBehavior].",
      "documentation": "An identifier for a [Hitbox] which also includes [HitboxBehavior].",
      "signature": "# [doc = \" An identifier for a [Hitbox] which also includes [HitboxBehavior].\"] # [derive (Copy, Clone, Debug, Eq, PartialEq, Hash)] pub struct HitboxId (u64);",
      "cfg": []
    },
    {
      "id": "gpui::window::HitboxId::is_hovered",
      "name": "is_hovered",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Checks if the hitbox with this ID is currently hovered. Returns `false` during keyboard input modality so that keyboard navigation suppresses hover highlights. Except when handling `ScrollWheelEvent`, this is typically what you want when determining whether to handle mouse events or paint hover styles.",
      "documentation": "Checks if the hitbox with this ID is currently hovered. Returns `false` during keyboard\ninput modality so that keyboard navigation suppresses hover highlights. Except when handling\n`ScrollWheelEvent`, this is typically what you want when determining whether to handle mouse\nevents or paint hover styles.\n\nSee [`Hitbox::is_hovered`] for details.",
      "signature": "pub fn is_hovered (self, window : & Window) -> bool",
      "cfg": [],
      "target": "HitboxId"
    },
    {
      "id": "gpui::window::HitboxId::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "A placeholder HitboxId exclusively for integration testing API's that need a hitbox but where the value of the hitbox does not matter. The alternative is to make the Hitbox optional but that complicates the implementation.",
      "documentation": "A placeholder HitboxId exclusively for integration testing API's that\nneed a hitbox but where the value of the hitbox does not matter. The\nalternative is to make the Hitbox optional but that complicates the\nimplementation.",
      "signature": "pub const fn placeholder () -> Self",
      "cfg": [],
      "target": "HitboxId"
    },
    {
      "id": "gpui::window::HitboxId::should_handle_scroll",
      "name": "should_handle_scroll",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Checks if the hitbox with this ID contains the mouse and should handle scroll events. Typically this should only be used when handling `ScrollWheelEvent`, and otherwise `is_hovered` should be used. See the documentation of `Hitbox::is_hovered` for details about this distinction.",
      "documentation": "Checks if the hitbox with this ID contains the mouse and should handle scroll events.\nTypically this should only be used when handling `ScrollWheelEvent`, and otherwise\n`is_hovered` should be used. See the documentation of `Hitbox::is_hovered` for details about\nthis distinction.",
      "signature": "pub fn should_handle_scroll (self, window : & Window) -> bool",
      "cfg": [],
      "target": "HitboxId"
    },
    {
      "id": "gpui::window::InputLatencySnapshot",
      "name": "InputLatencySnapshot",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "A point-in-time snapshot of the input-latency histograms for a window, suitable for external formatting.",
      "documentation": "A point-in-time snapshot of the input-latency histograms for a window,\nsuitable for external formatting.",
      "signature": "# [doc = \" A point-in-time snapshot of the input-latency histograms for a window,\"] # [doc = \" suitable for external formatting.\"] # [cfg (feature = \"input-latency-histogram\")] # [derive (Clone)] pub struct InputLatencySnapshot { # [doc = \" Histogram of input-to-platform-submission latency samples, in\"] # [doc = \" nanoseconds.\"] pub latency_histogram : Histogram<u64>, # [doc = \" Histogram of input events coalesced per submitted frame.\"] pub events_per_frame_histogram : Histogram<u64>, # [doc = \" Count of input events that arrived mid-draw and were excluded from\"] # [doc = \" latency recording.\"] pub mid_draw_events_dropped : u64, }",
      "cfg": [
        "cfg (feature = \"input-latency-histogram\")"
      ]
    },
    {
      "id": "gpui::window::InputRateTracker::is_high_rate",
      "name": "is_high_rate",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_high_rate (& self) -> bool",
      "cfg": [],
      "target": "InputRateTracker"
    },
    {
      "id": "gpui::window::InputRateTracker::record_input",
      "name": "record_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn record_input (& mut self)",
      "cfg": [],
      "target": "InputRateTracker"
    },
    {
      "id": "gpui::window::ManagedView",
      "name": "ManagedView",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "ManagedView is a view (like a Modal, Popover, Menu, etc.) where the lifecycle of the view is handled by another view.",
      "documentation": "ManagedView is a view (like a Modal, Popover, Menu, etc.)\nwhere the lifecycle of the view is handled by another view.",
      "signature": "# [doc = \" ManagedView is a view (like a Modal, Popover, Menu, etc.)\"] # [doc = \" where the lifecycle of the view is handled by another view.\"] pub trait ManagedView : Focusable + EventEmitter<DismissEvent> + Render { }",
      "cfg": []
    },
    {
      "id": "gpui::window::PaintQuad",
      "name": "PaintQuad",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "A rectangle to be rendered in the window at the given position and size. Passed as an argument [`Window::paint_quad`].",
      "documentation": "A rectangle to be rendered in the window at the given position and size.\nPassed as an argument [`Window::paint_quad`].",
      "signature": "# [doc = \" A rectangle to be rendered in the window at the given position and size.\"] # [doc = \" Passed as an argument [`Window::paint_quad`].\"] # [derive (Clone)] pub struct PaintQuad { # [doc = \" The bounds of the quad within the window.\"] pub bounds : Bounds<Pixels>, # [doc = \" The radii of the quad's corners.\"] pub corner_radii : Corners<Pixels>, # [doc = \" The background color of the quad.\"] pub background : Background, # [doc = \" The widths of the quad's borders.\"] pub border_widths : Edges<Pixels>, # [doc = \" The color of the quad's borders.\"] pub border_color : Hsla, # [doc = \" The style of the quad's borders.\"] pub border_style : BorderStyle, }",
      "cfg": []
    },
    {
      "id": "gpui::window::PaintQuad::background",
      "name": "background",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets the background color of the quad.",
      "documentation": "Sets the background color of the quad.",
      "signature": "pub fn background (self, background : impl Into<Background>) -> Self",
      "cfg": [],
      "target": "PaintQuad"
    },
    {
      "id": "gpui::window::PaintQuad::border_color",
      "name": "border_color",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets the border color of the quad.",
      "documentation": "Sets the border color of the quad.",
      "signature": "pub fn border_color (self, border_color : impl Into<Hsla>) -> Self",
      "cfg": [],
      "target": "PaintQuad"
    },
    {
      "id": "gpui::window::PaintQuad::border_widths",
      "name": "border_widths",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets the border widths of the quad.",
      "documentation": "Sets the border widths of the quad.",
      "signature": "pub fn border_widths (self, border_widths : impl Into<Edges<Pixels>>) -> Self",
      "cfg": [],
      "target": "PaintQuad"
    },
    {
      "id": "gpui::window::PaintQuad::corner_radii",
      "name": "corner_radii",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets the corner radii of the quad.",
      "documentation": "Sets the corner radii of the quad.",
      "signature": "pub fn corner_radii (self, corner_radii : impl Into<Corners<Pixels>>) -> Self",
      "cfg": [],
      "target": "PaintQuad"
    },
    {
      "id": "gpui::window::TooltipId",
      "name": "TooltipId",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "An identifier for a tooltip.",
      "documentation": "An identifier for a tooltip.",
      "signature": "# [doc = \" An identifier for a tooltip.\"] # [derive (Copy, Clone, Debug, Default, Eq, PartialEq)] pub struct TooltipId (usize);",
      "cfg": []
    },
    {
      "id": "gpui::window::TooltipId::is_hovered",
      "name": "is_hovered",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Checks if the tooltip is currently hovered.",
      "documentation": "Checks if the tooltip is currently hovered.",
      "signature": "pub fn is_hovered (& self, window : & Window) -> bool",
      "cfg": [],
      "target": "TooltipId"
    },
    {
      "id": "gpui::window::WeakFocusHandle",
      "name": "WeakFocusHandle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "A weak reference to a focus handle.",
      "documentation": "A weak reference to a focus handle.",
      "signature": "# [doc = \" A weak reference to a focus handle.\"] # [derive (Clone, Debug)] pub struct WeakFocusHandle { pub (crate) id : FocusId, pub (crate) handles : Weak<FocusMap>, }",
      "cfg": []
    },
    {
      "id": "gpui::window::WeakFocusHandle::upgrade",
      "name": "upgrade",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Attempts to upgrade the [WeakFocusHandle] to a [FocusHandle].",
      "documentation": "Attempts to upgrade the [WeakFocusHandle] to a [FocusHandle].",
      "signature": "pub fn upgrade (& self) -> Option<FocusHandle>",
      "cfg": [],
      "target": "WeakFocusHandle"
    },
    {
      "id": "gpui::window::Window",
      "name": "Window",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Holds the state for a specific window.",
      "documentation": "Holds the state for a specific window.",
      "signature": "# [doc = \" Holds the state for a specific window.\"] pub struct Window { pub (crate) handle : AnyWindowHandle, pub (crate) invalidator : WindowInvalidator, pub (crate) removed : bool, pub (crate) platform_window : Box<dyn PlatformWindow>, native_context_menu : Option<(crate::NativeMenuSessionId, bool)>, # [doc = \" Whether the platform accepted a transparent scene plane above native\"] # [doc = \" child views. This is window state rather than frame state: once native\"] # [doc = \" hosting creates the plane, every later deferred overlay uses it.\"] scene_overlay_enabled : Cell<bool>, # [doc = \" True only while painting primitives that will land on that transparent\"] # [doc = \" plane. Subpixel glyphs require a known opaque destination, so text in\"] # [doc = \" this phase must use grayscale antialiasing.\"] painting_transparent_overlay : bool, display_id : Option<DisplayId>, is_resizable : bool, is_minimizable : bool, sprite_atlas : Arc<dyn PlatformAtlas>, text_system : Arc<WindowTextSystem>, text_rendering_mode : Rc<Cell<TextRenderingMode>>, rem_size : Pixels, # [doc = \" The stack of override values for the window's rem size.\"] # [doc = \"\"] # [doc = \" This is used by `with_rem_size` to allow rendering an element tree with\"] # [doc = \" a given rem size.\"] rem_size_override_stack : SmallVec<[Pixels; 8]>, pub (crate) viewport_size : Size<Pixels>, layout_engine : Option<TaffyLayoutEngine>, pub (crate) root : Option<AnyView>, pub (crate) element_id_stack : SmallVec<[ElementId; 32]>, pub (crate) text_style_stack : Vec<TextStyleRefinement>, pub (crate) rendered_entity_stack : Vec<EntityId>, pub (crate) element_offset_stack : Vec<Point<Pixels>>, element_placement_stack : Vec<Point<Pixels>>, pub (crate) element_opacity : f32, pub (crate) edge_fade : Option<EdgeFade>, pub (crate) content_mask_stack : Vec<ContentMask<Pixels>>, pub (crate) clip_chain : crate::ClipChain, pub (crate) visual_transform : crate::VisualTransform, pub (crate) selection_scope_stack : Vec<crate::SelectionScopeId>, # [doc = \" One selection that may span separately mounted text elements. It\"] # [doc = \" belongs to the window rather than to a global, so a closed window\"] # [doc = \" leaves nothing behind.\"] pub (crate) document_selection : crate::DocumentSelectionState, pub (crate) requested_autoscroll : Option<Bounds<Pixels>>, pub (crate) image_cache_stack : Vec<AnyImageCache>, pub (crate) rendered_frame : Frame, pub (crate) next_frame : Frame, platform_view_registry : PlatformViewRegistry, next_hitbox_id : HitboxId, pub (crate) next_tooltip_id : TooltipId, pub (crate) tooltip_bounds : Option<TooltipBounds>, next_frame_callbacks : Rc<RefCell<Vec<FrameCallback>>>, pub (crate) dirty_views : FxHashSet<EntityId>, focus_listeners : SubscriberSet<(), AnyWindowFocusListener>, pub (crate) focus_lost_listeners : SubscriberSet<(), AnyObserver>, default_prevented : bool, effect_owner : Rc<Cell<Option<crate::EffectOwner>>>, remaining_scroll_delta : Option<crate::ScrollDelta>, mouse_position : Point<Pixels>, mouse_hit_test : HitTest, modifiers : Modifiers, capslock : Capslock, scale_factor : f32, pub (crate) bounds_observers : SubscriberSet<(), AnyObserver>, appearance : WindowAppearance, pub (crate) appearance_observers : SubscriberSet<(), AnyObserver>, pub (crate) button_layout_observers : SubscriberSet<(), AnyObserver>, active : Rc<Cell<bool>>, hovered : Rc<Cell<bool>>, pub (crate) needs_present : Rc<Cell<bool>>, # [doc = \" Tracks recent input event timestamps to determine if input is arriving at a high rate.\"] # [doc = \" Used to selectively enable VRR optimization only when input rate exceeds 60fps.\"] pub (crate) input_rate_tracker : Rc<RefCell<InputRateTracker>>, frame_inputs : FrameInputAccumulator, pending_frame_timing : Option<PendingFrameTiming>, # [cfg (feature = \"input-latency-histogram\")] input_latency_tracker : InputLatencyTracker, last_input_modality : InputModality, touch_gestures : TouchGestureRecognizer, touch_prediction_enabled : bool, long_press_timer : Option<Task<()>>, long_press_capture : Option<EntityId>, touch_pan_capture : Option<ElementId>, touch_pinch_capture : Option<ElementId>, touch_pinch_target : Option<ElementId>, touch_pinch_anchor : Option<Point<Pixels>>, last_pinch_event : Option<crate::PinchEvent>, text_input_state : Option<(FocusId, crate::TextInputOptions)>, pub (crate) refreshing : bool, pub (crate) activation_observers : SubscriberSet<(), AnyObserver>, pub (crate) focus : Option<FocusId>, focus_enabled : bool, # [doc = \" Whether a pointer press put focus where it currently is, rather than a\"] # [doc = \" tab stop, an action, or the application moving it. Read by\"] # [doc = \" focus-visible styling; see [`Window::focus_is_visible`].\"] focus_placed_by_pointer : bool, # [doc = \" Incremented every time focus moves. Used to invalidate a\"] # [doc = \" pending keyboard activation state when focus changes.\"] pub (crate) focus_generation : u64, pending_input : Option<PendingInput>, pending_modifier : ModifierState, pub (crate) pending_input_observers : SubscriberSet<(), AnyObserver>, prompt : Option<RenderablePromptHandle>, pub (crate) client_inset : Option<Pixels>, # [doc = \" The hitbox that has captured the pointer, if any.\"] # [doc = \" While captured, mouse events route to this hitbox regardless of hit testing.\"] captured_hitbox : Option<HitboxId>, # [doc = \" The stable identity behind `captured_hitbox`, when the capturing\"] # [doc = \" element has an id. This remaps capture to its replacement hitbox after\"] # [doc = \" a redraw.\"] captured_pointer_element : Option<GlobalElementId>, captured_pointer_button : Option<MouseButton>, # [cfg (any (feature = \"inspector\", debug_assertions))] inspector : Option<Entity<Inspector>>, pub (crate) a11y : A11y, current_frame_stats : profiler::FrameStats, completed_frame_stats : profiler::FrameStats, }",
      "cfg": []
    },
    {
      "id": "gpui::window::Window::activate_window",
      "name": "activate_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Focus the current window and bring it to the foreground at the platform level.",
      "documentation": "Focus the current window and bring it to the foreground at the platform level.",
      "signature": "pub fn activate_window (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::ambient_element_offset",
      "name": "ambient_element_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Offset due to scrolling and transient ancestor slides, excluding layout placement declared by `with_placed_element_offset`. Subtract this from an element's prepaint origin to sample its content-space layout position. Without a declared placement scope this equals `element_offset()`. This is prepaint metadata, not a separate rendering or hit-test transform.",
      "documentation": "Offset due to scrolling and transient ancestor slides, excluding layout\nplacement declared by `with_placed_element_offset`. Subtract this from\nan element's prepaint origin to sample its content-space layout position.\nWithout a declared placement scope this equals `element_offset()`.\nThis is prepaint metadata, not a separate rendering or hit-test transform.",
      "signature": "pub fn ambient_element_offset (& self) -> Point<Pixels>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::appearance",
      "name": "appearance",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the appearance of the current window.",
      "documentation": "Returns the appearance of the current window.",
      "signature": "pub fn appearance (& self) -> WindowAppearance",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::available_actions",
      "name": "available_actions",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns all available actions for the focused element.",
      "documentation": "Returns all available actions for the focused element.",
      "signature": "pub fn available_actions (& self, cx : & App) -> Vec<Box<dyn Action>>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::backdrop_luminance",
      "name": "backdrop_luminance",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "The mean luminance of the optical source a probed glass surface covered, in `0..=1`, or `None` while this lease holds no completed reading or was absent from the last submitted frame (including budget fallback). The source is sharp for clear glass and blurred for frost.",
      "documentation": "The mean luminance of the optical source a probed glass surface\ncovered, in `0..=1`, or `None` while this lease holds no completed\nreading or was absent from the last submitted frame (including budget\nfallback). The source is sharp for clear glass and blurred for frost.\n\nPass the opaque ID from a live [`crate::LuminanceProbeLease`], also set\nin [`crate::GlassMaterial::probe`], never its physical slot index. The\nrenderer copies the reading back without stalling the frame that took\nit, so the value describes the backdrop one frame ago: a caller that\nflips its own contrast on it must expect the flip to land a frame\nafter the backdrop moved, and `None` on any renderer that takes no\nprobes — the honest reading for a backdrop nobody measured.",
      "signature": "pub fn backdrop_luminance (& self, id : u32) -> Option<f32>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::backdrop_statistics",
      "name": "backdrop_statistics",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Statistics of the five sampled optical-source texels, not exhaustive backdrop extrema or linear-light measurements. See [`crate::BackdropStatistics`]. Pass a live [`crate::LuminanceProbeLease`] ID also set on the glass material. Availability and freshness match [`Self::backdrop_luminance`], including `None` for absent probes, budget fallback, and unsupported renderers. Collection preserves backend behavior: WGPU can wait for an outstanding map and DirectX can wait when mapping staging data; Metal reads its completion-populated cache. No additional GPU work is submitted here.",
      "documentation": "Statistics of the five sampled optical-source texels, not exhaustive\nbackdrop extrema or linear-light measurements. See [`crate::BackdropStatistics`].\nPass a live [`crate::LuminanceProbeLease`] ID also set on the glass material.\nAvailability and freshness match [`Self::backdrop_luminance`], including\n`None` for absent probes, budget fallback, and unsupported renderers.\nCollection preserves backend behavior: WGPU can wait for an outstanding\nmap and DirectX can wait when mapping staging data; Metal reads its\ncompletion-populated cache. No additional GPU work is submitted here.",
      "signature": "pub fn backdrop_statistics (& self, id : u32) -> Option<crate::BackdropStatistics>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::bindings_for_action",
      "name": "bindings_for_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns key bindings that invoke an action on the currently focused element. Bindings are returned in the order they were added. For display, the last binding should take precedence.",
      "documentation": "Returns key bindings that invoke an action on the currently focused element. Bindings are\nreturned in the order they were added. For display, the last binding should take precedence.",
      "signature": "pub fn bindings_for_action (& self, action : & dyn Action) -> Vec<KeyBinding>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::bindings_for_action_in",
      "name": "bindings_for_action_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns any bindings that would invoke an action on the given focus handle if it were focused. Bindings are returned in the order they were added. For display, the last binding should take precedence.",
      "documentation": "Returns any bindings that would invoke an action on the given focus handle if it were\nfocused. Bindings are returned in the order they were added. For display, the last binding\nshould take precedence.",
      "signature": "pub fn bindings_for_action_in (& self, action : & dyn Action, focus_handle : & FocusHandle,) -> Vec<KeyBinding>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::bindings_for_action_in_context",
      "name": "bindings_for_action_in_context",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the key bindings for an action in a context.",
      "documentation": "Returns the key bindings for an action in a context.",
      "signature": "pub fn bindings_for_action_in_context (& self, action : & dyn Action, context : KeyContext,) -> Vec<KeyBinding>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::blur",
      "name": "blur",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Remove focus from all elements within this context's window.",
      "documentation": "Remove focus from all elements within this context's window.",
      "signature": "pub fn blur (& mut self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::bounds",
      "name": "bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the bounds of the current window in the global coordinate space, which could span across multiple displays.",
      "documentation": "Returns the bounds of the current window in the global coordinate space, which could span across multiple displays.",
      "signature": "pub fn bounds (& self) -> Bounds<Pixels>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::bounds_changed",
      "name": "bounds_changed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Notify the window that its bounds have changed.",
      "documentation": "Notify the window that its bounds have changed.\n\nThis updates internal state like `viewport_size` and `scale_factor` from\nthe platform window, then notifies observers. Normally called automatically\nby the platform's resize callback, but exposed publicly for test infrastructure.",
      "signature": "pub fn bounds_changed (& mut self, cx : & mut App)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::cancel_context_menu",
      "name": "cancel_context_menu",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Invalidates this window's matching revision and requests native closure. `false` is an ended/stale/different native session; it cannot close a newer menu. Matching queued commands are invalidated even then. On refusal the revision remains invalidated but can be retried with the same identity. Await its completion before claiming native UI closure.",
      "documentation": "Invalidates this window's matching revision and requests native closure.\n`false` is an ended/stale/different native session; it cannot close a\nnewer menu. Matching queued commands are invalidated even then. On\nrefusal the revision remains invalidated but can be retried with the\nsame identity. Await its completion before claiming native UI closure.",
      "signature": "pub fn cancel_context_menu (& mut self, session : crate::NativeMenuSessionId,) -> Result<bool, crate::NativeMenuError>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::cancel_touch_input",
      "name": "cancel_touch_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Cancel every portable touch gesture, native pinch, pending long press and fling. Called automatically when the platform reports inactive. Backends must report inactive before suspending input or destroying the surface, even if no fingers remain. Hosts may call this before removing a gesture owner. Cancellation never synthesizes a release, click, or commit.",
      "documentation": "Cancel every portable touch gesture, native pinch, pending long press and fling.\nCalled automatically when the platform reports inactive. Backends must\nreport inactive before suspending input or destroying the surface, even\nif no fingers remain. Hosts may call this before removing a gesture\nowner. Cancellation never synthesizes a release, click, or commit.",
      "signature": "pub fn cancel_touch_input (& mut self, cx : & mut App)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::capslock",
      "name": "capslock",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "The current state of the keyboard's capslock",
      "documentation": "The current state of the keyboard's capslock",
      "signature": "pub fn capslock (& self) -> Capslock",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::capture_long_press",
      "name": "capture_long_press",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Captures the current long press for the given entity.",
      "documentation": "Captures the current long press for the given entity.\n\nThe capture is released when the gesture ends or is cancelled, or when\na replacement touch begins. A listener must also call\n[`Self::prevent_default`] on the started event to claim the gesture.",
      "signature": "pub fn capture_long_press<T : 'static> (& mut self, entity : & Entity<T>)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::capture_pointer",
      "name": "capture_pointer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Captures the pointer for the given hitbox. While captured, all mouse move and mouse up events will be routed to listeners that check this hitbox's `is_hovered` status, regardless of actual hit testing. This enables drag operations that continue even when the pointer moves outside the element's bounds.",
      "documentation": "Captures the pointer for the given hitbox. While captured, all mouse move and mouse up\nevents will be routed to listeners that check this hitbox's `is_hovered` status,\nregardless of actual hit testing. This enables drag operations that continue\neven when the pointer moves outside the element's bounds.\n\nThis legacy unbound capture releases on any mouse up or cancellation.\nPrefer [`Self::capture_pointer_for_button`] for a button-owned gesture.\nA capture whose hitbox disappears on redraw is cancelled. Stable element\nids preserve capture across rebuilt or cached frames, not across unmount.",
      "signature": "pub fn capture_pointer (& mut self, hitbox_id : HitboxId)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::capture_pointer_for_button",
      "name": "capture_pointer_for_button",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Captures until the specified button is released, or the stream is cancelled. Other buttons' releases do not terminate this gesture.",
      "documentation": "Captures until the specified button is released, or the stream is\ncancelled. Other buttons' releases do not terminate this gesture.",
      "signature": "pub fn capture_pointer_for_button (& mut self, hitbox_id : HitboxId, button : MouseButton)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::captured_hitbox",
      "name": "captured_hitbox",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the hitbox that has captured the pointer, if any.",
      "documentation": "Returns the hitbox that has captured the pointer, if any.",
      "signature": "pub fn captured_hitbox (& self) -> Option<HitboxId>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::clear_document_selection",
      "name": "clear_document_selection",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Forgets the document selection.",
      "documentation": "Forgets the document selection.",
      "signature": "pub fn clear_document_selection (& mut self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::client_inset",
      "name": "client_inset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the client_inset value by [`Self::set_client_inset`].",
      "documentation": "Returns the client_inset value by [`Self::set_client_inset`].",
      "signature": "pub fn client_inset (& self) -> Option<Pixels>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::compute_layout",
      "name": "compute_layout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Compute the layout for the given id within the given available space. This method is called for its side effect, typically by the framework prior to painting. After calling it, you can request the bounds of the given layout node id or any descendant.",
      "documentation": "Compute the layout for the given id within the given available space.\nThis method is called for its side effect, typically by the framework prior to painting.\nAfter calling it, you can request the bounds of the given layout node id or any descendant.\n\nThis method should only be called as part of the prepaint phase of element drawing.",
      "signature": "pub fn compute_layout (& mut self, layout_id : LayoutId, available_space : Size<AvailableSpace>, cx : & mut App,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::compute_layout_with_size",
      "name": "compute_layout_with_size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Compute a root with assigned border-box dimensions for this invocation. Authored root size/min/max/aspect-ratio are temporarily overridden; descendants reflow normally. Padding/borders and device-pixel rounding may enlarge the result: query actual bounds with [`Self::layout_bounds`]. Subsequent natural computation restores authored sizing.",
      "documentation": "Compute a root with assigned border-box dimensions for this invocation.\nAuthored root size/min/max/aspect-ratio are temporarily overridden;\ndescendants reflow normally. Padding/borders and device-pixel rounding\nmay enlarge the result: query actual bounds with [`Self::layout_bounds`].\nSubsequent natural computation restores authored sizing.",
      "signature": "pub fn compute_layout_with_size (& mut self, layout_id : LayoutId, available_space : Size<AvailableSpace>, assigned_size : Size<Pixels>, cx : & mut App,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::consume_scroll_delta",
      "name": "consume_scroll_delta",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Consumes actual wheel movement on the event's original axes. Subsequent listeners receive only the remainder, including unused axes and edge overshoot. Supply the same line height used to interpret the event; line deltas remain in lines for ancestors with different typography. Does nothing outside mouse-wheel dispatch. Fully consumed events stop propagating; explicit `App::stop_propagation` still refuses all remainder.",
      "documentation": "Consumes actual wheel movement on the event's original axes. Subsequent\nlisteners receive only the remainder, including unused axes and edge\novershoot. Supply the same line height used to interpret the event;\nline deltas remain in lines for ancestors with different typography.\nDoes nothing outside mouse-wheel dispatch. Fully consumed events stop\npropagating; explicit `App::stop_propagation` still refuses all remainder.",
      "signature": "pub fn consume_scroll_delta (& mut self, consumed : Point<Pixels>, line_height : Pixels, cx : & mut App,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::content_mask",
      "name": "content_mask",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Obtain the current content mask. This method should only be called during element drawing.",
      "documentation": "Obtain the current content mask. This method should only be called during element drawing.",
      "signature": "pub fn content_mask (& self) -> ContentMask<Pixels>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::context_stack",
      "name": "context_stack",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the current context stack.",
      "documentation": "Returns the current context stack.",
      "signature": "pub fn context_stack (& self) -> Vec<KeyContext>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::create_native_surface",
      "name": "create_native_surface",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Creates a native surface slot between the root scene and GPUI's deferred/window-level overlay scene.",
      "documentation": "Creates a native surface slot between the root scene and GPUI's\ndeferred/window-level overlay scene.",
      "signature": "pub fn create_native_surface (& self) -> anyhow::Result<Rc<dyn crate::PlatformNativeSurface>>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::current_view",
      "name": "current_view",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Get the entity ID for the currently rendering view",
      "documentation": "Get the entity ID for the currently rendering view",
      "signature": "pub fn current_view (& self) -> EntityId",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::debug_a11y_tree_json",
      "name": "debug_a11y_tree_json",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Debug representation of the last frame's accessibility information.",
      "documentation": "Debug representation of the last frame's accessibility information.",
      "signature": "pub fn debug_a11y_tree_json (& self) -> Option<String>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::default_prevented",
      "name": "default_prevented",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Obtain whether default has been prevented for the event currently being dispatched.",
      "documentation": "Obtain whether default has been prevented for the event currently being dispatched.",
      "signature": "pub fn default_prevented (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::defer",
      "name": "defer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Schedules the given function to be run at the end of the current effect cycle, allowing entities that are currently on the stack to be returned to the app.",
      "documentation": "Schedules the given function to be run at the end of the current effect cycle, allowing entities\nthat are currently on the stack to be returned to the app.",
      "signature": "pub fn defer (& self, cx : & mut App, f : impl FnOnce (& mut Window, & mut App) + 'static)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::defer_draw",
      "name": "defer_draw",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Defers the drawing of the given element, scheduling it to be painted on top of the currently-drawn tree at a later time. The `priority` parameter determines the drawing order relative to other deferred elements, with higher values being drawn on top.",
      "documentation": "Defers the drawing of the given element, scheduling it to be painted on top of the currently-drawn tree\nat a later time. The `priority` parameter determines the drawing order relative to other deferred elements,\nwith higher values being drawn on top.\n\nWhen `content_mask` is provided, the deferred element will be clipped to that region during\nboth prepaint and paint. When `None`, no additional clipping is applied.\n\nAccessibility surfaces attach to the window root, independently of their\ntrigger. Inline subtrees should use [`Self::defer_draw_with_accessibility`].\n\nThis method should only be called as part of the prepaint phase of element drawing.",
      "signature": "pub fn defer_draw (& mut self, element : AnyElement, absolute_offset : Point<Pixels>, priority : usize, content_mask : Option<ContentMask<Pixels>>,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::defer_draw_with_accessibility",
      "name": "defer_draw_with_accessibility",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Defers an inline subtree while retaining its logical accessibility ancestors and source-order child position, including nested deferrals. Clipping and paint priority behave exactly as in [`Self::defer_draw`]. Call only during prepaint.",
      "documentation": "Defers an inline subtree while retaining its logical accessibility\nancestors and source-order child position, including nested deferrals.\nClipping and paint priority behave exactly as in [`Self::defer_draw`].\nCall only during prepaint.",
      "signature": "pub fn defer_draw_with_accessibility (& mut self, element : AnyElement, absolute_offset : Point<Pixels>, priority : usize, content_mask : Option<ContentMask<Pixels>>,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::disable_focus",
      "name": "disable_focus",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Blur the window and don't allow anything in it to be focused again.",
      "documentation": "Blur the window and don't allow anything in it to be focused again.",
      "signature": "pub fn disable_focus (& mut self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::dispatch_action",
      "name": "dispatch_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Dispatch the given action on the currently focused element.",
      "documentation": "Dispatch the given action on the currently focused element.",
      "signature": "pub fn dispatch_action (& mut self, action : Box<dyn Action>, cx : & mut App)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::dispatch_event",
      "name": "dispatch_event",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Dispatch a mouse, keyboard, or touch event on the window.",
      "documentation": "Dispatch a mouse, keyboard, or touch event on the window.",
      "signature": "pub fn dispatch_event (& mut self, event : PlatformInput, cx : & mut App) -> DispatchEventResult",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::dispatch_keystroke",
      "name": "dispatch_keystroke",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Dispatch a given keystroke as though the user had typed it. You can create a keystroke with Keystroke::parse(\"\").",
      "documentation": "Dispatch a given keystroke as though the user had typed it.\nYou can create a keystroke with Keystroke::parse(\"\").",
      "signature": "pub fn dispatch_keystroke (& mut self, keystroke : Keystroke, cx : & mut App) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::display",
      "name": "display",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Determine the display on which the window is visible.",
      "documentation": "Determine the display on which the window is visible.",
      "signature": "pub fn display (& self, cx : & App) -> Option<Rc<dyn PlatformDisplay>>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::document_selection",
      "name": "document_selection",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "This window's document selection.",
      "documentation": "This window's document selection.",
      "signature": "pub fn document_selection (& self) -> & DocumentSelectionState",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::document_selection_mut",
      "name": "document_selection_mut",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "This window's document selection, for a caller placing or clearing it.",
      "documentation": "This window's document selection, for a caller placing or clearing it.",
      "signature": "pub fn document_selection_mut (& mut self) -> & mut DocumentSelectionState",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::document_selection_text",
      "name": "document_selection_text",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Reads the document selection out of the participants that were drawn.",
      "documentation": "Reads the document selection out of the participants that were drawn.\n\nReturns `None` when nothing is selected. The result states whether it\ncould prove it saw the whole span; see [`SelectionCopy::complete`].",
      "signature": "pub fn document_selection_text (& self) -> Option<SelectionCopy>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::drag_document_selection_to",
      "name": "drag_document_selection_to",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Moves the far end of the document selection to a window position.",
      "documentation": "Moves the far end of the document selection to a window position.\n\nA position inside a participant selects to that offset. A position past\nthe mounted content extends to the edge it passed, so a drag that left\nthe text it started in still means something. Returns whether the\nselection changed.",
      "signature": "pub fn drag_document_selection_to (& mut self, position : Point<Pixels>) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::draw",
      "name": "draw",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Produces a new frame and assigns it to `rendered_frame`. The internal presentation pass then shows the contents of the new [`Scene`].",
      "documentation": "Produces a new frame and assigns it to `rendered_frame`. The internal\npresentation pass then shows the contents of the new [`Scene`].",
      "signature": "pub fn draw (& mut self, cx : & mut App) -> ArenaClearNeeded",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::drop_image",
      "name": "drop_image",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Removes an image from the sprite atlas.",
      "documentation": "Removes an image from the sprite atlas.",
      "signature": "pub fn drop_image (& mut self, data : Arc<RenderImage>) -> Result<()>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::element_offset",
      "name": "element_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Obtain the current element offset. This method should only be called during the prepaint phase of element drawing.",
      "documentation": "Obtain the current element offset. This method should only be called during the\nprepaint phase of element drawing.",
      "signature": "pub fn element_offset (& self) -> Point<Pixels>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::enable_scene_overlay",
      "name": "enable_scene_overlay",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Enables an experimental transparent GPUI scene plane above native child views hosted by this window.",
      "documentation": "Enables an experimental transparent GPUI scene plane above native child\nviews hosted by this window.\n\nThe root scene remains on the primary surface. Deferred elements and\nwindow-level overlays are rendered on the transparent plane. Glyphs on\nthat plane use grayscale antialiasing because subpixel coverage cannot\nbe alpha-composited; root-scene text keeps the platform rendering mode.",
      "signature": "pub fn enable_scene_overlay (& self) -> anyhow::Result<()>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::focus",
      "name": "focus",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Move focus to the element associated with the given [`FocusHandle`].",
      "documentation": "Move focus to the element associated with the given [`FocusHandle`].",
      "signature": "pub fn focus (& mut self, handle : & FocusHandle, cx : & mut App)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::focus_from_pointer",
      "name": "focus_from_pointer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Move focus to the element a pointer press just landed on.",
      "documentation": "Move focus to the element a pointer press just landed on.\n\nThe same move as [`Window::focus`], and additionally the record that\nthis focus was placed by that press. It is the one distinction\nfocus-visible styling turns on: somebody who clicked a control already\nknows where they clicked, while focus a tab stop, an action, or a\ndialog moved is only visible because the ring says so.",
      "signature": "pub fn focus_from_pointer (& mut self, handle : & FocusHandle, cx : & mut App)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::focus_is_visible",
      "name": "focus_is_visible",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Whether the focused element's focus is worth drawing a ring around.",
      "documentation": "Whether the focused element's focus is worth drawing a ring around.\n\nFalse only while a pointer press is what put focus there. See\n[`Window::focus_from_pointer`] and\n[`InteractiveElement::focus_visible`].",
      "signature": "pub fn focus_is_visible (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::focus_next",
      "name": "focus_next",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Move focus to next tab stop.",
      "documentation": "Move focus to next tab stop.",
      "signature": "pub fn focus_next (& mut self, cx : & mut App)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::focus_prev",
      "name": "focus_prev",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Move focus to previous tab stop.",
      "documentation": "Move focus to previous tab stop.",
      "signature": "pub fn focus_prev (& mut self, cx : & mut App)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::focused",
      "name": "focused",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Obtain the currently focused [`FocusHandle`]. If no elements are focused, returns `None`.",
      "documentation": "Obtain the currently focused [`FocusHandle`]. If no elements are focused, returns `None`.",
      "signature": "pub fn focused (& self, cx : & App) -> Option<FocusHandle>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::frame_stats",
      "name": "frame_stats",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns deterministic structural counters for the most recently completed frame in this window.",
      "documentation": "Returns deterministic structural counters for the most recently\ncompleted frame in this window.",
      "signature": "pub fn frame_stats (& self) -> profiler::FrameStats",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::get_asset",
      "name": "get_asset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Asynchronously load an asset, if the asset hasn't finished loading or doesn't exist this will return None. Your view will not be re-drawn once the asset has finished loading.",
      "documentation": "Asynchronously load an asset, if the asset hasn't finished loading or doesn't exist this will return None.\nYour view will not be re-drawn once the asset has finished loading.\n\nNote that the multiple calls to this method will only result in one `Asset::load` call at a\ntime.",
      "signature": "pub fn get_asset<A : Asset> (& mut self, source : & A::Source, cx : & mut App) -> Option<A::Output>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::gpu_specs",
      "name": "gpu_specs",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Read information about the GPU backing this window. Currently returns None on Mac and Windows.",
      "documentation": "Read information about the GPU backing this window.\nCurrently returns None on Mac and Windows.",
      "signature": "pub fn gpu_specs (& self) -> Option<GpuSpecs>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::handle_input",
      "name": "handle_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets an input handler, such as [`ElementInputHandler`][element_input_handler], which interfaces with the platform to receive textual input with proper integration with concerns such as IME interactions. This handler will be active for the upcoming frame until the following frame is rendered.",
      "documentation": "Sets an input handler, such as [`ElementInputHandler`][element_input_handler], which interfaces with the\nplatform to receive textual input with proper integration with concerns such\nas IME interactions. This handler will be active for the upcoming frame until the following frame is\nrendered.\n\nThis method should only be called as part of the paint phase of element drawing.\n\n[element_input_handler]: crate::ElementInputHandler",
      "signature": "pub fn handle_input (& mut self, focus_handle : & FocusHandle, input_handler : impl InputHandler, cx : & App,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::handler_for",
      "name": "handler_for",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns a generic handler that invokes the given handler with the view and context associated with the given view handle.",
      "documentation": "Returns a generic handler that invokes the given handler with the view and context associated with the given view handle.",
      "signature": "pub fn handler_for<E : 'static, Callback : Fn (& mut E, & mut Window, & mut Context<E>) + 'static> (& self, entity : & Entity<E>, f : Callback,) -> impl Fn (& mut Window, & mut App) + 'static",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::has_active_prompt",
      "name": "has_active_prompt",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns whether a prompt rendered by GPUI is currently active in this window.",
      "documentation": "Returns whether a prompt rendered by GPUI is currently active in this window.\n\nThis is only true for prompts rendered in the window (see\n[`App::set_prompt_builder`]), not for platform-native prompt dialogs.",
      "signature": "pub fn has_active_prompt (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::has_image_atlas_entry",
      "name": "has_image_atlas_entry",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns whether every frame of an image is present in the sprite atlas.",
      "documentation": "Returns whether every frame of an image is present in the sprite atlas.",
      "signature": "pub fn has_image_atlas_entry (& self, data : & RenderImage) -> bool",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::has_long_press_capture",
      "name": "has_long_press_capture",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns whether the given entity has captured the current long press.",
      "documentation": "Returns whether the given entity has captured the current long press.",
      "signature": "pub fn has_long_press_capture<T : 'static> (& self, entity : & Entity<T>) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::has_pending_keystrokes",
      "name": "has_pending_keystrokes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Determine whether a potential multi-stroke key binding is in progress on this window.",
      "documentation": "Determine whether a potential multi-stroke key binding is in progress on this window.",
      "signature": "pub fn has_pending_keystrokes (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::highest_precedence_binding_for_action",
      "name": "highest_precedence_binding_for_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the highest precedence key binding that invokes an action on the currently focused element. This is more efficient than getting the last result of `bindings_for_action`.",
      "documentation": "Returns the highest precedence key binding that invokes an action on the currently focused\nelement. This is more efficient than getting the last result of `bindings_for_action`.",
      "signature": "pub fn highest_precedence_binding_for_action (& self, action : & dyn Action) -> Option<KeyBinding>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::highest_precedence_binding_for_action_in",
      "name": "highest_precedence_binding_for_action_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the highest precedence key binding that would invoke an action on the given focus handle if it were focused. This is more efficient than getting the last result of `bindings_for_action_in`.",
      "documentation": "Returns the highest precedence key binding that would invoke an action on the given focus\nhandle if it were focused. This is more efficient than getting the last result of\n`bindings_for_action_in`.",
      "signature": "pub fn highest_precedence_binding_for_action_in (& self, action : & dyn Action, focus_handle : & FocusHandle,) -> Option<KeyBinding>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::highest_precedence_binding_for_action_in_context",
      "name": "highest_precedence_binding_for_action_in_context",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the highest precedence key binding for an action in a context. This is more efficient than getting the last result of `bindings_for_action_in_context`.",
      "documentation": "Returns the highest precedence key binding for an action in a context. This is more\nefficient than getting the last result of `bindings_for_action_in_context`.",
      "signature": "pub fn highest_precedence_binding_for_action_in_context (& self, action : & dyn Action, context : KeyContext,) -> Option<KeyBinding>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::inner_window_bounds",
      "name": "inner_window_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Return the `WindowBounds` excluding insets (Wayland and X11)",
      "documentation": "Return the `WindowBounds` excluding insets (Wayland and X11)",
      "signature": "pub fn inner_window_bounds (& self) -> WindowBounds",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::input_latency_snapshot",
      "name": "input_latency_snapshot",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns a snapshot of the current input-latency histograms.",
      "documentation": "Returns a snapshot of the current input-latency histograms.",
      "signature": "pub fn input_latency_snapshot (& self) -> InputLatencySnapshot",
      "cfg": [
        "cfg (feature = \"input-latency-histogram\")"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::insert_hitbox",
      "name": "insert_hitbox",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "This method should be called during `prepaint`. You can use the returned [Hitbox] during `paint` or in an event handler to determine whether the inserted hitbox was the topmost.",
      "documentation": "This method should be called during `prepaint`. You can use\nthe returned [Hitbox] during `paint` or in an event handler\nto determine whether the inserted hitbox was the topmost.\n\nThis method should only be called as part of the prepaint phase of element drawing.",
      "signature": "pub fn insert_hitbox (& mut self, bounds : Bounds<Pixels>, behavior : HitboxBehavior) -> Hitbox",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::insert_inspector_hitbox",
      "name": "insert_inspector_hitbox",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Registers a hitbox that can be used for inspector picking mode, allowing users to select and inspect UI elements by clicking on them.",
      "documentation": "Registers a hitbox that can be used for inspector picking mode, allowing users to select and\ninspect UI elements by clicking on them.",
      "signature": "pub fn insert_inspector_hitbox (& mut self, hitbox_id : HitboxId, inspector_id : Option<& crate::InspectorElementId>, cx : & App,)",
      "cfg": [
        "cfg (any (feature = \"inspector\", debug_assertions))"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::insert_window_control_hitbox",
      "name": "insert_window_control_hitbox",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Set a hitbox which will act as a control area of the platform window.",
      "documentation": "Set a hitbox which will act as a control area of the platform window.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn insert_window_control_hitbox (& mut self, area : WindowControlArea, hitbox : Hitbox)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::insets",
      "name": "insets",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "System-reserved edge regions in logical pixels of the current content viewport. Changes invalidate the window, including animation frames. See [`crate::WindowInsets`] for resize versus overlay semantics.",
      "documentation": "System-reserved edge regions in logical pixels of the current content\nviewport. Changes invalidate the window, including animation frames.\nSee [`crate::WindowInsets`] for resize versus overlay semantics.",
      "signature": "pub fn insets (& self) -> crate::WindowInsets",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::invalidate_character_coordinates",
      "name": "invalidate_character_coordinates",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Updates the IME panel position suggestions for languages like japanese, chinese.",
      "documentation": "Updates the IME panel position suggestions for languages like japanese, chinese.",
      "signature": "pub fn invalidate_character_coordinates (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::is_a11y_active",
      "name": "is_a11y_active",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns whether accessibility features are active for this frame, i.e. whether assistive technology (such as a screen reader) is connected and an accessibility tree is being built.",
      "documentation": "Returns whether accessibility features are active for this frame,\ni.e. whether assistive technology (such as a screen reader) is\nconnected and an accessibility tree is being built.\n\nUse this to skip computing data during rendering that is only\nobservable through the accessibility tree. When accessibility is\nactivated, a redraw is forced, so gated work is recomputed before the\nnext tree update is sent to the platform.\n\nSee the [accessibility guide](crate::_accessibility) for an overview.",
      "signature": "pub fn is_a11y_active (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::is_action_available",
      "name": "is_action_available",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Determine whether the given action is available along the dispatch path to the currently focused element.",
      "documentation": "Determine whether the given action is available along the dispatch path to the currently focused element.",
      "signature": "pub fn is_action_available (& self, action : & dyn Action, cx : & App) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::is_action_available_in",
      "name": "is_action_available_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Determine whether the given action is available along the dispatch path to the given focus_handle.",
      "documentation": "Determine whether the given action is available along the dispatch path to the given focus_handle.",
      "signature": "pub fn is_action_available_in (& self, action : & dyn Action, focus_handle : & FocusHandle) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::is_fullscreen",
      "name": "is_fullscreen",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns whether or not the window is currently fullscreen",
      "documentation": "Returns whether or not the window is currently fullscreen",
      "signature": "pub fn is_fullscreen (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::is_inspector_picking",
      "name": "is_inspector_picking",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns true if the window is in inspector mode.",
      "documentation": "Returns true if the window is in inspector mode.",
      "signature": "pub fn is_inspector_picking (& self, _cx : & App) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::is_maximized",
      "name": "is_maximized",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Check if the platform window is maximized.",
      "documentation": "Check if the platform window is maximized.\n\nOn some platforms (namely Windows) this is different than the bounds being the size of the display",
      "signature": "pub fn is_maximized (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::is_minimizable",
      "name": "is_minimizable",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns whether this window is minimizable.",
      "documentation": "Returns whether this window is minimizable.",
      "signature": "pub fn is_minimizable (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::is_resizable",
      "name": "is_resizable",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns whether this window is resizable.",
      "documentation": "Returns whether this window is resizable.",
      "signature": "pub fn is_resizable (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::is_window_active",
      "name": "is_window_active",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns whether this window is focused by the operating system (receiving key events).",
      "documentation": "Returns whether this window is focused by the operating system (receiving key events).",
      "signature": "pub fn is_window_active (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::is_window_hovered",
      "name": "is_window_hovered",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns whether this window is considered to be the window that currently owns the mouse cursor. On mac, this is equivalent to `is_window_active`.",
      "documentation": "Returns whether this window is considered to be the window\nthat currently owns the mouse cursor.\nOn mac, this is equivalent to `is_window_active`.",
      "signature": "pub fn is_window_hovered (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::keystroke_text_for",
      "name": "keystroke_text_for",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Return a key binding string for an action, to display in the UI. Uses the highest precedence binding for the action (last binding added to the keymap).",
      "documentation": "Return a key binding string for an action, to display in the UI. Uses the highest precedence\nbinding for the action (last binding added to the keymap).",
      "signature": "pub fn keystroke_text_for (& self, action : & dyn Action) -> String",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::last_input_was_keyboard",
      "name": "last_input_was_keyboard",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns true if the last input event was keyboard-based (key press, tab navigation, etc.) This is used for focus-visible styling to show focus indicators only for keyboard navigation.",
      "documentation": "Returns true if the last input event was keyboard-based (key press, tab navigation, etc.)\nThis is used for focus-visible styling to show focus indicators only for keyboard navigation.",
      "signature": "pub fn last_input_was_keyboard (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::layout_bounds",
      "name": "layout_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Obtain the bounds computed for the given LayoutId relative to the window. This method will usually be invoked by GPUI itself automatically in order to pass your element its `Bounds` automatically.",
      "documentation": "Obtain the bounds computed for the given LayoutId relative to the window. This method will usually be invoked by\nGPUI itself automatically in order to pass your element its `Bounds` automatically.\n\nThis method should only be called as part of element drawing.",
      "signature": "pub fn layout_bounds (& mut self, layout_id : LayoutId) -> Bounds<Pixels>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::line_height",
      "name": "line_height",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "The line height associated with the current text style.",
      "documentation": "The line height associated with the current text style.",
      "signature": "pub fn line_height (& self) -> Pixels",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::listener_for",
      "name": "listener_for",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns a generic event listener that invokes the given listener with the view and context associated with the given view handle.",
      "documentation": "Returns a generic event listener that invokes the given listener with the view and context associated with the given view handle.",
      "signature": "pub fn listener_for<T : 'static, E> (& self, view : & Entity<T>, f : impl Fn (& mut T, & E, & mut Window, & mut Context<T>) + 'static,) -> impl Fn (& E, & mut Window, & mut App) + 'static",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::merge_all_windows",
      "name": "merge_all_windows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Merges all open windows into a single tabbed window. This is macOS specific.",
      "documentation": "Merges all open windows into a single tabbed window.\nThis is macOS specific.",
      "signature": "pub fn merge_all_windows (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::minimize_window",
      "name": "minimize_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Minimize the current window at the platform level. May do nothing on mobile; use [`Self::try_minimize_window`].",
      "documentation": "Minimize the current window at the platform level.\nMay do nothing on mobile; use [`Self::try_minimize_window`].",
      "signature": "pub fn minimize_window (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::modifiers",
      "name": "modifiers",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "The current state of the keyboard's modifiers",
      "documentation": "The current state of the keyboard's modifiers",
      "signature": "pub fn modifiers (& self) -> Modifiers",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::mouse_position",
      "name": "mouse_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "The position of the mouse relative to the window.",
      "documentation": "The position of the mouse relative to the window.",
      "signature": "pub fn mouse_position (& self) -> Point<Pixels>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::move_tab_to_new_window",
      "name": "move_tab_to_new_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Moves the tab to a new containing window. This is macOS specific.",
      "documentation": "Moves the tab to a new containing window.\nThis is macOS specific.",
      "signature": "pub fn move_tab_to_new_window (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::native_context_menu_tracking",
      "name": "native_context_menu_tracking",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Observes the current revision only while inside its native OS menu tracking call. Queued presentations and simulated menus return `None`; a replaced revision may still be leaving its loop when this is `None`. Only native smoke tests should use this; await session completion to determine closure in application code.",
      "documentation": "Observes the current revision only while inside its native OS menu\ntracking call. Queued presentations and simulated menus return `None`;\na replaced revision may still be leaving its loop when this is `None`.\nOnly native smoke tests should use this; await session completion to\ndetermine closure in application code.",
      "signature": "pub fn native_context_menu_tracking (& self) -> Option<crate::NativeMenuSessionId>",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::observe",
      "name": "observe",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Subscribe to events emitted by a entity. The entity to which you're subscribing must implement the [`EventEmitter`] trait. The callback will be invoked a handle to the emitting entity, the event, and a window context for the current window.",
      "documentation": "Subscribe to events emitted by a entity.\nThe entity to which you're subscribing must implement the [`EventEmitter`] trait.\nThe callback will be invoked a handle to the emitting entity, the event, and a window context for the current window.",
      "signature": "pub fn observe<T : 'static> (& mut self, observed : & Entity<T>, cx : & mut App, mut on_notify : impl FnMut (Entity<T>, & mut Window, & mut App) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::observe_button_layout_changed",
      "name": "observe_button_layout_changed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Registers a callback to be invoked when the window button layout changes.",
      "documentation": "Registers a callback to be invoked when the window button layout changes.",
      "signature": "pub fn observe_button_layout_changed (& self, mut callback : impl FnMut (& mut Window, & mut App) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::observe_global",
      "name": "observe_global",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register the given handler to be invoked whenever the global of the given type is updated.",
      "documentation": "Register the given handler to be invoked whenever the global of the given type\nis updated.",
      "signature": "pub fn observe_global<G : Global> (& mut self, cx : & mut App, f : impl Fn (& mut Window, & mut App) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::observe_release",
      "name": "observe_release",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register a callback to be invoked when the given `Entity` is released.",
      "documentation": "Register a callback to be invoked when the given `Entity` is released.",
      "signature": "pub fn observe_release<T> (& self, entity : & Entity<T>, cx : & mut App, mut on_release : impl FnOnce (& mut T, & mut Window, & mut App) + 'static,) -> Subscription where T : 'static,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::observe_window_appearance",
      "name": "observe_window_appearance",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Registers a callback to be invoked when the window appearance changes.",
      "documentation": "Registers a callback to be invoked when the window appearance changes.",
      "signature": "pub fn observe_window_appearance (& self, mut callback : impl FnMut (& mut Window, & mut App) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::on_a11y_action",
      "name": "on_a11y_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register a listener for an accessibility action on a specific node. The listener will be called when a screen reader requests the given action on the node identified by `node_id`.",
      "documentation": "Register a listener for an accessibility action on a specific node.\nThe listener will be called when a screen reader requests the given\naction on the node identified by `node_id`.\n\nRegistration is ignored when accessibility is inactive for the current\nframe. Activating accessibility forces a redraw before actions can be\ndelivered, so retaining listeners from inactive frames is unnecessary.\n\nSee the [accessibility guide](crate::_accessibility) for an overview.",
      "signature": "pub fn on_a11y_action (& mut self, node_id : accesskit::NodeId, action : accesskit::Action, mut listener : impl FnMut (Option<& accesskit::ActionData>, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::on_action",
      "name": "on_action",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register an action listener on this node for the next frame. The type of action is determined by the first parameter of the given listener. When the next frame is rendered the listener will be cleared.",
      "documentation": "Register an action listener on this node for the next frame. The type of action\nis determined by the first parameter of the given listener. When the next frame is rendered\nthe listener will be cleared.\n\nThis is a fairly low-level method, so prefer using action handlers on elements unless you have\na specific need to register a listener yourself.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn on_action (& mut self, action_type : TypeId, listener : impl Fn (& dyn Any, DispatchPhase, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::on_action_when",
      "name": "on_action_when",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register a capturing action listener on this node for the next frame if the condition is true. The type of action is determined by the first parameter of the given listener. When the next frame is rendered the listener will be cleared.",
      "documentation": "Register a capturing action listener on this node for the next frame if the condition is true.\nThe type of action is determined by the first parameter of the given listener. When the next\nframe is rendered the listener will be cleared.\n\nThis is a fairly low-level method, so prefer using action handlers on elements unless you have\na specific need to register a listener yourself.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn on_action_when (& mut self, condition : bool, action_type : TypeId, listener : impl Fn (& dyn Any, DispatchPhase, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::on_focus_in",
      "name": "on_focus_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register a listener to be called when the given focus handle or one of its descendants receives focus. This does not fire if the given focus handle - or one of its descendants - was previously focused. Returns a subscription and persists until the subscription is dropped.",
      "documentation": "Register a listener to be called when the given focus handle or one of its descendants receives focus.\nThis does not fire if the given focus handle - or one of its descendants - was previously focused.\nReturns a subscription and persists until the subscription is dropped.",
      "signature": "pub fn on_focus_in (& mut self, handle : & FocusHandle, cx : & mut App, mut listener : impl FnMut (& mut Window, & mut App) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::on_focus_out",
      "name": "on_focus_out",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register a listener to be called when the given focus handle or one of its descendants loses focus. Returns a subscription and persists until the subscription is dropped.",
      "documentation": "Register a listener to be called when the given focus handle or one of its descendants loses focus.\nReturns a subscription and persists until the subscription is dropped.",
      "signature": "pub fn on_focus_out (& mut self, handle : & FocusHandle, cx : & mut App, mut listener : impl FnMut (FocusOutEvent, & mut Window, & mut App) + 'static,) -> Subscription",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::on_key_event",
      "name": "on_key_event",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register a key event listener on this node for the next frame. The type of event is determined by the first parameter of the given listener. When the next frame is rendered the listener will be cleared.",
      "documentation": "Register a key event listener on this node for the next frame. The type of event\nis determined by the first parameter of the given listener. When the next frame is rendered\nthe listener will be cleared.\n\nThis is a fairly low-level method, so prefer using event handlers on elements unless you have\na specific need to register a listener yourself.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn on_key_event<Event : KeyEvent> (& mut self, listener : impl Fn (& Event, DispatchPhase, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::on_modifiers_changed",
      "name": "on_modifiers_changed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register a modifiers changed event listener on the window for the next frame.",
      "documentation": "Register a modifiers changed event listener on the window for the next frame.\n\nThis is a fairly low-level method, so prefer using event handlers on elements unless you have\na specific need to register a global listener.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn on_modifiers_changed (& mut self, listener : impl Fn (& ModifiersChangedEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::on_mouse_event",
      "name": "on_mouse_event",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register a mouse event listener on the window for the next frame. The type of event is determined by the first parameter of the given listener. When the next frame is rendered the listener will be cleared.",
      "documentation": "Register a mouse event listener on the window for the next frame. The type of event\nis determined by the first parameter of the given listener. When the next frame is rendered\nthe listener will be cleared.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn on_mouse_event<Event : MouseEvent> (& mut self, mut listener : impl FnMut (& Event, DispatchPhase, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::on_next_frame",
      "name": "on_next_frame",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Schedule the given closure to be run directly after the current frame is rendered.",
      "documentation": "Schedule the given closure to be run directly after the current frame is rendered.",
      "signature": "pub fn on_next_frame (& self, callback : impl FnOnce (& mut Window, & mut App) + 'static)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::on_touch_pan",
      "name": "on_touch_pan",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register an exclusive direction-aware touch manipulation listener during paint. `id` must be stable and unique in this window across frames. On `Started`, reject points outside your prepaint bounds, then call `prevent_default` to acquire. Offers bubble inner-first; acquisition automatically stops propagation. Only the acquiring ID receives later phases, even outside its original bounds. Keep that listener registered until the terminal event, or cancel touch input before removing it. See [`crate::TouchPanEvent`] for direction and scroll arbitration.",
      "documentation": "Register an exclusive direction-aware touch manipulation listener during\npaint. `id` must be stable and unique in this window across frames.\nOn `Started`, reject points outside your prepaint bounds, then call\n`prevent_default` to acquire. Offers bubble inner-first; acquisition\nautomatically stops propagation. Only the acquiring ID receives later\nphases, even outside its original bounds. Keep that listener registered\nuntil the terminal event, or cancel touch input before removing it.\nSee [`crate::TouchPanEvent`] for direction and scroll arbitration.",
      "signature": "pub fn on_touch_pan (& mut self, id : impl Into<ElementId>, mut listener : impl FnMut (& crate::TouchPanEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::on_touch_pinch",
      "name": "on_touch_pinch",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register a captured portable or native pinch listener during paint. On `Started`, hit-test `position` against prepaint bounds and prevent default to own the stream. Only that stable window-unique ID receives subsequent events, regardless of the moving centroid. Use the same ID with `on_touch_pan` to allow that pan to cancel and promote into this pinch on a second contact. No other claimed direct manipulation is eligible for takeover. Keep the owner registered until its terminal phase or cancel before removal.",
      "documentation": "Register a captured portable or native pinch listener during paint. On `Started`,\nhit-test `position` against prepaint bounds and prevent default to own\nthe stream. Only that stable window-unique ID receives subsequent events,\nregardless of the moving centroid. Use the same ID with `on_touch_pan`\nto allow that pan to cancel and promote into this pinch on a second\ncontact. No other claimed direct manipulation is eligible for takeover.\nKeep the owner registered until its terminal phase or cancel before removal.",
      "signature": "pub fn on_touch_pinch (& mut self, id : impl Into<ElementId>, mut listener : impl FnMut (& crate::PinchEvent, & mut Window, & mut App) + 'static,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::on_window_should_close",
      "name": "on_window_should_close",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register a callback that can interrupt the closing of the current window based the returned boolean. If the callback returns false, the window won't be closed.",
      "documentation": "Register a callback that can interrupt the closing of the current window based the returned boolean.\nIf the callback returns false, the window won't be closed.",
      "signature": "pub fn on_window_should_close (& self, cx : & App, f : impl Fn (& mut Window, & mut App) -> bool + 'static,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_backdrop_blur",
      "name": "paint_backdrop_blur",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paint a within-window backdrop blur: everything already painted beneath `bounds` is snapshotted and painted back gaussian-blurred inside the rounded rect (frosted-glass popovers). Metal, WGPU and DirectX renderers support it; invalid radii and blur regions beyond a renderer's bounded per-frame budget fall back to the sharp source. Frosted callers should keep a translucent fill over it. Content painted AFTER this call composites on top of the blur.",
      "documentation": "Paint a within-window backdrop blur: everything already painted\nbeneath `bounds` is snapshotted and painted back gaussian-blurred\ninside the rounded rect (frosted-glass popovers). Metal, WGPU and\nDirectX renderers support it; invalid radii and blur regions beyond a\nrenderer's bounded per-frame budget fall back to the sharp source.\nFrosted callers should keep a translucent fill over it.\nContent painted AFTER this call composites on top of the blur.\n\nThis is [`Window::paint_backdrop_glass`] with [`GlassMaterial::frosted`]\nand no lobes: the backdrop is blurred and nothing about it is bent,\nsplit or lit.",
      "signature": "pub fn paint_backdrop_blur (& mut self, bounds : Bounds<Pixels>, corner_radii : Corners<Pixels>, blur_radius : Pixels,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_backdrop_glass",
      "name": "paint_backdrop_glass",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paint a within-window glass surface: everything already painted beneath `bounds` is snapshotted and painted back through the surface's shape and `material`. A zero [`GlassMaterial::blur_radius`] keeps the snapshot sharp; it does not disable refraction or the rest of the optics.",
      "documentation": "Paint a within-window glass surface: everything already painted beneath\n`bounds` is snapshotted and painted back through the surface's shape and\n`material`. A zero [`GlassMaterial::blur_radius`] keeps the snapshot\nsharp; it does not disable refraction or the rest of the optics.\n\n`lobes` is the shape. An empty slice means the surface is the single\nrounded rect named by `bounds` and `corner_radii`, which is the common\ncase; several lobes are joined by [`GlassMaterial::smoothing`] into one\nbody, and `bounds` must then be their union's bounding box because that\nis the region the renderer rasterizes and the blur is clipped to. Lobes\npast [`MAX_GLASS_LOBES`] are dropped.\n\nMetal, DirectX, and native/browser WGPU implement this complete\ncontract. A bounded renderer may discard requested scattering when it\nruns out of Gaussian work, but it must retain the sharp snapshot and\nevery other optical field. `material` is sanitized on the way in, so a\nvalue computed from an animation cannot produce a hole. The scene\nadmits at most [`crate::MAX_BACKDROP_GLASS_SURFACES_PER_FRAME`] surfaces;\ncallers without an ordinary fill should use\n[`Window::paint_backdrop_glass_with_fallback`] so rejection remains a\nlegible surface rather than a hole.\n\nContent painted AFTER this call composites on top.",
      "signature": "pub fn paint_backdrop_glass (& mut self, bounds : Bounds<Pixels>, corner_radii : Corners<Pixels>, material : GlassMaterial<Pixels>, lobes : & [GlassLobe<Pixels>],)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_backdrop_glass_with_fallback",
      "name": "paint_backdrop_glass_with_fallback",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paint a within-window glass surface with an ordinary-fill fallback.",
      "documentation": "Paint a within-window glass surface with an ordinary-fill fallback.\n\nThis has the same optical contract as [`Window::paint_backdrop_glass`].\nWhen the surface is past\n[`crate::MAX_BACKDROP_GLASS_SURFACES_PER_FRAME`], however, the scene\npaints `fallback` through the same rounded-rect or lobe shape instead\nof asking a renderer for another full-frame snapshot. The decision is\nretained by scene replay, so cached subtrees cannot bypass the budget\nor lose their fallback when their paint order changes.",
      "signature": "pub fn paint_backdrop_glass_with_fallback (& mut self, bounds : Bounds<Pixels>, corner_radii : Corners<Pixels>, material : GlassMaterial<Pixels>, lobes : & [GlassLobe<Pixels>], fallback : impl Into<Hsla>,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_drop_shadows",
      "name": "paint_drop_shadows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paint the drop (non-inset) shadows from `shadows` into the scene at the current z-index. Inset shadows are skipped; paint those with [`Self::paint_inset_shadows`] after the element's background so they layer on top of the fill.",
      "documentation": "Paint the drop (non-inset) shadows from `shadows` into the scene at the current\nz-index. Inset shadows are skipped; paint those with [`Self::paint_inset_shadows`]\nafter the element's background so they layer on top of the fill.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn paint_drop_shadows (& mut self, bounds : Bounds<Pixels>, corner_radii : Corners<Pixels>, shadows : & [BoxShadow],)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_emoji",
      "name": "paint_emoji",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paints an emoji glyph into the scene for the next frame at the current z-index.",
      "documentation": "Paints an emoji glyph into the scene for the next frame at the current z-index.\n\nThe y component of the origin is the baseline of the glyph.\nYou should generally prefer to use the [`ShapedLine::paint`](crate::ShapedLine::paint) or\n[`WrappedLine::paint`](crate::WrappedLine::paint) methods in the [`TextSystem`](crate::TextSystem).\nThis method is only useful if you need to paint a single emoji that has already been shaped.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn paint_emoji (& mut self, origin : Point<Pixels>, font_id : FontId, glyph_id : GlyphId, font_size : Pixels,) -> Result<()>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_glyph",
      "name": "paint_glyph",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paints a monochrome (non-emoji) glyph into the scene for the next frame at the current z-index.",
      "documentation": "Paints a monochrome (non-emoji) glyph into the scene for the next frame at the current z-index.\n\nThe y component of the origin is the baseline of the glyph.\nYou should generally prefer to use the [`ShapedLine::paint`](crate::ShapedLine::paint) or\n[`WrappedLine::paint`](crate::WrappedLine::paint) methods in the [`TextSystem`](crate::TextSystem).\nThis method is only useful if you need to paint a single glyph that has already been shaped.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn paint_glyph (& mut self, origin : Point<Pixels>, font_id : FontId, glyph_id : GlyphId, font_size : Pixels, color : Hsla,) -> Result<()>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_image",
      "name": "paint_image",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paint an image into the scene for the next frame at the current z-index. This method will panic if the frame_index is not valid.",
      "documentation": "Paint an image into the scene for the next frame at the current z-index.\nThis method will panic if the frame_index is not valid.\n\nThis method should only be called as part of the paint phase of element drawing.\nPaint an image into `bounds`, positioning and scaling it according to `image_bounds`.\n\nThe visible region rendered is `bounds.intersect(&image_bounds)`, with `corner_radii`\napplied to `bounds`.",
      "signature": "pub fn paint_image (& mut self, bounds : Bounds<Pixels>, image_bounds : Bounds<Pixels>, corner_radii : Corners<Pixels>, data : Arc<RenderImage>, frame_index : usize, grayscale : bool,) -> Result<()>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_inset_shadows",
      "name": "paint_inset_shadows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paint the inset shadows from `shadows` into the scene at the current z-index. Should be called after the element's background so the shadow layers on top of the fill. Drop shadows are skipped; paint those with [`Self::paint_drop_shadows`] before the background.",
      "documentation": "Paint the inset shadows from `shadows` into the scene at the current z-index. Should\nbe called after the element's background so the shadow layers on top of the fill.\nDrop shadows are skipped; paint those with [`Self::paint_drop_shadows`] before the background.",
      "signature": "pub fn paint_inset_shadows (& mut self, bounds : Bounds<Pixels>, corner_radii : Corners<Pixels>, shadows : & [BoxShadow],)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_layer",
      "name": "paint_layer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Creates a new painting layer for the specified bounds. A \"layer\" is a batch of geometry that are non-overlapping and have the same draw order. This is typically used for performance reasons.",
      "documentation": "Creates a new painting layer for the specified bounds. A \"layer\" is a batch\nof geometry that are non-overlapping and have the same draw order. This is typically used\nfor performance reasons.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn paint_layer<R> (& mut self, bounds : Bounds<Pixels>, f : impl FnOnce (& mut Self) -> R) -> R",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_mark",
      "name": "paint_mark",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Marks the start of live GPUI painting, without retaining any element. Pair with [`Self::record_paint_since`] in this same paint call.",
      "documentation": "Marks the start of live GPUI painting, without retaining any element.\nPair with [`Self::record_paint_since`] in this same paint call.",
      "signature": "pub fn paint_mark (& self) -> crate::PaintMark",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_particle_batch",
      "name": "paint_particle_batch",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Samples deterministic CPU particle emitters and paints the live sprites in one atlas-backed batch.",
      "documentation": "Samples deterministic CPU particle emitters and paints the live sprites\nin one atlas-backed batch.\n\n`elapsed` is absolute time since the semantic effect began, not a frame\ndelta. Re-sampling the same emitters at the same instant yields the same\ninstances regardless of prior frames. All emitter definitions and the\naggregate slot ceiling are validated before the scene is modified. The\nreturned count is the number of live instances painted at this instant.\nThis method installs no hitbox or accessibility node.",
      "signature": "pub fn paint_particle_batch (& mut self, data : Arc<RenderImage>, frame_index : usize, elapsed : Duration, emitters : & [ParticleEmitter],) -> Result<usize>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_path",
      "name": "paint_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paint the given `Path` into the scene for the next frame at the current z-index.",
      "documentation": "Paint the given `Path` into the scene for the next frame at the current z-index.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn paint_path (& mut self, mut path : Path<Pixels>, color : impl Into<Background>)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_platform_view",
      "name": "paint_platform_view",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Registers a natively hosted view to occupy `bounds` for the frame being painted. The platform layer attaches and positions the view once the frame is complete, and hides any view that stops being painted.",
      "documentation": "Registers a natively hosted view to occupy `bounds` for the frame being\npainted. The platform layer attaches and positions the view once the\nframe is complete, and hides any view that stops being painted.\n\nPrefer the [`crate::platform_view`] element; this is its paint step.\n\nThis method should only be called as part of the paint phase of element\ndrawing.",
      "signature": "pub fn paint_platform_view (& mut self, bounds : Bounds<Pixels>, handle : PlatformViewHandle)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_quad",
      "name": "paint_quad",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paint one or more quads into the scene for the next frame at the current stacking context. Quads are colored rectangular regions with an optional background, border, and corner radius. see [`fill`], [`outline`], and [`quad`] to construct this type.",
      "documentation": "Paint one or more quads into the scene for the next frame at the current stacking context.\nQuads are colored rectangular regions with an optional background, border, and corner radius.\nsee [`fill`], [`outline`], and [`quad`] to construct this type.\n\nThis method should only be called as part of the paint phase of element drawing.\n\nNote that the `quad.corner_radii` are allowed to exceed the bounds, creating sharp corners\nwhere the circular arcs meet. This will not display well when combined with dashed borders.\nUse `Corners::clamp_radii_for_quad_size` if the radii should fit within the bounds.",
      "signature": "pub fn paint_quad (& mut self, quad : PaintQuad)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_recording",
      "name": "paint_recording",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Replays frozen visual paint only, replacing capture-time ambient uniform transform/opacity with the current scope. The captured visible clipping moves with the picture and intersects current clipping; previously culled content never reappears. No live element authority returns.",
      "documentation": "Replays frozen visual paint only, replacing capture-time ambient uniform\ntransform/opacity with the current scope. The captured visible clipping\nmoves with the picture and intersects current clipping; previously culled\ncontent never reappears. No live element authority returns.",
      "signature": "pub fn paint_recording (& mut self, recording : & crate::PaintRecording,) -> Result<(), crate::PaintRecordingError>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_recording_with_offset",
      "name": "paint_recording_with_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Replays as [`Self::paint_recording`], translated by `offset` in current local replay coordinates. The ambient visual scale applies to this offset exactly once. Current ancestor clipping does not move with the offset.",
      "documentation": "Replays as [`Self::paint_recording`], translated by `offset` in current\nlocal replay coordinates. The ambient visual scale applies to this offset\nexactly once. Current ancestor clipping does not move with the offset.",
      "signature": "pub fn paint_recording_with_offset (& mut self, recording : & crate::PaintRecording, offset : Point<Pixels>,) -> Result<(), crate::PaintRecordingError>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_sprite_batch",
      "name": "paint_sprite_batch",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paints a batch of independently transformed samples from one image frame.",
      "documentation": "Paints a batch of independently transformed samples from one image frame.\n\nThe frame is uploaded to the atlas once. Each [`SpriteInstance`] then\nnarrows its own half-open source rectangle, applies a center-relative\ntransform and rounded/source-alpha mask, and selects normal, additive,\nor screen compositing. Invalid source geometry returns an error instead\nof sampling another atlas tile. This method installs no hitbox or\naccessibility node.",
      "signature": "pub fn paint_sprite_batch (& mut self, data : Arc<RenderImage>, frame_index : usize, instances : & [SpriteInstance],) -> Result<()>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_strikethrough",
      "name": "paint_strikethrough",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paint a strikethrough into the scene for the next frame at the current z-index.",
      "documentation": "Paint a strikethrough into the scene for the next frame at the current z-index.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn paint_strikethrough (& mut self, origin : Point<Pixels>, width : Pixels, style : & StrikethroughStyle,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_surface",
      "name": "paint_surface",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paint a surface into the scene for the next frame at the current z-index.",
      "documentation": "Paint a surface into the scene for the next frame at the current z-index.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn paint_surface (& mut self, bounds : Bounds<Pixels>, image_buffer : CVPixelBuffer)",
      "cfg": [
        "cfg (target_os = \"macos\")"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_svg",
      "name": "paint_svg",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paint a monochrome SVG into the scene for the next frame at the current stacking context.",
      "documentation": "Paint a monochrome SVG into the scene for the next frame at the current stacking context.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn paint_svg (& mut self, bounds : Bounds<Pixels>, path : SharedString, mut data : Option<& [u8]>, transformation : TransformationMatrix, color : Hsla, cx : & App,) -> Result<()>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::paint_underline",
      "name": "paint_underline",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Paint an underline into the scene for the next frame at the current z-index.",
      "documentation": "Paint an underline into the scene for the next frame at the current z-index.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn paint_underline (& mut self, origin : Point<Pixels>, width : Pixels, style : & UnderlineStyle,)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::pending_input_keystrokes",
      "name": "pending_input_keystrokes",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the currently pending input keystrokes that might result in a multi-stroke key binding.",
      "documentation": "Returns the currently pending input keystrokes that might result in a multi-stroke key binding.",
      "signature": "pub fn pending_input_keystrokes (& self) -> Option<& [Keystroke]>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::pixel_snap",
      "name": "pixel_snap",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Rounds a logical value to the nearest device pixel.",
      "documentation": "Rounds a logical value to the nearest device pixel.",
      "signature": "pub fn pixel_snap (& self, value : Pixels) -> Pixels",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::pixel_snap_bounds",
      "name": "pixel_snap_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Snaps a bounds' origin and size to the nearest device pixel.",
      "documentation": "Snaps a bounds' origin and size to the nearest device pixel.",
      "signature": "pub fn pixel_snap_bounds (& self, bounds : Bounds<Pixels>) -> Bounds<Pixels>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::pixel_snap_f64",
      "name": "pixel_snap_f64",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "f64 variant of [`Self::pixel_snap`].",
      "documentation": "f64 variant of [`Self::pixel_snap`].",
      "signature": "pub fn pixel_snap_f64 (& self, value : f64) -> f64",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::pixel_snap_point",
      "name": "pixel_snap_point",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Snaps a point's coordinates to the nearest device pixel.",
      "documentation": "Snaps a point's coordinates to the nearest device pixel.",
      "signature": "pub fn pixel_snap_point (& self, position : Point<Pixels>) -> Point<Pixels>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::play_system_bell",
      "name": "play_system_bell",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Request the OS to play an alert sound. On some platforms this is associated with the window, for others it's just a simple global function call.",
      "documentation": "Request the OS to play an alert sound. On some platforms this is associated\nwith the window, for others it's just a simple global function call.",
      "signature": "pub fn play_system_bell (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::possible_bindings_for_input",
      "name": "possible_bindings_for_input",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Find the bindings that can follow the current input sequence for the current context stack.",
      "documentation": "Find the bindings that can follow the current input sequence for the current context stack.",
      "signature": "pub fn possible_bindings_for_input (& self, input : & [Keystroke]) -> Vec<KeyBinding>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::present_if_needed",
      "name": "present_if_needed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Submits the most recently drawn frame if it hasn't been submitted yet.",
      "documentation": "Submits the most recently drawn frame if it hasn't been submitted yet.\n\nBenchmarks drive drawing synchronously rather than through a platform\nframe-request loop, so they call this after each measured update to\nsubmit the frame like the production frame loop would.",
      "signature": "pub fn present_if_needed (& mut self)",
      "cfg": [
        "cfg (feature = \"bench\")"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::prevent_default",
      "name": "prevent_default",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Call to prevent the default action of an event. Currently only used to prevent parent elements from becoming focused on mouse down.",
      "documentation": "Call to prevent the default action of an event. Currently only used to prevent\nparent elements from becoming focused on mouse down.",
      "signature": "pub fn prevent_default (& mut self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::prompt",
      "name": "prompt",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Present a platform dialog. The provided message will be presented, along with buttons for each answer. When a button is clicked, the returned Receiver will receive the index of the clicked button.",
      "documentation": "Present a platform dialog.\nThe provided message will be presented, along with buttons for each answer.\nWhen a button is clicked, the returned Receiver will receive the index of the clicked button.",
      "signature": "pub fn prompt<T> (& mut self, level : PromptLevel, message : & str, detail : Option<& str>, answers : & [T], cx : & mut App,) -> oneshot::Receiver<usize> where T : Clone + Into<PromptButton>,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::record_paint_since",
      "name": "record_paint_since",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Freezes paint emitted since `mark`. This never runs element callbacks. Capture refuses unsupported content as a whole; callers should retire it immediately. Deferred draws anywhere in the frame conservatively refuse capture because their eventual paint is outside this range.",
      "documentation": "Freezes paint emitted since `mark`. This never runs element callbacks.\nCapture refuses unsupported content as a whole; callers should retire\nit immediately. Deferred draws anywhere in the frame conservatively\nrefuse capture because their eventual paint is outside this range.",
      "signature": "pub fn record_paint_since (& mut self, mark : crate::PaintMark,) -> Result<crate::PaintRecording, crate::PaintRecordingError>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::record_semantic_node",
      "name": "record_semantic_node",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Records one product semantic node published during the active frame.",
      "documentation": "Records one product semantic node published during the active frame.\n\nSemantic libraries call this from their paint-time probe. GPUI keeps\nthe counter at the window boundary without depending on any particular\nsemantic vocabulary.",
      "signature": "pub fn record_semantic_node (& mut self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::refresh",
      "name": "refresh",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Mark the window as dirty, scheduling it to be redrawn on the next frame.",
      "documentation": "Mark the window as dirty, scheduling it to be redrawn on the next frame.",
      "signature": "pub fn refresh (& mut self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::register_selection_participant",
      "name": "register_selection_participant",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Declares a text element as part of this window's document selection for the frame being prepainted.",
      "documentation": "Declares a text element as part of this window's document selection for\nthe frame being prepainted.\n\nA participant marked [`SelectionParticipant::sensitive`] is refused, so\nits bytes can never reach the aggregate copy path.",
      "signature": "pub fn register_selection_participant (& mut self, participant : & SelectionParticipant)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::release_pointer",
      "name": "release_pointer",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Releases any active pointer capture.",
      "documentation": "Releases any active pointer capture.",
      "signature": "pub fn release_pointer (& mut self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::rem_size",
      "name": "rem_size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "The size of an em for the base font of the application. Adjusting this value allows the UI to scale, just like zooming a web page.",
      "documentation": "The size of an em for the base font of the application. Adjusting this value allows the\nUI to scale, just like zooming a web page.",
      "signature": "pub fn rem_size (& self) -> Pixels",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::remove_window",
      "name": "remove_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Close this window.",
      "documentation": "Close this window.",
      "signature": "pub fn remove_window (& mut self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::render_to_image",
      "name": "render_to_image",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Renders the current frame's scene to a texture and returns the pixel data as an RGBA image. This does not present the frame to screen - useful for visual testing where we want to capture what would be rendered without displaying it or requiring the window to be visible.",
      "documentation": "Renders the current frame's scene to a texture and returns the pixel data as an RGBA image.\nThis does not present the frame to screen - useful for visual testing where we want\nto capture what would be rendered without displaying it or requiring the window to be visible.",
      "signature": "pub fn render_to_image (& self) -> anyhow::Result<image::RgbaImage>",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::replace_root",
      "name": "replace_root",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Replaces the root entity of the window with a new one.",
      "documentation": "Replaces the root entity of the window with a new one.",
      "signature": "pub fn replace_root<E> (& mut self, cx : & mut App, build_view : impl FnOnce (& mut Window, & mut Context<E>) -> E,) -> Entity<E> where E : 'static + Render,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::request_animation_frame",
      "name": "request_animation_frame",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Schedule a frame to be drawn on the next animation frame.",
      "documentation": "Schedule a frame to be drawn on the next animation frame.\n\nThis is useful for elements that need to animate continuously, such as a video player or an animated GIF.\nIt will cause the window to redraw on the next frame, even if no other changes have occurred.\n\nIf called from within a view, it will notify that view on the next frame. Otherwise, it will refresh the entire window.\n\nCallers driving purely decorative animations (spinners, pulses, and the\nlike) should prefer [`AnimationExt::with_animation`](crate::AnimationExt::with_animation),\nwhich automatically respects [`App::reduce_motion`]. When using this\nmethod directly for decorative motion, check [`App::reduce_motion`]\nand skip the frame request when it is set.",
      "signature": "pub fn request_animation_frame (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::request_attention",
      "name": "request_attention",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Requests that the operating system draw attention to this window.",
      "documentation": "Requests that the operating system draw attention to this window.",
      "signature": "pub fn request_attention (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::request_autoscroll",
      "name": "request_autoscroll",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "When you call this method during [`Element::prepaint`], containing elements will attempt to scroll to cause the specified bounds to become visible. When they decide to autoscroll, they will call [`Element::prepaint`] again with a new set of bounds. See [`crate::List`] for an example of an element that supports this method being called on the elements it contains. This method should only be called during the prepaint phase of element drawing.",
      "documentation": "When you call this method during [`Element::prepaint`], containing elements will attempt to\nscroll to cause the specified bounds to become visible. When they decide to autoscroll, they will call\n[`Element::prepaint`] again with a new set of bounds. See [`crate::List`] for an example of an element\nthat supports this method being called on the elements it contains. This method should only be\ncalled during the prepaint phase of element drawing.",
      "signature": "pub fn request_autoscroll (& mut self, bounds : Bounds<Pixels>)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::request_close",
      "name": "request_close",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Requests that the platform close this window through its normal close path, including any callback registered with [`Self::on_window_should_close`].",
      "documentation": "Requests that the platform close this window through its normal close\npath, including any callback registered with\n[`Self::on_window_should_close`].",
      "signature": "pub fn request_close (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::request_decorations",
      "name": "request_decorations",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "request a certain window decoration (Wayland)",
      "documentation": "request a certain window decoration (Wayland)",
      "signature": "pub fn request_decorations (& self, decorations : WindowDecorations)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::request_intrinsic_layout",
      "name": "request_intrinsic_layout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Request a leaf with natural content dimensions, such as an image. Authored or parent-assigned dimensions win; the natural aspect ratio derives only an unassigned axis. This is distinct from arbitrary text measurement and never imposes a minimum aspect-ratio height on a box whose two dimensions have already been resolved.",
      "documentation": "Request a leaf with natural content dimensions, such as an image.\nAuthored or parent-assigned dimensions win; the natural aspect ratio\nderives only an unassigned axis. This is distinct from arbitrary text\nmeasurement and never imposes a minimum aspect-ratio height on a box\nwhose two dimensions have already been resolved.\n\nNatural dimensions must be finite and non-negative; a zero-size asset\nhas no natural aspect ratio. Call during layout\nrequest or prepaint, as with [`Self::request_measured_layout`].",
      "signature": "pub fn request_intrinsic_layout (& mut self, style : Style, intrinsic : Size<Pixels>) -> LayoutId",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::request_layout",
      "name": "request_layout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Add a node to the layout tree for the current frame. Takes the `Style` of the element for which layout is being requested, along with the layout ids of any children. This method is called during calls to the [`Element::request_layout`] trait method and enables any element to participate in layout.",
      "documentation": "Add a node to the layout tree for the current frame. Takes the `Style` of the element for which\nlayout is being requested, along with the layout ids of any children. This method is called during\ncalls to the [`Element::request_layout`] trait method and enables any element to participate in layout.\n\nThis method should only be called as part of the request_layout or prepaint phase of element drawing.",
      "signature": "pub fn request_layout (& mut self, style : Style, children : impl IntoIterator<Item = LayoutId>, cx : & mut App,) -> LayoutId",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::request_measured_layout",
      "name": "request_measured_layout",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Add a node to the layout tree for the current frame. Instead of taking a `Style` and children, this variant takes a function that is invoked during layout so you can use arbitrary logic to determine the element's size. One place this is used internally is when measuring text.",
      "documentation": "Add a node to the layout tree for the current frame. Instead of taking a `Style` and children,\nthis variant takes a function that is invoked during layout so you can use arbitrary logic to\ndetermine the element's size. One place this is used internally is when measuring text.\n\nThe given closure is invoked at layout time with the known dimensions and available space and\nreturns a `Size`.\n\nThis method should only be called as part of the request_layout or prepaint phase of element drawing.",
      "signature": "pub fn request_measured_layout<F> (& mut self, style : Style, measure : F) -> LayoutId where F : Fn (Size<Option<Pixels>>, Size<AvailableSpace>, & mut Window, & mut App) -> Size<Pixels> + 'static,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::resize",
      "name": "resize",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Set the content size of the window. May do nothing on mobile; use [`Self::try_resize`] to receive a refusal.",
      "documentation": "Set the content size of the window.\nMay do nothing on mobile; use [`Self::try_resize`] to receive a refusal.",
      "signature": "pub fn resize (& mut self, size : Size<Pixels>)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::root",
      "name": "root",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the root entity of the window, if it has one.",
      "documentation": "Returns the root entity of the window, if it has one.",
      "signature": "pub fn root<E> (& self) -> Option<Option<Entity<E>>> where E : 'static + Render,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::scale_factor",
      "name": "scale_factor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "The scale factor of the display associated with the window. For example, it could return 2.0 for a \"retina\" display, indicating that each logical pixel should actually be rendered as two pixels on screen.",
      "documentation": "The scale factor of the display associated with the window. For example, it could\nreturn 2.0 for a \"retina\" display, indicating that each logical pixel should actually\nbe rendered as two pixels on screen.",
      "signature": "pub fn scale_factor (& self) -> f32",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::select_all_in_selection_scope",
      "name": "select_all_in_selection_scope",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Selects every participant of one scope, end to end.",
      "documentation": "Selects every participant of one scope, end to end.",
      "signature": "pub fn select_all_in_selection_scope (& mut self, scope : SelectionScopeId)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::selection_participant_contains",
      "name": "selection_participant_contains",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Whether a window position lands inside a participant of `scope`.",
      "documentation": "Whether a window position lands inside a participant of `scope`.\n\nA press that lands nowhere is how a document selection is dismissed,\nso this answers a question about the gesture rather than about paint.",
      "signature": "pub fn selection_participant_contains (& self, scope : SelectionScopeId, position : Point<Pixels>,) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::selection_scope",
      "name": "selection_scope",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "The selection scope the element currently being drawn belongs to.",
      "documentation": "The selection scope the element currently being drawn belongs to.",
      "signature": "pub fn selection_scope (& self) -> SelectionScopeId",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_app_id",
      "name": "set_app_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets the application identifier.",
      "documentation": "Sets the application identifier.",
      "signature": "pub fn set_app_id (& mut self, app_id : & str)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_back_enabled",
      "name": "set_back_enabled",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Declare whether the host can currently consume system back.",
      "documentation": "Declare whether the host can currently consume system back.",
      "signature": "pub fn set_back_enabled (& self, enabled : bool)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_back_handler",
      "name": "set_back_handler",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Register the host's system-back action. The backend has no source on platforms without system back; this does not install an edge gesture.",
      "documentation": "Register the host's system-back action. The backend has no source on\nplatforms without system back; this does not install an edge gesture.",
      "signature": "pub fn set_back_handler (& self, callback : impl FnMut () + 'static)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_background_appearance",
      "name": "set_background_appearance",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets the window background appearance.",
      "documentation": "Sets the window background appearance.",
      "signature": "pub fn set_background_appearance (& self, background_appearance : WindowBackgroundAppearance)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_client_inset",
      "name": "set_client_inset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "When using client side decorations, set this to the width of the invisible decorations (Wayland and X11)",
      "documentation": "When using client side decorations, set this to the width of the invisible decorations (Wayland and X11)",
      "signature": "pub fn set_client_inset (& mut self, inset : Pixels)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_cursor_style",
      "name": "set_cursor_style",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Updates the cursor style at the platform level. This method should only be called during the paint phase of element drawing.",
      "documentation": "Updates the cursor style at the platform level. This method should only be called\nduring the paint phase of element drawing.",
      "signature": "pub fn set_cursor_style (& mut self, style : CursorStyle, hitbox : & Hitbox)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_document_path",
      "name": "set_document_path",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Set the path of the file this window represents. On macOS, this sets the window's accessibility document property (AXDocument).",
      "documentation": "Set the path of the file this window represents.\nOn macOS, this sets the window's accessibility document property (AXDocument).",
      "signature": "pub fn set_document_path (& self, path : Option<& std::path::Path>)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_exclusive_edge",
      "name": "set_exclusive_edge",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Set which anchored edge a layer-shell surface's exclusive zone applies to. This is only needed to disambiguate a corner-anchored surface; otherwise the edge is deduced from the anchor. The edge must be a single edge the surface is anchored to, or it is ignored. (Wayland layer-shell windows only)",
      "documentation": "Set which anchored edge a layer-shell surface's exclusive zone applies to.\nThis is only needed to disambiguate a corner-anchored surface; otherwise the\nedge is deduced from the anchor. The edge must be a single edge the surface\nis anchored to, or it is ignored. (Wayland layer-shell windows only)",
      "signature": "pub fn set_exclusive_edge (& self, edge : crate::layer_shell::Anchor)",
      "cfg": [
        "cfg (all (target_os = \"linux\", feature = \"wayland\"))"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_exclusive_zone",
      "name": "set_exclusive_zone",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Set the exclusive zone for a layer-shell surface: how much screen space it reserves so other surfaces avoid occluding it (e.g. a panel reserving space). Positive values reserve that distance from the anchored edge, 0 lets the surface be moved out of others' exclusive zones, and -1 ignores reserved space and may extend under other surfaces. (Wayland layer-shell windows only)",
      "documentation": "Set the exclusive zone for a layer-shell surface: how much screen space it\nreserves so other surfaces avoid occluding it (e.g. a panel reserving space).\nPositive values reserve that distance from the anchored edge, 0 lets the\nsurface be moved out of others' exclusive zones, and -1 ignores reserved\nspace and may extend under other surfaces. (Wayland layer-shell windows only)",
      "signature": "pub fn set_exclusive_zone (& self, zone : Pixels)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_focus_handle",
      "name": "set_focus_handle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets the focus handle for the current element. This handle will be used to manage focus state and keyboard event dispatch for the element.",
      "documentation": "Sets the focus handle for the current element. This handle will be used to manage focus state\nand keyboard event dispatch for the element.\n\nThis method should only be called as part of the prepaint phase of element drawing.",
      "signature": "pub fn set_focus_handle (& mut self, focus_handle : & FocusHandle, _ : & App)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_input_region",
      "name": "set_input_region",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Linux (wayland) only: Set the window's input region, the area that receives pointer and touch input. Events outside it pass through to whatever is below the window.",
      "documentation": "Linux (wayland) only: Set the window's input region, the area that receives pointer\nand touch input. Events outside it pass through to whatever is below the window.\n\n- `Some(rects)` restricts input to the union of `rects`, in window coordinates.\n- `Some(&[])` is an empty region, so the window receives no pointer or touch input.\n- `None` resets the region to the default, so the whole window receives input again.",
      "signature": "pub fn set_input_region (& self, region : Option<& [Bounds<Pixels>]>)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_key_context",
      "name": "set_key_context",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets the key context for the current element. This context will be used to translate keybindings into actions.",
      "documentation": "Sets the key context for the current element. This context will be used to translate\nkeybindings into actions.\n\nThis method should only be called as part of the paint phase of element drawing.",
      "signature": "pub fn set_key_context (& mut self, context : KeyContext)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_modifiers",
      "name": "set_modifiers",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "For testing: set the current modifier keys state. This does not generate any events.",
      "documentation": "For testing: set the current modifier keys state.\nThis does not generate any events.",
      "signature": "pub fn set_modifiers (& mut self, modifiers : Modifiers)",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_rem_size",
      "name": "set_rem_size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets the size of an em for the base font of the application. Adjusting this value allows the UI to scale, just like zooming a web page.",
      "documentation": "Sets the size of an em for the base font of the application. Adjusting this value allows the\nUI to scale, just like zooming a web page.",
      "signature": "pub fn set_rem_size (& mut self, rem_size : impl Into<Pixels>)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_scale_factor",
      "name": "set_scale_factor",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Overrides the display scale factor for tests.",
      "documentation": "Overrides the display scale factor for tests.",
      "signature": "pub fn set_scale_factor (& mut self, scale_factor : f32)",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_tabbing_identifier",
      "name": "set_tabbing_identifier",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets the tabbing identifier for the window. This is macOS specific.",
      "documentation": "Sets the tabbing identifier for the window.\nThis is macOS specific.",
      "signature": "pub fn set_tabbing_identifier (& self, tabbing_identifier : Option<String>)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_tooltip",
      "name": "set_tooltip",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets a tooltip to be rendered for the upcoming frame. This method should only be called during the paint phase of element drawing.",
      "documentation": "Sets a tooltip to be rendered for the upcoming frame. This method should only be called\nduring the paint phase of element drawing.",
      "signature": "pub fn set_tooltip (& mut self, tooltip : AnyTooltip) -> TooltipId",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_touch_prediction_enabled",
      "name": "set_touch_prediction_enabled",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets whether recognized touch pans may use the platform's predicted touch positions. Disabling drops [`TouchEvent::predicted_position`] before gesture recognition, so pans track only raw touch positions.",
      "documentation": "Sets whether recognized touch pans may use the platform's predicted\ntouch positions. Disabling drops [`TouchEvent::predicted_position`]\nbefore gesture recognition, so pans track only raw touch positions.",
      "signature": "pub fn set_touch_prediction_enabled (& mut self, enabled : bool)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_traffic_light_position",
      "name": "set_traffic_light_position",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets the position of the macOS traffic light buttons.",
      "documentation": "Sets the position of the macOS traffic light buttons.",
      "signature": "pub fn set_traffic_light_position (& self, position : Point<Pixels>)",
      "cfg": [
        "cfg (target_os = \"macos\")"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_view_id",
      "name": "set_view_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Sets the view id for the current element, which will be used to manage view caching.",
      "documentation": "Sets the view id for the current element, which will be used to manage view caching.\n\nThis method should only be called as part of element prepaint. We plan on removing this\nmethod eventually when we solve some issues that require us to construct editor elements\ndirectly instead of always using editors via views.",
      "signature": "pub fn set_view_id (& mut self, view_id : EntityId)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_window_cursor_style",
      "name": "set_window_cursor_style",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Updates the cursor style for the entire window at the platform level. A cursor style using this method will have precedence over any cursor style set using `set_cursor_style`. This method should only be called during the paint phase of element drawing.",
      "documentation": "Updates the cursor style for the entire window at the platform level. A cursor\nstyle using this method will have precedence over any cursor style set using\n`set_cursor_style`. This method should only be called during the paint\nphase of element drawing.",
      "signature": "pub fn set_window_cursor_style (& mut self, style : CursorStyle)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_window_edited",
      "name": "set_window_edited",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Mark the window as dirty at the platform level.",
      "documentation": "Mark the window as dirty at the platform level.",
      "signature": "pub fn set_window_edited (& mut self, edited : bool)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::set_window_title",
      "name": "set_window_title",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Updates the window's title at the platform level.",
      "documentation": "Updates the window's title at the platform level.",
      "signature": "pub fn set_window_title (& mut self, title : & str)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::show_character_palette",
      "name": "show_character_palette",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Show the platform character palette.",
      "documentation": "Show the platform character palette.",
      "signature": "pub fn show_character_palette (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::show_context_menu",
      "name": "show_context_menu",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Presents `menu` as an operating-system context menu at a position in this window's logical coordinate space.",
      "documentation": "Presents `menu` as an operating-system context menu at a position in\nthis window's logical coordinate space.\n\nThe native tracking loop begins after the current GPUI callback has\nreturned. Selection dispatches the item's [`Action`] through the focus\nand explicit EffectOwner captured here, then resolves the returned\nsession. Each session is a fresh revision: cancel it before changing its\nsource actions. Cancelled/replaced revisions cannot dispatch queued\ncommands. Only [`crate::NativeMenuError::NotSupported`] permits fallback.\nNative failure/transport loss reports Unavailable, never fake dismissal.",
      "signature": "pub fn show_context_menu (& mut self, menu : crate::Menu, position : Point<Pixels>, cx : & mut App,) -> std::result::Result<crate::NativeMenuSession, crate::NativeMenuError>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::show_window_menu",
      "name": "show_window_menu",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Opens the native title bar context menu, useful when implementing client side decorations (Wayland and X11)",
      "documentation": "Opens the native title bar context menu, useful when implementing client side decorations (Wayland and X11)",
      "signature": "pub fn show_window_menu (& self, position : Point<Pixels>)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::simulate_mouse_move",
      "name": "simulate_mouse_move",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "For testing: simulate a mouse move event to the given position. This dispatches the event through the normal event handling path, which will trigger hover states and tooltips.",
      "documentation": "For testing: simulate a mouse move event to the given position.\nThis dispatches the event through the normal event handling path,\nwhich will trigger hover states and tooltips.",
      "signature": "pub fn simulate_mouse_move (& mut self, position : Point<Pixels>, cx : & mut App)",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::simulate_next_frame",
      "name": "simulate_next_frame",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Runs all callbacks scheduled via [`Self::on_next_frame`], returning how many ran.",
      "documentation": "Runs all callbacks scheduled via [`Self::on_next_frame`], returning how many ran.\n\nTests have no platform frame loop, so this simulates the delivery of the\nnext frame.",
      "signature": "pub fn simulate_next_frame (& mut self, cx : & mut App) -> usize",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::spawn",
      "name": "spawn",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Spawn the future returned by the given closure on the application thread pool. The closure is provided a handle to the current window and an `AsyncWindowContext` for use within your future.",
      "documentation": "Spawn the future returned by the given closure on the application thread pool.\nThe closure is provided a handle to the current window and an `AsyncWindowContext` for\nuse within your future.",
      "signature": "pub fn spawn<AsyncFn, R> (& self, cx : & App, f : AsyncFn) -> Task<R> where R : 'static, AsyncFn : AsyncFnOnce (& mut AsyncWindowContext) -> R + 'static,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::spawn_with_priority",
      "name": "spawn_with_priority",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Spawn the future returned by the given closure on the application thread pool, with the given priority. The closure is provided a handle to the current window and an `AsyncWindowContext` for use within your future.",
      "documentation": "Spawn the future returned by the given closure on the application thread\npool, with the given priority. The closure is provided a handle to the\ncurrent window and an `AsyncWindowContext` for use within your future.",
      "signature": "pub fn spawn_with_priority<AsyncFn, R> (& self, priority : Priority, cx : & App, f : AsyncFn,) -> Task<R> where R : 'static, AsyncFn : AsyncFnOnce (& mut AsyncWindowContext) -> R + 'static,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::start_window_move",
      "name": "start_window_move",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Handle window movement for Linux and macOS. Tells the compositor to take control of window movement (Wayland and X11)",
      "documentation": "Handle window movement for Linux and macOS.\nTells the compositor to take control of window movement (Wayland and X11)\n\nEvents may not be received during a move operation.",
      "signature": "pub fn start_window_move (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::start_window_resize",
      "name": "start_window_resize",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Start an interactive window resize operation if this window is resizable.",
      "documentation": "Start an interactive window resize operation if this window is resizable.",
      "signature": "pub fn start_window_resize (& self, edge : ResizeEdge)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::subscribe",
      "name": "subscribe",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Subscribe to events emitted by a entity. The entity to which you're subscribing must implement the [`EventEmitter`] trait. The callback will be invoked a handle to the emitting entity, the event, and a window context for the current window.",
      "documentation": "Subscribe to events emitted by a entity.\nThe entity to which you're subscribing must implement the [`EventEmitter`] trait.\nThe callback will be invoked a handle to the emitting entity, the event, and a window context for the current window.",
      "signature": "pub fn subscribe<Emitter, Evt> (& mut self, entity : & Entity<Emitter>, cx : & mut App, mut on_event : impl FnMut (Entity<Emitter>, & Evt, & mut Window, & mut App) + 'static,) -> Subscription where Emitter : EventEmitter<Evt>, Evt : 'static,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::tab_bar_visible",
      "name": "tab_bar_visible",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the tab bar visibility. This is macOS specific.",
      "documentation": "Returns the tab bar visibility.\nThis is macOS specific.",
      "signature": "pub fn tab_bar_visible (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::tabbed_windows",
      "name": "tabbed_windows",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns a list of all tabbed windows and their titles. This is macOS specific.",
      "documentation": "Returns a list of all tabbed windows and their titles.\nThis is macOS specific.",
      "signature": "pub fn tabbed_windows (& self) -> Option<Vec<SystemWindowTab>>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::take_autoscroll",
      "name": "take_autoscroll",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "This method can be called from a containing element such as [`crate::List`] to support the autoscroll behavior described in [`Self::request_autoscroll`].",
      "documentation": "This method can be called from a containing element such as [`crate::List`] to support the autoscroll behavior\ndescribed in [`Self::request_autoscroll`].",
      "signature": "pub fn take_autoscroll (& mut self) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::text_input_state_changed",
      "name": "text_input_state_changed",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Notify native text services after caller-owned content or selection changes. Focus and keyboard-options changes are tracked during paint.",
      "documentation": "Notify native text services after caller-owned content or selection\nchanges. Focus and keyboard-options changes are tracked during paint.",
      "signature": "pub fn text_input_state_changed (& self, change : crate::TextInputStateChange)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::text_style",
      "name": "text_style",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "The current text style. Which is composed of all the style refinements provided to `with_text_style`.",
      "documentation": "The current text style. Which is composed of all the style refinements provided to `with_text_style`.",
      "signature": "pub fn text_style (& self) -> TextStyle",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::text_system",
      "name": "text_system",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Accessor for the text system.",
      "documentation": "Accessor for the text system.",
      "signature": "pub fn text_system (& self) -> & Arc<WindowTextSystem>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::titlebar_double_click",
      "name": "titlebar_double_click",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Perform titlebar double-click action. This is macOS specific.",
      "documentation": "Perform titlebar double-click action.\nThis is macOS specific.",
      "signature": "pub fn titlebar_double_click (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::to_async",
      "name": "to_async",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Creates an [`AsyncWindowContext`], which has a static lifetime and can be held across await points in async code.",
      "documentation": "Creates an [`AsyncWindowContext`], which has a static lifetime and can be held across\nawait points in async code.",
      "signature": "pub fn to_async (& self, cx : & App) -> AsyncWindowContext",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::toggle_fullscreen",
      "name": "toggle_fullscreen",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Toggle full screen status on the current window at the platform level. May do nothing on mobile; use [`Self::try_toggle_fullscreen`].",
      "documentation": "Toggle full screen status on the current window at the platform level.\nMay do nothing on mobile; use [`Self::try_toggle_fullscreen`].",
      "signature": "pub fn toggle_fullscreen (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::toggle_inspector",
      "name": "toggle_inspector",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Toggles the inspector mode on this window.",
      "documentation": "Toggles the inspector mode on this window.",
      "signature": "pub fn toggle_inspector (& mut self, cx : & mut App)",
      "cfg": [
        "cfg (any (feature = \"inspector\", debug_assertions))"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::toggle_window_tab_overview",
      "name": "toggle_window_tab_overview",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Shows or hides the window tab overview. This is macOS specific.",
      "documentation": "Shows or hides the window tab overview.\nThis is macOS specific.",
      "signature": "pub fn toggle_window_tab_overview (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::touch_prediction_enabled",
      "name": "touch_prediction_enabled",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Whether recognized touch pans may use the platform's predicted touch positions ([`TouchEvent::predicted_position`]) to compensate for input latency. Defaults to true.",
      "documentation": "Whether recognized touch pans may use the platform's predicted touch\npositions ([`TouchEvent::predicted_position`]) to compensate for input\nlatency. Defaults to true.",
      "signature": "pub fn touch_prediction_enabled (& self) -> bool",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::transact",
      "name": "transact",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Perform prepaint on child elements in a \"retryable\" manner, so that any side effects of prepaints can be discarded before prepainting again. This is used to support autoscroll where we need to prepaint children to detect the autoscroll bounds, then adjust the element offset and prepaint again. See [`crate::List`] for an example. This method should only be called during the prepaint phase of element drawing.",
      "documentation": "Perform prepaint on child elements in a \"retryable\" manner, so that any side effects\nof prepaints can be discarded before prepainting again. This is used to support autoscroll\nwhere we need to prepaint children to detect the autoscroll bounds, then adjust the\nelement offset and prepaint again. See [`crate::List`] for an example. This method should only be\ncalled during the prepaint phase of element drawing.",
      "signature": "pub fn transact<T, U> (& mut self, f : impl FnOnce (& mut Self) -> Result<T, U>) -> Result<T, U>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::try_minimize_window",
      "name": "try_minimize_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Checks and requests native minimization on the owner UI thread.",
      "documentation": "Checks and requests native minimization on the owner UI thread.",
      "signature": "pub fn try_minimize_window (& self) -> Result<(), crate::PlatformOperationError>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::try_resize",
      "name": "try_resize",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Checks and requests a content size on the owner UI thread. Success means accepted, not that an asynchronous native resize has completed.",
      "documentation": "Checks and requests a content size on the owner UI thread. Success means\naccepted, not that an asynchronous native resize has completed.",
      "signature": "pub fn try_resize (& mut self, size : Size<Pixels>) -> Result<(), crate::PlatformOperationError>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::try_toggle_fullscreen",
      "name": "try_toggle_fullscreen",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Checks and requests a fullscreen transition on the owner UI thread.",
      "documentation": "Checks and requests a fullscreen transition on the owner UI thread.",
      "signature": "pub fn try_toggle_fullscreen (& self) -> Result<(), crate::PlatformOperationError>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::try_zoom_window",
      "name": "try_zoom_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Checks and requests native zoom on the owner UI thread.",
      "documentation": "Checks and requests native zoom on the owner UI thread.",
      "signature": "pub fn try_zoom_window (& self) -> Result<(), crate::PlatformOperationError>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::use_asset",
      "name": "use_asset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Asynchronously load an asset, if the asset hasn't finished loading this will return None. Your view will be re-drawn once the asset has finished loading.",
      "documentation": "Asynchronously load an asset, if the asset hasn't finished loading this will return None.\nYour view will be re-drawn once the asset has finished loading.\n\nNote that the multiple calls to this method will only result in one `Asset::load` call at a\ntime.",
      "signature": "pub fn use_asset<A : Asset> (& mut self, source : & A::Source, cx : & mut App) -> Option<A::Output>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::use_keyed_state",
      "name": "use_keyed_state",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Use a piece of state that exists as long this element is being rendered in consecutive frames.",
      "documentation": "Use a piece of state that exists as long this element is being rendered in consecutive frames.",
      "signature": "pub fn use_keyed_state<S : 'static> (& mut self, key : impl Into<ElementId>, cx : & mut App, init : impl FnOnce (& mut Self, & mut Context<S>) -> S,) -> Entity<S>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::use_state",
      "name": "use_state",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Use a piece of state that exists as long this element is being rendered in consecutive frames, without needing to specify a key",
      "documentation": "Use a piece of state that exists as long this element is being rendered in consecutive frames, without needing to specify a key\n\nNOTE: This method uses the location of the caller to generate an ID for this state.\nIf this is not sufficient to identify your state (e.g. you're rendering a list item),\nyou can provide a custom ElementID using the `use_keyed_state` method.",
      "signature": "pub fn use_state<S : 'static> (& mut self, cx : & mut App, init : impl FnOnce (& mut Self, & mut Context<S>) -> S,) -> Entity<S>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::viewport_size",
      "name": "viewport_size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the size of the drawable area within the window.",
      "documentation": "Returns the size of the drawable area within the window.",
      "signature": "pub fn viewport_size (& self) -> Size<Pixels>",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::visual_transform",
      "name": "visual_transform",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "The inherited layout-to-display mapping. Capture during prepaint for semantic measurement (`map_bounds`) or pointer handlers (`unmap_point`). Layout callbacks and event positions are not implicitly rewritten.",
      "documentation": "The inherited layout-to-display mapping. Capture during prepaint for\nsemantic measurement (`map_bounds`) or pointer handlers (`unmap_point`).\nLayout callbacks and event positions are not implicitly rewritten.",
      "signature": "pub fn visual_transform (& self) -> crate::VisualTransform",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::window_bounds",
      "name": "window_bounds",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Return the `WindowBounds` to indicate that how a window should be opened after it has been closed",
      "documentation": "Return the `WindowBounds` to indicate that how a window should be opened\nafter it has been closed",
      "signature": "pub fn window_bounds (& self) -> WindowBounds",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::window_control_area_at",
      "name": "window_control_area_at",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the custom window-control area at `position` in the latest rendered frame.",
      "documentation": "Returns the custom window-control area at `position` in the latest\nrendered frame.\n\nThis test-support API verifies client title-bar hit testing without a\nnative compositor. Later-painted nested areas take precedence over an\nenclosing drag area, matching the platform callback.",
      "signature": "pub fn window_control_area_at (& self, position : Point<Pixels>) -> Option<WindowControlArea>",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::window_controls",
      "name": "window_controls",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns the controls supported by the platform.",
      "documentation": "Returns the controls supported by the platform.",
      "signature": "pub fn window_controls (& self) -> WindowControls",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::window_decorations",
      "name": "window_decorations",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Returns whether the title bar window controls need to be rendered by the application (Wayland and X11)",
      "documentation": "Returns whether the title bar window controls need to be rendered by the application (Wayland and X11)",
      "signature": "pub fn window_decorations (& self) -> Decorations",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::window_handle",
      "name": "window_handle",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Obtain GPUI's [`AnyWindowHandle`] for the window that belongs to this context.",
      "documentation": "Obtain GPUI's [`AnyWindowHandle`] for the window that belongs to this\ncontext.\n\nThis is not the operating system window handle. [`Window`] also\nimplements [`raw_window_handle::HasWindowHandle`]; because this inherent\nmethod has the same name as that trait method, callers that need a raw\nhandle must use its fully qualified form:\n`raw_window_handle::HasWindowHandle::window_handle(window)`.",
      "signature": "pub fn window_handle (& self) -> AnyWindowHandle",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::window_title",
      "name": "window_title",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Gets the window's title at the platform level. This is macOS specific.",
      "documentation": "Gets the window's title at the platform level.\nThis is macOS specific.",
      "signature": "pub fn window_title (& self) -> String",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_absolute_element_offset",
      "name": "with_absolute_element_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Updates the global element offset based on the given offset. This is used to implement drag handles and other manual painting of elements. This method should only be called during the prepaint phase of element drawing.",
      "documentation": "Updates the global element offset based on the given offset. This is used to implement\ndrag handles and other manual painting of elements. This method should only be called during\nthe prepaint phase of element drawing.",
      "signature": "pub fn with_absolute_element_offset<R> (& mut self, offset : Point<Pixels>, f : impl FnOnce (& mut Self) -> R,) -> R",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_content_mask",
      "name": "with_content_mask",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Invoke the given function with the given content mask after intersecting it with the current mask. This method should only be called during element drawing.",
      "documentation": "Invoke the given function with the given content mask after intersecting it\nwith the current mask. This method should only be called during element drawing.",
      "signature": "pub fn with_content_mask<R> (& mut self, mask : Option<ContentMask<Pixels>>, f : impl FnOnce (& mut Self) -> R,) -> R",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_edge_fade",
      "name": "with_edge_fade",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Executes the provided function with a vertical [`EdgeFade`] applied: every primitive painted inside is additionally faded by its vertical position — full alpha in the region's body, ramping to zero across `fade.band` at each active edge. Granularity is per-primitive (each quad/glyph/sprite takes the ramp value at its own position), which reads as a smooth gradient for text and small marks.",
      "documentation": "Executes the provided function with a vertical [`EdgeFade`] applied:\nevery primitive painted inside is additionally faded by its vertical\nposition — full alpha in the region's body, ramping to zero across\n`fade.band` at each active edge. Granularity is per-primitive (each\nquad/glyph/sprite takes the ramp value at its own position), which\nreads as a smooth gradient for text and small marks.",
      "signature": "pub fn with_edge_fade<R> (& mut self, fade : Option<EdgeFade>, f : impl FnOnce (& mut Self) -> R,) -> R",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_element_namespace",
      "name": "with_element_namespace",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Provide elements in the called function with a new namespace in which their identifiers must be unique. This can be used within a custom element to distinguish multiple sets of child elements.",
      "documentation": "Provide elements in the called function with a new namespace in which their identifiers must be unique.\nThis can be used within a custom element to distinguish multiple sets of child elements.",
      "signature": "pub fn with_element_namespace<R> (& mut self, element_id : impl Into<ElementId>, f : impl FnOnce (& mut Self) -> R,) -> R",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_element_offset",
      "name": "with_element_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Updates the global element offset relative to the current offset. This is used to implement scrolling. This method should only be called during the prepaint phase of element drawing.",
      "documentation": "Updates the global element offset relative to the current offset. This is used to implement\nscrolling. This method should only be called during the prepaint phase of element drawing.",
      "signature": "pub fn with_element_offset<R> (& mut self, offset : Point<Pixels>, f : impl FnOnce (& mut Self) -> R,) -> R",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_element_state",
      "name": "with_element_state",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Updates or initializes state for an element with the given id that lives across multiple frames. If an element with this ID existed in the rendered frame, its state will be passed to the given closure. The state returned by the closure will be stored so it can be referenced when drawing the next frame. This method should only be called as part of element drawing.",
      "documentation": "Updates or initializes state for an element with the given id that lives across multiple\nframes. If an element with this ID existed in the rendered frame, its state will be passed\nto the given closure. The state returned by the closure will be stored so it can be referenced\nwhen drawing the next frame. This method should only be called as part of element drawing.",
      "signature": "pub fn with_element_state<S, R> (& mut self, global_id : & GlobalElementId, f : impl FnOnce (Option<S>, & mut Self) -> (R, S),) -> R where S : 'static,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_global_id",
      "name": "with_global_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Acquire a globally unique identifier for the given ElementId. Only valid for the duration of the provided closure.",
      "documentation": "Acquire a globally unique identifier for the given ElementId.\nOnly valid for the duration of the provided closure.",
      "signature": "pub fn with_global_id<R> (& mut self, element_id : ElementId, f : impl FnOnce (& GlobalElementId, & mut Self) -> R,) -> R",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_id",
      "name": "with_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Calls the provided closure with the element ID pushed on the stack.",
      "documentation": "Calls the provided closure with the element ID pushed on the stack.",
      "signature": "pub fn with_id<R> (& mut self, element_id : impl Into<ElementId>, f : impl FnOnce (& mut Self) -> R,) -> R",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_image_cache",
      "name": "with_image_cache",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Executes the provided function with the specified image cache.",
      "documentation": "Executes the provided function with the specified image cache.",
      "signature": "pub fn with_image_cache<F, R> (& mut self, image_cache : Option<AnyImageCache>, f : F) -> R where F : FnOnce (& mut Self) -> R,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_inspector_state",
      "name": "with_inspector_state",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Executes the provided function with mutable access to an inspector state.",
      "documentation": "Executes the provided function with mutable access to an inspector state.",
      "signature": "pub fn with_inspector_state<T : 'static, R> (& mut self, _inspector_id : Option<& crate::InspectorElementId>, cx : & mut App, f : impl FnOnce (& mut Option<T>, & mut Self) -> R,) -> R",
      "cfg": [
        "cfg (any (feature = \"inspector\", debug_assertions))"
      ],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_optional_element_state",
      "name": "with_optional_element_state",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "A variant of `with_element_state` that allows the element's id to be optional. This is a convenience method for elements where the element id may or may not be assigned. Prefer using `with_element_state` when the element is guaranteed to have an id.",
      "documentation": "A variant of `with_element_state` that allows the element's id to be optional. This is a convenience\nmethod for elements where the element id may or may not be assigned. Prefer using `with_element_state`\nwhen the element is guaranteed to have an id.\n\nThe first option means 'no ID provided'\nThe second option means 'not yet initialized'",
      "signature": "pub fn with_optional_element_state<S, R> (& mut self, global_id : Option<& GlobalElementId>, f : impl FnOnce (Option<Option<S>>, & mut Self) -> (R, Option<S>),) -> R where S : 'static,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_placed_element_offset",
      "name": "with_placed_element_offset",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Places a root-laid-out subtree at `origin`, identifying `scroll_offset` as ambient scrolling rather than layout placement. Virtualizers supply their actual slot origin and scroll offset, not a second layout estimate.",
      "documentation": "Places a root-laid-out subtree at `origin`, identifying `scroll_offset`\nas ambient scrolling rather than layout placement. Virtualizers supply\ntheir actual slot origin and scroll offset, not a second layout estimate.\n\nRendering, clipping, input and accessibility use the same absolute\nplacement as `with_absolute_element_offset`. The additional metadata lets\nlayout motion distinguish a reordered slot from scrolling or ancestor\nslides. Nested placement composes in the parent's content coordinates.\nCall only during prepaint.",
      "signature": "pub fn with_placed_element_offset<R> (& mut self, origin : Point<Pixels>, scroll_offset : Point<Pixels>, f : impl FnOnce (& mut Self) -> R,) -> R",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_rem_size",
      "name": "with_rem_size",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Executes the provided function with the specified rem size.",
      "documentation": "Executes the provided function with the specified rem size.\n\nThis method must only be called as part of element drawing.",
      "signature": "pub fn with_rem_size<F, R> (& mut self, rem_size : Option<impl Into<Pixels>>, f : F) -> R where F : FnOnce (& mut Self) -> R,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_rounded_content_mask",
      "name": "with_rounded_content_mask",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Clips all descendants to a rounded rectangle in window coordinates. Enter the same scope in prepaint and paint. Pointer input evaluates the full inherited chain; accessibility exposes its conservative rectangle. This affects primitive writes, never the source sampled by backdrop optics.",
      "documentation": "Clips all descendants to a rounded rectangle in window coordinates.\nEnter the same scope in prepaint and paint. Pointer input evaluates the\nfull inherited chain; accessibility exposes its conservative rectangle.\nThis affects primitive writes, never the source sampled by backdrop optics.",
      "signature": "pub fn with_rounded_content_mask<R> (& mut self, clip : crate::RoundedClip, f : impl FnOnce (& mut Self) -> R,) -> R",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_selection_scope",
      "name": "with_selection_scope",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Draws `f` inside an isolated text-selection scope.",
      "documentation": "Draws `f` inside an isolated text-selection scope.\n\nA drag started inside the scope never reaches text outside it, and text\noutside it never joins a selection started within. This is what keeps a\ndialog mounted over a document from being selected together with it.",
      "signature": "pub fn with_selection_scope<F, R> (& mut self, scope : SelectionScopeId, f : F) -> R where F : FnOnce (& mut Self) -> R,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_tab_group",
      "name": "with_tab_group",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Executes the given closure within the context of a tab group.",
      "documentation": "Executes the given closure within the context of a tab group.",
      "signature": "pub fn with_tab_group<R> (& mut self, index : Option<isize>, f : impl FnOnce (& mut Self) -> R) -> R",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_text_style",
      "name": "with_text_style",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Push a text style onto the stack, and call a function with that style active. Use [`Window::text_style`] to get the current, combined text style. This method should only be called as part of element drawing.",
      "documentation": "Push a text style onto the stack, and call a function with that style active.\nUse [`Window::text_style`] to get the current, combined text style. This method\nshould only be called as part of element drawing.",
      "signature": "pub fn with_text_style<F, R> (& mut self, style : Option<TextStyleRefinement>, f : F) -> R where F : FnOnce (& mut Self) -> R,",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::with_visual_scale",
      "name": "with_visual_scale",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Uniformly scales descendant visuals, not layout, about an origin in this scope's layout/window coordinates. Enter identical scopes during prepaint and paint. Nested transforms apply inner first, then outer. Clips introduced outside stay fixed; clips introduced inside move with the scope. Hitboxes and accessibility follow displayed geometry. Glyph and SVG raster resolution includes the effective scale, without reshaping. Cached/deferred elements retain the mapping. Native hosted views refuse nonidentity transforms rather than resizing/reflowing their native frames. Events remain window-global: handlers comparing layout bounds must capture `visual_transform()` during prepaint and inverse-map event positions.",
      "documentation": "Uniformly scales descendant visuals, not layout, about an origin in\nthis scope's layout/window coordinates. Enter identical scopes during\nprepaint and paint. Nested transforms apply inner first, then outer.\nClips introduced outside stay fixed; clips introduced inside move with\nthe scope. Hitboxes and accessibility follow displayed geometry. Glyph\nand SVG raster resolution includes the effective scale, without reshaping.\nCached/deferred elements retain the mapping. Native hosted views refuse\nnonidentity transforms rather than resizing/reflowing their native frames.\nEvents remain window-global: handlers comparing layout bounds must capture\n`visual_transform()` during prepaint and inverse-map event positions.",
      "signature": "pub fn with_visual_scale<R> (& mut self, scale : f32, origin : Point<Pixels>, f : impl FnOnce (& mut Self) -> R,) -> R",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::without_content_masks",
      "name": "without_content_masks",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Temporarily removes inherited rectangular and rounded content masks. The window viewport remains the outer rendering/input boundary. Masks introduced inside the closure still apply; ancestor masks are restored afterwards. Use identical scopes in prepaint and paint so hit testing and conservative accessibility bounds agree with visible output.",
      "documentation": "Temporarily removes inherited rectangular and rounded content masks.\nThe window viewport remains the outer rendering/input boundary. Masks\nintroduced inside the closure still apply; ancestor masks are restored\nafterwards. Use identical scopes in prepaint and paint so hit testing\nand conservative accessibility bounds agree with visible output.\n\nThis does not change layout, element offsets, visual transforms, or\naccessibility ancestry. Bounds remain logical window coordinates and\nevents remain displayed window coordinates. Deferred draws scheduled\nhere capture the cleared rounded chain and the unchanged transform.",
      "signature": "pub fn without_content_masks<R> (& mut self, f : impl FnOnce (& mut Self) -> R) -> R",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::Window::zoom_window",
      "name": "zoom_window",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Toggle zoom on the window. May do nothing on mobile; use [`Self::try_zoom_window`].",
      "documentation": "Toggle zoom on the window.\nMay do nothing on mobile; use [`Self::try_zoom_window`].",
      "signature": "pub fn zoom_window (& self)",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::WindowControlArea",
      "name": "WindowControlArea",
      "kind": "enum",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "A type of window control area that corresponds to the platform window.",
      "documentation": "A type of window control area that corresponds to the platform window.",
      "signature": "# [doc = \" A type of window control area that corresponds to the platform window.\"] # [derive (Clone, Copy, Debug, Eq, PartialEq)] pub enum WindowControlArea { # [doc = \" An ordinary client area nested inside custom window chrome.\"] # [doc = \"\"] # [doc = \" Use this for interactive content inside a surrounding [`Self::Drag`]\"] # [doc = \" area so the operating system does not treat the nested content as a\"] # [doc = \" caption gesture.\"] Client, # [doc = \" An area that allows dragging of the platform window.\"] Drag, # [doc = \" An area that allows closing of the platform window.\"] Close, # [doc = \" An area that allows maximizing of the platform window.\"] Max, # [doc = \" An area that allows minimizing of the platform window.\"] Min, }",
      "cfg": []
    },
    {
      "id": "gpui::window::WindowFocusEvent::is_focus_in",
      "name": "is_focus_in",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_focus_in (& self, focus_id : FocusId) -> bool",
      "cfg": [],
      "target": "WindowFocusEvent"
    },
    {
      "id": "gpui::window::WindowFocusEvent::is_focus_out",
      "name": "is_focus_out",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_focus_out (& self, focus_id : FocusId) -> bool",
      "cfg": [],
      "target": "WindowFocusEvent"
    },
    {
      "id": "gpui::window::WindowHandle",
      "name": "WindowHandle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "A handle to a window with a specific root view type. Note that this does not keep the window alive on its own.",
      "documentation": "A handle to a window with a specific root view type.\nNote that this does not keep the window alive on its own.",
      "signature": "# [doc = \" A handle to a window with a specific root view type.\"] # [doc = \" Note that this does not keep the window alive on its own.\"] # [derive (Deref, DerefMut)] pub struct WindowHandle<V> { # [deref] # [deref_mut] pub (crate) any_handle : AnyWindowHandle, state_type : PhantomData<fn (V) -> V>, }",
      "cfg": []
    },
    {
      "id": "gpui::window::WindowHandle::entity",
      "name": "entity",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Read the root view pointer off of this window.",
      "documentation": "Read the root view pointer off of this window.\n\nThis will fail if the window is closed or if the root view's type does not match `V`.",
      "signature": "pub fn entity<C> (& self, cx : & C) -> Result<Entity<V>> where C : AppContext,",
      "cfg": [],
      "target": "WindowHandle<V>"
    },
    {
      "id": "gpui::window::WindowHandle::is_active",
      "name": "is_active",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Check if this window is 'active'.",
      "documentation": "Check if this window is 'active'.\n\nWill return `None` if the window is closed or currently\nborrowed.",
      "signature": "pub fn is_active (& self, cx : & mut App) -> Option<bool>",
      "cfg": [],
      "target": "WindowHandle<V>"
    },
    {
      "id": "gpui::window::WindowHandle::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Creates a new handle from a window ID. This does not check if the root type of the window is `V`.",
      "documentation": "Creates a new handle from a window ID.\nThis does not check if the root type of the window is `V`.",
      "signature": "pub fn new (id : WindowId) -> Self",
      "cfg": [],
      "target": "WindowHandle<V>"
    },
    {
      "id": "gpui::window::WindowHandle::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Read the root view out of this window.",
      "documentation": "Read the root view out of this window.\n\nThis will fail if the window is closed or if the root view's type does not match `V`.",
      "signature": "pub fn read<'a> (& self, cx : & 'a App) -> Result<& 'a V>",
      "cfg": [],
      "target": "WindowHandle<V>"
    },
    {
      "id": "gpui::window::WindowHandle::read_with",
      "name": "read_with",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Read the root view out of this window, with a callback",
      "documentation": "Read the root view out of this window, with a callback\n\nThis will fail if the window is closed or if the root view's type does not match `V`.",
      "signature": "pub fn read_with<C, R> (& self, cx : & C, read_with : impl FnOnce (& V, & App) -> R) -> Result<R> where C : AppContext,",
      "cfg": [],
      "target": "WindowHandle<V>"
    },
    {
      "id": "gpui::window::WindowHandle::root",
      "name": "root",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Get the root view out of this window.",
      "documentation": "Get the root view out of this window.\n\nThis will fail if the window is closed or if the root view's type does not match `V`.",
      "signature": "pub fn root<C> (& self, cx : & mut C) -> Result<Entity<V>> where C : AppContext,",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "WindowHandle<V>"
    },
    {
      "id": "gpui::window::WindowHandle::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Updates the root view of this window.",
      "documentation": "Updates the root view of this window.\n\nThis will fail if the window has been closed or if the root view's type does not match",
      "signature": "pub fn update<C, R> (& self, cx : & mut C, update : impl FnOnce (& mut V, & mut Window, & mut Context<V>) -> R,) -> Result<R> where C : AppContext,",
      "cfg": [],
      "target": "WindowHandle<V>"
    },
    {
      "id": "gpui::window::WindowId::as_u64",
      "name": "as_u64",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Converts this window ID to a `u64`.",
      "documentation": "Converts this window ID to a `u64`.",
      "signature": "pub fn as_u64 (& self) -> u64",
      "cfg": [],
      "target": "WindowId"
    },
    {
      "id": "gpui::window::WindowInvalidator::debug_assert_paint",
      "name": "debug_assert_paint",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn debug_assert_paint (& self)",
      "cfg": [],
      "target": "WindowInvalidator"
    },
    {
      "id": "gpui::window::WindowInvalidator::debug_assert_paint_or_prepaint",
      "name": "debug_assert_paint_or_prepaint",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn debug_assert_paint_or_prepaint (& self)",
      "cfg": [],
      "target": "WindowInvalidator"
    },
    {
      "id": "gpui::window::WindowInvalidator::debug_assert_prepaint",
      "name": "debug_assert_prepaint",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn debug_assert_prepaint (& self)",
      "cfg": [],
      "target": "WindowInvalidator"
    },
    {
      "id": "gpui::window::WindowInvalidator::invalidate_view",
      "name": "invalidate_view",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalidate_view (& self, entity : EntityId, cx : & mut App) -> bool",
      "cfg": [],
      "target": "WindowInvalidator"
    },
    {
      "id": "gpui::window::WindowInvalidator::is_dirty",
      "name": "is_dirty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_dirty (& self) -> bool",
      "cfg": [],
      "target": "WindowInvalidator"
    },
    {
      "id": "gpui::window::WindowInvalidator::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "WindowInvalidator"
    },
    {
      "id": "gpui::window::WindowInvalidator::not_drawing",
      "name": "not_drawing",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn not_drawing (& self) -> bool",
      "cfg": [],
      "target": "WindowInvalidator"
    },
    {
      "id": "gpui::window::WindowInvalidator::replace_views",
      "name": "replace_views",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn replace_views (& self, views : FxHashSet<EntityId>)",
      "cfg": [],
      "target": "WindowInvalidator"
    },
    {
      "id": "gpui::window::WindowInvalidator::set_dirty",
      "name": "set_dirty",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_dirty (& self, dirty : bool)",
      "cfg": [],
      "target": "WindowInvalidator"
    },
    {
      "id": "gpui::window::WindowInvalidator::set_phase",
      "name": "set_phase",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_phase (& self, phase : DrawPhase)",
      "cfg": [],
      "target": "WindowInvalidator"
    },
    {
      "id": "gpui::window::WindowInvalidator::take_views",
      "name": "take_views",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn take_views (& self) -> FxHashSet<EntityId>",
      "cfg": [],
      "target": "WindowInvalidator"
    },
    {
      "id": "gpui::window::WindowInvalidator::update_count",
      "name": "update_count",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update_count (& self) -> usize",
      "cfg": [],
      "target": "WindowInvalidator"
    },
    {
      "id": "gpui::window::a11y::A11ySubtreeBuilder",
      "name": "A11ySubtreeBuilder",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::a11y",
      "path": "gpui::window::a11y",
      "source": "crates/gpui/src/window/a11y.rs",
      "summary": "Builder API for synthetic children. See the docs for [`Element::a11y_synthetic_children`].",
      "documentation": "Builder API for synthetic children. See the docs for\n[`Element::a11y_synthetic_children`].",
      "signature": "# [doc = \" Builder API for synthetic children. See the docs for\"] # [doc = \" [`Element::a11y_synthetic_children`].\"] pub struct A11ySubtreeBuilder<'a> { parent_id : NodeId, nodes : & 'a mut A11yNodeBuilder, bounds_clip : Option<accesskit::Rect>, bounds_transform : crate::TransformationMatrix, # [doc = \" Provenance of the real element whose `a11y_synthetic_children` is\"] # [doc = \" running.\"] # [cfg (debug_assertions)] creator : debug::NodeCreator, }",
      "cfg": []
    },
    {
      "id": "gpui::window::a11y::A11ySubtreeBuilder::bounds_clip",
      "name": "bounds_clip",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::a11y",
      "path": "gpui::window::a11y",
      "source": "crates/gpui/src/window/a11y.rs",
      "summary": "Physical-pixel clip applied to synthetic node bounds. A retained geometry cache must invalidate when this changes, even when its unclipped source cells are unchanged.",
      "documentation": "Physical-pixel clip applied to synthetic node bounds. A retained\ngeometry cache must invalidate when this changes, even when its\nunclipped source cells are unchanged.",
      "signature": "pub fn bounds_clip (& self) -> Option<accesskit::Rect>",
      "cfg": [],
      "target": "A11ySubtreeBuilder<'a>"
    },
    {
      "id": "gpui::window::a11y::A11ySubtreeBuilder::bounds_transform",
      "name": "bounds_transform",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::a11y",
      "path": "gpui::window::a11y",
      "source": "crates/gpui/src/window/a11y.rs",
      "summary": "Physical-pixel visual mapping applied on publication. Retained geometry caches must invalidate when this changes, even if the clip stays fixed.",
      "documentation": "Physical-pixel visual mapping applied on publication. Retained geometry\ncaches must invalidate when this changes, even if the clip stays fixed.",
      "signature": "pub fn bounds_transform (& self) -> crate::TransformationMatrix",
      "cfg": [],
      "target": "A11ySubtreeBuilder<'a>"
    },
    {
      "id": "gpui::window::a11y::A11ySubtreeBuilder::parent_node",
      "name": "parent_node",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::a11y",
      "path": "gpui::window::a11y",
      "source": "crates/gpui/src/window/a11y.rs",
      "summary": "A mutable reference to the parent node.",
      "documentation": "A mutable reference to the parent node.",
      "signature": "pub fn parent_node (& mut self) -> & mut accesskit::Node",
      "cfg": [],
      "target": "A11ySubtreeBuilder<'a>"
    },
    {
      "id": "gpui::window::a11y::A11ySubtreeBuilder::push_child",
      "name": "push_child",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::a11y",
      "path": "gpui::window::a11y",
      "source": "crates/gpui/src/window/a11y.rs",
      "summary": "Append a synthetic leaf node as a child of this element's node.",
      "documentation": "Append a synthetic leaf node as a child of this element's node.\n\nReturns `false` if a node with this id is already present in the tree,\nin which case the node is discarded. Bounds follow the real parent's\nactive content clip, but fully clipped logical nodes remain in the tree\nwith zero-area bounds at the nearest clip edge. Synthetic text and\nvirtualized collections must not lose content merely because it is\noutside the current viewport. Supply untransformed physical-pixel bounds\nand character geometry: the inherited visual transform is applied here.",
      "signature": "pub fn push_child (& mut self, id : NodeId, mut node : accesskit::Node) -> bool",
      "cfg": [],
      "target": "A11ySubtreeBuilder<'a>"
    },
    {
      "id": "gpui::window::a11y::A11ySubtreeBuilder::retain_child",
      "name": "retain_child",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::a11y",
      "path": "gpui::window::a11y",
      "source": "crates/gpui/src/window/a11y.rs",
      "summary": "Keeps an unchanged synthetic leaf connected without retransmitting its payload. Returns false when it was not published in the preceding active frame; the caller must then provide a complete node with `push_child`. Never use this for a node whose clipped geometry or properties changed. Removed nodes must be republished on reattachment.",
      "documentation": "Keeps an unchanged synthetic leaf connected without retransmitting its\npayload. Returns false when it was not published in the preceding\nactive frame; the caller must then provide a complete node with\n`push_child`. Never use this for a node whose clipped geometry or\nproperties changed. Removed nodes must be republished on reattachment.",
      "signature": "pub fn retain_child (& mut self, id : NodeId) -> bool",
      "cfg": [],
      "target": "A11ySubtreeBuilder<'a>"
    },
    {
      "id": "gpui::window::a11y::A11ySubtreeBuilder::set_parent_text_selection",
      "name": "set_parent_text_selection",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::a11y",
      "path": "gpui::window::a11y",
      "source": "crates/gpui/src/window/a11y.rs",
      "summary": "Updates the parent's selection without forcing its shared value into owned storage before the final node-retention comparison.",
      "documentation": "Updates the parent's selection without forcing its shared value into\nowned storage before the final node-retention comparison.",
      "signature": "pub fn set_parent_text_selection (& mut self, selection : accesskit::TextSelection)",
      "cfg": [],
      "target": "A11ySubtreeBuilder<'a>"
    },
    {
      "id": "gpui::window::a11y::A11ySubtreeBuilder::synthetic_node_id",
      "name": "synthetic_node_id",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::a11y",
      "path": "gpui::window::a11y",
      "source": "crates/gpui/src/window/a11y.rs",
      "summary": "Derive a [`NodeId`] for a synthetic child.",
      "documentation": "Derive a [`NodeId`] for a synthetic child.\n\nThe generated ID is based on the hash of `key`, as well as the parent's\nID. This means that `key`s must be unique within the same\n[`Element::a11y_synthetic_children`] call, but may be duplicated across\ndifferent calls.",
      "signature": "pub fn synthetic_node_id (& self, key : impl Hash) -> NodeId",
      "cfg": [],
      "target": "A11ySubtreeBuilder<'a>"
    },
    {
      "id": "gpui::window::a11y::A11yValueWork",
      "name": "A11yValueWork",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::a11y",
      "path": "gpui::window::a11y",
      "source": "crates/gpui/src/window/a11y.rs",
      "summary": "Actual native-value copying in the last completed accessibility frame. These counters exclude geometry/child metadata, source flattening, native adapter copies and explicit platform value queries.",
      "documentation": "Actual native-value copying in the last completed accessibility frame.\nThese counters exclude geometry/child metadata, source flattening, native\nadapter copies and explicit platform value queries.",
      "signature": "# [doc = \" Actual native-value copying in the last completed accessibility frame.\"] # [doc = \" These counters exclude geometry/child metadata, source flattening, native\"] # [doc = \" adapter copies and explicit platform value queries.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub struct A11yValueWork { # [doc = \" UTF-8 bytes materialized from shared element values for changed nodes.\"] pub materialized_bytes : usize, # [doc = \" Complete value bytes retained natively without retransmission.\"] pub retained_bytes : usize, # [doc = \" Value bytes cloned to maintain the complete debug/inspection tree.\"] pub debug_clone_bytes : usize, # [doc = \" Bytes copied to resolve accessible label/description relationships.\"] pub relationship_bytes : usize, }",
      "cfg": []
    },
    {
      "id": "gpui::window::a11y::Window::accessibility_value_work",
      "name": "accessibility_value_work",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::a11y",
      "path": "gpui::window::a11y",
      "source": "crates/gpui/src/window/a11y.rs",
      "summary": "Value-copy work for the last completed native accessibility frame.",
      "documentation": "Value-copy work for the last completed native accessibility frame.",
      "signature": "pub fn accessibility_value_work (& self) -> A11yValueWork",
      "cfg": [],
      "target": "Window"
    },
    {
      "id": "gpui::window::fill",
      "name": "fill",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Creates a filled quad with the given bounds and background color.",
      "documentation": "Creates a filled quad with the given bounds and background color.",
      "signature": "pub fn fill (bounds : impl Into<Bounds<Pixels>>, background : impl Into<Background>) -> PaintQuad",
      "cfg": []
    },
    {
      "id": "gpui::window::outline",
      "name": "outline",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Creates a rectangle outline with the given bounds, border color, and a 1px border width",
      "documentation": "Creates a rectangle outline with the given bounds, border color, and a 1px border width",
      "signature": "pub fn outline (bounds : impl Into<Bounds<Pixels>>, border_color : impl Into<Hsla>, border_style : BorderStyle,) -> PaintQuad",
      "cfg": []
    },
    {
      "id": "gpui::window::prompts::FallbackPromptRenderer",
      "name": "FallbackPromptRenderer",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::prompts",
      "path": "gpui::window::prompts",
      "source": "crates/gpui/src/window/prompts.rs",
      "summary": "The default GPUI fallback for rendering prompts, when the platform doesn't support it.",
      "documentation": "The default GPUI fallback for rendering prompts, when the platform doesn't support it.",
      "signature": "# [doc = \" The default GPUI fallback for rendering prompts, when the platform doesn't support it.\"] pub struct FallbackPromptRenderer { _level : PromptLevel, message : String, detail : Option<String>, actions : Vec<PromptButton>, focus : FocusHandle, }",
      "cfg": []
    },
    {
      "id": "gpui::window::prompts::Prompt",
      "name": "Prompt",
      "kind": "trait",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::prompts",
      "path": "gpui::window::prompts",
      "source": "crates/gpui/src/window/prompts.rs",
      "summary": "A prompt that can be rendered in the window.",
      "documentation": "A prompt that can be rendered in the window.",
      "signature": "# [doc = \" A prompt that can be rendered in the window.\"] pub trait Prompt : EventEmitter<PromptResponse> + Focusable { }",
      "cfg": []
    },
    {
      "id": "gpui::window::prompts::PromptHandle",
      "name": "PromptHandle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::prompts",
      "path": "gpui::window::prompts",
      "source": "crates/gpui/src/window/prompts.rs",
      "summary": "A handle to a prompt that can be used to interact with it.",
      "documentation": "A handle to a prompt that can be used to interact with it.",
      "signature": "# [doc = \" A handle to a prompt that can be used to interact with it.\"] pub struct PromptHandle { sender : oneshot::Sender<usize>, }",
      "cfg": []
    },
    {
      "id": "gpui::window::prompts::PromptHandle::with_view",
      "name": "with_view",
      "kind": "method",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::prompts",
      "path": "gpui::window::prompts",
      "source": "crates/gpui/src/window/prompts.rs",
      "summary": "Construct a new prompt handle from a view of the appropriate types",
      "documentation": "Construct a new prompt handle from a view of the appropriate types",
      "signature": "pub fn with_view<V : Prompt + Render> (self, view : Entity<V>, window : & mut Window, cx : & mut App,) -> RenderablePromptHandle",
      "cfg": [],
      "target": "PromptHandle"
    },
    {
      "id": "gpui::window::prompts::PromptResponse",
      "name": "PromptResponse",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::prompts",
      "path": "gpui::window::prompts",
      "source": "crates/gpui/src/window/prompts.rs",
      "summary": "The event emitted when a prompt's option is selected. The usize is the index of the selected option, from the actions passed to the prompt.",
      "documentation": "The event emitted when a prompt's option is selected.\nThe usize is the index of the selected option, from the actions\npassed to the prompt.",
      "signature": "# [doc = \" The event emitted when a prompt's option is selected.\"] # [doc = \" The usize is the index of the selected option, from the actions\"] # [doc = \" passed to the prompt.\"] pub struct PromptResponse (pub usize);",
      "cfg": []
    },
    {
      "id": "gpui::window::prompts::RenderablePromptHandle",
      "name": "RenderablePromptHandle",
      "kind": "struct",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::prompts",
      "path": "gpui::window::prompts",
      "source": "crates/gpui/src/window/prompts.rs",
      "summary": "A prompt handle capable of being rendered in a window.",
      "documentation": "A prompt handle capable of being rendered in a window.",
      "signature": "# [doc = \" A prompt handle capable of being rendered in a window.\"] pub struct RenderablePromptHandle { pub (crate) view : Box<dyn PromptViewHandle>, pub (crate) effect_owner : Option<crate::EffectOwner>, }",
      "cfg": []
    },
    {
      "id": "gpui::window::prompts::fallback_prompt_renderer",
      "name": "fallback_prompt_renderer",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window::prompts",
      "path": "gpui::window::prompts",
      "source": "crates/gpui/src/window/prompts.rs",
      "summary": "Use this function in conjunction with [App::set_prompt_builder] to force GPUI to always use the fallback prompt renderer.",
      "documentation": "Use this function in conjunction with [App::set_prompt_builder] to force\nGPUI to always use the fallback prompt renderer.",
      "signature": "pub fn fallback_prompt_renderer (level : PromptLevel, message : & str, detail : Option<& str>, actions : & [PromptButton], handle : PromptHandle, window : & mut Window, cx : & mut App,) -> RenderablePromptHandle",
      "cfg": []
    },
    {
      "id": "gpui::window::quad",
      "name": "quad",
      "kind": "function",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "Creates a quad with the given parameters.",
      "documentation": "Creates a quad with the given parameters.",
      "signature": "pub fn quad (bounds : Bounds<Pixels>, corner_radii : impl Into<Corners<Pixels>>, background : impl Into<Background>, border_widths : impl Into<Edges<Pixels>>, border_color : impl Into<Hsla>, border_style : BorderStyle,) -> PaintQuad",
      "cfg": []
    },
    {
      "id": "gpui::window::reexport-1",
      "name": "a11y :: { A11ySubtreeBuilder , A11yValueWork }",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use a11y::{ A11ySubtreeBuilder, A11yValueWork };",
      "cfg": []
    },
    {
      "id": "gpui::window::reexport-2",
      "name": "prompts :: *",
      "kind": "reexport",
      "package": "gpui-box",
      "crate": "gpui",
      "module": "window",
      "path": "gpui::window",
      "source": "crates/gpui/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use prompts::*;",
      "cfg": []
    },
    {
      "id": "gpui_android::accessibility::Accessibility::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "accessibility",
      "path": "gpui_android::accessibility",
      "source": "crates/gpui_android/src/accessibility.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn action (& self, virtual_id : i32, action : i32, value : Option<String>,) -> Option<ActionRequest>",
      "cfg": [],
      "target": "Accessibility"
    },
    {
      "id": "gpui_android::accessibility::Accessibility::json",
      "name": "json",
      "kind": "method",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "accessibility",
      "path": "gpui_android::accessibility",
      "source": "crates/gpui_android/src/accessibility.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn json (& self) -> String",
      "cfg": [],
      "target": "Accessibility"
    },
    {
      "id": "gpui_android::accessibility::Accessibility::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "accessibility",
      "path": "gpui_android::accessibility",
      "source": "crates/gpui_android/src/accessibility.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update (& mut self, update : TreeUpdate)",
      "cfg": [],
      "target": "Accessibility"
    },
    {
      "id": "gpui_android::native::AndroidPlatform",
      "name": "AndroidPlatform",
      "kind": "struct",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native",
      "path": "gpui_android::native",
      "source": "crates/gpui_android/src/native.rs",
      "summary": "One Android Activity and one top-level GPUI window. Desktop-only APIs fail explicitly; Activity identity, task placement and permissions belong to the host.",
      "documentation": "One Android Activity and one top-level GPUI window. Desktop-only APIs fail\nexplicitly; Activity identity, task placement and permissions belong to the host.",
      "signature": "# [doc = \" One Android Activity and one top-level GPUI window. Desktop-only APIs fail\"] # [doc = \" explicitly; Activity identity, task placement and permissions belong to the host.\"] pub struct AndroidPlatform { java : Arc<Java>, dispatcher : Arc<Dispatcher>, text : Arc<dyn PlatformTextSystem>, window : RefCell<Option<Rc<window::AndroidWindow>>>, display : Rc<AndroidDisplay>, launch : Callback<dyn FnOnce ()>, lifecycle : Callback<dyn FnMut (AppLifecyclePhase)>, memory : Callback<dyn FnMut ()>, quit : Callback<dyn FnMut ()>, menu_action : ActionCallback<()>, menu_open : Callback<dyn FnMut ()>, menu_validate : ActionCallback<bool>, thermal_changed : Callback<dyn FnMut ()>, keyboard_changed : Callback<dyn FnMut ()>, presentation : RefCell<crate::SurfaceLifecycle>, gpu : GpuContext, surface : RefCell<Option<NativeSurface>>, size : Cell<Size<DevicePixels>>, scale : Cell<f32>, active : Cell<bool>, appearance : Cell<WindowAppearance>, }",
      "cfg": []
    },
    {
      "id": "gpui_android::native::AndroidPlatform::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native",
      "path": "gpui_android::native",
      "source": "crates/gpui_android/src/native.rs",
      "summary": "Returns the Activity's installed platform on its UI thread. An Android platform cannot be created without an Activity or in headless mode.",
      "documentation": "Returns the Activity's installed platform on its UI thread. An Android\nplatform cannot be created without an Activity or in headless mode.",
      "signature": "pub fn current () -> Result<Rc<Self>>",
      "cfg": [],
      "target": "AndroidPlatform"
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeAccessibility",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeAccessibility",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeAccessibility (mut env : JNIEnv, _ : JObject, enabled : jboolean,)",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeAccessibilityAction",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeAccessibilityAction",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeAccessibilityAction (mut env : JNIEnv, _ : JObject, id : i32, action : i32, value : JString,) -> jboolean",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeBack",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeBack",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeBack (mut env : JNIEnv, _ : JObject,) -> jboolean",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeDestroy",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeDestroy",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeDestroy (mut env : JNIEnv, _ : JObject)",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeDetach",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeDetach",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeDetach (mut env : JNIEnv, _ : JObject)",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeDrain",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeDrain",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeDrain (mut env : JNIEnv, _ : JObject)",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeEdit",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeEdit",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "Commands operate on the authoritative GPUI UTF-16 document, not a shadow text model: 0 commit, 1 compose, 2 selection, 3 finish, 4 composing region, 5 delete range. Java BaseInputConnection calculates deletion ranges.",
      "documentation": "Commands operate on the authoritative GPUI UTF-16 document, not a shadow\ntext model: 0 commit, 1 compose, 2 selection, 3 finish, 4 composing region,\n5 delete range. Java BaseInputConnection calculates deletion ranges.",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeEdit (mut env : JNIEnv, _ : JObject, command : i32, text : JString, start : i32, end : i32, cursor : i32, generation : i64,) -> jboolean",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeFrame",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeFrame",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeFrame (mut env : JNIEnv, _ : JObject)",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeInputSnapshot",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeInputSnapshot",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeInputSnapshot (mut env : JNIEnv, _ : JObject, generation : i64,) -> jstring",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeInsets",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeInsets",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeInsets (mut env : JNIEnv, _ : JObject, values : JIntArray,)",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeLifecycle",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeLifecycle",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeLifecycle (mut env : JNIEnv, _ : JObject, phase : i32,)",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeMemory",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeMemory",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeMemory (mut env : JNIEnv, _ : JObject)",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativePresentedFrames",
      "name": "Java_dev_gpui_box_GpuiActivity_nativePresentedFrames",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativePresentedFrames (mut env : JNIEnv, _ : JObject,) -> i64",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeSettingsChanged",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeSettingsChanged",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeSettingsChanged (mut env : JNIEnv, _ : JObject, thermal : jboolean,)",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeSurface",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeSurface",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeSurface (mut env : JNIEnv, _ : JObject, surface : JObject, width : i32, height : i32, scale : f32,)",
      "cfg": []
    },
    {
      "id": "gpui_android::native::events::Java_dev_gpui_box_GpuiActivity_nativeTouch",
      "name": "Java_dev_gpui_box_GpuiActivity_nativeTouch",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::events",
      "path": "gpui_android::native::events",
      "source": "crates/gpui_android/src/native/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub extern \"system\" fn Java_dev_gpui_box_GpuiActivity_nativeTouch (mut env : JNIEnv, _ : JObject, action : i32, ids : JIntArray, xs : JFloatArray, ys : JFloatArray, pressures : JFloatArray,)",
      "cfg": []
    },
    {
      "id": "gpui_android::native::initialize",
      "name": "initialize",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native",
      "path": "gpui_android::native",
      "source": "crates/gpui_android/src/native.rs",
      "summary": "Installs one Activity on its Android UI thread. The Activity must use the accompanying GpuiActivity Java class. Call once from its nativeCreate method. Return Application::run_embedded's handle; this host retains it until Activity destruction. Android continues owning the run loop.",
      "documentation": "Installs one Activity on its Android UI thread. The Activity must use the\naccompanying GpuiActivity Java class. Call once from its nativeCreate method.\nReturn Application::run_embedded's handle; this host retains it until\nActivity destruction. Android continues owning the run loop.",
      "signature": "pub fn initialize (env : & mut JNIEnv<'_>, activity : JObject<'_>, launch : impl FnOnce (Rc<AndroidPlatform>) -> ApplicationHandle,) -> Result<()>",
      "cfg": []
    },
    {
      "id": "gpui_android::native::window::AndroidWindow::cancel_contacts",
      "name": "cancel_contacts",
      "kind": "method",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::window",
      "path": "gpui_android::native::window",
      "source": "crates/gpui_android/src/native/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cancel_contacts (& self)",
      "cfg": [],
      "target": "AndroidWindow"
    },
    {
      "id": "gpui_android::native::window::AndroidWindow::emit",
      "name": "emit",
      "kind": "method",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::window",
      "path": "gpui_android::native::window",
      "source": "crates/gpui_android/src/native/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn emit (& self, event : PlatformInput) -> DispatchEventResult",
      "cfg": [],
      "target": "AndroidWindow"
    },
    {
      "id": "gpui_android::native::window::AndroidWindow::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::window",
      "path": "gpui_android::native::window",
      "source": "crates/gpui_android/src/native/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (handle : AnyWindowHandle, renderer : WgpuRenderer, surface : NativeSurface) -> Self",
      "cfg": [],
      "target": "AndroidWindow"
    },
    {
      "id": "gpui_android::native::window::AndroidWindow::with_input",
      "name": "with_input",
      "kind": "method",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "native::window",
      "path": "gpui_android::native::window",
      "source": "crates/gpui_android/src/native/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_input<T> (& self, f : impl FnOnce (& mut PlatformInputHandler) -> T) -> Option<T>",
      "cfg": [],
      "target": "AndroidWindow"
    },
    {
      "id": "gpui_android::reexport-1",
      "name": "state :: *",
      "kind": "reexport",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "",
      "path": "gpui_android",
      "source": "crates/gpui_android/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use state::*;",
      "cfg": []
    },
    {
      "id": "gpui_android::reexport-2",
      "name": "native :: { AndroidPlatform , initialize }",
      "kind": "reexport",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "",
      "path": "gpui_android",
      "source": "crates/gpui_android/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (any (target_os = \"android\", feature = \"host-check\"))] pub use native::{ AndroidPlatform, initialize };",
      "cfg": [
        "cfg (any (target_os = \"android\", feature = \"host-check\"))"
      ]
    },
    {
      "id": "gpui_android::state::PointerAction",
      "name": "PointerAction",
      "kind": "enum",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "Android MotionEvent actions, after removing the pointer-index bits.",
      "documentation": "Android MotionEvent actions, after removing the pointer-index bits.",
      "signature": "# [doc = \" Android MotionEvent actions, after removing the pointer-index bits.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum PointerAction { Down, Up, Move, Cancel, }",
      "cfg": []
    },
    {
      "id": "gpui_android::state::SurfaceLifecycle",
      "name": "SurfaceLifecycle",
      "kind": "struct",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "Draw eligibility is independent of Activity existence. A resumed Activity can temporarily have no Surface, and a Surface can precede onResume.",
      "documentation": "Draw eligibility is independent of Activity existence. A resumed Activity\ncan temporarily have no Surface, and a Surface can precede onResume.",
      "signature": "# [doc = \" Draw eligibility is independent of Activity existence. A resumed Activity\"] # [doc = \" can temporarily have no Surface, and a Surface can precede onResume.\"] # [derive (Default, Debug)] pub struct SurfaceLifecycle { active : bool, size : Option<(u32, u32)>, generation : u64, }",
      "cfg": []
    },
    {
      "id": "gpui_android::state::SurfaceLifecycle::attach",
      "name": "attach",
      "kind": "method",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn attach (& mut self, width : u32, height : u32) -> u64",
      "cfg": [],
      "target": "SurfaceLifecycle"
    },
    {
      "id": "gpui_android::state::SurfaceLifecycle::can_draw",
      "name": "can_draw",
      "kind": "method",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn can_draw (& self) -> bool",
      "cfg": [],
      "target": "SurfaceLifecycle"
    },
    {
      "id": "gpui_android::state::SurfaceLifecycle::detach",
      "name": "detach",
      "kind": "method",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn detach (& mut self)",
      "cfg": [],
      "target": "SurfaceLifecycle"
    },
    {
      "id": "gpui_android::state::SurfaceLifecycle::pause",
      "name": "pause",
      "kind": "method",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn pause (& mut self)",
      "cfg": [],
      "target": "SurfaceLifecycle"
    },
    {
      "id": "gpui_android::state::SurfaceLifecycle::resume",
      "name": "resume",
      "kind": "method",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn resume (& mut self)",
      "cfg": [],
      "target": "SurfaceLifecycle"
    },
    {
      "id": "gpui_android::state::android_appearance",
      "name": "android_appearance",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "Configuration.UI_MODE_NIGHT_MASK / UI_MODE_NIGHT_YES. An undefined night mode follows Android's non-night default; unrelated uiMode bits are ignored.",
      "documentation": "Configuration.UI_MODE_NIGHT_MASK / UI_MODE_NIGHT_YES. An undefined night\nmode follows Android's non-night default; unrelated uiMode bits are ignored.",
      "signature": "pub fn android_appearance (ui_mode : i32) -> gpui::WindowAppearance",
      "cfg": []
    },
    {
      "id": "gpui_android::state::android_selection",
      "name": "android_selection",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "Android selection endpoints are anchor/head UTF-16 offsets, not a sorted range. Android supplies no visual affinity, so use downstream explicitly.",
      "documentation": "Android selection endpoints are anchor/head UTF-16 offsets, not a sorted\nrange. Android supplies no visual affinity, so use downstream explicitly.",
      "signature": "pub fn android_selection (text : & str, start : i32, end : i32) -> Option<gpui::NativeTextSelection>",
      "cfg": []
    },
    {
      "id": "gpui_android::state::insertion_cursor",
      "name": "insertion_cursor",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "Android's cursor offset is relative to the end of the insertion for positive values, or its start otherwise. All values here count UTF-16 code units.",
      "documentation": "Android's cursor offset is relative to the end of the insertion for positive\nvalues, or its start otherwise. All values here count UTF-16 code units.",
      "signature": "pub fn insertion_cursor (start : usize, inserted : usize, cursor : i32, total : usize) -> usize",
      "cfg": []
    },
    {
      "id": "gpui_android::state::motion_pointers",
      "name": "motion_pointers",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "Returns the affected pointer indexes. Android's POINTER_DOWN/UP applies to the action index only; MOVE and CANCEL apply to every current pointer.",
      "documentation": "Returns the affected pointer indexes. Android's POINTER_DOWN/UP applies to\nthe action index only; MOVE and CANCEL apply to every current pointer.",
      "signature": "pub fn motion_pointers (action : i32, count : usize) -> Vec<(usize, PointerAction)>",
      "cfg": []
    },
    {
      "id": "gpui_android::state::native_selection_after_deletion",
      "name": "native_selection_after_deletion",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "Preserve endpoint direction and each existing affinity when surrounding text is removed. Deletion changes offsets, not which endpoint is moving.",
      "documentation": "Preserve endpoint direction and each existing affinity when surrounding\ntext is removed. Deletion changes offsets, not which endpoint is moving.",
      "signature": "pub fn native_selection_after_deletion (mut selection : gpui::NativeTextSelection, deleted : Range<usize>,) -> gpui::NativeTextSelection",
      "cfg": []
    },
    {
      "id": "gpui_android::state::selection_after_deletion",
      "name": "selection_after_deletion",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "Rebase a UTF-16 selection or composing span after deleting another span. Surrounding-text deletion must not collapse an untouched selected range.",
      "documentation": "Rebase a UTF-16 selection or composing span after deleting another span.\nSurrounding-text deletion must not collapse an untouched selected range.",
      "signature": "pub fn selection_after_deletion (selection : Range<usize>, deleted : Range<usize>) -> Range<usize>",
      "cfg": []
    },
    {
      "id": "gpui_android::state::utf16_range",
      "name": "utf16_range",
      "kind": "function",
      "package": "gpui-box-android",
      "crate": "gpui_android",
      "module": "state",
      "path": "gpui_android::state",
      "source": "crates/gpui_android/src/state.rs",
      "summary": "Validates UTF-16 boundaries, rejecting a selection inside a surrogate pair.",
      "documentation": "Validates UTF-16 boundaries, rejecting a selection inside a surrogate pair.",
      "signature": "pub fn utf16_range (text : & str, range : Range<usize>) -> Option<Range<usize>>",
      "cfg": []
    },
    {
      "id": "gpui_ios::accessibility::AccessibilityTree::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "accessibility",
      "path": "gpui_ios::accessibility",
      "source": "crates/gpui_ios/src/accessibility.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn action (& self, id : u64, action : u32) -> Option<ActionRequest>",
      "cfg": [],
      "target": "AccessibilityTree"
    },
    {
      "id": "gpui_ios::accessibility::AccessibilityTree::project",
      "name": "project",
      "kind": "method",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "accessibility",
      "path": "gpui_ios::accessibility",
      "source": "crates/gpui_ios/src/accessibility.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn project (& mut self, scale : f64) -> Vec<ProjectedNode>",
      "cfg": [],
      "target": "AccessibilityTree"
    },
    {
      "id": "gpui_ios::accessibility::AccessibilityTree::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "accessibility",
      "path": "gpui_ios::accessibility",
      "source": "crates/gpui_ios/src/accessibility.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update (& mut self, update : TreeUpdate, focused : bool) -> anyhow::Result<()>",
      "cfg": [],
      "target": "AccessibilityTree"
    },
    {
      "id": "gpui_ios::accessibility::ProjectedNode::native",
      "name": "native",
      "kind": "method",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "accessibility",
      "path": "gpui_ios::accessibility",
      "source": "crates/gpui_ios/src/accessibility.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn native (& self) -> AccessibilityNode",
      "cfg": [],
      "target": "ProjectedNode"
    },
    {
      "id": "gpui_ios::application",
      "name": "application",
      "kind": "function",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "",
      "path": "gpui_ios",
      "source": "crates/gpui_ios/src/lib.rs",
      "summary": "Creates a UIKit application with an explicit caller-owned font authority.",
      "documentation": "Creates a UIKit application with an explicit caller-owned font authority.\n\nCall on the native main thread before entering UIKit's application loop.\nInitialization is fallible: there is no empty-font or desktop fallback.\nThe selected family must be supplied by `fonts`. Native system-font discovery\nand headless UIKit application construction are not supported.",
      "signature": "pub fn application (fallback_family : & str, fonts : Vec<std::borrow::Cow<'static, [u8]>>,) -> anyhow::Result<gpui::Application>",
      "cfg": [
        "cfg (any (target_os = \"ios\", feature = \"platform-check\"))"
      ]
    },
    {
      "id": "gpui_ios::ffi::AccessibilityNode",
      "name": "AccessibilityNode",
      "kind": "struct",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "ffi",
      "path": "gpui_ios::ffi",
      "source": "crates/gpui_ios/src/ffi.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [repr (C)] pub struct AccessibilityNode { pub id : u64, pub bounds : Rect, pub label : * const c_char, pub value : * const c_char, pub role : u32, pub disabled : bool, pub selected : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_ios::ffi::Callbacks",
      "name": "Callbacks",
      "kind": "struct",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "ffi",
      "path": "gpui_ios::ffi",
      "source": "crates/gpui_ios/src/ffi.rs",
      "summary": "All text callbacks are required for an editable host, including an empty document. `text` returns required UTF-8 bytes; a zero-capacity call is a length query. `mark`'s selection is relative to the new marked text.",
      "documentation": "All text callbacks are required for an editable host, including an empty\ndocument. `text` returns required UTF-8 bytes; a zero-capacity call is a\nlength query. `mark`'s selection is relative to the new marked text.",
      "signature": "# [doc = \" All text callbacks are required for an editable host, including an empty\"] # [doc = \" document. `text` returns required UTF-8 bytes; a zero-capacity call is a\"] # [doc = \" length query. `mark`'s selection is relative to the new marked text.\"] # [derive (Clone, Copy)] # [repr (C)] pub struct Callbacks { pub context : * mut c_void, pub launched : Option<unsafe extern \"C\" fn (* mut c_void)>, pub lifecycle : Option<unsafe extern \"C\" fn (* mut c_void, u32)>, pub memory_warning : Option<unsafe extern \"C\" fn (* mut c_void)>, pub frame : Option<unsafe extern \"C\" fn (* mut c_void, f64)>, pub geometry : Option<unsafe extern \"C\" fn (* mut c_void, Rect, f64, Edges, Edges)>, pub touch : Option<unsafe extern \"C\" fn (* mut c_void, u64, u32, f64, f64, f64)>, pub cancel_input : Option<unsafe extern \"C\" fn (* mut c_void)>, pub text : unsafe extern \"C\" fn (* mut c_void, TextRange, * mut c_char, usize) -> usize, pub text_length : unsafe extern \"C\" fn (* mut c_void) -> usize, pub selection : unsafe extern \"C\" fn (* mut c_void) -> TextRange, pub marked : unsafe extern \"C\" fn (* mut c_void) -> TextRange, pub select : unsafe extern \"C\" fn (* mut c_void, TextRange), pub replace : unsafe extern \"C\" fn (* mut c_void, TextRange, * const c_char, usize), pub mark : unsafe extern \"C\" fn (* mut c_void, * const c_char, usize, TextRange), pub unmark : unsafe extern \"C\" fn (* mut c_void), pub text_bounds : unsafe extern \"C\" fn (* mut c_void, TextRange) -> Rect, pub text_hit_test : unsafe extern \"C\" fn (* mut c_void, f64, f64) -> usize, pub accessibility_action : Option<unsafe extern \"C\" fn (* mut c_void, u64, u32) -> bool>, pub system_event : Option<unsafe extern \"C\" fn (* mut c_void, u32, * const c_char)>, pub text_action : Option<unsafe extern \"C\" fn (* mut c_void, u32) -> bool>, pub native_selection : Option<unsafe extern \"C\" fn (* mut c_void) -> NativeSelection>, pub set_native_selection : Option<unsafe extern \"C\" fn (* mut c_void, NativeSelection) -> bool>, pub move_position : Option<unsafe extern \"C\" fn (* mut c_void, NativePosition, u32, usize) -> NativePosition>, pub farthest_position : Option<unsafe extern \"C\" fn (* mut c_void, TextRange, u32) -> NativePosition>, pub position_bounds : Option<unsafe extern \"C\" fn (* mut c_void, NativePosition, * mut Rect) -> bool>, pub selection_rects : Option<unsafe extern \"C\" fn (* mut c_void, TextRange, * mut SelectionRect, usize) -> usize>, pub grapheme : Option<unsafe extern \"C\" fn (* mut c_void, usize) -> TextRange>, pub writing_direction : Option<unsafe extern \"C\" fn (* mut c_void, usize) -> i32>, pub set_writing_direction : Option<unsafe extern \"C\" fn (* mut c_void, TextRange, bool) -> bool>, pub position_for_point : Option<unsafe extern \"C\" fn (* mut c_void, f64, f64, TextRange) -> NativePosition>, }",
      "cfg": []
    },
    {
      "id": "gpui_ios::ffi::Edges",
      "name": "Edges",
      "kind": "struct",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "ffi",
      "path": "gpui_ios::ffi",
      "source": "crates/gpui_ios/src/ffi.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, Default, PartialEq)] # [repr (C)] pub struct Edges { pub top : f64, pub right : f64, pub bottom : f64, pub left : f64, }",
      "cfg": []
    },
    {
      "id": "gpui_ios::ffi::NativePosition",
      "name": "NativePosition",
      "kind": "struct",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "ffi",
      "path": "gpui_ios::ffi",
      "source": "crates/gpui_ios/src/ffi.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Default)] # [repr (C)] pub struct NativePosition { pub offset : usize, pub upstream : bool, pub valid : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_ios::ffi::NativeSelection",
      "name": "NativeSelection",
      "kind": "struct",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "ffi",
      "path": "gpui_ios::ffi",
      "source": "crates/gpui_ios/src/ffi.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Default)] # [repr (C)] pub struct NativeSelection { pub anchor : NativePosition, pub head : NativePosition, }",
      "cfg": []
    },
    {
      "id": "gpui_ios::ffi::Rect",
      "name": "Rect",
      "kind": "struct",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "ffi",
      "path": "gpui_ios::ffi",
      "source": "crates/gpui_ios/src/ffi.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, Default, PartialEq)] # [repr (C)] pub struct Rect { pub x : f64, pub y : f64, pub width : f64, pub height : f64, }",
      "cfg": []
    },
    {
      "id": "gpui_ios::ffi::SelectionRect",
      "name": "SelectionRect",
      "kind": "struct",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "ffi",
      "path": "gpui_ios::ffi",
      "source": "crates/gpui_ios/src/ffi.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy)] # [repr (C)] pub struct SelectionRect { pub bounds : Rect, pub rtl : bool, pub contains_start : bool, pub contains_end : bool, pub vertical : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_ios::ffi::TextRange",
      "name": "TextRange",
      "kind": "struct",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "ffi",
      "path": "gpui_ios::ffi",
      "source": "crates/gpui_ios/src/ffi.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, Default, PartialEq)] # [repr (C)] pub struct TextRange { pub location : usize, pub length : usize, pub valid : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_ios::ffi::TextRange::into_range",
      "name": "into_range",
      "kind": "method",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "ffi",
      "path": "gpui_ios::ffi",
      "source": "crates/gpui_ios/src/ffi.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn into_range (self) -> Option<std::ops::Range<usize>>",
      "cfg": [],
      "target": "TextRange"
    },
    {
      "id": "gpui_ios::platform::IosPlatform",
      "name": "IosPlatform",
      "kind": "struct",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "platform",
      "path": "gpui_ios::platform",
      "source": "crates/gpui_ios/src/platform.rs",
      "summary": "UIKit application host. Construct and run on the main thread.",
      "documentation": "UIKit application host. Construct and run on the main thread.\n\nFonts are caller-owned assets, shared by shaping and rasterization through\nthe existing GPUI wgpu text system. The fallback family must be present in\n`fonts`; no AppKit system-font authority is silently assumed on iOS.",
      "signature": "# [doc = \" UIKit application host. Construct and run on the main thread.\"] # [doc = \"\"] # [doc = \" Fonts are caller-owned assets, shared by shaping and rasterization through\"] # [doc = \" the existing GPUI wgpu text system. The fallback family must be present in\"] # [doc = \" `fonts`; no AppKit system-font authority is silently assumed on iOS.\"] pub struct IosPlatform { state : Rc<State>, foreground : ForegroundExecutor, background : BackgroundExecutor, text : Arc<dyn PlatformTextSystem>, }",
      "cfg": []
    },
    {
      "id": "gpui_ios::platform::IosPlatform::last_error",
      "name": "last_error",
      "kind": "method",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "platform",
      "path": "gpui_ios::platform",
      "source": "crates/gpui_ios/src/platform.rs",
      "summary": "Most recent native surface failure. A failed resume never permits draw.",
      "documentation": "Most recent native surface failure. A failed resume never permits draw.",
      "signature": "pub fn last_error (& self) -> Option<String>",
      "cfg": [],
      "target": "IosPlatform"
    },
    {
      "id": "gpui_ios::platform::IosPlatform::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "platform",
      "path": "gpui_ios::platform",
      "source": "crates/gpui_ios/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (fallback_family : & str, fonts : Vec<Cow<'static, [u8]>>) -> Result<Self>",
      "cfg": [],
      "target": "IosPlatform"
    },
    {
      "id": "gpui_ios::platform::IosPlatform::verify_next_frame",
      "name": "verify_next_frame",
      "kind": "method",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "platform",
      "path": "gpui_ios::platform",
      "source": "crates/gpui_ios/src/platform.rs",
      "summary": "Verifies completion of the next successfully submitted GPUI window frame.",
      "documentation": "Verifies completion of the next successfully submitted GPUI window frame.\n\nDiagnostic use only: waits up to five seconds for GPU work after a real\ndraw, reports pending validation/device errors, and delivers the callback\non the main queue after the GPUI window borrow ends. No callback means no\nsuccessful draw occurred; the harness must impose its own overall timeout.\nThis proves submission/completion, not displayed pixels or input behavior.",
      "signature": "pub fn verify_next_frame (& self, callback : impl FnOnce (Result<()>) + 'static) -> Result<()>",
      "cfg": [],
      "target": "IosPlatform"
    },
    {
      "id": "gpui_ios::reexport-1",
      "name": "platform :: IosPlatform",
      "kind": "reexport",
      "package": "gpui-box-ios",
      "crate": "gpui_ios",
      "module": "",
      "path": "gpui_ios",
      "source": "crates/gpui_ios/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (any (target_os = \"ios\", feature = \"platform-check\"))] pub use platform::IosPlatform;",
      "cfg": [
        "cfg (any (target_os = \"ios\", feature = \"platform-check\"))"
      ]
    },
    {
      "id": "gpui_kit::agent::approval::AlwaysScope",
      "name": "AlwaysScope",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "What a standing approval covers.",
      "documentation": "What a standing approval covers.\n\nThere is deliberately no bare `Always`. A caller states which of these\nfour kinds of \"always\" it is offering, and the control words itself from\nthat, so an unscoped standing permission has no representation.",
      "signature": "# [doc = \" What a standing approval covers.\"] # [doc = \"\"] # [doc = \" There is deliberately no bare `Always`. A caller states which of these\"] # [doc = \" four kinds of \\\"always\\\" it is offering, and the control words itself from\"] # [doc = \" that, so an unscoped standing permission has no representation.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum AlwaysScope { # [doc = \" Until this session ends. The session is the scope, so it names nothing\"] # [doc = \" further.\"] Session, # [doc = \" Every future use of one named tool.\"] Tool (SharedString), # [doc = \" Anything under one named place on disk.\"] Path (SharedString), # [doc = \" Every future request to one named host.\"] Host (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::approval::AlwaysScope::host",
      "name": "host",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn host (host : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AlwaysScope"
    },
    {
      "id": "gpui_kit::agent::approval::AlwaysScope::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "The wording that appears on the control, which always states the scope.",
      "documentation": "The wording that appears on the control, which always states the\nscope.",
      "signature": "pub fn label (& self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "AlwaysScope"
    },
    {
      "id": "gpui_kit::agent::approval::AlwaysScope::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "The stable name of the kind of scope, used for the control's id and published in the semantic tree.",
      "documentation": "The stable name of the kind of scope, used for the control's id and\npublished in the semantic tree.",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "AlwaysScope"
    },
    {
      "id": "gpui_kit::agent::approval::AlwaysScope::path",
      "name": "path",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn path (path : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AlwaysScope"
    },
    {
      "id": "gpui_kit::agent::approval::AlwaysScope::subject",
      "name": "subject",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "The thing the scope covers, when it is one named thing.",
      "documentation": "The thing the scope covers, when it is one named thing.",
      "signature": "pub fn subject (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "AlwaysScope"
    },
    {
      "id": "gpui_kit::agent::approval::AlwaysScope::tool",
      "name": "tool",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tool (name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AlwaysScope"
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalDecision",
      "name": "ApprovalDecision",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "How far an approval reaches.",
      "documentation": "How far an approval reaches.",
      "signature": "# [doc = \" How far an approval reaches.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum ApprovalDecision { # [doc = \" This request and nothing else.\"] Once, # [doc = \" A standing permission, which always states what it covers.\"] Always (AlwaysScope), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalDecision::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "The wording for the reach of the decision, for the sentence a resolved prompt shows.",
      "documentation": "The wording for the reach of the decision, for the sentence a resolved\nprompt shows.",
      "signature": "pub fn label (& self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "ApprovalDecision"
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalEvent",
      "name": "ApprovalEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "What the prompt reports. It applies none of it.",
      "documentation": "What the prompt reports. It applies none of it.",
      "signature": "# [doc = \" What the prompt reports. It applies none of it.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum ApprovalEvent { # [doc = \" The typist approved, and this is how far the approval reaches.\"] Approved (ApprovalDecision), # [doc = \" The typist declined. Also what escape and a stray return key report.\"] Declined, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalPrompt",
      "name": "ApprovalPrompt",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "One request for permission, with the answer left to the caller.",
      "documentation": "One request for permission, with the answer left to the caller.\n\nIt is a view rather than a builder because where the keyboard is has to\nsurvive a frame, and where the keyboard is *is* the safety property.",
      "signature": "# [doc = \" One request for permission, with the answer left to the caller.\"] # [doc = \"\"] # [doc = \" It is a view rather than a builder because where the keyboard is has to\"] # [doc = \" survive a frame, and where the keyboard is *is* the safety property.\"] pub struct ApprovalPrompt { ident : Ident, focus_handle : FocusHandle, decline_focus : FocusHandle, approve_focus : FocusHandle, always_focus : Vec<FocusHandle>, # [doc = \" Exactly what is being asked for, in the caller's words. Required by\"] # [doc = \" the constructor: a prompt with nothing specific to say is not one this\"] # [doc = \" component can render.\"] action : SharedString, details : Vec<DescriptionItem>, always : Vec<AlwaysScope>, status : ApprovalStatus, # [doc = \" Cleared by the first frame that can act on it, as in `Dialog`.\"] pending_focus : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalPrompt::always",
      "name": "always",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "Offers a standing approval. The scope is part of the argument, so the control cannot be worded without it.",
      "documentation": "Offers a standing approval. The scope is part of the argument, so the\ncontrol cannot be worded without it.",
      "signature": "pub fn always (mut self, scope : AlwaysScope) -> Self",
      "cfg": [],
      "target": "ApprovalPrompt"
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalPrompt::approve",
      "name": "approve",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "Reports an approval. Refused unless the prompt is still pending, so a host calling this on a resolved prompt cannot resurrect it.",
      "documentation": "Reports an approval. Refused unless the prompt is still pending, so a\nhost calling this on a resolved prompt cannot resurrect it.",
      "signature": "pub fn approve (& mut self, decision : ApprovalDecision, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ApprovalPrompt"
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalPrompt::current_status",
      "name": "current_status",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current_status (& self) -> & ApprovalStatus",
      "cfg": [],
      "target": "ApprovalPrompt"
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalPrompt::decline",
      "name": "decline",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn decline (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ApprovalPrompt"
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalPrompt::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "One more specific fact about the request: the exact path, the exact command, the exact host.",
      "documentation": "One more specific fact about the request: the exact path, the exact\ncommand, the exact host.",
      "signature": "pub fn detail (mut self, detail : DescriptionItem) -> Self",
      "cfg": [],
      "target": "ApprovalPrompt"
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalPrompt::details",
      "name": "details",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn details (mut self, details : impl IntoIterator<Item = DescriptionItem>) -> Self",
      "cfg": [],
      "target": "ApprovalPrompt"
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalPrompt::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "`action` is what is about to happen, stated specifically. There is no way to describe the request as a category instead.",
      "documentation": "`action` is what is about to happen, stated specifically. There is no\nway to describe the request as a category instead.",
      "signature": "pub fn new (ident : impl Into<Ident>, action : impl Into<SharedString>, _window : & mut Window, cx : & mut Context<Self>,) -> Self",
      "cfg": [],
      "target": "ApprovalPrompt"
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalPrompt::set_status",
      "name": "set_status",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "Records what happened to the request. A host that expires or supersedes a prompt says so through here rather than by removing it, so the reader finds out why the controls went away.",
      "documentation": "Records what happened to the request. A host that expires or supersedes\na prompt says so through here rather than by removing it, so the reader\nfinds out why the controls went away.",
      "signature": "pub fn set_status (& mut self, status : ApprovalStatus, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ApprovalPrompt"
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalPrompt::status",
      "name": "status",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn status (mut self, status : ApprovalStatus) -> Self",
      "cfg": [],
      "target": "ApprovalPrompt"
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalStatus",
      "name": "ApprovalStatus",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "What has happened to this request.",
      "documentation": "What has happened to this request.\n\nDeclined, expired and superseded are three different things and are never\ncollapsed into one another.",
      "signature": "# [doc = \" What has happened to this request.\"] # [doc = \"\"] # [doc = \" Declined, expired and superseded are three different things and are never\"] # [doc = \" collapsed into one another.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum ApprovalStatus { # [doc = \" Nobody has answered yet. The only status that offers controls.\"] # [default] Pending, # [doc = \" Somebody answered, and the answer was no.\"] Declined, # [doc = \" Somebody answered, and said how far the answer reaches.\"] Approved (ApprovalDecision), # [doc = \" The window in which this could be answered closed. Nobody refused it.\"] Expired, # [doc = \" A later request took this one's place. The wording naming the\"] # [doc = \" replacement belongs to the host and is shown verbatim.\"] Superseded { by : SharedString }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::approval::ApprovalStatus::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::approval",
      "path": "gpui_kit::agent::approval",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "The stable name published in the semantic tree.",
      "documentation": "The stable name published in the semantic tree.",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "ApprovalStatus"
    },
    {
      "id": "gpui_kit::agent::artifact::ArtifactKind",
      "name": "ArtifactKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::artifact",
      "path": "gpui_kit::agent::artifact",
      "source": "crates/gpui-kit/src/agent/artifact.rs",
      "summary": "What kind of artifact the host is showing.",
      "documentation": "What kind of artifact the host is showing.",
      "signature": "# [doc = \" What kind of artifact the host is showing.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum ArtifactKind { Code, Document, Markup, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::artifact::ArtifactKind::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::artifact",
      "path": "gpui_kit::agent::artifact",
      "source": "crates/gpui-kit/src/agent/artifact.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "ArtifactKind"
    },
    {
      "id": "gpui_kit::agent::artifact::ArtifactPreview",
      "name": "ArtifactPreview",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::artifact",
      "path": "gpui_kit::agent::artifact",
      "source": "crates/gpui-kit/src/agent/artifact.rs",
      "summary": "A titled pane for a generated artifact.",
      "documentation": "A titled pane for a generated artifact.",
      "signature": "# [doc = \" A titled pane for a generated artifact.\"] # [derive (IntoElement)] pub struct ArtifactPreview { ident : Ident, title : SharedString, kind : ArtifactKind, body : SharedString, language : Option<Language>, state : ArtifactPreviewState, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::artifact::ArtifactPreview::body",
      "name": "body",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::artifact",
      "path": "gpui_kit::agent::artifact",
      "source": "crates/gpui-kit/src/agent/artifact.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn body (mut self, body : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ArtifactPreview"
    },
    {
      "id": "gpui_kit::agent::artifact::ArtifactPreview::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::artifact",
      "path": "gpui_kit::agent::artifact",
      "source": "crates/gpui-kit/src/agent/artifact.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn kind (mut self, kind : ArtifactKind) -> Self",
      "cfg": [],
      "target": "ArtifactPreview"
    },
    {
      "id": "gpui_kit::agent::artifact::ArtifactPreview::language",
      "name": "language",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::artifact",
      "path": "gpui_kit::agent::artifact",
      "source": "crates/gpui-kit/src/agent/artifact.rs",
      "summary": "What the body is written in, when the host knows.",
      "documentation": "What the body is written in, when the host knows.\n\nOnly what a caller says is read, the same rule a fenced block in\n[`crate::prelude::Markdown`] keeps: an artifact whose language nobody\nnamed is set in the same face at the same size and left uncoloured,\nrather than coloured against a grammar somebody guessed at.",
      "signature": "pub fn language (mut self, language : Language) -> Self",
      "cfg": [],
      "target": "ArtifactPreview"
    },
    {
      "id": "gpui_kit::agent::artifact::ArtifactPreview::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::artifact",
      "path": "gpui_kit::agent::artifact",
      "source": "crates/gpui-kit/src/agent/artifact.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ArtifactPreview"
    },
    {
      "id": "gpui_kit::agent::artifact::ArtifactPreview::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::artifact",
      "path": "gpui_kit::agent::artifact",
      "source": "crates/gpui-kit/src/agent/artifact.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : ArtifactPreviewState) -> Self",
      "cfg": [],
      "target": "ArtifactPreview"
    },
    {
      "id": "gpui_kit::agent::artifact::ArtifactPreviewState",
      "name": "ArtifactPreviewState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::artifact",
      "path": "gpui_kit::agent::artifact",
      "source": "crates/gpui-kit/src/agent/artifact.rs",
      "summary": "How the artifact was asked for.",
      "documentation": "How the artifact was asked for.",
      "signature": "# [doc = \" How the artifact was asked for.\"] # [derive (Debug, Clone, PartialEq)] pub enum ArtifactPreviewState { Loading, Ready, Empty, Unavailable (SharedString), Error (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::artifact::ArtifactPreviewState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::artifact",
      "path": "gpui_kit::agent::artifact",
      "source": "crates/gpui-kit/src/agent/artifact.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "ArtifactPreviewState"
    },
    {
      "id": "gpui_kit::agent::canvas::AgentRunCanvas",
      "name": "AgentRunCanvas",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::canvas",
      "path": "gpui_kit::agent::canvas",
      "source": "crates/gpui-kit/src/agent/canvas.rs",
      "summary": "A typed, read-mostly view of an [`AgentRunSnapshot`] on a node canvas.",
      "documentation": "A typed, read-mostly view of an [`AgentRunSnapshot`] on a node canvas.\n\nThe default inspection mode supports pan, zoom, and selection but never\ninstalls topology editing or deletion. [`AgentRunCanvas::arrangeable`]\nadditionally reports node moves while still keeping links immutable.",
      "signature": "# [doc = \" A typed, read-mostly view of an [`AgentRunSnapshot`] on a node canvas.\"] # [doc = \"\"] # [doc = \" The default inspection mode supports pan, zoom, and selection but never\"] # [doc = \" installs topology editing or deletion. [`AgentRunCanvas::arrangeable`]\"] # [doc = \" additionally reports node moves while still keeping links immutable.\"] # [derive (IntoElement)] pub struct AgentRunCanvas { ident : Ident, run : AgentRunSnapshot, layout : AgentRunLayout, positions : Vec<(RunSubjectId, Point<f32>)>, selected : Vec<RunSubjectId>, viewport : GraphViewport, arrangeable : bool, on_event : Option<EventHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::canvas::AgentRunCanvas::arrangeable",
      "name": "arrangeable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::canvas",
      "path": "gpui_kit::agent::canvas",
      "source": "crates/gpui-kit/src/agent/canvas.rs",
      "summary": "Allows position proposals without enabling deletion or topology edits.",
      "documentation": "Allows position proposals without enabling deletion or topology edits.",
      "signature": "pub fn arrangeable (mut self, arrangeable : bool) -> Self",
      "cfg": [],
      "target": "AgentRunCanvas"
    },
    {
      "id": "gpui_kit::agent::canvas::AgentRunCanvas::layout",
      "name": "layout",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::canvas",
      "path": "gpui_kit::agent::canvas",
      "source": "crates/gpui-kit/src/agent/canvas.rs",
      "summary": "Chooses one of the built-in deterministic layered arrangements.",
      "documentation": "Chooses one of the built-in deterministic layered arrangements.",
      "signature": "pub fn layout (mut self, layout : AgentRunLayout) -> Self",
      "cfg": [],
      "target": "AgentRunCanvas"
    },
    {
      "id": "gpui_kit::agent::canvas::AgentRunCanvas::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::canvas",
      "path": "gpui_kit::agent::canvas",
      "source": "crates/gpui-kit/src/agent/canvas.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, run : AgentRunSnapshot) -> Self",
      "cfg": [],
      "target": "AgentRunCanvas"
    },
    {
      "id": "gpui_kit::agent::canvas::AgentRunCanvas::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::canvas",
      "path": "gpui_kit::agent::canvas",
      "source": "crates/gpui-kit/src/agent/canvas.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& AgentRunCanvasEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "AgentRunCanvas"
    },
    {
      "id": "gpui_kit::agent::canvas::AgentRunCanvas::position",
      "name": "position",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::canvas",
      "path": "gpui_kit::agent::canvas",
      "source": "crates/gpui-kit/src/agent/canvas.rs",
      "summary": "Overrides one built-in position with caller-owned world coordinates. A later override for the same subject wins.",
      "documentation": "Overrides one built-in position with caller-owned world coordinates.\nA later override for the same subject wins.",
      "signature": "pub fn position (mut self, subject : RunSubjectId, x : f32, y : f32) -> Self",
      "cfg": [],
      "target": "AgentRunCanvas"
    },
    {
      "id": "gpui_kit::agent::canvas::AgentRunCanvas::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::canvas",
      "path": "gpui_kit::agent::canvas",
      "source": "crates/gpui-kit/src/agent/canvas.rs",
      "summary": "Supplies the complete caller-owned subject selection.",
      "documentation": "Supplies the complete caller-owned subject selection.",
      "signature": "pub fn selected (mut self, selected : impl IntoIterator<Item = RunSubjectId>) -> Self",
      "cfg": [],
      "target": "AgentRunCanvas"
    },
    {
      "id": "gpui_kit::agent::canvas::AgentRunCanvas::viewport",
      "name": "viewport",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::canvas",
      "path": "gpui_kit::agent::canvas",
      "source": "crates/gpui-kit/src/agent/canvas.rs",
      "summary": "Supplies the caller-owned pan and zoom value.",
      "documentation": "Supplies the caller-owned pan and zoom value.",
      "signature": "pub fn viewport (mut self, viewport : GraphViewport) -> Self",
      "cfg": [],
      "target": "AgentRunCanvas"
    },
    {
      "id": "gpui_kit::agent::canvas::AgentRunCanvasEvent",
      "name": "AgentRunCanvasEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::canvas",
      "path": "gpui_kit::agent::canvas",
      "source": "crates/gpui-kit/src/agent/canvas.rs",
      "summary": "A controlled change proposed by [`AgentRunCanvas`].",
      "documentation": "A controlled change proposed by [`AgentRunCanvas`].",
      "signature": "# [doc = \" A controlled change proposed by [`AgentRunCanvas`].\"] # [derive (Debug, Clone, PartialEq)] pub enum AgentRunCanvasEvent { # [doc = \" Proposes the complete caller-owned subject selection.\"] SelectionChanged (Vec<RunSubjectId>), # [doc = \" Proposes a new pan or zoom value.\"] ViewportChanged (GraphViewport), # [doc = \" Proposes an arranged world-space position for one subject.\"] PositionChanged { subject : RunSubjectId, position : Point<f32>, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::canvas::AgentRunLayout",
      "name": "AgentRunLayout",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::canvas",
      "path": "gpui_kit::agent::canvas",
      "source": "crates/gpui-kit/src/agent/canvas.rs",
      "summary": "The reading axis used by the built-in deterministic run layout.",
      "documentation": "The reading axis used by the built-in deterministic run layout.",
      "signature": "# [doc = \" The reading axis used by the built-in deterministic run layout.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum AgentRunLayout { # [doc = \" Roots precede dependants in reading order. Right-to-left locales mirror\"] # [doc = \" the columns without changing caller-owned identities or relationships.\"] # [default] LayeredHorizontal, # [doc = \" Roots sit above dependants. Nodes within a layer follow snapshot order.\"] LayeredVertical, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationEvent",
      "name": "ClarificationEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "What the panel reports without applying it.",
      "documentation": "What the panel reports without applying it.",
      "signature": "# [doc = \" What the panel reports without applying it.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum ClarificationEvent { # [doc = \" The ids that were picked, in the order they were picked.\"] Answered (Vec<SharedString>), # [doc = \" The reader chose to let the agent decide.\"] Skipped, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationOption",
      "name": "ClarificationOption",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "One candidate answer the agent is offering.",
      "documentation": "One candidate answer the agent is offering.",
      "signature": "# [doc = \" One candidate answer the agent is offering.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct ClarificationOption { id : SharedString, label : SharedString, detail : Option<SharedString>, # [doc = \" Why this candidate cannot presently be picked, in the host's words.\"] # [doc = \" `None` is the available case, so an unavailable option cannot be built\"] # [doc = \" without saying what is wrong with it.\"] unavailable : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationOption::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "One more line about this candidate: the path it resolves to, the version it means, what picking it would cost.",
      "documentation": "One more line about this candidate: the path it resolves to, the\nversion it means, what picking it would cost.",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ClarificationOption"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationOption::detail_text",
      "name": "detail_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "The extra line about this candidate, if the caller gave one.",
      "documentation": "The extra line about this candidate, if the caller gave one.",
      "signature": "pub fn detail_text (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "ClarificationOption"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationOption::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "ClarificationOption"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationOption::is_available",
      "name": "is_available",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_available (& self) -> bool",
      "cfg": [],
      "target": "ClarificationOption"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationOption::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "ClarificationOption"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationOption::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "`id` is the business identity of the candidate, which is what the panel reports and what its semantic id derives from. It is never the position: reordering the candidates must not rename them.",
      "documentation": "`id` is the business identity of the candidate, which is what the panel\nreports and what its semantic id derives from. It is never the\nposition: reordering the candidates must not rename them.",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ClarificationOption"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationOption::unavailable",
      "name": "unavailable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "Marks the candidate as one that cannot be picked, and says why. The reason is shown; the option keeps its place and installs no handler.",
      "documentation": "Marks the candidate as one that cannot be picked, and says why. The\nreason is shown; the option keeps its place and installs no handler.",
      "signature": "pub fn unavailable (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ClarificationOption"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationOption::unavailable_reason",
      "name": "unavailable_reason",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "Why this candidate cannot be picked, if it cannot.",
      "documentation": "Why this candidate cannot be picked, if it cannot.",
      "signature": "pub fn unavailable_reason (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "ClarificationOption"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel",
      "name": "ClarificationPanel",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "One clarifying question, with the answer left to the caller.",
      "documentation": "One clarifying question, with the answer left to the caller.\n\nIt is a view rather than a builder because a multiple-answer question\naccumulates a selection across frames, and because where the keyboard is\nhas to survive one.",
      "signature": "# [doc = \" One clarifying question, with the answer left to the caller.\"] # [doc = \"\"] # [doc = \" It is a view rather than a builder because a multiple-answer question\"] # [doc = \" accumulates a selection across frames, and because where the keyboard is\"] # [doc = \" has to survive one.\"] pub struct ClarificationPanel { ident : Ident, focus_handle : FocusHandle, option_focus : Vec<FocusHandle>, answer_focus : FocusHandle, skip_focus : FocusHandle, # [doc = \" What the agent needs to know, in its own words. Required by the\"] # [doc = \" constructor: a clarification with no question is not one this component\"] # [doc = \" can render.\"] question : SharedString, options : Vec<ClarificationOption>, multiple : bool, skippable : bool, # [doc = \" The ids picked so far, in the order they were picked, which is the\"] # [doc = \" order they are reported in.\"] picked : Vec<SharedString>, status : ClarificationStatus, # [doc = \" Cleared by the first frame that can act on it, as in `ApprovalPrompt`.\"] pending_focus : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel::answer",
      "name": "answer",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "Reports the accumulated answer. Refused while nothing is picked, so the question cannot be answered with silence.",
      "documentation": "Reports the accumulated answer. Refused while nothing is picked, so the\nquestion cannot be answered with silence.",
      "signature": "pub fn answer (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ClarificationPanel"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel::candidates",
      "name": "candidates",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "The candidates the panel was given.",
      "documentation": "The candidates the panel was given.",
      "signature": "pub fn candidates (& self) -> & [ClarificationOption]",
      "cfg": [],
      "target": "ClarificationPanel"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel::choose",
      "name": "choose",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "Picks a candidate: toggles it when the question takes several answers, and answers the question outright when it takes one.",
      "documentation": "Picks a candidate: toggles it when the question takes several answers,\nand answers the question outright when it takes one.\n\nRefused for an unavailable candidate, an unknown id, and a question\nthat is no longer pending, so a host driving the panel cannot reach a\nstate the pointer and the keyboard cannot.",
      "signature": "pub fn choose (& mut self, id : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ClarificationPanel"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel::chosen",
      "name": "chosen",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "What is filled right now: the answer once there is one, and the selection in progress until then. One question, one place it is answered from.",
      "documentation": "What is filled right now: the answer once there is one, and the\nselection in progress until then. One question, one place it is\nanswered from.",
      "signature": "pub fn chosen (& self) -> & [SharedString]",
      "cfg": [],
      "target": "ClarificationPanel"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel::current_status",
      "name": "current_status",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current_status (& self) -> & ClarificationStatus",
      "cfg": [],
      "target": "ClarificationPanel"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel::multiple",
      "name": "multiple",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "Accepts more than one answer, which is what adds the confirming control. Without it the question takes exactly one answer and picking is answering.",
      "documentation": "Accepts more than one answer, which is what adds the confirming\ncontrol. Without it the question takes exactly one answer and picking\nis answering.",
      "signature": "pub fn multiple (mut self) -> Self",
      "cfg": [],
      "target": "ClarificationPanel"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "`question` is what the agent needs to know, stated in full. There is no way to render the question as a category instead.",
      "documentation": "`question` is what the agent needs to know, stated in full. There is no\nway to render the question as a category instead.",
      "signature": "pub fn new (ident : impl Into<Ident>, question : impl Into<SharedString>, _window : & mut Window, cx : & mut Context<Self>,) -> Self",
      "cfg": [],
      "target": "ClarificationPanel"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel::option",
      "name": "option",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn option (mut self, option : ClarificationOption) -> Self",
      "cfg": [],
      "target": "ClarificationPanel"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel::options",
      "name": "options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn options (mut self, options : impl IntoIterator<Item = ClarificationOption>) -> Self",
      "cfg": [],
      "target": "ClarificationPanel"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel::set_status",
      "name": "set_status",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "Records what happened to the question. A host that withdraws or supersedes one says so through here rather than by removing the panel, so the reader finds out why the controls went away.",
      "documentation": "Records what happened to the question. A host that withdraws or\nsupersedes one says so through here rather than by removing the panel,\nso the reader finds out why the controls went away.",
      "signature": "pub fn set_status (& mut self, status : ClarificationStatus, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ClarificationPanel"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel::skip",
      "name": "skip",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "Reports that the reader would rather the agent decided. Refused unless the caller offered the choice.",
      "documentation": "Reports that the reader would rather the agent decided. Refused unless\nthe caller offered the choice.",
      "signature": "pub fn skip (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ClarificationPanel"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel::skippable",
      "name": "skippable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "Offers the reader a way to decline to choose and let the agent decide. Off by default, because a question the agent cannot proceed without is the ordinary case and a skip control on one is a lie.",
      "documentation": "Offers the reader a way to decline to choose and let the agent decide.\nOff by default, because a question the agent cannot proceed without is\nthe ordinary case and a skip control on one is a lie.",
      "signature": "pub fn skippable (mut self) -> Self",
      "cfg": [],
      "target": "ClarificationPanel"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationPanel::status",
      "name": "status",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn status (mut self, status : ClarificationStatus) -> Self",
      "cfg": [],
      "target": "ClarificationPanel"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationStatus",
      "name": "ClarificationStatus",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "What happened to the question.",
      "documentation": "What happened to the question.\n\nAnswered, skipped, withdrawn and superseded are four different facts and\nare kept apart for the same reason approval keeps declined, expired and\nsuperseded apart: a question nobody answered was not answered, and a\nquestion the agent stopped needing was not skipped by the reader.",
      "signature": "# [doc = \" What happened to the question.\"] # [doc = \"\"] # [doc = \" Answered, skipped, withdrawn and superseded are four different facts and\"] # [doc = \" are kept apart for the same reason approval keeps declined, expired and\"] # [doc = \" superseded apart: a question nobody answered was not answered, and a\"] # [doc = \" question the agent stopped needing was not skipped by the reader.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum ClarificationStatus { # [doc = \" Still waiting on the reader.\"] # [default] Pending, # [doc = \" Answered, with the ids that were picked.\"] Answered (Vec<SharedString>), # [doc = \" The reader declined to choose and let the agent decide for itself.\"] # [doc = \" Only reachable when the panel is\"] # [doc = \" [`skippable`](ClarificationPanel::skippable).\"] Skipped, # [doc = \" The agent stopped needing the answer, in its own words.\"] Withdrawn (SharedString), # [doc = \" A later question took this one's place.\"] Superseded { by : SharedString }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationStatus::answer",
      "name": "answer",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "The ids that were picked, if the question was answered.",
      "documentation": "The ids that were picked, if the question was answered.",
      "signature": "pub fn answer (& self) -> Option<& [SharedString]>",
      "cfg": [],
      "target": "ClarificationStatus"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationStatus::is_pending",
      "name": "is_pending",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_pending (& self) -> bool",
      "cfg": [],
      "target": "ClarificationStatus"
    },
    {
      "id": "gpui_kit::agent::clarification::ClarificationStatus::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::clarification",
      "path": "gpui_kit::agent::clarification",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "The stable name published on the semantic node, so a test tells the five apart without reading a colour.",
      "documentation": "The stable name published on the semantic node, so a test tells the\nfive apart without reading a colour.",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "ClarificationStatus"
    },
    {
      "id": "gpui_kit::agent::cost::Basis",
      "name": "Basis",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "How a number was arrived at.",
      "documentation": "How a number was arrived at.\n\nThere is no third variant meaning \"unspecified\": a caller that cannot say\nwhich of these two it has does not have a number, it has\n[`Reading::Unavailable`].",
      "signature": "# [doc = \" How a number was arrived at.\"] # [doc = \"\"] # [doc = \" There is no third variant meaning \\\"unspecified\\\": a caller that cannot say\"] # [doc = \" which of these two it has does not have a number, it has\"] # [doc = \" [`Reading::Unavailable`].\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum Basis { # [doc = \" Counted by whoever owns the meter.\"] Measured, # [doc = \" Worked out from something else, and said so everywhere it appears.\"] Estimated, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::cost::Basis::is_estimate",
      "name": "is_estimate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_estimate (self) -> bool",
      "cfg": [],
      "target": "Basis"
    },
    {
      "id": "gpui_kit::agent::cost::Basis::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "The stable name published in the semantic tree.",
      "documentation": "The stable name published in the semantic tree.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "Basis"
    },
    {
      "id": "gpui_kit::agent::cost::ContextGauge",
      "name": "ContextGauge",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "How much of a context window a run has used.",
      "documentation": "How much of a context window a run has used.\n\nThe gauge draws a proportion only when it has both a reading and a limit,\nand says which of the two it is missing when it does not.",
      "signature": "# [doc = \" How much of a context window a run has used.\"] # [doc = \"\"] # [doc = \" The gauge draws a proportion only when it has both a reading and a limit,\"] # [doc = \" and says which of the two it is missing when it does not.\"] # [derive (Debug, Clone, IntoElement)] pub struct ContextGauge { ident : Ident, label : Option<SharedString>, used : Reading, limit : Limit, stale : Option<LastVerified>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::cost::ContextGauge::fraction",
      "name": "fraction",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "The proportion, when there is one to draw.",
      "documentation": "The proportion, when there is one to draw.\n\n`None` whenever the limit is unknown or the reading is unavailable: a\nproportion of an unknown total, or of a number nobody has, is invented.",
      "signature": "pub fn fraction (& self) -> Option<f32>",
      "cfg": [],
      "target": "ContextGauge"
    },
    {
      "id": "gpui_kit::agent::cost::ContextGauge::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ContextGauge"
    },
    {
      "id": "gpui_kit::agent::cost::ContextGauge::limit",
      "name": "limit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn limit (mut self, limit : Limit) -> Self",
      "cfg": [],
      "target": "ContextGauge"
    },
    {
      "id": "gpui_kit::agent::cost::ContextGauge::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "`used` carries its own basis, so a gauge cannot be given a bare number.",
      "documentation": "`used` carries its own basis, so a gauge cannot be given a bare number.",
      "signature": "pub fn new (ident : impl Into<Ident>, used : Reading) -> Self",
      "cfg": [],
      "target": "ContextGauge"
    },
    {
      "id": "gpui_kit::agent::cost::ContextGauge::stale",
      "name": "stale",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "The reading is the last verified one, from the moment stated.",
      "documentation": "The reading is the last verified one, from the moment stated.",
      "signature": "pub fn stale (mut self, verified : LastVerified) -> Self",
      "cfg": [],
      "target": "ContextGauge"
    },
    {
      "id": "gpui_kit::agent::cost::CostLine",
      "name": "CostLine",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "One line of a [`CostMeter`].",
      "documentation": "One line of a [`CostMeter`].",
      "signature": "# [doc = \" One line of a [`CostMeter`].\"] # [derive (Debug, Clone, PartialEq)] pub struct CostLine { id : SharedString, label : SharedString, reading : Reading, stale : Option<LastVerified>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::cost::CostLine::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "CostLine"
    },
    {
      "id": "gpui_kit::agent::cost::CostLine::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>, reading : Reading,) -> Self",
      "cfg": [],
      "target": "CostLine"
    },
    {
      "id": "gpui_kit::agent::cost::CostLine::reading",
      "name": "reading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn reading (& self) -> & Reading",
      "cfg": [],
      "target": "CostLine"
    },
    {
      "id": "gpui_kit::agent::cost::CostLine::stale",
      "name": "stale",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "The refresh that should have replaced this reading did not. The value stays on screen and says when it was from.",
      "documentation": "The refresh that should have replaced this reading did not. The value\nstays on screen and says when it was from.",
      "signature": "pub fn stale (mut self, verified : LastVerified) -> Self",
      "cfg": [],
      "target": "CostLine"
    },
    {
      "id": "gpui_kit::agent::cost::CostMeter",
      "name": "CostMeter",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "What a run has cost so far, line by line.",
      "documentation": "What a run has cost so far, line by line.",
      "signature": "# [doc = \" What a run has cost so far, line by line.\"] # [derive (Debug, Clone, IntoElement)] pub struct CostMeter { ident : Ident, label : Option<SharedString>, lines : Vec<CostLine>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::cost::CostMeter::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CostMeter"
    },
    {
      "id": "gpui_kit::agent::cost::CostMeter::line",
      "name": "line",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn line (mut self, line : CostLine) -> Self",
      "cfg": [],
      "target": "CostMeter"
    },
    {
      "id": "gpui_kit::agent::cost::CostMeter::lines",
      "name": "lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn lines (mut self, lines : impl IntoIterator<Item = CostLine>) -> Self",
      "cfg": [],
      "target": "CostMeter"
    },
    {
      "id": "gpui_kit::agent::cost::CostMeter::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "CostMeter"
    },
    {
      "id": "gpui_kit::agent::cost::LastVerified",
      "name": "LastVerified",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "When a reading was last verified, for a reading that is no longer current.",
      "documentation": "When a reading was last verified, for a reading that is no longer current.\n\nMarking a value stale and saying when it was from is one call, because a\nvalue marked stale without a date is a warning nobody can act on. The\nwording of the date is the caller's, as in\n[`Timeline`](crate::display::timeline::Timeline).",
      "signature": "# [doc = \" When a reading was last verified, for a reading that is no longer current.\"] # [doc = \"\"] # [doc = \" Marking a value stale and saying when it was from is one call, because a\"] # [doc = \" value marked stale without a date is a warning nobody can act on. The\"] # [doc = \" wording of the date is the caller's, as in\"] # [doc = \" [`Timeline`](crate::display::timeline::Timeline).\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct LastVerified (SharedString);",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::cost::LastVerified::at",
      "name": "at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn at (when : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "LastVerified"
    },
    {
      "id": "gpui_kit::agent::cost::Limit",
      "name": "Limit",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "The ceiling a gauge measures against.",
      "documentation": "The ceiling a gauge measures against.",
      "signature": "# [doc = \" The ceiling a gauge measures against.\"] # [derive (Debug, Clone, PartialEq, Default)] pub enum Limit { # [doc = \" A stated ceiling, which may itself be an estimate.\"] Known (Quantity), # [doc = \" Nobody stated one. No proportion is drawn.\"] # [default] Unknown, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::cost::Limit::estimated",
      "name": "estimated",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn estimated (amount : f64, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Limit"
    },
    {
      "id": "gpui_kit::agent::cost::Limit::is_known",
      "name": "is_known",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_known (& self) -> bool",
      "cfg": [],
      "target": "Limit"
    },
    {
      "id": "gpui_kit::agent::cost::Limit::measured",
      "name": "measured",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn measured (amount : f64, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Limit"
    },
    {
      "id": "gpui_kit::agent::cost::Limit::quantity",
      "name": "quantity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn quantity (& self) -> Option<& Quantity>",
      "cfg": [],
      "target": "Limit"
    },
    {
      "id": "gpui_kit::agent::cost::Quantity",
      "name": "Quantity",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "A number, the caller's wording for it, and how it was arrived at.",
      "documentation": "A number, the caller's wording for it, and how it was arrived at.",
      "signature": "# [doc = \" A number, the caller's wording for it, and how it was arrived at.\"] # [derive (Debug, Clone, PartialEq)] pub struct Quantity { basis : Basis, amount : f64, text : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::cost::Quantity::amount",
      "name": "amount",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "The bare number, used only for proportions against a known limit.",
      "documentation": "The bare number, used only for proportions against a known limit.",
      "signature": "pub fn amount (& self) -> f64",
      "cfg": [],
      "target": "Quantity"
    },
    {
      "id": "gpui_kit::agent::cost::Quantity::basis",
      "name": "basis",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn basis (& self) -> Basis",
      "cfg": [],
      "target": "Quantity"
    },
    {
      "id": "gpui_kit::agent::cost::Quantity::display",
      "name": "display",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "What a reader reads and what the node publishes: the caller's wording, carrying its basis when the basis is one a reader must know about.",
      "documentation": "What a reader reads and what the node publishes: the caller's wording,\ncarrying its basis when the basis is one a reader must know about.",
      "signature": "pub fn display (& self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "Quantity"
    },
    {
      "id": "gpui_kit::agent::cost::Quantity::estimated",
      "name": "estimated",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "An estimate. Every rendering of it carries the estimate mark.",
      "documentation": "An estimate. Every rendering of it carries the estimate mark.",
      "signature": "pub fn estimated (amount : f64, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Quantity"
    },
    {
      "id": "gpui_kit::agent::cost::Quantity::measured",
      "name": "measured",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "A counted number. `text` is the caller's own formatting of it.",
      "documentation": "A counted number. `text` is the caller's own formatting of it.",
      "signature": "pub fn measured (amount : f64, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Quantity"
    },
    {
      "id": "gpui_kit::agent::cost::Quantity::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "The caller's wording, without the estimate label.",
      "documentation": "The caller's wording, without the estimate label.",
      "signature": "pub fn text (& self) -> & SharedString",
      "cfg": [],
      "target": "Quantity"
    },
    {
      "id": "gpui_kit::agent::cost::Reading",
      "name": "Reading",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "What is known about a number right now.",
      "documentation": "What is known about a number right now.",
      "signature": "# [doc = \" What is known about a number right now.\"] # [derive (Debug, Clone, PartialEq)] pub enum Reading { # [doc = \" A number, with its basis.\"] Known (Quantity), # [doc = \" Nobody could say. Never drawn as zero, and never counted into a\"] # [doc = \" proportion.\"] Unavailable { reason : Option<SharedString> }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::cost::Reading::estimated",
      "name": "estimated",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn estimated (amount : f64, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Reading"
    },
    {
      "id": "gpui_kit::agent::cost::Reading::measured",
      "name": "measured",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn measured (amount : f64, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Reading"
    },
    {
      "id": "gpui_kit::agent::cost::Reading::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "The stable name published in the semantic tree.",
      "documentation": "The stable name published in the semantic tree.",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "Reading"
    },
    {
      "id": "gpui_kit::agent::cost::Reading::quantity",
      "name": "quantity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn quantity (& self) -> Option<& Quantity>",
      "cfg": [],
      "target": "Reading"
    },
    {
      "id": "gpui_kit::agent::cost::Reading::unavailable",
      "name": "unavailable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn unavailable () -> Self",
      "cfg": [],
      "target": "Reading"
    },
    {
      "id": "gpui_kit::agent::cost::Reading::unavailable_because",
      "name": "unavailable_because",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::cost",
      "path": "gpui_kit::agent::cost",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "Unavailable, in the host's own words, which are shown verbatim.",
      "documentation": "Unavailable, in the host's own words, which are shown verbatim.",
      "signature": "pub fn unavailable_because (reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Reading"
    },
    {
      "id": "gpui_kit::agent::disclosure::AgentDisclosurePresentation",
      "name": "AgentDisclosurePresentation",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::disclosure",
      "path": "gpui_kit::agent::disclosure",
      "source": "crates/gpui-kit/src/agent/disclosure.rs",
      "summary": "How agent evidence is presented when a disclosure is open.",
      "documentation": "How agent evidence is presented when a disclosure is open.",
      "signature": "# [doc = \" How agent evidence is presented when a disclosure is open.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum AgentDisclosurePresentation { # [doc = \" Evidence sits on a distinct inset body surface.\"] # [default] Inset, # [doc = \" Evidence remains inline in the surrounding information flow.\"] Flow, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::feedback::FeedbackRating",
      "name": "FeedbackRating",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::feedback",
      "path": "gpui_kit::agent::feedback",
      "source": "crates/gpui-kit/src/agent/feedback.rs",
      "summary": "A helpful / not-helpful control with optional host-owned reason tags.",
      "documentation": "A helpful / not-helpful control with optional host-owned reason tags.",
      "signature": "# [doc = \" A helpful / not-helpful control with optional host-owned reason tags.\"] # [derive (IntoElement)] pub struct FeedbackRating { ident : Ident, vote : Option<FeedbackVote>, tags : Vec<(SharedString, SharedString)>, current_tag : Option<SharedString>, disabled : bool, on_vote : Option<VoteHandler>, on_tag : Option<TagHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::feedback::FeedbackRating::current_tag",
      "name": "current_tag",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::feedback",
      "path": "gpui_kit::agent::feedback",
      "source": "crates/gpui-kit/src/agent/feedback.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current_tag (mut self, tag : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FeedbackRating"
    },
    {
      "id": "gpui_kit::agent::feedback::FeedbackRating::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::feedback",
      "path": "gpui_kit::agent::feedback",
      "source": "crates/gpui-kit/src/agent/feedback.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "FeedbackRating"
    },
    {
      "id": "gpui_kit::agent::feedback::FeedbackRating::on_tag",
      "name": "on_tag",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::feedback",
      "path": "gpui_kit::agent::feedback",
      "source": "crates/gpui-kit/src/agent/feedback.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_tag (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "FeedbackRating"
    },
    {
      "id": "gpui_kit::agent::feedback::FeedbackRating::on_vote",
      "name": "on_vote",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::feedback",
      "path": "gpui_kit::agent::feedback",
      "source": "crates/gpui-kit/src/agent/feedback.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_vote (mut self, handler : impl Fn (FeedbackVote, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "FeedbackRating"
    },
    {
      "id": "gpui_kit::agent::feedback::FeedbackRating::tags",
      "name": "tags",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::feedback",
      "path": "gpui_kit::agent::feedback",
      "source": "crates/gpui-kit/src/agent/feedback.rs",
      "summary": "Reason tags as `(id, label)` pairs. Identity is the host's.",
      "documentation": "Reason tags as `(id, label)` pairs. Identity is the host's.",
      "signature": "pub fn tags (mut self, tags : impl IntoIterator<Item = (impl Into<SharedString>, impl Into<SharedString>)>,) -> Self",
      "cfg": [],
      "target": "FeedbackRating"
    },
    {
      "id": "gpui_kit::agent::feedback::FeedbackRating::vote",
      "name": "vote",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::feedback",
      "path": "gpui_kit::agent::feedback",
      "source": "crates/gpui-kit/src/agent/feedback.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn vote (mut self, vote : Option<FeedbackVote>) -> Self",
      "cfg": [],
      "target": "FeedbackRating"
    },
    {
      "id": "gpui_kit::agent::feedback::FeedbackRatingEvent",
      "name": "FeedbackRatingEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::feedback",
      "path": "gpui_kit::agent::feedback",
      "source": "crates/gpui-kit/src/agent/feedback.rs",
      "summary": "What the rating reported.",
      "documentation": "What the rating reported.",
      "signature": "# [doc = \" What the rating reported.\"] # [derive (Debug, Clone, PartialEq)] pub enum FeedbackRatingEvent { Voted (FeedbackVote), Tagged (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::feedback::FeedbackVote",
      "name": "FeedbackVote",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::feedback",
      "path": "gpui_kit::agent::feedback",
      "source": "crates/gpui-kit/src/agent/feedback.rs",
      "summary": "The two-way vote a reader can cast.",
      "documentation": "The two-way vote a reader can cast.",
      "signature": "# [doc = \" The two-way vote a reader can cast.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum FeedbackVote { Up, Down, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::feedback::FeedbackVote::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::feedback",
      "path": "gpui_kit::agent::feedback",
      "source": "crates/gpui-kit/src/agent/feedback.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "FeedbackVote"
    },
    {
      "id": "gpui_kit::agent::model::AgentActivity",
      "name": "AgentActivity",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "What useful work an active agent is visibly doing.",
      "documentation": "What useful work an active agent is visibly doing.",
      "signature": "# [doc = \" What useful work an active agent is visibly doing.\"] # [derive (Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] # [serde (tag = \"activity\", content = \"detail\", rename_all = \"kebab-case\")] pub enum AgentActivity { # [default] Idle, Planning, Thinking, UsingTool (SharedString), Speaking, Aggregating, Custom (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AgentActivity::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "AgentActivity"
    },
    {
      "id": "gpui_kit::agent::model::AgentDescriptor",
      "name": "AgentDescriptor",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "Identity and caller-owned description of one agent.",
      "documentation": "Identity and caller-owned description of one agent.",
      "signature": "# [doc = \" Identity and caller-owned description of one agent.\"] # [derive (Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct AgentDescriptor { pub id : AgentId, pub name : SharedString, # [serde (default, skip_serializing_if = \"Option::is_none\")] pub role : Option<SharedString>, # [serde (default, skip_serializing_if = \"Vec::is_empty\")] pub capabilities : Vec<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AgentDescriptor::capabilities",
      "name": "capabilities",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn capabilities (mut self, capabilities : impl IntoIterator<Item = impl Into<SharedString>>,) -> Self",
      "cfg": [],
      "target": "AgentDescriptor"
    },
    {
      "id": "gpui_kit::agent::model::AgentDescriptor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<AgentId>, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AgentDescriptor"
    },
    {
      "id": "gpui_kit::agent::model::AgentDescriptor::role",
      "name": "role",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn role (mut self, role : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AgentDescriptor"
    },
    {
      "id": "gpui_kit::agent::model::AgentExecutionState",
      "name": "AgentExecutionState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "Mutually exclusive execution state for an agent, task, or run.",
      "documentation": "Mutually exclusive execution state for an agent, task, or run.",
      "signature": "# [doc = \" Mutually exclusive execution state for an agent, task, or run.\"] # [derive (Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] # [serde (tag = \"state\", content = \"detail\", rename_all = \"kebab-case\")] pub enum AgentExecutionState { # [default] Idle, Queued, Starting, Active (AgentActivity), Waiting (WaitReason), Blocked (SharedString), Cancelling, Completed (AgentOutcome), Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AgentExecutionState::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "AgentExecutionState"
    },
    {
      "id": "gpui_kit::agent::model::AgentExecutionState::busy",
      "name": "busy",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn busy (& self) -> bool",
      "cfg": [],
      "target": "AgentExecutionState"
    },
    {
      "id": "gpui_kit::agent::model::AgentExecutionState::terminal",
      "name": "terminal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn terminal (& self) -> bool",
      "cfg": [],
      "target": "AgentExecutionState"
    },
    {
      "id": "gpui_kit::agent::model::AgentId",
      "name": "AgentId",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "The stable identity of an agent, independent of its role or display name.",
      "documentation": "The stable identity of an agent, independent of its role or display name.",
      "signature": "# [doc = \" The stable identity of an agent, independent of its role or display name.\"] # [derive (Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] # [serde (transparent)] pub struct AgentId (SharedString);",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AgentId::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & str",
      "cfg": [],
      "target": "AgentId"
    },
    {
      "id": "gpui_kit::agent::model::AgentId::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AgentId"
    },
    {
      "id": "gpui_kit::agent::model::AgentModelIssue",
      "name": "AgentModelIssue",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "A structural problem found in an [`AgentRunSnapshot`].",
      "documentation": "A structural problem found in an [`AgentRunSnapshot`].",
      "signature": "# [doc = \" A structural problem found in an [`AgentRunSnapshot`].\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum AgentModelIssue { MissingRoot (AgentId), DuplicateAgent (AgentId), DuplicateTask (TaskId), DuplicateLink (RunLinkId), MissingTaskOwner { task : TaskId, owner : AgentId, }, MissingLinkEndpoint { link : RunLinkId, endpoint : RunSubjectId, }, SelfLink (RunLinkId), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AgentOutcome",
      "name": "AgentOutcome",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "The terminal result of an agent, task, or run.",
      "documentation": "The terminal result of an agent, task, or run.",
      "signature": "# [doc = \" The terminal result of an agent, task, or run.\"] # [derive (Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] # [serde (tag = \"outcome\", content = \"reason\", rename_all = \"kebab-case\")] pub enum AgentOutcome { Succeeded, Partial (SharedString), Failed (SharedString), Refused (SharedString), Cancelled, TimedOut (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AgentOutcome::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "AgentOutcome"
    },
    {
      "id": "gpui_kit::agent::model::AgentPresence",
      "name": "AgentPresence",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "Whether the host can presently reach an agent.",
      "documentation": "Whether the host can presently reach an agent.",
      "signature": "# [doc = \" Whether the host can presently reach an agent.\"] # [derive (Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] # [serde (tag = \"state\", content = \"reason\", rename_all = \"kebab-case\")] pub enum AgentPresence { # [default] Unknown, Online, Away, Offline, Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AgentPresence::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "AgentPresence"
    },
    {
      "id": "gpui_kit::agent::model::AgentRunSnapshot",
      "name": "AgentRunSnapshot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "A complete observed run. The caller replaces or updates it as facts change.",
      "documentation": "A complete observed run. The caller replaces or updates it as facts change.",
      "signature": "# [doc = \" A complete observed run. The caller replaces or updates it as facts change.\"] # [derive (Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct AgentRunSnapshot { pub id : RunId, pub root : AgentId, # [serde (default)] pub execution : AgentExecutionState, # [serde (default)] pub agents : Vec<AgentSnapshot>, # [serde (default)] pub tasks : Vec<AgentTaskSnapshot>, # [serde (default)] pub links : Vec<RunLink>, # [serde (default, skip_serializing_if = \"Option::is_none\")] pub aggregation : Option<AggregationSnapshot>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AgentRunSnapshot::agents",
      "name": "agents",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn agents (mut self, agents : impl IntoIterator<Item = AgentSnapshot>) -> Self",
      "cfg": [],
      "target": "AgentRunSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentRunSnapshot::aggregation",
      "name": "aggregation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn aggregation (mut self, aggregation : AggregationSnapshot) -> Self",
      "cfg": [],
      "target": "AgentRunSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentRunSnapshot::execution",
      "name": "execution",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn execution (mut self, execution : AgentExecutionState) -> Self",
      "cfg": [],
      "target": "AgentRunSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentRunSnapshot::issues",
      "name": "issues",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "Reports malformed identities without changing the caller's data.",
      "documentation": "Reports malformed identities without changing the caller's data.",
      "signature": "pub fn issues (& self) -> Vec<AgentModelIssue>",
      "cfg": [],
      "target": "AgentRunSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentRunSnapshot::links",
      "name": "links",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn links (mut self, links : impl IntoIterator<Item = RunLink>) -> Self",
      "cfg": [],
      "target": "AgentRunSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentRunSnapshot::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<RunId>, root : impl Into<AgentId>) -> Self",
      "cfg": [],
      "target": "AgentRunSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentRunSnapshot::tasks",
      "name": "tasks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tasks (mut self, tasks : impl IntoIterator<Item = AgentTaskSnapshot>) -> Self",
      "cfg": [],
      "target": "AgentRunSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentSnapshot",
      "name": "AgentSnapshot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "One agent at one observed point in a run.",
      "documentation": "One agent at one observed point in a run.",
      "signature": "# [doc = \" One agent at one observed point in a run.\"] # [derive (Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct AgentSnapshot { pub descriptor : AgentDescriptor, # [serde (default)] pub presence : AgentPresence, # [serde (default)] pub execution : AgentExecutionState, # [serde (default, skip_serializing_if = \"Option::is_none\")] pub current_task : Option<TaskId>, # [serde (default, skip_serializing_if = \"Option::is_none\")] pub progress : Option<f32>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AgentSnapshot::current_task",
      "name": "current_task",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current_task (mut self, task : impl Into<TaskId>) -> Self",
      "cfg": [],
      "target": "AgentSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentSnapshot::execution",
      "name": "execution",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn execution (mut self, execution : AgentExecutionState) -> Self",
      "cfg": [],
      "target": "AgentSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentSnapshot::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (descriptor : AgentDescriptor) -> Self",
      "cfg": [],
      "target": "AgentSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentSnapshot::presence",
      "name": "presence",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn presence (mut self, presence : AgentPresence) -> Self",
      "cfg": [],
      "target": "AgentSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentSnapshot::progress",
      "name": "progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn progress (mut self, progress : f32) -> Self",
      "cfg": [],
      "target": "AgentSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentTaskSnapshot",
      "name": "AgentTaskSnapshot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "One caller-owned task in a run.",
      "documentation": "One caller-owned task in a run.",
      "signature": "# [doc = \" One caller-owned task in a run.\"] # [derive (Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct AgentTaskSnapshot { pub id : TaskId, pub label : SharedString, # [serde (default, skip_serializing_if = \"Option::is_none\")] pub owner : Option<AgentId>, # [serde (default)] pub execution : AgentExecutionState, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AgentTaskSnapshot::execution",
      "name": "execution",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn execution (mut self, execution : AgentExecutionState) -> Self",
      "cfg": [],
      "target": "AgentTaskSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentTaskSnapshot::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<TaskId>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AgentTaskSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentTaskSnapshot::owner",
      "name": "owner",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn owner (mut self, owner : impl Into<AgentId>) -> Self",
      "cfg": [],
      "target": "AgentTaskSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AgentUiAction",
      "name": "AgentUiAction",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "An action a multi-agent surface asks the host to consider.",
      "documentation": "An action a multi-agent surface asks the host to consider.\n\nThe component does not apply the action. In particular, requesting\ncancellation is not the same thing as observing `Cancelling` or\n`Cancelled` in a later snapshot.",
      "signature": "# [doc = \" An action a multi-agent surface asks the host to consider.\"] # [doc = \"\"] # [doc = \" The component does not apply the action. In particular, requesting\"] # [doc = \" cancellation is not the same thing as observing `Cancelling` or\"] # [doc = \" `Cancelled` in a later snapshot.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum AgentUiAction { SelectAgent (AgentId), OpenTask (TaskId), RequestCancel (RunSubjectId), RequestRetry (RunSubjectId), FocusResult (RunSubjectId), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AgentVisualEvent",
      "name": "AgentVisualEvent",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "A semantic event ready for the shared effects policy.",
      "documentation": "A semantic event ready for the shared effects policy.\n\n`target` is the subject the event lands on. `origin`, when supplied, is the\nparent, delegator, or handoff source. `surface` scopes the automatic budget;\nall three identities remain host-owned facts.",
      "signature": "# [doc = \" A semantic event ready for the shared effects policy.\"] # [doc = \"\"] # [doc = \" `target` is the subject the event lands on. `origin`, when supplied, is the\"] # [doc = \" parent, delegator, or handoff source. `surface` scopes the automatic budget;\"] # [doc = \" all three identities remain host-owned facts.\"] # [derive (Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct AgentVisualEvent { pub id : VisualEventId, pub surface : SharedString, pub kind : AgentVisualEventKind, pub target : RunSubjectId, # [serde (default, skip_serializing_if = \"Option::is_none\")] pub origin : Option<RunSubjectId>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AgentVisualEvent::effect_event",
      "name": "effect_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "Normalizes agent identities and meaning without choosing an effect.",
      "documentation": "Normalizes agent identities and meaning without choosing an effect.",
      "signature": "pub fn effect_event (& self) -> EffectEvent",
      "cfg": [],
      "target": "AgentVisualEvent"
    },
    {
      "id": "gpui_kit::agent::model::AgentVisualEvent::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<VisualEventId>, surface : impl Into<SharedString>, kind : AgentVisualEventKind, target : RunSubjectId,) -> Self",
      "cfg": [],
      "target": "AgentVisualEvent"
    },
    {
      "id": "gpui_kit::agent::model::AgentVisualEvent::origin",
      "name": "origin",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn origin (mut self, origin : RunSubjectId) -> Self",
      "cfg": [],
      "target": "AgentVisualEvent"
    },
    {
      "id": "gpui_kit::agent::model::AgentVisualEventKind",
      "name": "AgentVisualEventKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "The agent-domain meaning of one transient visual event.",
      "documentation": "The agent-domain meaning of one transient visual event.\n\nHosts report these facts instead of selecting an animation recipe. The\neffects policy maps them onto product-neutral [`VisualCue`]s, quality,\naccessibility, replay, and budget decisions.",
      "signature": "# [doc = \" The agent-domain meaning of one transient visual event.\"] # [doc = \"\"] # [doc = \" Hosts report these facts instead of selecting an animation recipe. The\"] # [doc = \" effects policy maps them onto product-neutral [`VisualCue`]s, quality,\"] # [doc = \" accessibility, replay, and budget decisions.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] # [serde (rename_all = \"kebab-case\")] pub enum AgentVisualEventKind { AgentSpawned, DelegationStarted, HandoffCommitted, ResultAggregated, AgentSucceeded, AgentRefused, AgentFailed, RewardGranted, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AgentVisualEventKind::cue",
      "name": "cue",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cue (self) -> VisualCue",
      "cfg": [],
      "target": "AgentVisualEventKind"
    },
    {
      "id": "gpui_kit::agent::model::AggregationSnapshot",
      "name": "AggregationSnapshot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "A caller-owned count of the results being combined.",
      "documentation": "A caller-owned count of the results being combined.",
      "signature": "# [doc = \" A caller-owned count of the results being combined.\"] # [derive (Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct AggregationSnapshot { pub expected : usize, pub received : usize, # [serde (default)] pub conflicts : usize, # [serde (default, skip_serializing_if = \"Option::is_none\")] pub outcome : Option<AgentOutcome>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::AggregationSnapshot::conflicts",
      "name": "conflicts",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn conflicts (mut self, conflicts : usize) -> Self",
      "cfg": [],
      "target": "AggregationSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AggregationSnapshot::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (expected : usize, received : usize) -> Self",
      "cfg": [],
      "target": "AggregationSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::AggregationSnapshot::outcome",
      "name": "outcome",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn outcome (mut self, outcome : AgentOutcome) -> Self",
      "cfg": [],
      "target": "AggregationSnapshot"
    },
    {
      "id": "gpui_kit::agent::model::InvocationId",
      "name": "InvocationId",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "The stable identity of one tool or capability invocation.",
      "documentation": "The stable identity of one tool or capability invocation.",
      "signature": "# [doc = \" The stable identity of one tool or capability invocation.\"] # [derive (Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] # [serde (transparent)] pub struct InvocationId (SharedString);",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::InvocationId::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & str",
      "cfg": [],
      "target": "InvocationId"
    },
    {
      "id": "gpui_kit::agent::model::InvocationId::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "InvocationId"
    },
    {
      "id": "gpui_kit::agent::model::RunId",
      "name": "RunId",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "The stable identity of one run.",
      "documentation": "The stable identity of one run.",
      "signature": "# [doc = \" The stable identity of one run.\"] # [derive (Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] # [serde (transparent)] pub struct RunId (SharedString);",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::RunId::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & str",
      "cfg": [],
      "target": "RunId"
    },
    {
      "id": "gpui_kit::agent::model::RunId::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RunId"
    },
    {
      "id": "gpui_kit::agent::model::RunLink",
      "name": "RunLink",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "One typed relationship between two run subjects.",
      "documentation": "One typed relationship between two run subjects.",
      "signature": "# [doc = \" One typed relationship between two run subjects.\"] # [derive (Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct RunLink { pub id : RunLinkId, pub from : RunSubjectId, pub to : RunSubjectId, pub kind : RunLinkKind, # [serde (default, skip_serializing_if = \"Option::is_none\")] pub label : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::RunLink::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RunLink"
    },
    {
      "id": "gpui_kit::agent::model::RunLink::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<RunLinkId>, from : RunSubjectId, to : RunSubjectId, kind : RunLinkKind,) -> Self",
      "cfg": [],
      "target": "RunLink"
    },
    {
      "id": "gpui_kit::agent::model::RunLinkId",
      "name": "RunLinkId",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "The stable identity of a topology relationship.",
      "documentation": "The stable identity of a topology relationship.",
      "signature": "# [doc = \" The stable identity of a topology relationship.\"] # [derive (Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] # [serde (transparent)] pub struct RunLinkId (SharedString);",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::RunLinkId::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & str",
      "cfg": [],
      "target": "RunLinkId"
    },
    {
      "id": "gpui_kit::agent::model::RunLinkId::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RunLinkId"
    },
    {
      "id": "gpui_kit::agent::model::RunLinkKind",
      "name": "RunLinkKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "The meaning of a topology relationship.",
      "documentation": "The meaning of a topology relationship.",
      "signature": "# [doc = \" The meaning of a topology relationship.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] # [serde (rename_all = \"kebab-case\")] pub enum RunLinkKind { Spawn, Delegation, Dependency, Handoff, Report, Aggregation, Retry, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::RunLinkKind::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (self) -> & 'static str",
      "cfg": [],
      "target": "RunLinkKind"
    },
    {
      "id": "gpui_kit::agent::model::RunSubjectId",
      "name": "RunSubjectId",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "What kind of thing one topology endpoint identifies.",
      "documentation": "What kind of thing one topology endpoint identifies.",
      "signature": "# [doc = \" What kind of thing one topology endpoint identifies.\"] # [derive (Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] # [serde (tag = \"kind\", content = \"id\", rename_all = \"kebab-case\")] pub enum RunSubjectId { Agent (AgentId), Task (TaskId), Invocation (InvocationId), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::RunSubjectId::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & str",
      "cfg": [],
      "target": "RunSubjectId"
    },
    {
      "id": "gpui_kit::agent::model::TaskId",
      "name": "TaskId",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "The stable identity of one task in a run.",
      "documentation": "The stable identity of one task in a run.",
      "signature": "# [doc = \" The stable identity of one task in a run.\"] # [derive (Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] # [serde (transparent)] pub struct TaskId (SharedString);",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::TaskId::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & str",
      "cfg": [],
      "target": "TaskId"
    },
    {
      "id": "gpui_kit::agent::model::TaskId::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TaskId"
    },
    {
      "id": "gpui_kit::agent::model::VisualEventId",
      "name": "VisualEventId",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "The stable identity of a transient visual event.",
      "documentation": "The stable identity of a transient visual event.\n\nAn effect player uses this to avoid replaying a celebration after a stream\nreconnects, and as the deterministic seed for any decorative particles.",
      "signature": "# [doc = \" The stable identity of a transient visual event.\"] # [doc = \"\"] # [doc = \" An effect player uses this to avoid replaying a celebration after a stream\"] # [doc = \" reconnects, and as the deterministic seed for any decorative particles.\"] # [derive (Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] # [serde (transparent)] pub struct VisualEventId (SharedString);",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::VisualEventId::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & str",
      "cfg": [],
      "target": "VisualEventId"
    },
    {
      "id": "gpui_kit::agent::model::VisualEventId::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "VisualEventId"
    },
    {
      "id": "gpui_kit::agent::model::WaitReason",
      "name": "WaitReason",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "Why an agent or task is waiting rather than making progress.",
      "documentation": "Why an agent or task is waiting rather than making progress.",
      "signature": "# [doc = \" Why an agent or task is waiting rather than making progress.\"] # [derive (Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] # [serde (tag = \"reason\", content = \"detail\", rename_all = \"kebab-case\")] pub enum WaitReason { UserInput, Approval, Dependency (TaskId), RemoteAgent (AgentId), RateLimit, Custom (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::model::WaitReason::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::model",
      "path": "gpui_kit::agent::model",
      "source": "crates/gpui-kit/src/agent/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "WaitReason"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingCatalog",
      "name": "OfferingCatalog",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "A searchable, kind-filterable catalog of offerings from multiple servers.",
      "documentation": "A searchable, kind-filterable catalog of offerings from multiple servers.",
      "signature": "# [doc = \" A searchable, kind-filterable catalog of offerings from multiple servers.\"] # [derive (IntoElement)] pub struct OfferingCatalog { ident : Ident, sources : Vec<OfferingSource>, query : SharedString, kinds : Vec<OfferingKind>, selected : Option<OfferingIdentity>, size : ControlSize, disabled : bool, on_activate : Option<ActivateHandler>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingCatalog::kinds",
      "name": "kinds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "Included kinds. An empty collection includes all kinds.",
      "documentation": "Included kinds. An empty collection includes all kinds.",
      "signature": "pub fn kinds (mut self, kinds : impl IntoIterator<Item = OfferingKind>) -> Self",
      "cfg": [],
      "target": "OfferingCatalog"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingCatalog::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "OfferingCatalog"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingCatalog::on_activate",
      "name": "on_activate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "Reports activation with both identities. The component performs no action.",
      "documentation": "Reports activation with both identities. The component performs no action.",
      "signature": "pub fn on_activate (mut self, handler : impl Fn (OfferingIdentity, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "OfferingCatalog"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingCatalog::query",
      "name": "query",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "The caller-owned query matched against each offering's searchable text.",
      "documentation": "The caller-owned query matched against each offering's searchable text.",
      "signature": "pub fn query (mut self, query : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "OfferingCatalog"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingCatalog::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, identity : OfferingIdentity) -> Self",
      "cfg": [],
      "target": "OfferingCatalog"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingCatalog::source",
      "name": "source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn source (mut self, source : OfferingSource) -> Self",
      "cfg": [],
      "target": "OfferingCatalog"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingCatalog::sources",
      "name": "sources",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sources (mut self, sources : impl IntoIterator<Item = OfferingSource>) -> Self",
      "cfg": [],
      "target": "OfferingCatalog"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingIdentity",
      "name": "OfferingIdentity",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "Stable identity for one server-owned offering.",
      "documentation": "Stable identity for one server-owned offering.",
      "signature": "# [doc = \" Stable identity for one server-owned offering.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct OfferingIdentity { pub server_id : SharedString, pub offering_id : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingIdentity::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (server_id : impl Into<SharedString>, offering_id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "OfferingIdentity"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingSource",
      "name": "OfferingSource",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "One attributed source and its independently truthful state.",
      "documentation": "One attributed source and its independently truthful state.",
      "signature": "# [doc = \" One attributed source and its independently truthful state.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct OfferingSource { id : SharedString, name : SharedString, state : OfferingSourceState, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingSource::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "OfferingSource"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingSource::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, name : impl Into<SharedString>, state : OfferingSourceState,) -> Self",
      "cfg": [],
      "target": "OfferingSource"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingSource::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (& self) -> & OfferingSourceState",
      "cfg": [],
      "target": "OfferingSource"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingSourceState",
      "name": "OfferingSourceState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "What is truthfully known about one source's offerings.",
      "documentation": "What is truthfully known about one source's offerings.",
      "signature": "# [doc = \" What is truthfully known about one source's offerings.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum OfferingSourceState { Loading, Empty, Unavailable (SharedString), Error (SharedString), Ready (Vec<SearchableOffering>), # [doc = \" The source's last verified results remain visible beside the failure.\"] Stale { offerings : Vec<SearchableOffering>, reason : SharedString, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::offering_catalog::OfferingSourceState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "OfferingSourceState"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::SearchableOffering",
      "name": "SearchableOffering",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "An offering and the caller-authored text used to search it.",
      "documentation": "An offering and the caller-authored text used to search it.",
      "signature": "# [doc = \" An offering and the caller-authored text used to search it.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct SearchableOffering { offering : Offering, searchable_text : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::offering_catalog::SearchableOffering::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (offering : Offering, searchable_text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SearchableOffering"
    },
    {
      "id": "gpui_kit::agent::offering_catalog::SearchableOffering::offering",
      "name": "offering",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::offering_catalog",
      "path": "gpui_kit::agent::offering_catalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn offering (& self) -> & Offering",
      "cfg": [],
      "target": "SearchableOffering"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionAction",
      "name": "PermissionAction",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "One column: an action, addressed by a stable key.",
      "documentation": "One column: an action, addressed by a stable key.",
      "signature": "# [doc = \" One column: an action, addressed by a stable key.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct PermissionAction { key : SharedString, label : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::permission::PermissionAction::key",
      "name": "key",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn key (& self) -> & SharedString",
      "cfg": [],
      "target": "PermissionAction"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionAction::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (key : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PermissionAction"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionChange",
      "name": "PermissionChange",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "What operating a cell asks for. Nothing is applied.",
      "documentation": "What operating a cell asks for. Nothing is applied.",
      "signature": "# [doc = \" What operating a cell asks for. Nothing is applied.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct PermissionChange { pub subject : SharedString, pub action : SharedString, pub next : PermissionState, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::permission::PermissionEntry",
      "name": "PermissionEntry",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "One cell: a state, and where it came from.",
      "documentation": "One cell: a state, and where it came from.",
      "signature": "# [doc = \" One cell: a state, and where it came from.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct PermissionEntry { state : PermissionState, source : PermissionSource, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::permission::PermissionEntry::inherited",
      "name": "inherited",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "A state a broader rule decided, naming that rule.",
      "documentation": "A state a broader rule decided, naming that rule.",
      "signature": "pub fn inherited (state : PermissionState, from : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PermissionEntry"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionEntry::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "A state decided in this matrix.",
      "documentation": "A state decided in this matrix.",
      "signature": "pub fn new (state : PermissionState) -> Self",
      "cfg": [],
      "target": "PermissionEntry"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionEntry::source",
      "name": "source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn source (& self) -> & PermissionSource",
      "cfg": [],
      "target": "PermissionEntry"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionEntry::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (& self) -> PermissionState",
      "cfg": [],
      "target": "PermissionEntry"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionMatrix",
      "name": "PermissionMatrix",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "A grid of subjects against actions.",
      "documentation": "A grid of subjects against actions.",
      "signature": "# [doc = \" A grid of subjects against actions.\"] # [derive (IntoElement)] pub struct PermissionMatrix { ident : Ident, actions : Vec<PermissionAction>, subjects : Vec<PermissionSubject>, on_change : Option<ChangeHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::permission::PermissionMatrix::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn action (mut self, action : PermissionAction) -> Self",
      "cfg": [],
      "target": "PermissionMatrix"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionMatrix::actions",
      "name": "actions",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn actions (mut self, actions : impl IntoIterator<Item = PermissionAction>) -> Self",
      "cfg": [],
      "target": "PermissionMatrix"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionMatrix::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "PermissionMatrix"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionMatrix::on_change",
      "name": "on_change",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "Makes the matrix editable. Without a handler it is read-only, and a read-only cell installs nothing rather than installing a handler that does nothing.",
      "documentation": "Makes the matrix editable. Without a handler it is read-only, and a\nread-only cell installs nothing rather than installing a handler that\ndoes nothing.",
      "signature": "pub fn on_change (mut self, handler : impl Fn (PermissionChange, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "PermissionMatrix"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionMatrix::subject",
      "name": "subject",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn subject (mut self, subject : PermissionSubject) -> Self",
      "cfg": [],
      "target": "PermissionMatrix"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionMatrix::subjects",
      "name": "subjects",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn subjects (mut self, subjects : impl IntoIterator<Item = PermissionSubject>) -> Self",
      "cfg": [],
      "target": "PermissionMatrix"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionSource",
      "name": "PermissionSource",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "Where a cell's state was decided.",
      "documentation": "Where a cell's state was decided.",
      "signature": "# [doc = \" Where a cell's state was decided.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum PermissionSource { # [doc = \" Set on this subject, for this action.\"] # [default] Here, # [doc = \" Inherited from a broader rule, named in the host's own words.\"] Inherited (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::permission::PermissionSource::inherited",
      "name": "inherited",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn inherited (from : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PermissionSource"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionSource::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "PermissionSource"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionSource::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "The stable name published in the semantic tree.",
      "documentation": "The stable name published in the semantic tree.",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "PermissionSource"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionState",
      "name": "PermissionState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "What a cell says about one subject and one action.",
      "documentation": "What a cell says about one subject and one action.",
      "signature": "# [doc = \" What a cell says about one subject and one action.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum PermissionState { # [doc = \" Goes ahead without asking.\"] Allowed, # [doc = \" Refused. Somebody decided this.\"] Denied, # [doc = \" Permitted only after somebody says so, every time.\"] # [default] Ask, # [doc = \" The question does not arise here. Never a refusal.\"] NotApplicable, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::permission::PermissionState::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "The localized state name published for assistive readers and help.",
      "documentation": "The localized state name published for assistive readers and help.",
      "signature": "pub fn label (self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "PermissionState"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "The stable name published in the semantic tree.",
      "documentation": "The stable name published in the semantic tree.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "PermissionState"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionState::next",
      "name": "next",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "What operating the cell would ask for next.",
      "documentation": "What operating the cell would ask for next.\n\n`NotApplicable` has no next state: a question that does not arise\ncannot be answered by clicking.",
      "signature": "pub fn next (self) -> Option<Self>",
      "cfg": [],
      "target": "PermissionState"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionSubject",
      "name": "PermissionSubject",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "One row: whatever the permissions are about, and its cells.",
      "documentation": "One row: whatever the permissions are about, and its cells.",
      "signature": "# [doc = \" One row: whatever the permissions are about, and its cells.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct PermissionSubject { id : SharedString, label : SharedString, cells : Vec<(SharedString, PermissionEntry)>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::permission::PermissionSubject::cell",
      "name": "cell",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "States one cell. An action this subject never states is rendered `NotApplicable`, which is the honest reading of a row that does not mention it — and is still not a refusal.",
      "documentation": "States one cell. An action this subject never states is rendered\n`NotApplicable`, which is the honest reading of a row that does not\nmention it — and is still not a refusal.",
      "signature": "pub fn cell (mut self, action : impl Into<SharedString>, entry : PermissionEntry) -> Self",
      "cfg": [],
      "target": "PermissionSubject"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionSubject::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "PermissionSubject"
    },
    {
      "id": "gpui_kit::agent::permission::PermissionSubject::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::permission",
      "path": "gpui_kit::agent::permission",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PermissionSubject"
    },
    {
      "id": "gpui_kit::agent::persona::DialogueChoice",
      "name": "DialogueChoice",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "One caller-owned action offered after a dialogue turn.",
      "documentation": "One caller-owned action offered after a dialogue turn.",
      "signature": "# [doc = \" One caller-owned action offered after a dialogue turn.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct DialogueChoice { id : SharedString, label : SharedString, detail : Option<SharedString>, availability : DialogueChoiceAvailability, selected : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::persona::DialogueChoice::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DialogueChoice"
    },
    {
      "id": "gpui_kit::agent::persona::DialogueChoice::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "DialogueChoice"
    },
    {
      "id": "gpui_kit::agent::persona::DialogueChoice::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DialogueChoice"
    },
    {
      "id": "gpui_kit::agent::persona::DialogueChoice::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : bool) -> Self",
      "cfg": [],
      "target": "DialogueChoice"
    },
    {
      "id": "gpui_kit::agent::persona::DialogueChoice::unavailable",
      "name": "unavailable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn unavailable (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DialogueChoice"
    },
    {
      "id": "gpui_kit::agent::persona::DialogueChoiceAvailability",
      "name": "DialogueChoiceAvailability",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "Whether a dialogue choice can presently be requested.",
      "documentation": "Whether a dialogue choice can presently be requested.",
      "signature": "# [doc = \" Whether a dialogue choice can presently be requested.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum DialogueChoiceAvailability { # [default] Available, Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::persona::DialogueTurn",
      "name": "DialogueTurn",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "One complete caller-owned persona turn.",
      "documentation": "One complete caller-owned persona turn.",
      "signature": "# [doc = \" One complete caller-owned persona turn.\"] # [derive (Debug, Clone, PartialEq)] pub struct DialogueTurn { id : SharedString, agent : AgentSnapshot, body : MessageBody, streaming : bool, choices : Vec<DialogueChoice>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::persona::DialogueTurn::choice",
      "name": "choice",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn choice (mut self, choice : DialogueChoice) -> Self",
      "cfg": [],
      "target": "DialogueTurn"
    },
    {
      "id": "gpui_kit::agent::persona::DialogueTurn::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "DialogueTurn"
    },
    {
      "id": "gpui_kit::agent::persona::DialogueTurn::markdown",
      "name": "markdown",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn markdown (id : impl Into<SharedString>, agent : AgentSnapshot, source : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "DialogueTurn"
    },
    {
      "id": "gpui_kit::agent::persona::DialogueTurn::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, agent : AgentSnapshot, body : impl Into<MessageBody>,) -> Self",
      "cfg": [],
      "target": "DialogueTurn"
    },
    {
      "id": "gpui_kit::agent::persona::DialogueTurn::streaming",
      "name": "streaming",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn streaming (mut self, streaming : bool) -> Self",
      "cfg": [],
      "target": "DialogueTurn"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaDialogue",
      "name": "PersonaDialogue",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "Persona-aware dialogue over the safe Markdown renderer.",
      "documentation": "Persona-aware dialogue over the safe Markdown renderer.\n\nPortrait placement, expression treatment, status, streaming presentation,\nchoice layout, RTL order, and disabled explanations are all owned here.\nThe component never advances the turn or applies a choice.",
      "signature": "# [doc = \" Persona-aware dialogue over the safe Markdown renderer.\"] # [doc = \"\"] # [doc = \" Portrait placement, expression treatment, status, streaming presentation,\"] # [doc = \" choice layout, RTL order, and disabled explanations are all owned here.\"] # [doc = \" The component never advances the turn or applies a choice.\"] # [derive (IntoElement)] pub struct PersonaDialogue { ident : Ident, turn : DialogueTurn, expression : PersonaExpression, voice : Option<VoiceSample>, image : Option<PresentationImage>, tint : Option<Hsla>, on_event : Option<DialogueHandler>, image_source : Option<DialogueImage>, highlighter : Option<DialogueHighlighter>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::persona::PersonaDialogue::expression",
      "name": "expression",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn expression (mut self, expression : PersonaExpression) -> Self",
      "cfg": [],
      "target": "PersonaDialogue"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaDialogue::image",
      "name": "image",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn image (mut self, image : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PersonaDialogue"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaDialogue::image_source",
      "name": "image_source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "Uses caller-resolved portrait art without converting it to a URI.",
      "documentation": "Uses caller-resolved portrait art without converting it to a URI.",
      "signature": "pub fn image_source (mut self, image : gpui::ImageSource) -> Self",
      "cfg": [],
      "target": "PersonaDialogue"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaDialogue::markdown_highlighter",
      "name": "markdown_highlighter",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "Supplies host-computed code spans without moving grammar policy here.",
      "documentation": "Supplies host-computed code spans without moving grammar policy here.",
      "signature": "pub fn markdown_highlighter (mut self, highlighter : impl Fn (& SharedString, & CodeBlock) -> Vec<CodeSpan> + 'static,) -> Self",
      "cfg": [],
      "target": "PersonaDialogue"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaDialogue::markdown_image",
      "name": "markdown_image",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "Supplies an already-resolved image for a Markdown request.",
      "documentation": "Supplies an already-resolved image for a Markdown request.",
      "signature": "pub fn markdown_image (mut self, source : impl Fn (& SharedString, & ImageRequest, & mut Window, & mut App) -> Option<AnyElement> + 'static,) -> Self",
      "cfg": [],
      "target": "PersonaDialogue"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaDialogue::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, turn : DialogueTurn) -> Self",
      "cfg": [],
      "target": "PersonaDialogue"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaDialogue::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& PersonaDialogueEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "PersonaDialogue"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaDialogue::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "PersonaDialogue"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaDialogue::voice",
      "name": "voice",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn voice (mut self, sample : VoiceSample) -> Self",
      "cfg": [],
      "target": "PersonaDialogue"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaDialogueEvent",
      "name": "PersonaDialogueEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "What persona dialogue reports without applying it.",
      "documentation": "What persona dialogue reports without applying it.",
      "signature": "# [doc = \" What persona dialogue reports without applying it.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum PersonaDialogueEvent { ChoiceRequested { turn_id : SharedString, choice_id : SharedString, }, Markdown { turn_id : SharedString, event : MarkdownEvent, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::persona::PersonaExpression",
      "name": "PersonaExpression",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "A caller-observed expression, independent of execution state.",
      "documentation": "A caller-observed expression, independent of execution state.\n\nAn agent may be focused while idle or warm while speaking. Keeping this\nfact separate prevents portrait styling from changing what the execution\nsurface reports.",
      "signature": "# [doc = \" A caller-observed expression, independent of execution state.\"] # [doc = \"\"] # [doc = \" An agent may be focused while idle or warm while speaking. Keeping this\"] # [doc = \" fact separate prevents portrait styling from changing what the execution\"] # [doc = \" surface reports.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum PersonaExpression { # [default] Neutral, Warm, Focused, Concerned, Celebrating, # [doc = \" A host-owned expression name. It receives the neutral visual treatment\"] # [doc = \" rather than guessing what the name means.\"] Custom (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::persona::PersonaExpression::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & str",
      "cfg": [],
      "target": "PersonaExpression"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaPortrait",
      "name": "PersonaPortrait",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "A large expressive portrait built on the standard [`AgentAvatar`].",
      "documentation": "A large expressive portrait built on the standard [`AgentAvatar`].\n\nAn optional [`EffectPlan`] is a decorative layer only. Its semantic event,\nbudget, replay, quality, and reduced-motion decision were already resolved\nby the shared effects policy.",
      "signature": "# [doc = \" A large expressive portrait built on the standard [`AgentAvatar`].\"] # [doc = \"\"] # [doc = \" An optional [`EffectPlan`] is a decorative layer only. Its semantic event,\"] # [doc = \" budget, replay, quality, and reduced-motion decision were already resolved\"] # [doc = \" by the shared effects policy.\"] # [derive (Debug, IntoElement)] pub struct PersonaPortrait { ident : Ident, agent : AgentSnapshot, expression : PersonaExpression, voice : Option<VoiceSample>, image : Option<PresentationImage>, tint : Option<Hsla>, effect : Option<EffectPlan>, sample_at : Option<Duration>, size : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::persona::PersonaPortrait::effect",
      "name": "effect",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn effect (mut self, plan : EffectPlan) -> Self",
      "cfg": [],
      "target": "PersonaPortrait"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaPortrait::expression",
      "name": "expression",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn expression (mut self, expression : PersonaExpression) -> Self",
      "cfg": [],
      "target": "PersonaPortrait"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaPortrait::image",
      "name": "image",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "A host-resolved resource path or URI. This component performs no fetch.",
      "documentation": "A host-resolved resource path or URI. This component performs no fetch.",
      "signature": "pub fn image (mut self, image : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PersonaPortrait"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaPortrait::image_source",
      "name": "image_source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "Uses caller-resolved portrait art and preserves custom loading policy.",
      "documentation": "Uses caller-resolved portrait art and preserves custom loading policy.",
      "signature": "pub fn image_source (mut self, image : gpui::ImageSource) -> Self",
      "cfg": [],
      "target": "PersonaPortrait"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaPortrait::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, agent : AgentSnapshot) -> Self",
      "cfg": [],
      "target": "PersonaPortrait"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaPortrait::sample_at",
      "name": "sample_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sample_at (mut self, elapsed : Duration) -> Self",
      "cfg": [],
      "target": "PersonaPortrait"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaPortrait::size",
      "name": "size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn size (mut self, size : f32) -> Self",
      "cfg": [],
      "target": "PersonaPortrait"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaPortrait::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "PersonaPortrait"
    },
    {
      "id": "gpui_kit::agent::persona::PersonaPortrait::voice",
      "name": "voice",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn voice (mut self, sample : VoiceSample) -> Self",
      "cfg": [],
      "target": "PersonaPortrait"
    },
    {
      "id": "gpui_kit::agent::persona::VoiceField",
      "name": "VoiceField",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "Which normalized voice field failed validation.",
      "documentation": "Which normalized voice field failed validation.",
      "signature": "# [doc = \" Which normalized voice field failed validation.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum VoiceField { Level, Envelope, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::persona::VoiceReactive",
      "name": "VoiceReactive",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "A standard voice-reactive visualization from a normalized host sample.",
      "documentation": "A standard voice-reactive visualization from a normalized host sample.\n\nLive samples animate from one component-owned timeline. [`Self::sample_at`]\nfreezes that timeline at an absolute instant for replay and headless\nrendering. Reduced motion shows the current envelope as a static symmetric\nmeter and schedules no frames.",
      "signature": "# [doc = \" A standard voice-reactive visualization from a normalized host sample.\"] # [doc = \"\"] # [doc = \" Live samples animate from one component-owned timeline. [`Self::sample_at`]\"] # [doc = \" freezes that timeline at an absolute instant for replay and headless\"] # [doc = \" rendering. Reduced motion shows the current envelope as a static symmetric\"] # [doc = \" meter and schedules no frames.\"] # [derive (Debug, IntoElement)] pub struct VoiceReactive { ident : Ident, sample : VoiceSample, sample_at : Option<Duration>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::persona::VoiceReactive::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, sample : VoiceSample) -> Self",
      "cfg": [],
      "target": "VoiceReactive"
    },
    {
      "id": "gpui_kit::agent::persona::VoiceReactive::sample_at",
      "name": "sample_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sample_at (mut self, elapsed : Duration) -> Self",
      "cfg": [],
      "target": "VoiceReactive"
    },
    {
      "id": "gpui_kit::agent::persona::VoiceSample",
      "name": "VoiceSample",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "One bounded, caller-sampled voice observation.",
      "documentation": "One bounded, caller-sampled voice observation.\n\n`level` is the current normalized energy and `envelope` is the host's\nnormalized smoothed energy. Kit turns both into bars and pulses; callers do\nnot pass bar heights, colours, smoothing constants, or animation timing.",
      "signature": "# [doc = \" One bounded, caller-sampled voice observation.\"] # [doc = \"\"] # [doc = \" `level` is the current normalized energy and `envelope` is the host's\"] # [doc = \" normalized smoothed energy. Kit turns both into bars and pulses; callers do\"] # [doc = \" not pass bar heights, colours, smoothing constants, or animation timing.\"] # [derive (Debug, Clone, PartialEq)] pub struct VoiceSample { state : VoiceState, level : f32, envelope : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::persona::VoiceSample::envelope",
      "name": "envelope",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn envelope (& self) -> f32",
      "cfg": [],
      "target": "VoiceSample"
    },
    {
      "id": "gpui_kit::agent::persona::VoiceSample::level",
      "name": "level",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn level (& self) -> f32",
      "cfg": [],
      "target": "VoiceSample"
    },
    {
      "id": "gpui_kit::agent::persona::VoiceSample::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (state : VoiceState, level : f32, envelope : f32) -> Result<Self, VoiceSampleError>",
      "cfg": [],
      "target": "VoiceSample"
    },
    {
      "id": "gpui_kit::agent::persona::VoiceSample::silent",
      "name": "silent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn silent () -> Self",
      "cfg": [],
      "target": "VoiceSample"
    },
    {
      "id": "gpui_kit::agent::persona::VoiceSample::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (& self) -> & VoiceState",
      "cfg": [],
      "target": "VoiceSample"
    },
    {
      "id": "gpui_kit::agent::persona::VoiceSampleError",
      "name": "VoiceSampleError",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "A rejected voice sample. Invalid values are never clamped into plausible audio facts.",
      "documentation": "A rejected voice sample. Invalid values are never clamped into plausible\naudio facts.",
      "signature": "# [doc = \" A rejected voice sample. Invalid values are never clamped into plausible\"] # [doc = \" audio facts.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct VoiceSampleError { pub field : VoiceField, pub kind : VoiceSampleErrorKind, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::persona::VoiceSampleErrorKind",
      "name": "VoiceSampleErrorKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "Why a voice sample was rejected.",
      "documentation": "Why a voice sample was rejected.",
      "signature": "# [doc = \" Why a voice sample was rejected.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum VoiceSampleErrorKind { NonFinite, OutOfRange, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::persona::VoiceState",
      "name": "VoiceState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "Whether a host-observed voice channel is active.",
      "documentation": "Whether a host-observed voice channel is active.",
      "signature": "# [doc = \" Whether a host-observed voice channel is active.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum VoiceState { # [default] Silent, Listening, Speaking, Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::persona::VoiceState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::persona",
      "path": "gpui_kit::agent::persona",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "VoiceState"
    },
    {
      "id": "gpui_kit::agent::plan::AgentPlan",
      "name": "AgentPlan",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "A plan, as a run of marks and one line about the item in flight.",
      "documentation": "A plan, as a run of marks and one line about the item in flight.",
      "signature": "# [doc = \" A plan, as a run of marks and one line about the item in flight.\"] # [derive (IntoElement)] pub struct AgentPlan { ident : Ident, items : Vec<PlanItem>, on_pick : Option<PickHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::plan::AgentPlan::done",
      "name": "done",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "How many items have finished, which is what the summary publishes.",
      "documentation": "How many items have finished, which is what the summary publishes.",
      "signature": "pub fn done (& self) -> usize",
      "cfg": [],
      "target": "AgentPlan"
    },
    {
      "id": "gpui_kit::agent::plan::AgentPlan::item",
      "name": "item",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn item (mut self, item : PlanItem) -> Self",
      "cfg": [],
      "target": "AgentPlan"
    },
    {
      "id": "gpui_kit::agent::plan::AgentPlan::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn items (mut self, items : impl IntoIterator<Item = PlanItem>) -> Self",
      "cfg": [],
      "target": "AgentPlan"
    },
    {
      "id": "gpui_kit::agent::plan::AgentPlan::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "AgentPlan"
    },
    {
      "id": "gpui_kit::agent::plan::AgentPlan::on_pick",
      "name": "on_pick",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "Reports the id of the item that was picked. Without this the marks are a report and install no handler at all.",
      "documentation": "Reports the id of the item that was picked. Without this the marks are\na report and install no handler at all.",
      "signature": "pub fn on_pick (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "AgentPlan"
    },
    {
      "id": "gpui_kit::agent::plan::PlanItem",
      "name": "PlanItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "One item of a plan.",
      "documentation": "One item of a plan.",
      "signature": "# [doc = \" One item of a plan.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct PlanItem { id : SharedString, label : SharedString, state : PlanState, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::plan::PlanItem::blocked",
      "name": "blocked",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn blocked (self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PlanItem"
    },
    {
      "id": "gpui_kit::agent::plan::PlanItem::doing",
      "name": "doing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn doing (self) -> Self",
      "cfg": [],
      "target": "PlanItem"
    },
    {
      "id": "gpui_kit::agent::plan::PlanItem::done",
      "name": "done",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn done (self) -> Self",
      "cfg": [],
      "target": "PlanItem"
    },
    {
      "id": "gpui_kit::agent::plan::PlanItem::dropped",
      "name": "dropped",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn dropped (self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PlanItem"
    },
    {
      "id": "gpui_kit::agent::plan::PlanItem::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "What the reader is told this item is, in the caller's words.",
      "documentation": "What the reader is told this item is, in the caller's words.",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "PlanItem"
    },
    {
      "id": "gpui_kit::agent::plan::PlanItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PlanItem"
    },
    {
      "id": "gpui_kit::agent::plan::PlanItem::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : PlanState) -> Self",
      "cfg": [],
      "target": "PlanItem"
    },
    {
      "id": "gpui_kit::agent::plan::PlanState",
      "name": "PlanState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "Where one item of a plan stands.",
      "documentation": "Where one item of a plan stands.\n\nAhead, doing and done are the three a plan is mostly made of. The other two\nare the ones a plan cannot be honest without: work that stopped, and work\nthe agent decided against, each in the host's own words.",
      "signature": "# [doc = \" Where one item of a plan stands.\"] # [doc = \"\"] # [doc = \" Ahead, doing and done are the three a plan is mostly made of. The other two\"] # [doc = \" are the ones a plan cannot be honest without: work that stopped, and work\"] # [doc = \" the agent decided against, each in the host's own words.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum PlanState { # [doc = \" Not started. The reader is not waiting on it yet.\"] # [default] Ahead, # [doc = \" In flight. At most one item should be, and the plan draws whichever\"] # [doc = \" ones are.\"] Doing, Done, # [doc = \" Started and stopped, in the host's words.\"] Blocked (SharedString), # [doc = \" Decided against before it ran, in the host's words.\"] Dropped (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::plan::PlanState::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "The name the semantic node publishes, so a test tells the five apart without reading a colour.",
      "documentation": "The name the semantic node publishes, so a test tells the five apart\nwithout reading a colour.",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "PlanState"
    },
    {
      "id": "gpui_kit::agent::plan::PlanState::reason",
      "name": "reason",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::plan",
      "path": "gpui_kit::agent::plan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "The host's words for why this item is not moving, if it is not.",
      "documentation": "The host's words for why this item is not moving, if it is not.",
      "signature": "pub fn reason (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "PlanState"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentActivityLine",
      "name": "AgentActivityLine",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "The localized execution sentence and its non-colour status mark.",
      "documentation": "The localized execution sentence and its non-colour status mark.",
      "signature": "# [doc = \" The localized execution sentence and its non-colour status mark.\"] # [derive (Debug, IntoElement)] pub struct AgentActivityLine { ident : Ident, execution : AgentExecutionState, tint : Option<Hsla>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::presentation::AgentActivityLine::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, execution : AgentExecutionState) -> Self",
      "cfg": [],
      "target": "AgentActivityLine"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentActivityLine::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "AgentActivityLine"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentAppearance",
      "name": "AgentAppearance",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "Optional caller-owned art for an agent identity.",
      "documentation": "Optional caller-owned art for an agent identity.\n\nExecution and presence never come from this value. Changing a portrait or\nrole tint therefore cannot accidentally change the state the UI reports.",
      "signature": "# [doc = \" Optional caller-owned art for an agent identity.\"] # [doc = \"\"] # [doc = \" Execution and presence never come from this value. Changing a portrait or\"] # [doc = \" role tint therefore cannot accidentally change the state the UI reports.\"] # [derive (Debug, Clone, PartialEq)] pub struct AgentAppearance { id : AgentId, image : Option<PresentationImage>, tint : Option<Hsla>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::presentation::AgentAppearance::image",
      "name": "image",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn image (mut self, image : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AgentAppearance"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentAppearance::image_source",
      "name": "image_source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "Uses caller-resolved art, preserving custom loader lifetime and policy.",
      "documentation": "Uses caller-resolved art, preserving custom loader lifetime and policy.",
      "signature": "pub fn image_source (mut self, image : gpui::ImageSource) -> Self",
      "cfg": [],
      "target": "AgentAppearance"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentAppearance::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<AgentId>) -> Self",
      "cfg": [],
      "target": "AgentAppearance"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentAppearance::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "AgentAppearance"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentAvatar",
      "name": "AgentAvatar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "A status-coloured agent identity with a separate presence mark.",
      "documentation": "A status-coloured agent identity with a separate presence mark.",
      "signature": "# [doc = \" A status-coloured agent identity with a separate presence mark.\"] # [derive (Debug, IntoElement)] pub struct AgentAvatar { ident : Ident, agent : AgentSnapshot, image : Option<PresentationImage>, tint : Option<Hsla>, size : f32, mark_inset : f32, parent : Option<Ident>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::presentation::AgentAvatar::image",
      "name": "image",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn image (mut self, image : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AgentAvatar"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentAvatar::image_source",
      "name": "image_source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "Uses caller-resolved art without converting a loader into a path.",
      "documentation": "Uses caller-resolved art without converting a loader into a path.",
      "signature": "pub fn image_source (mut self, image : gpui::ImageSource) -> Self",
      "cfg": [],
      "target": "AgentAvatar"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentAvatar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, agent : AgentSnapshot) -> Self",
      "cfg": [],
      "target": "AgentAvatar"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentAvatar::parent",
      "name": "parent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "Establishes the semantic group this avatar belongs to.",
      "documentation": "Establishes the semantic group this avatar belongs to.",
      "signature": "pub fn parent (mut self, parent : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "AgentAvatar"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentAvatar::size",
      "name": "size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn size (mut self, size : f32) -> Self",
      "cfg": [],
      "target": "AgentAvatar"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentAvatar::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "AgentAvatar"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentCard",
      "name": "AgentCard",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "A complete summary of one agent and its current caller-owned task.",
      "documentation": "A complete summary of one agent and its current caller-owned task.",
      "signature": "# [doc = \" A complete summary of one agent and its current caller-owned task.\"] # [derive (IntoElement)] pub struct AgentCard { ident : Ident, agent : AgentSnapshot, task_label : Option<SharedString>, image : Option<PresentationImage>, tint : Option<Hsla>, selected : bool, on_action : Option<ActionHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::presentation::AgentCard::image",
      "name": "image",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn image (mut self, image : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AgentCard"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentCard::image_source",
      "name": "image_source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "Uses caller-resolved art, including revocable custom sources.",
      "documentation": "Uses caller-resolved art, including revocable custom sources.",
      "signature": "pub fn image_source (mut self, image : gpui::ImageSource) -> Self",
      "cfg": [],
      "target": "AgentCard"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentCard::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, agent : AgentSnapshot) -> Self",
      "cfg": [],
      "target": "AgentCard"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentCard::on_action",
      "name": "on_action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_action (mut self, handler : impl Fn (AgentUiAction, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "AgentCard"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentCard::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : bool) -> Self",
      "cfg": [],
      "target": "AgentCard"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentCard::task_label",
      "name": "task_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn task_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AgentCard"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentCard::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "AgentCard"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentGroup",
      "name": "AgentGroup",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "A compact overlapping group of agent identities with an overflow count.",
      "documentation": "A compact overlapping group of agent identities with an overflow count.",
      "signature": "# [doc = \" A compact overlapping group of agent identities with an overflow count.\"] # [derive (IntoElement)] pub struct AgentGroup { ident : Ident, agents : Vec<AgentSnapshot>, appearances : Vec<AgentAppearance>, max_visible : usize, size : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::presentation::AgentGroup::appearances",
      "name": "appearances",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn appearances (mut self, appearances : impl IntoIterator<Item = AgentAppearance>) -> Self",
      "cfg": [],
      "target": "AgentGroup"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentGroup::max_visible",
      "name": "max_visible",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn max_visible (mut self, max_visible : usize) -> Self",
      "cfg": [],
      "target": "AgentGroup"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentGroup::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, agents : impl IntoIterator<Item = AgentSnapshot>) -> Self",
      "cfg": [],
      "target": "AgentGroup"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentGroup::size",
      "name": "size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn size (mut self, size : f32) -> Self",
      "cfg": [],
      "target": "AgentGroup"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentRoster",
      "name": "AgentRoster",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "A virtualized list of agents with standard identity and activity rows.",
      "documentation": "A virtualized list of agents with standard identity and activity rows.",
      "signature": "# [doc = \" A virtualized list of agents with standard identity and activity rows.\"] # [derive (IntoElement)] pub struct AgentRoster { ident : Ident, agents : Vec<AgentSnapshot>, tasks : Vec<AgentTaskSnapshot>, appearances : Vec<AgentAppearance>, selected : Option<AgentId>, visible_rows : Option<usize>, on_action : Option<ActionHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::presentation::AgentRoster::appearances",
      "name": "appearances",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn appearances (mut self, appearances : impl IntoIterator<Item = AgentAppearance>) -> Self",
      "cfg": [],
      "target": "AgentRoster"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentRoster::from_run",
      "name": "from_run",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_run (ident : impl Into<Ident>, run : & AgentRunSnapshot) -> Self",
      "cfg": [],
      "target": "AgentRoster"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentRoster::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, agents : impl IntoIterator<Item = AgentSnapshot>) -> Self",
      "cfg": [],
      "target": "AgentRoster"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentRoster::on_action",
      "name": "on_action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_action (mut self, handler : impl Fn (AgentUiAction, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "AgentRoster"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentRoster::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : impl Into<AgentId>) -> Self",
      "cfg": [],
      "target": "AgentRoster"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentRoster::tasks",
      "name": "tasks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tasks (mut self, tasks : impl IntoIterator<Item = AgentTaskSnapshot>) -> Self",
      "cfg": [],
      "target": "AgentRoster"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentRoster::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn visible_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "AgentRoster"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentRunIssues",
      "name": "AgentRunIssues",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "A single truthful notice for malformed multi-agent snapshot structure.",
      "documentation": "A single truthful notice for malformed multi-agent snapshot structure.\n\nComponents use this before building identity-indexed rows or topology, so\nduplicate and dangling facts are never silently collapsed into a different\nrun. A valid snapshot renders no notice.",
      "signature": "# [doc = \" A single truthful notice for malformed multi-agent snapshot structure.\"] # [doc = \"\"] # [doc = \" Components use this before building identity-indexed rows or topology, so\"] # [doc = \" duplicate and dangling facts are never silently collapsed into a different\"] # [doc = \" run. A valid snapshot renders no notice.\"] # [derive (Debug, IntoElement)] pub struct AgentRunIssues { ident : Ident, issues : Vec<AgentModelIssue>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::presentation::AgentRunIssues::from_run",
      "name": "from_run",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_run (ident : impl Into<Ident>, run : & AgentRunSnapshot) -> Self",
      "cfg": [],
      "target": "AgentRunIssues"
    },
    {
      "id": "gpui_kit::agent::presentation::AgentRunIssues::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, issues : impl IntoIterator<Item = AgentModelIssue>) -> Self",
      "cfg": [],
      "target": "AgentRunIssues"
    },
    {
      "id": "gpui_kit::agent::presentation::SubagentTree",
      "name": "SubagentTree",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "A caller-controlled hierarchy derived from `Spawn` links in a run.",
      "documentation": "A caller-controlled hierarchy derived from `Spawn` links in a run.",
      "signature": "# [doc = \" A caller-controlled hierarchy derived from `Spawn` links in a run.\"] # [derive (IntoElement)] pub struct SubagentTree { ident : Ident, run : AgentRunSnapshot, expanded : Vec<AgentId>, selected : Option<AgentId>, visible_rows : Option<usize>, on_toggle : Option<ToggleHandler>, on_action : Option<ActionHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::presentation::SubagentTree::expanded",
      "name": "expanded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn expanded (mut self, expanded : impl IntoIterator<Item = AgentId>) -> Self",
      "cfg": [],
      "target": "SubagentTree"
    },
    {
      "id": "gpui_kit::agent::presentation::SubagentTree::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, run : AgentRunSnapshot) -> Self",
      "cfg": [],
      "target": "SubagentTree"
    },
    {
      "id": "gpui_kit::agent::presentation::SubagentTree::on_action",
      "name": "on_action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_action (mut self, handler : impl Fn (AgentUiAction, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "SubagentTree"
    },
    {
      "id": "gpui_kit::agent::presentation::SubagentTree::on_toggle",
      "name": "on_toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "Reports the next caller-owned disclosure state without applying it.",
      "documentation": "Reports the next caller-owned disclosure state without applying it.",
      "signature": "pub fn on_toggle (mut self, handler : impl Fn (AgentId, bool, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "SubagentTree"
    },
    {
      "id": "gpui_kit::agent::presentation::SubagentTree::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : impl Into<AgentId>) -> Self",
      "cfg": [],
      "target": "SubagentTree"
    },
    {
      "id": "gpui_kit::agent::presentation::SubagentTree::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::presentation",
      "path": "gpui_kit::agent::presentation",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn visible_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "SubagentTree"
    },
    {
      "id": "gpui_kit::agent::prompt::PromptBuilder",
      "name": "PromptBuilder",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::prompt",
      "path": "gpui_kit::agent::prompt",
      "source": "crates/gpui-kit/src/agent/prompt.rs",
      "summary": "A template with host-owned slots.",
      "documentation": "A template with host-owned slots.",
      "signature": "# [doc = \" A template with host-owned slots.\"] # [derive (IntoElement)] pub struct PromptBuilder { ident : Ident, label : SharedString, body : SharedString, slots : Vec<PromptSlot>, replacements : Slots, state : PromptBuilderState, disabled : bool, on_slot : Option<SlotHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::prompt::PromptBuilder::body",
      "name": "body",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::prompt",
      "path": "gpui_kit::agent::prompt",
      "source": "crates/gpui-kit/src/agent/prompt.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn body (mut self, body : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PromptBuilder"
    },
    {
      "id": "gpui_kit::agent::prompt::PromptBuilder::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::prompt",
      "path": "gpui_kit::agent::prompt",
      "source": "crates/gpui-kit/src/agent/prompt.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PromptBuilder"
    },
    {
      "id": "gpui_kit::agent::prompt::PromptBuilder::on_slot",
      "name": "on_slot",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::prompt",
      "path": "gpui_kit::agent::prompt",
      "source": "crates/gpui-kit/src/agent/prompt.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_slot (mut self, handler : impl Fn (& PromptSlot, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "PromptBuilder"
    },
    {
      "id": "gpui_kit::agent::prompt::PromptBuilder::slots",
      "name": "slots",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::prompt",
      "path": "gpui_kit::agent::prompt",
      "source": "crates/gpui-kit/src/agent/prompt.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn slots (mut self, slots : impl IntoIterator<Item = PromptSlot>) -> Self",
      "cfg": [],
      "target": "PromptBuilder"
    },
    {
      "id": "gpui_kit::agent::prompt::PromptBuilder::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::prompt",
      "path": "gpui_kit::agent::prompt",
      "source": "crates/gpui-kit/src/agent/prompt.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : PromptBuilderState) -> Self",
      "cfg": [],
      "target": "PromptBuilder"
    },
    {
      "id": "gpui_kit::agent::prompt::PromptBuilderEvent",
      "name": "PromptBuilderEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::prompt",
      "path": "gpui_kit::agent::prompt",
      "source": "crates/gpui-kit/src/agent/prompt.rs",
      "summary": "What a slot activation reports.",
      "documentation": "What a slot activation reports.",
      "signature": "# [doc = \" What a slot activation reports.\"] # [derive (Debug, Clone, PartialEq)] pub enum PromptBuilderEvent { SlotActivated (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::prompt::PromptBuilderState",
      "name": "PromptBuilderState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::prompt",
      "path": "gpui_kit::agent::prompt",
      "source": "crates/gpui-kit/src/agent/prompt.rs",
      "summary": "How the template was asked for.",
      "documentation": "How the template was asked for.",
      "signature": "# [doc = \" How the template was asked for.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum PromptBuilderState { Loading, Ready, Empty, Unavailable (SharedString), Error (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::prompt::PromptBuilderState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::prompt",
      "path": "gpui_kit::agent::prompt",
      "source": "crates/gpui-kit/src/agent/prompt.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "PromptBuilderState"
    },
    {
      "id": "gpui_kit::agent::prompt::PromptSlot",
      "name": "PromptSlot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::prompt",
      "path": "gpui_kit::agent::prompt",
      "source": "crates/gpui-kit/src/agent/prompt.rs",
      "summary": "One named hole in a template. Identity is the host's, never the draw order.",
      "documentation": "One named hole in a template. Identity is the host's, never the draw order.",
      "signature": "# [doc = \" One named hole in a template. Identity is the host's, never the draw order.\"] # [derive (Debug, Clone, PartialEq)] pub struct PromptSlot { pub id : SharedString, pub name : SharedString, pub value : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::prompt::PromptSlot::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::prompt",
      "path": "gpui_kit::agent::prompt",
      "source": "crates/gpui-kit/src/agent/prompt.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PromptSlot"
    },
    {
      "id": "gpui_kit::agent::prompt::PromptSlot::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::prompt",
      "path": "gpui_kit::agent::prompt",
      "source": "crates/gpui-kit/src/agent/prompt.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn value (mut self, value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PromptSlot"
    },
    {
      "id": "gpui_kit::agent::reexport-1",
      "name": "approval :: { AlwaysScope , ApprovalDecision , ApprovalEvent , ApprovalPrompt , ApprovalStatus }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use approval::{ AlwaysScope, ApprovalDecision, ApprovalEvent, ApprovalPrompt, ApprovalStatus };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-10",
      "name": "permission :: { PermissionAction , PermissionChange , PermissionEntry , PermissionMatrix , PermissionSource , PermissionState , PermissionSubject , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use permission::{ PermissionAction, PermissionChange, PermissionEntry, PermissionMatrix, PermissionSource, PermissionState, PermissionSubject, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-11",
      "name": "persona :: { DialogueChoice , DialogueChoiceAvailability , DialogueTurn , PersonaDialogue , PersonaDialogueEvent , PersonaExpression , PersonaPortrait , VoiceField , VoiceReactive , VoiceSample , VoiceSampleError , VoiceSampleErrorKind , VoiceState , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use persona::{ DialogueChoice, DialogueChoiceAvailability, DialogueTurn, PersonaDialogue, PersonaDialogueEvent, PersonaExpression, PersonaPortrait, VoiceField, VoiceReactive, VoiceSample, VoiceSampleError, VoiceSampleErrorKind, VoiceState, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-12",
      "name": "plan :: { AgentPlan , PlanItem , PlanState }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use plan::{ AgentPlan, PlanItem, PlanState };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-13",
      "name": "presentation :: { AgentActivityLine , AgentAppearance , AgentAvatar , AgentCard , AgentGroup , AgentRoster , AgentRunIssues , SubagentTree , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use presentation::{ AgentActivityLine, AgentAppearance, AgentAvatar, AgentCard, AgentGroup, AgentRoster, AgentRunIssues, SubagentTree, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-14",
      "name": "prompt :: { PromptBuilder , PromptBuilderEvent , PromptBuilderState , PromptSlot }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use prompt::{ PromptBuilder, PromptBuilderEvent, PromptBuilderState, PromptSlot };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-15",
      "name": "server_list :: { Catalog , Offering , OfferingKind , ServerEntry , ServerList , ServerState }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use server_list::{ Catalog, Offering, OfferingKind, ServerEntry, ServerList, ServerState };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-16",
      "name": "thinking :: { Reasoning , ThinkingBlock }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use thinking::{ Reasoning, ThinkingBlock };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-17",
      "name": "tool_call :: { Elapsed , ToolBody , ToolCall , ToolCallState , ToolFamily , ToolOutput }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use tool_call::{ Elapsed, ToolBody, ToolCall, ToolCallState, ToolFamily, ToolOutput };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-2",
      "name": "artifact :: { ArtifactKind , ArtifactPreview , ArtifactPreviewState }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use artifact::{ ArtifactKind, ArtifactPreview, ArtifactPreviewState };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-3",
      "name": "canvas :: { AgentRunCanvas , AgentRunCanvasEvent , AgentRunLayout }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use canvas::{ AgentRunCanvas, AgentRunCanvasEvent, AgentRunLayout };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-4",
      "name": "clarification :: { ClarificationEvent , ClarificationOption , ClarificationPanel , ClarificationStatus , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use clarification::{ ClarificationEvent, ClarificationOption, ClarificationPanel, ClarificationStatus, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-5",
      "name": "cost :: { Basis , ContextGauge , CostLine , CostMeter , LastVerified , Limit , Quantity , Reading }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use cost::{ Basis, ContextGauge, CostLine, CostMeter, LastVerified, Limit, Quantity, Reading };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-6",
      "name": "disclosure :: AgentDisclosurePresentation",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use disclosure::AgentDisclosurePresentation;",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-7",
      "name": "feedback :: { FeedbackRating , FeedbackRatingEvent , FeedbackVote }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use feedback::{ FeedbackRating, FeedbackRatingEvent, FeedbackVote };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-8",
      "name": "model :: { AgentActivity , AgentDescriptor , AgentExecutionState , AgentId , AgentModelIssue , AgentOutcome , AgentPresence , AgentRunSnapshot , AgentSnapshot , AgentTaskSnapshot , AgentUiAction , AgentVisualEvent , AgentVisualEventKind , AggregationSnapshot , InvocationId , RunId , RunLink , RunLinkId , RunLinkKind , RunSubjectId , TaskId , VisualEventId , WaitReason , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use model::{ AgentActivity, AgentDescriptor, AgentExecutionState, AgentId, AgentModelIssue, AgentOutcome, AgentPresence, AgentRunSnapshot, AgentSnapshot, AgentTaskSnapshot, AgentUiAction, AgentVisualEvent, AgentVisualEventKind, AggregationSnapshot, InvocationId, RunId, RunLink, RunLinkId, RunLinkKind, RunSubjectId, TaskId, VisualEventId, WaitReason, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::reexport-9",
      "name": "offering_catalog :: { OfferingCatalog , OfferingIdentity , OfferingSource , OfferingSourceState , SearchableOffering , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent",
      "path": "gpui_kit::agent",
      "source": "crates/gpui-kit/src/agent/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use offering_catalog::{ OfferingCatalog, OfferingIdentity, OfferingSource, OfferingSourceState, SearchableOffering, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::server_list::Catalog",
      "name": "Catalog",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "What is known about what a server offers.",
      "documentation": "What is known about what a server offers.\n\n[`Catalog::Offers`] holding an empty list is an answer; [`Catalog::Unasked`]\nis the absence of a question. The two are separate variants rather than one\nemptiness because a surface that cannot tell them apart will show the wrong\none to somebody who is trying to work out whether their server is broken.",
      "signature": "# [doc = \" What is known about what a server offers.\"] # [doc = \"\"] # [doc = \" [`Catalog::Offers`] holding an empty list is an answer; [`Catalog::Unasked`]\"] # [doc = \" is the absence of a question. The two are separate variants rather than one\"] # [doc = \" emptiness because a surface that cannot tell them apart will show the wrong\"] # [doc = \" one to somebody who is trying to work out whether their server is broken.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum Catalog { # [doc = \" Nobody has asked this server what it offers.\"] # [default] Unasked, # [doc = \" The question is in flight.\"] Asking, # [doc = \" The server answered. An empty list is an answer.\"] Offers (Vec<Offering>), # [doc = \" The question could not be answered, for the host's stated reason.\"] Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::server_list::Offering",
      "name": "Offering",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "One thing a server offers.",
      "documentation": "One thing a server offers.",
      "signature": "# [doc = \" One thing a server offers.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct Offering { id : SharedString, kind : OfferingKind, name : SharedString, summary : Option<SharedString>, # [doc = \" The one extra fact that tells two similarly named things apart — a\"] # [doc = \" resource's locator, a tool's signature — written by the host.\"] qualifier : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::server_list::Offering::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "Offering"
    },
    {
      "id": "gpui_kit::agent::server_list::Offering::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn kind (& self) -> OfferingKind",
      "cfg": [],
      "target": "Offering"
    },
    {
      "id": "gpui_kit::agent::server_list::Offering::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & SharedString",
      "cfg": [],
      "target": "Offering"
    },
    {
      "id": "gpui_kit::agent::server_list::Offering::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, kind : OfferingKind, name : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "Offering"
    },
    {
      "id": "gpui_kit::agent::server_list::Offering::qualifier",
      "name": "qualifier",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn qualifier (mut self, qualifier : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Offering"
    },
    {
      "id": "gpui_kit::agent::server_list::Offering::qualifier_text",
      "name": "qualifier_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn qualifier_text (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "Offering"
    },
    {
      "id": "gpui_kit::agent::server_list::Offering::resource",
      "name": "resource",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn resource (id : impl Into<SharedString>, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Offering"
    },
    {
      "id": "gpui_kit::agent::server_list::Offering::skill",
      "name": "skill",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn skill (id : impl Into<SharedString>, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Offering"
    },
    {
      "id": "gpui_kit::agent::server_list::Offering::summary",
      "name": "summary",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn summary (mut self, summary : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Offering"
    },
    {
      "id": "gpui_kit::agent::server_list::Offering::summary_text",
      "name": "summary_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn summary_text (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "Offering"
    },
    {
      "id": "gpui_kit::agent::server_list::Offering::tool",
      "name": "tool",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tool (id : impl Into<SharedString>, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Offering"
    },
    {
      "id": "gpui_kit::agent::server_list::OfferingKind",
      "name": "OfferingKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "Which of the three kinds of thing a server offers.",
      "documentation": "Which of the three kinds of thing a server offers.",
      "signature": "# [doc = \" Which of the three kinds of thing a server offers.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] pub enum OfferingKind { # [doc = \" Something the application can call.\"] Tool, # [doc = \" A procedure the application can follow.\"] Skill, # [doc = \" Something the application can read.\"] Resource, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::server_list::OfferingKind::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "The published name.",
      "documentation": "The published name.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "OfferingKind"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerEntry",
      "name": "ServerEntry",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "One connection.",
      "documentation": "One connection.",
      "signature": "# [doc = \" One connection.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct ServerEntry { id : SharedString, name : SharedString, detail : Option<SharedString>, state : ServerState, catalog : Catalog, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::server_list::ServerEntry::catalog",
      "name": "catalog",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn catalog (mut self, catalog : Catalog) -> Self",
      "cfg": [],
      "target": "ServerEntry"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerEntry::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "A second line naming the connection: where it runs, which account it uses. The host writes it; this crate never derives one.",
      "documentation": "A second line naming the connection: where it runs, which account it\nuses. The host writes it; this crate never derives one.",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ServerEntry"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerEntry::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "ServerEntry"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerEntry::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ServerEntry"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerEntry::offers",
      "name": "offers",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn offers (self, offerings : impl IntoIterator<Item = Offering>) -> Self",
      "cfg": [],
      "target": "ServerEntry"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerEntry::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : ServerState) -> Self",
      "cfg": [],
      "target": "ServerEntry"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerList",
      "name": "ServerList",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "The connections an application holds, and what each one offers.",
      "documentation": "The connections an application holds, and what each one offers.",
      "signature": "# [doc = \" The connections an application holds, and what each one offers.\"] # [derive (IntoElement)] pub struct ServerList { ident : Ident, servers : Vec<ServerEntry>, expanded : Vec<SharedString>, selected : Option<SharedString>, size : ControlSize, disabled : bool, on_select : Option<SelectHandler>, on_retry : Option<RetryHandler>, on_toggle : Option<ToggleHandler>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::server_list::ServerList::expanded",
      "name": "expanded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "The servers whose offerings are shown. Everything else is folded away, and a folded server publishes none of what it offers.",
      "documentation": "The servers whose offerings are shown. Everything else is folded away,\nand a folded server publishes none of what it offers.",
      "signature": "pub fn expanded (mut self, ids : impl IntoIterator<Item = SharedString>) -> Self",
      "cfg": [],
      "target": "ServerList"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerList::expanded_ids",
      "name": "expanded_ids",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn expanded_ids<S : AsRef<str>> (mut self, ids : & [S]) -> Self",
      "cfg": [],
      "target": "ServerList"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerList::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "ServerList"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerList::on_retry",
      "name": "on_retry",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "Reports that a failed connection should be attempted again. This crate connects to nothing.",
      "documentation": "Reports that a failed connection should be attempted again. This crate\nconnects to nothing.",
      "signature": "pub fn on_retry (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "ServerList"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerList::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "ServerList"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerList::on_toggle",
      "name": "on_toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "Reports that a server's offerings should be shown or folded away.",
      "documentation": "Reports that a server's offerings should be shown or folded away.",
      "signature": "pub fn on_toggle (mut self, handler : impl Fn (SharedString, bool, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "ServerList"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerList::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ServerList"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerList::server",
      "name": "server",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn server (mut self, server : ServerEntry) -> Self",
      "cfg": [],
      "target": "ServerList"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerList::servers",
      "name": "servers",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn servers (mut self, servers : impl IntoIterator<Item = ServerEntry>) -> Self",
      "cfg": [],
      "target": "ServerList"
    },
    {
      "id": "gpui_kit::agent::server_list::ServerState",
      "name": "ServerState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "Where a connection stands.",
      "documentation": "Where a connection stands.",
      "signature": "# [doc = \" Where a connection stands.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum ServerState { Connected, Connecting, # [doc = \" Not connected, and nothing went wrong.\"] Disconnected, # [doc = \" The attempt failed. The reason is the host's and is shown word for\"] # [doc = \" word; this crate never authors one.\"] Failed { reason : SharedString, }, # [doc = \" The reader turned this one off. A refusal, not a failure, which is why\"] # [doc = \" it is a state of its own rather than a disconnection with a note.\"] Disabled { reason : Option<SharedString>, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::server_list::ServerState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::server_list",
      "path": "gpui_kit::agent::server_list",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "The name the node publishes. It is the state, never its colour.",
      "documentation": "The name the node publishes. It is the state, never its colour.",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "ServerState"
    },
    {
      "id": "gpui_kit::agent::thinking::Reasoning",
      "name": "Reasoning",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::thinking",
      "path": "gpui_kit::agent::thinking",
      "source": "crates/gpui-kit/src/agent/thinking.rs",
      "summary": "What is known about a turn's reasoning.",
      "documentation": "What is known about a turn's reasoning.\n\nDeliberately not `Option<SharedString>`, and deliberately without a\n`From<Option<_>>`: the two ways of having no text to show are different\nfacts, and the type is the thing that stops them being confused.",
      "signature": "# [doc = \" What is known about a turn's reasoning.\"] # [doc = \"\"] # [doc = \" Deliberately not `Option<SharedString>`, and deliberately without a\"] # [doc = \" `From<Option<_>>`: the two ways of having no text to show are different\"] # [doc = \" facts, and the type is the thing that stops them being confused.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum Reasoning { # [doc = \" It exists and this is it. An empty string is still reasoning that\"] # [doc = \" exists; it is not [`Reasoning::Absent`].\"] Present (SharedString), # [doc = \" It exists and was withheld, in the withholder's own words.\"] Withheld (SharedString), # [doc = \" None was produced.\"] Absent, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::thinking::Reasoning::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::thinking",
      "path": "gpui_kit::agent::thinking",
      "source": "crates/gpui-kit/src/agent/thinking.rs",
      "summary": "The name the semantic node publishes.",
      "documentation": "The name the semantic node publishes.",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "Reasoning"
    },
    {
      "id": "gpui_kit::agent::thinking::Reasoning::is_disclosable",
      "name": "is_disclosable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::thinking",
      "path": "gpui_kit::agent::thinking",
      "source": "crates/gpui-kit/src/agent/thinking.rs",
      "summary": "Whether there is anything a disclosure could disclose.",
      "documentation": "Whether there is anything a disclosure could disclose.",
      "signature": "pub fn is_disclosable (& self) -> bool",
      "cfg": [],
      "target": "Reasoning"
    },
    {
      "id": "gpui_kit::agent::thinking::Reasoning::present",
      "name": "present",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::thinking",
      "path": "gpui_kit::agent::thinking",
      "source": "crates/gpui-kit/src/agent/thinking.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn present (text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Reasoning"
    },
    {
      "id": "gpui_kit::agent::thinking::Reasoning::withheld",
      "name": "withheld",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::thinking",
      "path": "gpui_kit::agent::thinking",
      "source": "crates/gpui-kit/src/agent/thinking.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn withheld (reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Reasoning"
    },
    {
      "id": "gpui_kit::agent::thinking::ThinkingBlock",
      "name": "ThinkingBlock",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::thinking",
      "path": "gpui_kit::agent::thinking",
      "source": "crates/gpui-kit/src/agent/thinking.rs",
      "summary": "A collapsed block of model reasoning.",
      "documentation": "A collapsed block of model reasoning.\n\nWhether it is open is the caller's, as it is for\n[`Accordion`](crate::navigation::accordion::Accordion): the block reports\nthe state it should take and shows exactly the state it was given.",
      "signature": "# [doc = \" A collapsed block of model reasoning.\"] # [doc = \"\"] # [doc = \" Whether it is open is the caller's, as it is for\"] # [doc = \" [`Accordion`](crate::navigation::accordion::Accordion): the block reports\"] # [doc = \" the state it should take and shows exactly the state it was given.\"] # [derive (IntoElement)] pub struct ThinkingBlock { ident : Ident, reasoning : Reasoning, expanded : bool, # [doc = \" Whether the reasoning is still arriving. Separate from the reasoning\"] # [doc = \" itself, because text that has stopped growing and text that is still\"] # [doc = \" growing look identical and mean different things.\"] thinking : bool, # [doc = \" How long the host says this turn has been thinking, already formatted.\"] elapsed : Option<SharedString>, presentation : AgentDisclosurePresentation, on_toggle : Option<ToggleHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::thinking::ThinkingBlock::elapsed",
      "name": "elapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::thinking",
      "path": "gpui_kit::agent::thinking",
      "source": "crates/gpui-kit/src/agent/thinking.rs",
      "summary": "A host-formatted duration shown as “Thought for …” when known.",
      "documentation": "A host-formatted duration shown as “Thought for …” when known.",
      "signature": "pub fn elapsed (mut self, elapsed : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ThinkingBlock"
    },
    {
      "id": "gpui_kit::agent::thinking::ThinkingBlock::expanded",
      "name": "expanded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::thinking",
      "path": "gpui_kit::agent::thinking",
      "source": "crates/gpui-kit/src/agent/thinking.rs",
      "summary": "Collapsed unless the caller says otherwise, and reasoning that cannot be disclosed stays shut whatever the caller says.",
      "documentation": "Collapsed unless the caller says otherwise, and reasoning that cannot\nbe disclosed stays shut whatever the caller says.",
      "signature": "pub fn expanded (mut self, expanded : bool) -> Self",
      "cfg": [],
      "target": "ThinkingBlock"
    },
    {
      "id": "gpui_kit::agent::thinking::ThinkingBlock::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::thinking",
      "path": "gpui_kit::agent::thinking",
      "source": "crates/gpui-kit/src/agent/thinking.rs",
      "summary": "The reasoning is a constructor argument because there is no sensible default: which of the three states holds is the whole question.",
      "documentation": "The reasoning is a constructor argument because there is no sensible\ndefault: which of the three states holds is the whole question.",
      "signature": "pub fn new (ident : impl Into<Ident>, reasoning : Reasoning) -> Self",
      "cfg": [],
      "target": "ThinkingBlock"
    },
    {
      "id": "gpui_kit::agent::thinking::ThinkingBlock::on_toggle",
      "name": "on_toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::thinking",
      "path": "gpui_kit::agent::thinking",
      "source": "crates/gpui-kit/src/agent/thinking.rs",
      "summary": "Reports the state the block should take next.",
      "documentation": "Reports the state the block should take next.",
      "signature": "pub fn on_toggle (mut self, handler : impl Fn (bool, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "ThinkingBlock"
    },
    {
      "id": "gpui_kit::agent::thinking::ThinkingBlock::presentation",
      "name": "presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::thinking",
      "path": "gpui_kit::agent::thinking",
      "source": "crates/gpui-kit/src/agent/thinking.rs",
      "summary": "Chooses the body treatment when reasoning is disclosed.",
      "documentation": "Chooses the body treatment when reasoning is disclosed.\n\nThe default is [`AgentDisclosurePresentation::Inset`]. Flow preserves\nthe body's indentation and content without drawing a separate surface.",
      "signature": "pub fn presentation (mut self, presentation : AgentDisclosurePresentation) -> Self",
      "cfg": [],
      "target": "ThinkingBlock"
    },
    {
      "id": "gpui_kit::agent::thinking::ThinkingBlock::thinking",
      "name": "thinking",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::thinking",
      "path": "gpui_kit::agent::thinking",
      "source": "crates/gpui-kit/src/agent/thinking.rs",
      "summary": "Reports that the reasoning is still being produced.",
      "documentation": "Reports that the reasoning is still being produced.\n\nIts active mark differs from the settled mark even when motion is\nreduced, so a working thought does not need a state word beside it.",
      "signature": "pub fn thinking (mut self, thinking : bool) -> Self",
      "cfg": [],
      "target": "ThinkingBlock"
    },
    {
      "id": "gpui_kit::agent::tool_call::Elapsed",
      "name": "Elapsed",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "How long a call took, as far as anyone has said.",
      "documentation": "How long a call took, as far as anyone has said.\n\nA duration nobody stated is a state, not a zero — the rule\n[`TransportDuration`](crate::content::transport::TransportDuration) keeps\nfor the same reason.",
      "signature": "# [doc = \" How long a call took, as far as anyone has said.\"] # [doc = \"\"] # [doc = \" A duration nobody stated is a state, not a zero — the rule\"] # [doc = \" [`TransportDuration`](crate::content::transport::TransportDuration) keeps\"] # [doc = \" for the same reason.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum Elapsed { # [doc = \" A duration the caller has already put into words.\"] Took (SharedString), # [default] Unknown, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::tool_call::Elapsed::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "Elapsed"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolBody",
      "name": "ToolBody",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "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.",
      "documentation": "A block of caller-owned text — the arguments a tool was called with, or\nwhat it returned — with an optional limit on how much of it is drawn.\n\nThe body keeps the whole text so the component can say how much it left\nout, and draws only what the limit allows. Nothing but the measurement\nreaches the semantic tree.",
      "signature": "# [doc = \" A block of caller-owned text — the arguments a tool was called with, or\"] # [doc = \" what it returned — with an optional limit on how much of it is drawn.\"] # [doc = \"\"] # [doc = \" The body keeps the whole text so the component can say how much it left\"] # [doc = \" out, and draws only what the limit allows. Nothing but the measurement\"] # [doc = \" reaches the semantic tree.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct ToolBody { text : SharedString, max_lines : Option<usize>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolBody::all_lines",
      "name": "all_lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "Draws the whole body. The transcript default is four lines; callers opt into an unbounded body only where the surrounding surface already owns scrolling or another bound.",
      "documentation": "Draws the whole body. The transcript default is four lines; callers\nopt into an unbounded body only where the surrounding surface already\nowns scrolling or another bound.",
      "signature": "pub fn all_lines (mut self) -> Self",
      "cfg": [],
      "target": "ToolBody"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolBody::is_truncated",
      "name": "is_truncated",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_truncated (& self) -> bool",
      "cfg": [],
      "target": "ToolBody"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolBody::line_count",
      "name": "line_count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn line_count (& self) -> usize",
      "cfg": [],
      "target": "ToolBody"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolBody::max_lines",
      "name": "max_lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "Draws at most this many lines and states how many there are in total.",
      "documentation": "Draws at most this many lines and states how many there are in total.\n\nA limit of zero is one line: a body that drew nothing at all and called\nitself truncated would be indistinguishable from a body nobody passed.",
      "signature": "pub fn max_lines (mut self, lines : usize) -> Self",
      "cfg": [],
      "target": "ToolBody"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolBody::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ToolBody"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolBody::remaining_line_count",
      "name": "remaining_line_count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn remaining_line_count (& self) -> usize",
      "cfg": [],
      "target": "ToolBody"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolBody::shape",
      "name": "shape",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "The measurement a reader is shown and a node publishes: never the text.",
      "documentation": "The measurement a reader is shown and a node publishes: never the text.",
      "signature": "pub fn shape (& self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "ToolBody"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolBody::shown_line_count",
      "name": "shown_line_count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn shown_line_count (& self) -> usize",
      "cfg": [],
      "target": "ToolBody"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolBody::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "The text as the caller gave it. It is the caller's own data coming back, and the component never publishes it.",
      "documentation": "The text as the caller gave it. It is the caller's own data coming\nback, and the component never publishes it.",
      "signature": "pub fn text (& self) -> & SharedString",
      "cfg": [],
      "target": "ToolBody"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCall",
      "name": "ToolCall",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "One quiet evidence row for a tool invocation.",
      "documentation": "One quiet evidence row for a tool invocation.\n\nThe row is collapsed by default. Arguments, output and an optional diff\nappear only when the caller advances `expanded`; the component reports the\nrequested next state through `on_toggle` and runs no tool itself.",
      "signature": "# [doc = \" One quiet evidence row for a tool invocation.\"] # [doc = \"\"] # [doc = \" The row is collapsed by default. Arguments, output and an optional diff\"] # [doc = \" appear only when the caller advances `expanded`; the component reports the\"] # [doc = \" requested next state through `on_toggle` and runs no tool itself.\"] # [derive (IntoElement)] pub struct ToolCall { ident : Ident, family : ToolFamily, tool : SharedString, summary : Option<SharedString>, arguments : Option<ToolBody>, state : ToolCallState, elapsed : Elapsed, diff : Option<AnyElement>, expanded : bool, presentation : AgentDisclosurePresentation, on_toggle : Option<ToggleHandler>, on_retry : Option<RetryHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCall::arguments",
      "name": "arguments",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "What the tool was called with. Hidden while the row is collapsed.",
      "documentation": "What the tool was called with. Hidden while the row is collapsed.",
      "signature": "pub fn arguments (mut self, arguments : impl Into<ToolBody>) -> Self",
      "cfg": [],
      "target": "ToolCall"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCall::diff",
      "name": "diff",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "A caller-built intra-change view, typically a small [`DiffView`](crate::content::DiffView).",
      "documentation": "A caller-built intra-change view, typically a small [`DiffView`](crate::content::DiffView).",
      "signature": "pub fn diff (mut self, diff : impl IntoElement) -> Self",
      "cfg": [],
      "target": "ToolCall"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCall::elapsed",
      "name": "elapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn elapsed (mut self, elapsed : impl Into<Elapsed>) -> Self",
      "cfg": [],
      "target": "ToolCall"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCall::expanded",
      "name": "expanded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn expanded (mut self, expanded : bool) -> Self",
      "cfg": [],
      "target": "ToolCall"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCall::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "`tool` is the short verb or tool name the host wants the transcript to show. Kit owns no tool catalogue and invents no display name.",
      "documentation": "`tool` is the short verb or tool name the host wants the transcript to\nshow. Kit owns no tool catalogue and invents no display name.",
      "signature": "pub fn new (ident : impl Into<Ident>, family : ToolFamily, tool : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ToolCall"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCall::on_retry",
      "name": "on_retry",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "Offers a quiet inline retry action on a failed row only.",
      "documentation": "Offers a quiet inline retry action on a failed row only.",
      "signature": "pub fn on_retry (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "ToolCall"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCall::on_toggle",
      "name": "on_toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_toggle (mut self, handler : impl Fn (bool, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "ToolCall"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCall::presentation",
      "name": "presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "Chooses the body treatment for disclosed arguments and results.",
      "documentation": "Chooses the body treatment for disclosed arguments and results.\n\nThe default is [`AgentDisclosurePresentation::Inset`]. Flow keeps the\nsame disclosure content and indentation without placing it on a\nseparate evidence surface.",
      "signature": "pub fn presentation (mut self, presentation : AgentDisclosurePresentation) -> Self",
      "cfg": [],
      "target": "ToolCall"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCall::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : ToolCallState) -> Self",
      "cfg": [],
      "target": "ToolCall"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCall::summary",
      "name": "summary",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "A concise, display-safe key argument such as a path, command or query.",
      "documentation": "A concise, display-safe key argument such as a path, command or query.\n\nUnlike [`ToolBody`], this line is published to the semantic tree so a\nscreen reader can hear the same summary. Do not pass credentials or\nunredacted user content; keep those in the redacted body.",
      "signature": "pub fn summary (mut self, summary : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ToolCall"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCallState",
      "name": "ToolCallState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "Where one invocation has got to.",
      "documentation": "Where one invocation has got to.\n\nThe five are a closed set rather than flags, so a card cannot be running\nand failed at once, and cannot be refused without a reason: the host that\ndeclined has to say what it declined.",
      "signature": "# [doc = \" Where one invocation has got to.\"] # [doc = \"\"] # [doc = \" The five are a closed set rather than flags, so a card cannot be running\"] # [doc = \" and failed at once, and cannot be refused without a reason: the host that\"] # [doc = \" declined has to say what it declined.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum ToolCallState { # [doc = \" Nothing has run. Somebody has to allow it first.\"] PendingApproval, Running, Succeeded { output : ToolOutput, }, # [doc = \" The tool ran and did not succeed, in the host's own words.\"] Failed { error : SharedString, }, # [doc = \" The host declined to run it, in the host's own words. Nothing ran, so\"] # [doc = \" there is no result and no error — only a decision.\"] Refused { reason : SharedString, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCallState::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "The name the semantic node publishes, so a test asserts the state the row reported rather than the colour it painted.",
      "documentation": "The name the semantic node publishes, so a test asserts the state the\nrow reported rather than the colour it painted.",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "ToolCallState"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCallState::failed",
      "name": "failed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn failed (error : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ToolCallState"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCallState::reason",
      "name": "reason",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "Why this call did not produce a result, when that is a thing the host said. A failure's error and a refusal's reason are different sentences and are never rendered in the same place.",
      "documentation": "Why this call did not produce a result, when that is a thing the host\nsaid. A failure's error and a refusal's reason are different sentences\nand are never rendered in the same place.",
      "signature": "pub fn reason (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "ToolCallState"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCallState::refused",
      "name": "refused",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn refused (reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ToolCallState"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCallState::succeeded",
      "name": "succeeded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn succeeded (output : impl Into<ToolBody>) -> Self",
      "cfg": [],
      "target": "ToolCallState"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolCallState::succeeded_silently",
      "name": "succeeded_silently",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "A call that ran, succeeded, and returned nothing.",
      "documentation": "A call that ran, succeeded, and returned nothing.",
      "signature": "pub fn succeeded_silently () -> Self",
      "cfg": [],
      "target": "ToolCallState"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolFamily",
      "name": "ToolFamily",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "The family of work one tool performs.",
      "documentation": "The family of work one tool performs.\n\nFamily is required at construction so every transcript gets the same\nlow-saturation edge cue instead of each host inventing a colour map. It is\nclassification only: failure and refusal still use their severity colour.",
      "signature": "# [doc = \" The family of work one tool performs.\"] # [doc = \"\"] # [doc = \" Family is required at construction so every transcript gets the same\"] # [doc = \" low-saturation edge cue instead of each host inventing a colour map. It is\"] # [doc = \" classification only: failure and refusal still use their severity colour.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum ToolFamily { Read, Network, Shell, Edit, External, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolFamily::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (self) -> & 'static str",
      "cfg": [],
      "target": "ToolFamily"
    },
    {
      "id": "gpui_kit::agent::tool_call::ToolOutput",
      "name": "ToolOutput",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "agent::tool_call",
      "path": "gpui_kit::agent::tool_call",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "What a tool that ran to completion gave back.",
      "documentation": "What a tool that ran to completion gave back.",
      "signature": "# [doc = \" What a tool that ran to completion gave back.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum ToolOutput { Body (ToolBody), # [doc = \" The tool ran and returned nothing. This is a fact about a completed\"] # [doc = \" call, which is why it can only be reached through\"] # [doc = \" [`ToolCallState::Succeeded`] and never stands in for a refusal.\"] Silent, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::band::GraphBand",
      "name": "GraphBand",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::band",
      "path": "gpui_kit::canvas::band",
      "source": "crates/gpui-kit/src/canvas/band.rs",
      "summary": "A labelled rectangle of canvas world space.",
      "documentation": "A labelled rectangle of canvas world space.\n\nThe rectangle is the caller's claim about the run, in the same coordinates\n[`NodeGraph::node`](super::NodeGraph::node) places cards in. Nothing here\nderives it from the cards inside: which nodes belong to a region is a\nproduct question, and a band computed from a bounding box would answer it\nby proximity — which is exactly the claim a reader is looking at the band\nto check.",
      "signature": "# [doc = \" A labelled rectangle of canvas world space.\"] # [doc = \"\"] # [doc = \" The rectangle is the caller's claim about the run, in the same coordinates\"] # [doc = \" [`NodeGraph::node`](super::NodeGraph::node) places cards in. Nothing here\"] # [doc = \" derives it from the cards inside: which nodes belong to a region is a\"] # [doc = \" product question, and a band computed from a bounding box would answer it\"] # [doc = \" by proximity — which is exactly the claim a reader is looking at the band\"] # [doc = \" to check.\"] # [derive (Debug, Clone, PartialEq)] pub struct GraphBand { pub (crate) ident : Ident, pub (crate) label : SharedString, pub (crate) bounds : Bounds<f32>, pub (crate) color : Option<ColorChoice>, pub (crate) selected : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::band::GraphBand::bounds",
      "name": "bounds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::band",
      "path": "gpui_kit::canvas::band",
      "source": "crates/gpui-kit/src/canvas/band.rs",
      "summary": "The band's rectangle in canvas world coordinates.",
      "documentation": "The band's rectangle in canvas world coordinates.",
      "signature": "pub fn bounds (& self) -> Bounds<f32>",
      "cfg": [],
      "target": "GraphBand"
    },
    {
      "id": "gpui_kit::canvas::band::GraphBand::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::band",
      "path": "gpui_kit::canvas::band",
      "source": "crates/gpui-kit/src/canvas/band.rs",
      "summary": "A caller-owned category colour.",
      "documentation": "A caller-owned category colour.\n\nResolved through the same tier a graph node's category takes, so a\nregion and the cards that belong to it can be given one colour and\nkeep it. Without one the band is neutral, which is the honest default:\na region is not a category until somebody says which one.",
      "signature": "pub fn color (mut self, color : impl Into<ColorChoice>) -> Self",
      "cfg": [],
      "target": "GraphBand"
    },
    {
      "id": "gpui_kit::canvas::band::GraphBand::ident",
      "name": "ident",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::band",
      "path": "gpui_kit::canvas::band",
      "source": "crates/gpui-kit/src/canvas/band.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ident (& self) -> & Ident",
      "cfg": [],
      "target": "GraphBand"
    },
    {
      "id": "gpui_kit::canvas::band::GraphBand::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::band",
      "path": "gpui_kit::canvas::band",
      "source": "crates/gpui-kit/src/canvas/band.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "GraphBand"
    },
    {
      "id": "gpui_kit::canvas::band::GraphBand::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::band",
      "path": "gpui_kit::canvas::band",
      "source": "crates/gpui-kit/src/canvas/band.rs",
      "summary": "Creates a band from a business identity, a name, and a world-space rectangle.",
      "documentation": "Creates a band from a business identity, a name, and a world-space\nrectangle.",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, x : f32, y : f32, width : f32, height : f32,) -> Self",
      "cfg": [],
      "target": "GraphBand"
    },
    {
      "id": "gpui_kit::canvas::band::GraphBand::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::band",
      "path": "gpui_kit::canvas::band",
      "source": "crates/gpui-kit/src/canvas/band.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : bool) -> Self",
      "cfg": [],
      "target": "GraphBand"
    },
    {
      "id": "gpui_kit::canvas::edge::EdgeKind",
      "name": "EdgeKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "The routing treatment of an edge.",
      "documentation": "The routing treatment of an edge.",
      "signature": "# [doc = \" The routing treatment of an edge.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum EdgeKind { # [default] Flow, Feedback, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::edge::EdgeKind::active_color",
      "name": "active_color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "The paint this kind takes when it carries traffic or sits under the pointer.",
      "documentation": "The paint this kind takes when it carries traffic or sits under the\npointer.",
      "signature": "pub fn active_color (self, theme : & Theme) -> Hsla",
      "cfg": [],
      "target": "EdgeKind"
    },
    {
      "id": "gpui_kit::canvas::edge::EdgeKind::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn color (self, theme : & Theme) -> Hsla",
      "cfg": [],
      "target": "EdgeKind"
    },
    {
      "id": "gpui_kit::canvas::edge::EdgeMarker",
      "name": "EdgeMarker",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "The terminal mark a connection places at its destination.",
      "documentation": "The terminal mark a connection places at its destination.\n\nThe mark carries direction only when the host asks for it. Dense lane\ndiagrams generally need the whole corridor more than another glyph, while\na sparse curved graph can use a cap or arrow to make its reading direction\nimmediate.",
      "signature": "# [doc = \" The terminal mark a connection places at its destination.\"] # [doc = \"\"] # [doc = \" The mark carries direction only when the host asks for it. Dense lane\"] # [doc = \" diagrams generally need the whole corridor more than another glyph, while\"] # [doc = \" a sparse curved graph can use a cap or arrow to make its reading direction\"] # [doc = \" immediate.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum EdgeMarker { # [doc = \" The route ends cleanly at the destination port.\"] # [default] None, # [doc = \" A filled terminal bead, useful when destination is the emphasis but an\"] # [doc = \" arrow would overstate movement.\"] Dot, # [doc = \" A filled arrow following the route's exact terminal tangent.\"] Arrow, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::edge::EdgeState",
      "name": "EdgeState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "The caller-owned state of one connection.",
      "documentation": "The caller-owned state of one connection.\n\nOnly [`EdgeState::Active`] carries continuous traffic. A succeeded or\nfailed route keeps the outcome colour but stops moving, because motion on\neither would claim work is still crossing it. [`GraphEdge::active`] remains\nthe compatibility builder for callers that only distinguish idle from\nactive; [`GraphEdge::state`] is the complete vocabulary.",
      "signature": "# [doc = \" The caller-owned state of one connection.\"] # [doc = \"\"] # [doc = \" Only [`EdgeState::Active`] carries continuous traffic. A succeeded or\"] # [doc = \" failed route keeps the outcome colour but stops moving, because motion on\"] # [doc = \" either would claim work is still crossing it. [`GraphEdge::active`] remains\"] # [doc = \" the compatibility builder for callers that only distinguish idle from\"] # [doc = \" active; [`GraphEdge::state`] is the complete vocabulary.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum EdgeState { # [default] Idle, Active, Succeeded, Failed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::edge::EdgeState::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn value (self) -> & 'static str",
      "cfg": [],
      "target": "EdgeState"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge",
      "name": "GraphEdge",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "A controlled connection between two graph nodes.",
      "documentation": "A controlled connection between two graph nodes.",
      "signature": "# [doc = \" A controlled connection between two graph nodes.\"] # [derive (Debug, Clone, PartialEq)] pub struct GraphEdge { from : SharedString, to : SharedString, kind : EdgeKind, id : SharedString, explicit_id : bool, from_port : Option<SharedString>, to_port : Option<SharedString>, label : Option<SharedString>, state : EdgeState, marker : EdgeMarker, selected : bool, lane : i16, color : Option<ColorChoice>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::active",
      "name": "active",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn active (mut self, active : bool) -> Self",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "The colour this wire wears at rest, over whatever its source port's type would have lent it.",
      "documentation": "The colour this wire wears at rest, over whatever its source port's\ntype would have lent it.\n\nLeft unset, a wire between typed ports takes the colour of the port it\nleaves, and a wire between untyped ports takes its kind's colour. A\ncaller sets this for a wire whose meaning is not its type — a wire\nbeing traced, say — and the state colours still take over while the\nwire is active, succeeded, or failed.",
      "signature": "pub fn color (mut self, color : impl Into<ColorChoice>) -> Self",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::edge_id",
      "name": "edge_id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "The stable identity used for interaction and duplicate rejection.",
      "documentation": "The stable identity used for interaction and duplicate rejection.\n\nAn explicit identity supplied with [`GraphEdge::id`] is returned as-is;\notherwise the builder precomputes an unambiguous compatibility identity\nfrom the endpoints, ports, kind, and lane.",
      "signature": "pub fn edge_id (& self) -> SharedString",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::feedback",
      "name": "feedback",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn feedback (mut self) -> Self",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::from",
      "name": "from",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from (& self) -> & SharedString",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn kind (& self) -> EdgeKind",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::lane",
      "name": "lane",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn lane (mut self, lane : i16) -> Self",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::marker",
      "name": "marker",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "Places an optional direction mark at the destination port.",
      "documentation": "Places an optional direction mark at the destination port.",
      "signature": "pub fn marker (mut self, marker : EdgeMarker) -> Self",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (from : impl Into<SharedString>, to : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::ports",
      "name": "ports",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ports (mut self, from : impl Into<SharedString>, to : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : bool) -> Self",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : EdgeState) -> Self",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEdge::to",
      "name": "to",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn to (& self) -> & SharedString",
      "cfg": [],
      "target": "GraphEdge"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEndpoint",
      "name": "GraphEndpoint",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "A caller-owned node and port identity used by connection proposals.",
      "documentation": "A caller-owned node and port identity used by connection proposals.",
      "signature": "# [doc = \" A caller-owned node and port identity used by connection proposals.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct GraphEndpoint { pub node : SharedString, pub port : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::edge::GraphEndpoint::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "Creates an endpoint from business identities, not display labels.",
      "documentation": "Creates an endpoint from business identities, not display labels.",
      "signature": "pub fn new (node : impl Into<SharedString>, port : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GraphEndpoint"
    },
    {
      "id": "gpui_kit::canvas::edge::GraphRouting",
      "name": "GraphRouting",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "How the connections on one graph are drawn.",
      "documentation": "How the connections on one graph are drawn.\n\nThis is a statement about the graph rather than a taste about the drawing.\nLanes exist to keep many connections legible where they run together, and\n[`GraphEdge::lane`] is how a caller separates them; a curve has no lane to\nbe in, so asking for curves on a graph that needs lanes trades a fact for a\nlook. What decides it is whether a reader has to follow one connection\nthrough a crowd, or take in the shape of a sparse one.",
      "signature": "# [doc = \" How the connections on one graph are drawn.\"] # [doc = \"\"] # [doc = \" This is a statement about the graph rather than a taste about the drawing.\"] # [doc = \" Lanes exist to keep many connections legible where they run together, and\"] # [doc = \" [`GraphEdge::lane`] is how a caller separates them; a curve has no lane to\"] # [doc = \" be in, so asking for curves on a graph that needs lanes trades a fact for a\"] # [doc = \" look. What decides it is whether a reader has to follow one connection\"] # [doc = \" through a crowd, or take in the shape of a sparse one.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum GraphRouting { # [doc = \" Right-angled runs in separated lanes, which is how a dense pipeline\"] # [doc = \" stays traceable.\"] # [default] Lanes, # [doc = \" One curve from port to port, which is how a sparse board reads as a\"] # [doc = \" gesture rather than as wiring.\"] Curves, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::edge::PortSide",
      "name": "PortSide",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::edge",
      "path": "gpui_kit::canvas::edge",
      "source": "crates/gpui-kit/src/canvas/edge.rs",
      "summary": "The side of a node on which a port is placed.",
      "documentation": "The side of a node on which a port is placed.",
      "signature": "# [doc = \" The side of a node on which a port is placed.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash, Default)] pub enum PortSide { Top, Right, Bottom, # [default] Left, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::graph::GraphFit",
      "name": "GraphFit",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Whether a canvas frames its own content before the reader touches it.",
      "documentation": "Whether a canvas frames its own content before the reader touches it.\n\nA canvas whose caller computes every position — from a dependency depth, a\ngit lineage, a ledger's layers — is routinely wider than the surface\nholding it, and the default viewport opens on its top-left corner. The\nreader's first sight of the graph is then two cards and an edge leaving the\nframe, with nothing to say that the rest exists.\n\nThe canvas is the only thing that can answer this honestly: it holds every\ncard's measured box and its own surface size, while a caller knows only the\npositions it handed over and would have to guess how tall a card came out.\nWhat stays with the caller is whether framing is wanted at all, because on\na canvas the reader arranges, the opening view is theirs.",
      "signature": "# [doc = \" Whether a canvas frames its own content before the reader touches it.\"] # [doc = \"\"] # [doc = \" A canvas whose caller computes every position — from a dependency depth, a\"] # [doc = \" git lineage, a ledger's layers — is routinely wider than the surface\"] # [doc = \" holding it, and the default viewport opens on its top-left corner. The\"] # [doc = \" reader's first sight of the graph is then two cards and an edge leaving the\"] # [doc = \" frame, with nothing to say that the rest exists.\"] # [doc = \"\"] # [doc = \" The canvas is the only thing that can answer this honestly: it holds every\"] # [doc = \" card's measured box and its own surface size, while a caller knows only the\"] # [doc = \" positions it handed over and would have to guess how tall a card came out.\"] # [doc = \" What stays with the caller is whether framing is wanted at all, because on\"] # [doc = \" a canvas the reader arranges, the opening view is theirs.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum GraphFit { # [doc = \" The viewport is the caller's from the first frame.\"] # [default] Never, # [doc = \" Frame every node, world-space band, and measured relationship label as\"] # [doc = \" soon as the cards and canvas-owned chrome have been laid out, and again\"] # [doc = \" each time this value changes — which is what a caller's own Fit control\"] # [doc = \" bumps, since the caller cannot compute the frame itself. The fitted\"] # [doc = \" content clears the caller's [`NodeGraph::fit_clearance`], the graph's\"] # [doc = \" minimap, and its toolbar rather than remaining technically inside the\"] # [doc = \" viewport underneath them. Reported as an ordinary\"] # [doc = \" [`NodeGraphEvent::ViewportChanged`], so a caller that already stores its\"] # [doc = \" viewport needs nothing else. Between framings the viewport is the reader's\"] # [doc = \" and the canvas never moves it on its own. While the caller still holds the\"] # [doc = \" exact fitted viewport, a changed container rectangle is framed again; the\"] # [doc = \" first pan, wheel or caller-restored viewport ends that resize following\"] # [doc = \" without requiring a second mode flag.\"] Whole (u64), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::graph::GraphInteraction",
      "name": "GraphInteraction",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Which controlled changes an interactive graph may propose.",
      "documentation": "Which controlled changes an interactive graph may propose.\n\nOmitting [`NodeGraph::on_event`] still makes any mode static. With a\nhandler installed, `Inspect` permits navigation and selection, `Arrange`\nadditionally permits moving nodes, and `Edit` retains the complete graph\neditor including connection and deletion proposals.",
      "signature": "# [doc = \" Which controlled changes an interactive graph may propose.\"] # [doc = \"\"] # [doc = \" Omitting [`NodeGraph::on_event`] still makes any mode static. With a\"] # [doc = \" handler installed, `Inspect` permits navigation and selection, `Arrange`\"] # [doc = \" additionally permits moving nodes, and `Edit` retains the complete graph\"] # [doc = \" editor including connection and deletion proposals.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum GraphInteraction { Inspect, Arrange, # [default] Edit, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::graph::GraphState",
      "name": "GraphState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "What the canvas can currently say about itself.",
      "documentation": "What the canvas can currently say about itself.\n\nThese are the same five distinct states the rest of the library keeps\napart, and for the same reason: a canvas that is still loading, a run with\nno steps, a graph the host would not produce, and a graph that failed to\nload are four different things, and drawing any of them as an empty canvas\nwould be a lie a reader cannot detect.",
      "signature": "# [doc = \" What the canvas can currently say about itself.\"] # [doc = \"\"] # [doc = \" These are the same five distinct states the rest of the library keeps\"] # [doc = \" apart, and for the same reason: a canvas that is still loading, a run with\"] # [doc = \" no steps, a graph the host would not produce, and a graph that failed to\"] # [doc = \" load are four different things, and drawing any of them as an empty canvas\"] # [doc = \" would be a lie a reader cannot detect.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum GraphState { # [default] Ready, Loading, # [doc = \" The host declined to produce the graph, in its own words.\"] Refused (SharedString), # [doc = \" The graph could not be loaded, in the host's own words.\"] Failed (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::graph::GraphState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "GraphState"
    },
    {
      "id": "gpui_kit::canvas::graph::GraphViewport",
      "name": "GraphViewport",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Caller-owned pan and zoom values for a [`NodeGraph`].",
      "documentation": "Caller-owned pan and zoom values for a [`NodeGraph`].",
      "signature": "# [doc = \" Caller-owned pan and zoom values for a [`NodeGraph`].\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct GraphViewport { pub offset : Point<f32>, pub zoom : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::graph::GraphViewport::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Creates a viewport with a screen-space offset and world scale.",
      "documentation": "Creates a viewport with a screen-space offset and world scale.",
      "signature": "pub fn new (offset : Point<f32>, zoom : f32) -> Self",
      "cfg": [],
      "target": "GraphViewport"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph",
      "name": "NodeGraph",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "A run drawn as connected steps.",
      "documentation": "A run drawn as connected steps.",
      "signature": "# [doc = \" A run drawn as connected steps.\"] # [derive (IntoElement)] pub struct NodeGraph { ident : Ident, nodes : Vec<Placed>, edges : Vec<GraphEdge>, source : Option<GraphSource>, bands : Vec<GraphBand>, state : GraphState, empty : Option<EmptyState>, slots : Slots, grid : bool, axes : bool, ground_light : bool, viewport : GraphViewport, zoom_range : (f32, f32), interaction : GraphInteraction, on_event : Option<EventHandler>, can_connect : Option<ConnectionValidator>, minimap : bool, toolbar : Option<CanvasToolbar>, fit : GraphFit, fit_clearance : Edges<f32>, routing : GraphRouting, animate_layout : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::animate_layout",
      "name": "animate_layout",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Animates caller-applied bounds of explicitly sized nodes using the Navigation policy. Automatic-height nodes retain measured instant layout. First mount, direct manipulation and reduced motion snap. Current caller content is never delayed by the layout transition. Newly published identities fade in; initial mount and viewport culling do not replay entrances. Also controls removed-card and route paint retirement. Unsupported recordings retire immediately; disabling drops pictures. Compatible lane corridors interpolate with current ports pinned. Every intermediate uses global clearance checks; incompatible topology or an obstructed sample snaps to the solved route. Labels, culling and semantic targets follow that exact displayed route. Curves follow current nodes.",
      "documentation": "Animates caller-applied bounds of explicitly sized nodes using the\nNavigation policy. Automatic-height nodes retain measured instant\nlayout. First mount, direct manipulation and reduced motion snap.\nCurrent caller content is never delayed by the layout transition.\nNewly published identities fade in; initial mount and viewport culling\ndo not replay entrances. Also controls removed-card and route paint retirement.\nUnsupported recordings retire immediately; disabling drops pictures.\nCompatible lane corridors interpolate with current ports pinned. Every\nintermediate uses global clearance checks; incompatible topology or an\nobstructed sample snaps to the solved route. Labels, culling and semantic\ntargets follow that exact displayed route. Curves follow current nodes.",
      "signature": "pub fn animate_layout (mut self, animate : bool) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::axes",
      "name": "axes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Turns off the two rules through the world origin while leaving the dot grid in place.",
      "documentation": "Turns off the two rules through the world origin while leaving the dot\ngrid in place.\n\nThe axes say the origin is a landmark. That is useful on a diagram\nwhose positions carry meaning; a board whose cards were merely laid\nout on a plane has no distinguished zero, so the rules would claim a\nboundary the content does not have.",
      "signature": "pub fn axes (mut self, axes : bool) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::band",
      "name": "band",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Names a region of the canvas, in the same world coordinates the nodes are placed in.",
      "documentation": "Names a region of the canvas, in the same world coordinates the nodes\nare placed in.\n\nBands are drawn above the grid and below every connection and card, in\nthe order they were added, and never intercept a pointer. See\n[`GraphBand`].",
      "signature": "pub fn band (mut self, band : GraphBand) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::bands",
      "name": "bands",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bands (mut self, bands : impl IntoIterator<Item = GraphBand>) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::can_connect",
      "name": "can_connect",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Supplies the caller's connection rules so the graph can preview legal and illegal targets before proposing a connection. Endpoints are always passed as output then input, including gestures begun at input.",
      "documentation": "Supplies the caller's connection rules so the graph can preview legal\nand illegal targets before proposing a connection. Endpoints are\nalways passed as output then input, including gestures begun at input.",
      "signature": "pub fn can_connect (mut self, validator : impl Fn (& GraphEndpoint, & GraphEndpoint) -> bool + 'static,) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::edge",
      "name": "edge",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn edge (mut self, edge : GraphEdge) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::edges",
      "name": "edges",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn edges (mut self, edges : impl IntoIterator<Item = GraphEdge>) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::empty",
      "name": "empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "What to draw when the run has no steps at all. Without one, an empty run draws as an empty canvas, which is only honest when the caller has confirmed that is what it is.",
      "documentation": "What to draw when the run has no steps at all. Without one, an empty\nrun draws as an empty canvas, which is only honest when the caller has\nconfirmed that is what it is.",
      "signature": "pub fn empty (mut self, empty : EmptyState) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::fit",
      "name": "fit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Whether this canvas frames its own content before the reader touches it. See [`GraphFit`].",
      "documentation": "Whether this canvas frames its own content before the reader touches\nit. See [`GraphFit`].",
      "signature": "pub fn fit (mut self, fit : GraphFit) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::fit_clearance",
      "name": "fit_clearance",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "The canvas edge bands covered by the caller's own overlays, in canvas pixels, so framing a fit keeps content clear of them as it already keeps clear of the graph's toolbar and minimap.",
      "documentation": "The canvas edge bands covered by the caller's own overlays, in canvas\npixels, so framing a fit keeps content clear of them as it already keeps\nclear of the graph's toolbar and minimap.",
      "signature": "pub fn fit_clearance (mut self, clearance : Edges<f32>) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::grid",
      "name": "grid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Turns off the dot grid, for a canvas embedded somewhere that already has a texture of its own.",
      "documentation": "Turns off the dot grid, for a canvas embedded somewhere that already\nhas a texture of its own.",
      "signature": "pub fn grid (mut self, grid : bool) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::ground_light",
      "name": "ground_light",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Turns off the ground's top-origin cast, for a canvas whose contents are the lit things on it.",
      "documentation": "Turns off the ground's top-origin cast, for a canvas whose contents\nare the lit things on it.\n\nThe cast says the ground is a material with a light above it, which is\nwhat a diagram of boxes and lines wants. A board of pictures does not:\neach picture carries its own light, and a sheen running down behind\nthem is a second one arriving from somewhere else. Turning it off\nleaves a flat ground and nothing else — the sunken frame and the grid\nare what they were.",
      "signature": "pub fn ground_light (mut self, ground_light : bool) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::interaction",
      "name": "interaction",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn interaction (mut self, interaction : GraphInteraction) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::minimap",
      "name": "minimap",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Draws a small overview of the placed nodes in the corner.",
      "documentation": "Draws a small overview of the placed nodes in the corner.",
      "signature": "pub fn minimap (mut self, show : bool) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::node",
      "name": "node",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn node (mut self, node : GraphNode, x : f32, y : f32) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::offset",
      "name": "offset",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Scrolls the canvas. The caller owns the offset, because panning is a gesture the host binds and a position the host may want to keep.",
      "documentation": "Scrolls the canvas. The caller owns the offset, because panning is a\ngesture the host binds and a position the host may want to keep.",
      "signature": "pub fn offset (mut self, x : f32, y : f32) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& NodeGraphEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::placed",
      "name": "placed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placed (mut self, placed : Placed) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::routing",
      "name": "routing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "How this canvas draws its connections. See [`GraphRouting`].",
      "documentation": "How this canvas draws its connections. See [`GraphRouting`].",
      "signature": "pub fn routing (mut self, routing : GraphRouting) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::source",
      "name": "source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Uses caller-shared metadata and lazy visible-card factories instead of consumed nodes/edges. Subsequent node/placed/edge builders select the legacy path again; the two models are never silently merged.",
      "documentation": "Uses caller-shared metadata and lazy visible-card factories instead of\nconsumed nodes/edges. Subsequent node/placed/edge builders select the\nlegacy path again; the two models are never silently merged.",
      "signature": "pub fn source (mut self, source : GraphSource) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : GraphState) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::toolbar",
      "name": "toolbar",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Seats canvas chrome in the graph's top-left overlay layer.",
      "documentation": "Seats canvas chrome in the graph's top-left overlay layer.\n\nThe graph measures the finished toolbar rather than duplicating its\ncontrol geometry. [`GraphFit::Whole`] then keeps world content out from\nunder it, just as it does for the graph's own minimap. This is the\ncomplete overlay path: paint order and fit geometry cannot disagree,\nand the host supplies no pixel inset.",
      "signature": "pub fn toolbar (mut self, toolbar : CanvasToolbar) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::viewport",
      "name": "viewport",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn viewport (mut self, viewport : GraphViewport) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::zoom",
      "name": "zoom",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn zoom (mut self, zoom : f32) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraph::zoom_range",
      "name": "zoom_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn zoom_range (mut self, min : f32, max : f32) -> Self",
      "cfg": [],
      "target": "NodeGraph"
    },
    {
      "id": "gpui_kit::canvas::graph::NodeGraphEvent",
      "name": "NodeGraphEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "A proposed controlled graph change.",
      "documentation": "A proposed controlled graph change.",
      "signature": "# [doc = \" A proposed controlled graph change.\"] # [derive (Debug, Clone, PartialEq)] pub enum NodeGraphEvent { # [doc = \" Proposes a pan or zoom change.\"] ViewportChanged (GraphViewport), # [doc = \" Proposes the complete caller-owned node selection.\"] SelectionChanged { ids : Vec<SharedString> }, # [doc = \" Proposes a new world-space position for a node.\"] NodeMoved { id : SharedString, position : Point<f32>, }, # [doc = \" Proposes a new world-space size for a node, from its resize handle.\"] # [doc = \"\"] # [doc = \" The graph keeps drawing the node at the size the caller last placed\"] # [doc = \" it at; a caller that accepts the proposal places it with\"] # [doc = \" [`Placed::height`] and [`GraphNode::width`] at the reported size.\"] NodeResized { id : SharedString, size : Size<f32> }, # [doc = \" Proposes deleting a node by business identity.\"] NodeDeleted { id : SharedString }, # [doc = \" Reports a press that landed on the canvas itself rather than on any\"] # [doc = \" node, with where it landed in world space.\"] # [doc = \"\"] # [doc = \" A caller that puts a new node where the reader pointed needs this, and\"] # [doc = \" only the canvas can answer it: it holds every card's measured box,\"] # [doc = \" while a caller testing the point itself would be re-deriving those\"] # [doc = \" boxes from the positions it handed over and would miss whichever card\"] # [doc = \" came out taller than it assumed.\"] SurfacePressed { position : Point<f32>, button : MouseButton, click_count : usize, }, # [doc = \" Proposes a new output-to-input connection.\"] ConnectionRequested { from : GraphEndpoint, to : GraphEndpoint, }, # [doc = \" A connection gesture ended on open canvas rather than another port.\"] # [doc = \" The position uses the same canvas coordinates as placed nodes.\"] ConnectionDropped { from : GraphEndpoint, at : Point<f32> }, # [doc = \" Proposes removing one controlled edge by its stable identity.\"] DisconnectRequested { id : SharedString }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::graph::Placed",
      "name": "Placed",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "A node and where its top left corner sits, in canvas coordinates.",
      "documentation": "A node and where its top left corner sits, in canvas coordinates.",
      "signature": "# [doc = \" A node and where its top left corner sits, in canvas coordinates.\"] pub struct Placed { pub (super) node : GraphNode, pub (super) x : f32, pub (super) y : f32, # [doc = \" A height the caller declared, for a card whose content the node cannot\"] # [doc = \" measure. Left unset, the node measures itself.\"] pub (super) height : Option<f32>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::graph::Placed::height",
      "name": "height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Sets the card's actual logical height. Routing and card layout use this same value. Non-finite and non-positive values leave the height automatic rather than creating geometry the card cannot render.",
      "documentation": "Sets the card's actual logical height. Routing and card layout use this\nsame value. Non-finite and non-positive values leave the height\nautomatic rather than creating geometry the card cannot render.",
      "signature": "pub fn height (mut self, height : f32) -> Self",
      "cfg": [],
      "target": "Placed"
    },
    {
      "id": "gpui_kit::canvas::graph::Placed::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (node : GraphNode, x : f32, y : f32) -> Self",
      "cfg": [],
      "target": "Placed"
    },
    {
      "id": "gpui_kit::canvas::graph::layered_layout",
      "name": "layered_layout",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::graph",
      "path": "gpui_kit::canvas::graph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "Places nodes in layers along the reading direction from a caller-owned edge list. The graph still draws whatever positions it is handed; this is a helper a host may apply before that.",
      "documentation": "Places nodes in layers along the reading direction from a caller-owned\nedge list. The graph still draws whatever positions it is handed; this\nis a helper a host may apply before that.",
      "signature": "pub fn layered_layout<'a> (ids : impl IntoIterator<Item = impl Into<SharedString>>, edges : impl IntoIterator<Item = & 'a GraphEdge>, column_gap : f32, row_gap : f32,) -> Vec<(SharedString, Point<f32>)>",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::group::NodeGroup",
      "name": "NodeGroup",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::group",
      "path": "gpui_kit::canvas::group",
      "source": "crates/gpui-kit/src/canvas/group.rs",
      "summary": "A labelled group drawn over a canvas region the host already decided.",
      "documentation": "A labelled group drawn over a canvas region the host already decided.",
      "signature": "# [doc = \" A labelled group drawn over a canvas region the host already decided.\"] # [derive (IntoElement)] pub struct NodeGroup { ident : Ident, label : SharedString, selected : bool, children : Vec<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::group::NodeGroup::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::group",
      "path": "gpui_kit::canvas::group",
      "source": "crates/gpui-kit/src/canvas/group.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NodeGroup"
    },
    {
      "id": "gpui_kit::canvas::group::NodeGroup::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::group",
      "path": "gpui_kit::canvas::group",
      "source": "crates/gpui-kit/src/canvas/group.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : bool) -> Self",
      "cfg": [],
      "target": "NodeGroup"
    },
    {
      "id": "gpui_kit::canvas::layout::GraphCyclePolicy",
      "name": "GraphCyclePolicy",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::layout",
      "path": "gpui_kit::canvas::layout",
      "source": "crates/gpui-kit/src/canvas/layout.rs",
      "summary": "How a layered layout handles a component without a remaining source.",
      "documentation": "How a layered layout handles a component without a remaining source.",
      "signature": "# [doc = \" How a layered layout handles a component without a remaining source.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum GraphCyclePolicy { # [doc = \" Return an error; no partial layout is returned.\"] Reject, # [doc = \" Place the lexically first remaining node, ignoring its incoming edges.\"] # [doc = \" Such edges can point backwards; this is not a DAG ordering or an SCC layout.\"] BreakIncoming, # [doc = \" Condense strongly connected components into a DAG. Members of each\"] # [doc = \" component share a column, stacked by identity; only internal edges can\"] # [doc = \" run backwards. Unlike BreakIncoming, cycles never delay unrelated DAG\"] # [doc = \" predecessors. Uses iterative traversal, including for deep graphs.\"] Condense, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::layout::GraphLayoutError",
      "name": "GraphLayoutError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::layout",
      "path": "gpui_kit::canvas::layout",
      "source": "crates/gpui-kit/src/canvas/layout.rs",
      "summary": "Invalid input to [`layered_layout_sized`].",
      "documentation": "Invalid input to [`layered_layout_sized`].",
      "signature": "# [doc = \" Invalid input to [`layered_layout_sized`].\"] # [derive (Clone, Debug, PartialEq, Eq)] pub enum GraphLayoutError { DuplicateId (SharedString), InvalidSize (SharedString), UnknownEndpoint (SharedString), InvalidGap, Cycle, Overflow, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::layout::layered_layout_sized",
      "name": "layered_layout_sized",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::layout",
      "path": "gpui_kit::canvas::layout",
      "source": "crates/gpui-kit/src/canvas/layout.rs",
      "summary": "Deterministic left-to-right layout using caller-measured node dimensions.",
      "documentation": "Deterministic left-to-right layout using caller-measured node dimensions.\n\nNode input order never affects the result. Each weakly connected component\ngets its own horizontal band. Columns\nadvance by the widest member plus `column_gap`; rows by actual height plus\n`row_gap`. Component bands are separated by `component_gap`. Duplicate edges\nhave no effect. Gaps must be finite and nonnegative, dimensions finite and\npositive. Unknown endpoints and duplicate identities are errors.\n\n`Reject` and `BreakIncoming` preserve lexical order within layers. `Condense`\nkeeps strongly connected members together and runs eight alternating\nbarycenter sweeps on the condensation DAG, retaining the best adjacent-layer\ncrossing count (never worse than its initial lexical ordering). Long edges\nare not split into dummy vertices; this is not optimal crossing minimization\nor obstacle routing. Cyclic edges under `BreakIncoming` may run backwards.\nThe returned bounds are sorted by identity. No geometry is installed into\nNodeGraph.",
      "signature": "pub fn layered_layout_sized<'a> (nodes : impl IntoIterator<Item = (SharedString, Size<f32>)>, edges : impl IntoIterator<Item = & 'a GraphEdge>, column_gap : f32, row_gap : f32, component_gap : f32, cycles : GraphCyclePolicy,) -> Result<Vec<(SharedString, Bounds<f32>)>, GraphLayoutError>",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::minimap::Minimap",
      "name": "Minimap",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::minimap",
      "path": "gpui_kit::canvas::minimap",
      "source": "crates/gpui-kit/src/canvas/minimap.rs",
      "summary": "A compact overview of host-owned marks.",
      "documentation": "A compact overview of host-owned marks.",
      "signature": "# [doc = \" A compact overview of host-owned marks.\"] # [derive (IntoElement)] pub struct Minimap { ident : Ident, marks : Vec<MinimapMark>, view : Option<MinimapView>, on_pan : Option<PanHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::minimap::Minimap::marks",
      "name": "marks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::minimap",
      "path": "gpui_kit::canvas::minimap",
      "source": "crates/gpui-kit/src/canvas/minimap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn marks (mut self, marks : impl IntoIterator<Item = MinimapMark>) -> Self",
      "cfg": [],
      "target": "Minimap"
    },
    {
      "id": "gpui_kit::canvas::minimap::Minimap::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::minimap",
      "path": "gpui_kit::canvas::minimap",
      "source": "crates/gpui-kit/src/canvas/minimap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Minimap"
    },
    {
      "id": "gpui_kit::canvas::minimap::Minimap::on_pan",
      "name": "on_pan",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::minimap",
      "path": "gpui_kit::canvas::minimap",
      "source": "crates/gpui-kit/src/canvas/minimap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_pan (mut self, handler : impl Fn (f32, f32, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Minimap"
    },
    {
      "id": "gpui_kit::canvas::minimap::Minimap::view",
      "name": "view",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::minimap",
      "path": "gpui_kit::canvas::minimap",
      "source": "crates/gpui-kit/src/canvas/minimap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn view (mut self, view : MinimapView) -> Self",
      "cfg": [],
      "target": "Minimap"
    },
    {
      "id": "gpui_kit::canvas::minimap::MinimapEvent",
      "name": "MinimapEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::minimap",
      "path": "gpui_kit::canvas::minimap",
      "source": "crates/gpui-kit/src/canvas/minimap.rs",
      "summary": "What a click on the overview reported.",
      "documentation": "What a click on the overview reported.",
      "signature": "# [doc = \" What a click on the overview reported.\"] # [derive (Debug, Clone, PartialEq)] pub enum MinimapEvent { Pan { x : f32, y : f32 }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::minimap::MinimapMark",
      "name": "MinimapMark",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::minimap",
      "path": "gpui_kit::canvas::minimap",
      "source": "crates/gpui-kit/src/canvas/minimap.rs",
      "summary": "One already-normalized mark on the overview.",
      "documentation": "One already-normalized mark on the overview.",
      "signature": "# [doc = \" One already-normalized mark on the overview.\"] # [derive (Debug, Clone, PartialEq)] pub struct MinimapMark { pub id : SharedString, pub x : f32, pub y : f32, pub width : f32, pub height : f32, # [doc = \" Optional caller-owned category colour. A mark without one remains\"] # [doc = \" neutral; a mark with one resolves through the same palette tier as a\"] # [doc = \" graph node, so identity survives the change in scale.\"] pub color : Option<ColorChoice>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::minimap::MinimapMark::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::minimap",
      "path": "gpui_kit::canvas::minimap",
      "source": "crates/gpui-kit/src/canvas/minimap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn color (mut self, color : impl Into<ColorChoice>) -> Self",
      "cfg": [],
      "target": "MinimapMark"
    },
    {
      "id": "gpui_kit::canvas::minimap::MinimapMark::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::minimap",
      "path": "gpui_kit::canvas::minimap",
      "source": "crates/gpui-kit/src/canvas/minimap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, x : f32, y : f32, width : f32, height : f32) -> Self",
      "cfg": [],
      "target": "MinimapMark"
    },
    {
      "id": "gpui_kit::canvas::minimap::MinimapView",
      "name": "MinimapView",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::minimap",
      "path": "gpui_kit::canvas::minimap",
      "source": "crates/gpui-kit/src/canvas/minimap.rs",
      "summary": "The visible window, already normalized.",
      "documentation": "The visible window, already normalized.",
      "signature": "# [doc = \" The visible window, already normalized.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct MinimapView { pub x : f32, pub y : f32, pub width : f32, pub height : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::minimap::MinimapView::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::minimap",
      "path": "gpui_kit::canvas::minimap",
      "source": "crates/gpui-kit/src/canvas/minimap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (x : f32, y : f32, width : f32, height : f32) -> Self",
      "cfg": [],
      "target": "MinimapView"
    },
    {
      "id": "gpui_kit::canvas::node::Diff",
      "name": "Diff",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "How much a step changed, in lines.",
      "documentation": "How much a step changed, in lines.\n\nKept apart from [`NodeMetric`] because the two halves are coloured against\neach other, and a reader who sees green and red beside each other is\nentitled to assume they mean added and removed.",
      "signature": "# [doc = \" How much a step changed, in lines.\"] # [doc = \"\"] # [doc = \" Kept apart from [`NodeMetric`] because the two halves are coloured against\"] # [doc = \" each other, and a reader who sees green and red beside each other is\"] # [doc = \" entitled to assume they mean added and removed.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub struct Diff { pub added : usize, pub removed : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::node::Diff::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (self) -> bool",
      "cfg": [],
      "target": "Diff"
    },
    {
      "id": "gpui_kit::canvas::node::Diff::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (added : usize, removed : usize) -> Self",
      "cfg": [],
      "target": "Diff"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode",
      "name": "GraphNode",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "A step of a run, as a card on the canvas.",
      "documentation": "A step of a run, as a card on the canvas.",
      "signature": "# [doc = \" A step of a run, as a card on the canvas.\"] # [derive (IntoElement)] pub struct GraphNode { ident : Ident, title : SharedString, icon : Option<Icon>, thumbnail : Option<AnyElement>, thumbnail_ratio : f32, note : Option<SharedString>, note_lines : usize, # [doc = \" What the step is doing now, for a step that is doing something.\"] action : Option<SharedString>, state : NodeState, # [doc = \" What kind of step this is, in the caller's own terms.\"] category : Option<ColorChoice>, # [doc = \" The word for that kind, when the caller has one.\"] kind : Option<SharedString>, metrics : Vec<NodeMetric>, ports : Vec<GraphPort>, diff : Option<Diff>, status : Option<SharedString>, progress : Option<Progress>, # [doc = \" Caller-owned content seated below the ports: a prompt, a preview, a\"] # [doc = \" control. The card lays it out and keeps its hands off it.\"] content : Vec<AnyElement>, selected : bool, active_glass : GlassPreset, width : f32, display_zoom : f32, declared_height : Option<f32>, pointer_click : bool, compact : bool, on_click : Option<ClickHandler>, on_delete : Option<ClickHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "What the step is doing right now, in the caller's words.",
      "documentation": "What the step is doing right now, in the caller's words.\n\nShown only while the step is busy: a finished step's last action is a\nrecord, and a record belongs in the step's detail, not on a card\nwhose job is to say where the run is now.",
      "signature": "pub fn action (mut self, action : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::active_glass",
      "name": "active_glass",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "Chooses the shared glass preset used while the node is running, selected, or under the pointer.",
      "documentation": "Chooses the shared glass preset used while the node is running,\nselected, or under the pointer.\n\nResting cards remain the zero-snapshot pseudo-glass material. The\npromoted state uses [`Glass`] itself, so blur, refraction, fallback and\nrenderer admission stay one framework contract. Frosted is the default.",
      "signature": "pub fn active_glass (mut self, preset : GlassPreset) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::child",
      "name": "child",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "Seats caller-owned content below the ports.",
      "documentation": "Seats caller-owned content below the ports.\n\nThe card lays the content out at its own width and keeps its hands\noff it: pointer and keyboard that land on the content belong to what\nthe caller mounted, not to the card's activation or the canvas's drag.\nA prompt field, a preview, a slider, and a button are all content.",
      "signature": "pub fn child (mut self, child : impl IntoElement) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::children",
      "name": "children",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn children (mut self, children : impl IntoIterator<Item = impl IntoElement>) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "What kind of step this is, painted as the node's header and its edge stripe.",
      "documentation": "What kind of step this is, painted as the node's header and its edge\nstripe.\n\nCategory is the caller's taxonomy, not this component's: a graph of\nsources, transforms and sinks and a graph of agents, tools and\napprovals both need their kinds told apart at a glance, and neither\nlist belongs in a UI kit. It resolves through the shared\n[`Variant::Light`] tier, so a teal node here and a teal chip elsewhere\nare the same teal.\n\nThis is deliberately separate from [`GraphNode::state`]. What a step\n*is* does not change while it runs, and a node that changed colour on\nfailure would lose the identity a reader was using to find it.",
      "signature": "pub fn color (mut self, category : impl Into<ColorChoice>) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::diff",
      "name": "diff",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "What the step changed. An empty diff is not shown, because \"nothing changed\" and \"no diff was reported\" are different claims and only the caller knows which one it has.",
      "documentation": "What the step changed. An empty diff is not shown, because \"nothing\nchanged\" and \"no diff was reported\" are different claims and only the\ncaller knows which one it has.",
      "signature": "pub fn diff (mut self, diff : Diff) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "Seats a caller-owned category glyph in the leading badge.",
      "documentation": "Seats a caller-owned category glyph in the leading badge.\n\nThe node resolves its wash from [`GraphNode::color`] and never infers a\ncategory from the glyph. A host that has no category icon leaves the\nseat absent rather than receiving a generic substitute.",
      "signature": "pub fn icon (mut self, icon : Icon) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "The word for what this node is — \"image\", \"review\", \"deploy\" — set quietly beside the title.",
      "documentation": "The word for what this node is — \"image\", \"review\", \"deploy\" — set\nquietly beside the title.\n\nIt is a word and not a chip: the badge already carries the category's\ncolour, and a wash behind the word would say the kind twice on every\ncard. A node with a colour and no badge keeps the wash on the card,\nbecause then the wash is the only thing saying it.",
      "signature": "pub fn kind (mut self, kind : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::metric",
      "name": "metric",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "One bare figure the step reports. The value is visible; the label names it on hover and in the semantic tree. For facts that need a visible name, pass a [`NodeMetric::labelled`] figure to [`Self::metrics`].",
      "documentation": "One bare figure the step reports. The value is visible; the label\nnames it on hover and in the semantic tree. For facts that need a\nvisible name, pass a [`NodeMetric::labelled`] figure to [`Self::metrics`].",
      "signature": "pub fn metric (mut self, label : impl Into<SharedString>, value : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::metrics",
      "name": "metrics",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn metrics (mut self, metrics : impl IntoIterator<Item = NodeMetric>) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::note",
      "name": "note",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "A muted, wrapping text body, omitted in compact mode. The semantic description retains the full caller-supplied, display-safe text.",
      "documentation": "A muted, wrapping text body, omitted in compact mode. The semantic\ndescription retains the full caller-supplied, display-safe text.",
      "signature": "pub fn note (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::note_lines",
      "name": "note_lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "Maximum visible note lines (four by default); zero is treated as one. GPUI shapes and ellipsizes the text rather than cropping characters.",
      "documentation": "Maximum visible note lines (four by default); zero is treated as one.\nGPUI shapes and ellipsizes the text rather than cropping characters.",
      "signature": "pub fn note_lines (mut self, n : usize) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::on_click",
      "name": "on_click",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_click (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::port",
      "name": "port",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn port (mut self, port : GraphPort) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::ports",
      "name": "ports",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ports (mut self, ports : impl IntoIterator<Item = GraphPort>) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::progress",
      "name": "progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "How far the step has got, as a bar along the card's top edge.",
      "documentation": "How far the step has got, as a bar along the card's top edge.\n\n`Some(fraction)` fills that much of the edge. `None` says the step is\nworking without knowing how much is left, and the bar sweeps while the\nstep is busy. A step that succeeds fills the bar and lets it go; one\nthat fails keeps the bar where it stopped, in the failure's colour,\nbecause how far it got is part of what went wrong.",
      "signature": "pub fn progress (mut self, fraction : Option<f32>) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : NodeState) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::status",
      "name": "status",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "The caller's own words for the step's state, published on the state dot's help and in the semantic tree.",
      "documentation": "The caller's own words for the step's state, published on the state\ndot's help and in the semantic tree.\n\n[`GraphNode::state`] owns the semantic state, colour and motion, and\nthe dot is what the card shows for it; these words are caller-owned\nbecause products use different operational vocabulary for the same\nstate, and they are not painted on the card because the dot has\nalready said it.",
      "signature": "pub fn status (mut self, status : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::thumbnail",
      "name": "thumbnail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "Supplies the caller-owned visual preview for this node.",
      "documentation": "Supplies the caller-owned visual preview for this node.\n\nThe slot fills the card's content width and keeps a 16:9 ratio unless\n[`GraphNode::thumbnail_ratio`] states another one. The element may be\nan image, a video still, a waveform, or any other visual the caller can\nrender; this component does not fetch or decode it.",
      "signature": "pub fn thumbnail (mut self, thumbnail : impl IntoElement) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::thumbnail_ratio",
      "name": "thumbnail_ratio",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "Sets the thumbnail width divided by its height.",
      "documentation": "Sets the thumbnail width divided by its height.",
      "signature": "pub fn thumbnail_ratio (mut self, ratio : f32) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphNode::width",
      "name": "width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn width (mut self, width : f32) -> Self",
      "cfg": [],
      "target": "GraphNode"
    },
    {
      "id": "gpui_kit::canvas::node::GraphPort",
      "name": "GraphPort",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "A typed connection point on a [`GraphNode`].",
      "documentation": "A typed connection point on a [`GraphNode`].\n\nPort ids must be unique within their node. They are caller-owned identity,\nwhile labels are the caller-owned words shown for that identity.",
      "signature": "# [doc = \" A typed connection point on a [`GraphNode`].\"] # [doc = \"\"] # [doc = \" Port ids must be unique within their node. They are caller-owned identity,\"] # [doc = \" while labels are the caller-owned words shown for that identity.\"] # [derive (Debug, Clone, PartialEq)] pub struct GraphPort { id : SharedString, label : SharedString, direction : PortDirection, side : PortSide, port_type : Option<PortType>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::node::GraphPort::direction",
      "name": "direction",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn direction (& self) -> PortDirection",
      "cfg": [],
      "target": "GraphPort"
    },
    {
      "id": "gpui_kit::canvas::node::GraphPort::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "GraphPort"
    },
    {
      "id": "gpui_kit::canvas::node::GraphPort::input",
      "name": "input",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn input (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GraphPort"
    },
    {
      "id": "gpui_kit::canvas::node::GraphPort::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "GraphPort"
    },
    {
      "id": "gpui_kit::canvas::node::GraphPort::output",
      "name": "output",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn output (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GraphPort"
    },
    {
      "id": "gpui_kit::canvas::node::GraphPort::port_side",
      "name": "port_side",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "Returns the side selected for this port.",
      "documentation": "Returns the side selected for this port.\n\nNamed distinctly from the [`GraphPort::side`] builder because Rust\ndoes not overload methods by argument count.",
      "signature": "pub fn port_side (& self) -> PortSide",
      "cfg": [],
      "target": "GraphPort"
    },
    {
      "id": "gpui_kit::canvas::node::GraphPort::port_type",
      "name": "port_type",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn port_type (& self) -> Option<& PortType>",
      "cfg": [],
      "target": "GraphPort"
    },
    {
      "id": "gpui_kit::canvas::node::GraphPort::side",
      "name": "side",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn side (mut self, side : PortSide) -> Self",
      "cfg": [],
      "target": "GraphPort"
    },
    {
      "id": "gpui_kit::canvas::node::GraphPort::typed",
      "name": "typed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "States what this port carries. The ring takes the type's colour and glyph, and a wire leaving an output of this type takes its colour.",
      "documentation": "States what this port carries. The ring takes the type's colour and\nglyph, and a wire leaving an output of this type takes its colour.",
      "signature": "pub fn typed (mut self, port_type : PortType) -> Self",
      "cfg": [],
      "target": "GraphPort"
    },
    {
      "id": "gpui_kit::canvas::node::NODE_WIDTH",
      "name": "NODE_WIDTH",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "The default width of a node, in pixels.",
      "documentation": "The default width of a node, in pixels.\n\nNodes on one canvas share a width so the columns of a graph line up and the\neye can compare two steps without measuring them.",
      "signature": "pub const NODE_WIDTH: f32",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::node::NodeMetric",
      "name": "NodeMetric",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "One figure a step reports about itself, such as a token count or an elapsed time. Both halves are the caller's words.",
      "documentation": "One figure a step reports about itself, such as a token count or an elapsed\ntime. Both halves are the caller's words.",
      "signature": "# [doc = \" One figure a step reports about itself, such as a token count or an elapsed\"] # [doc = \" time. Both halves are the caller's words.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct NodeMetric { pub label : SharedString, pub value : SharedString, # [doc = \" Whether the label is also visible beside the value.\"] pub labelled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::node::NodeMetric::labelled",
      "name": "labelled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "Shows a muted label beside the normal-colour value.",
      "documentation": "Shows a muted label beside the normal-colour value.",
      "signature": "pub fn labelled (mut self) -> Self",
      "cfg": [],
      "target": "NodeMetric"
    },
    {
      "id": "gpui_kit::canvas::node::NodeMetric::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (label : impl Into<SharedString>, value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NodeMetric"
    },
    {
      "id": "gpui_kit::canvas::node::NodeState",
      "name": "NodeState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "The exact execution state a step reports.",
      "documentation": "The exact execution state a step reports.\n\nQueued, waiting, blocked, refused, failed, cancelled, and unavailable are\nseparate answers. Keeping the full vocabulary here prevents a run adapter\nfrom painting a host refusal as a failure or a wait as an unreached step.",
      "signature": "# [doc = \" The exact execution state a step reports.\"] # [doc = \"\"] # [doc = \" Queued, waiting, blocked, refused, failed, cancelled, and unavailable are\"] # [doc = \" separate answers. Keeping the full vocabulary here prevents a run adapter\"] # [doc = \" from painting a host refusal as a failure or a wait as an unreached step.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum NodeState { # [doc = \" Not reached yet.\"] # [default] Pending, Idle, Queued, Starting, Running, Waiting, Blocked, Succeeded, Partial, Failed, # [doc = \" The host declined to run it. Shown as a refusal, never as a failure and\"] # [doc = \" never as an empty step.\"] Refused, Cancelling, Cancelled, TimedOut, Unavailable, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::node::NodeState::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn color (self, theme : & gpui_kit_theme::Theme) -> Hsla",
      "cfg": [],
      "target": "NodeState"
    },
    {
      "id": "gpui_kit::canvas::node::PortDirection",
      "name": "PortDirection",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "Whether a port receives or produces data.",
      "documentation": "Whether a port receives or produces data.",
      "signature": "# [doc = \" Whether a port receives or produces data.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum PortDirection { # [default] Input, Output, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::node::PortDirection::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "PortDirection"
    },
    {
      "id": "gpui_kit::canvas::node::PortType",
      "name": "PortType",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "What a port carries, in the caller's taxonomy.",
      "documentation": "What a port carries, in the caller's taxonomy.\n\nA type is a colour and, optionally, a glyph. The colour is the one fact a\nreader uses to tell at a glance which sockets can be joined and which wire\ncarries what: a connection inherits the colour of the port it leaves. The\nid is the caller's own vocabulary for the type — `\"image\"`, `\"tensor\"`,\n`\"text\"` — and is published on the port, never invented here.",
      "signature": "# [doc = \" What a port carries, in the caller's taxonomy.\"] # [doc = \"\"] # [doc = \" A type is a colour and, optionally, a glyph. The colour is the one fact a\"] # [doc = \" reader uses to tell at a glance which sockets can be joined and which wire\"] # [doc = \" carries what: a connection inherits the colour of the port it leaves. The\"] # [doc = \" id is the caller's own vocabulary for the type — `\\\"image\\\"`, `\\\"tensor\\\"`,\"] # [doc = \" `\\\"text\\\"` — and is published on the port, never invented here.\"] # [derive (Debug, Clone, PartialEq)] pub struct PortType { id : SharedString, glyph : Option<Icon>, color : ColorChoice, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::node::PortType::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn color (& self) -> & ColorChoice",
      "cfg": [],
      "target": "PortType"
    },
    {
      "id": "gpui_kit::canvas::node::PortType::glyph",
      "name": "glyph",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "Seats a glyph inside the port ring, for a type whose colour alone is not enough to tell it from its neighbours.",
      "documentation": "Seats a glyph inside the port ring, for a type whose colour alone is\nnot enough to tell it from its neighbours.",
      "signature": "pub fn glyph (mut self, glyph : Icon) -> Self",
      "cfg": [],
      "target": "PortType"
    },
    {
      "id": "gpui_kit::canvas::node::PortType::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (& self) -> Option<Icon>",
      "cfg": [],
      "target": "PortType"
    },
    {
      "id": "gpui_kit::canvas::node::PortType::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "PortType"
    },
    {
      "id": "gpui_kit::canvas::node::PortType::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::node",
      "path": "gpui_kit::canvas::node",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, color : impl Into<ColorChoice>) -> Self",
      "cfg": [],
      "target": "PortType"
    },
    {
      "id": "gpui_kit::canvas::reexport-1",
      "name": "band :: GraphBand",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas",
      "path": "gpui_kit::canvas",
      "source": "crates/gpui-kit/src/canvas/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use band::GraphBand;",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::reexport-2",
      "name": "edge :: { EdgeKind , EdgeMarker , EdgeState , GraphEdge , GraphEndpoint , GraphRouting , PortSide }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas",
      "path": "gpui_kit::canvas",
      "source": "crates/gpui-kit/src/canvas/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use edge::{ EdgeKind, EdgeMarker, EdgeState, GraphEdge, GraphEndpoint, GraphRouting, PortSide };",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::reexport-3",
      "name": "graph :: { GraphFit , GraphInteraction , GraphState , GraphViewport , NodeGraph , NodeGraphEvent , Placed , layered_layout , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas",
      "path": "gpui_kit::canvas",
      "source": "crates/gpui-kit/src/canvas/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use graph::{ GraphFit, GraphInteraction, GraphState, GraphViewport, NodeGraph, NodeGraphEvent, Placed, layered_layout, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::reexport-4",
      "name": "group :: NodeGroup",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas",
      "path": "gpui_kit::canvas",
      "source": "crates/gpui-kit/src/canvas/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use group::NodeGroup;",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::reexport-5",
      "name": "layout :: { GraphCyclePolicy , GraphLayoutError , layered_layout_sized }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas",
      "path": "gpui_kit::canvas",
      "source": "crates/gpui-kit/src/canvas/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use layout::{ GraphCyclePolicy, GraphLayoutError, layered_layout_sized };",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::reexport-6",
      "name": "minimap :: { Minimap , MinimapEvent , MinimapMark , MinimapView }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas",
      "path": "gpui_kit::canvas",
      "source": "crates/gpui-kit/src/canvas/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use minimap::{ Minimap, MinimapEvent, MinimapMark, MinimapView };",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::reexport-7",
      "name": "node :: { Diff , GraphNode , GraphPort , NODE_WIDTH , NodeMetric , NodeState , PortDirection , PortType , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas",
      "path": "gpui_kit::canvas",
      "source": "crates/gpui-kit/src/canvas/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use node::{ Diff, GraphNode, GraphPort, NODE_WIDTH, NodeMetric, NodeState, PortDirection, PortType, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::reexport-8",
      "name": "source :: { GraphSource , GraphSourceError }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas",
      "path": "gpui_kit::canvas",
      "source": "crates/gpui-kit/src/canvas/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use source::{ GraphSource, GraphSourceError };",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::reexport-9",
      "name": "toolbar :: { CanvasToolbar , CanvasToolbarAction , CanvasToolbarEvent }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas",
      "path": "gpui_kit::canvas",
      "source": "crates/gpui-kit/src/canvas/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use toolbar::{ CanvasToolbar, CanvasToolbarAction, CanvasToolbarEvent };",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::source::GraphSource",
      "name": "GraphSource",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::source",
      "path": "gpui_kit::canvas::source",
      "source": "crates/gpui-kit/src/canvas/source.rs",
      "summary": "Reusable graph data. `GraphNode` remains the metadata authority; explicit finite sizes make offscreen nodes routable without mounting their content. One-use children/thumbnails are rejected; use lazy factory setters instead. Edges may name absent nodes and remain caller-owned through node removal.",
      "documentation": "Reusable graph data. `GraphNode` remains the metadata authority; explicit\nfinite sizes make offscreen nodes routable without mounting their content.\nOne-use children/thumbnails are rejected; use lazy factory setters instead.\nEdges may name absent nodes and remain caller-owned through node removal.",
      "signature": "# [doc = \" Reusable graph data. `GraphNode` remains the metadata authority; explicit\"] # [doc = \" finite sizes make offscreen nodes routable without mounting their content.\"] # [doc = \" One-use children/thumbnails are rejected; use lazy factory setters instead.\"] # [doc = \" Edges may name absent nodes and remain caller-owned through node removal.\"] # [derive (Clone, Default)] pub struct GraphSource { pub (super) data : Rc<RefCell<SourceData>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::source::GraphSource::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::source",
      "path": "gpui_kit::canvas::source",
      "source": "crates/gpui-kit/src/canvas/source.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "GraphSource"
    },
    {
      "id": "gpui_kit::canvas::source::GraphSource::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::source",
      "path": "gpui_kit::canvas::source",
      "source": "crates/gpui-kit/src/canvas/source.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "GraphSource"
    },
    {
      "id": "gpui_kit::canvas::source::GraphSource::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::source",
      "path": "gpui_kit::canvas::source",
      "source": "crates/gpui-kit/src/canvas/source.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (nodes : impl IntoIterator<Item = Placed>, edges : impl IntoIterator<Item = GraphEdge>,) -> Result<Self, GraphSourceError>",
      "cfg": [],
      "target": "GraphSource"
    },
    {
      "id": "gpui_kit::canvas::source::GraphSource::remove",
      "name": "remove",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::source",
      "path": "gpui_kit::canvas::source",
      "source": "crates/gpui-kit/src/canvas/source.rs",
      "summary": "Removes this identity and its factories, not the caller's edges. A reinserted identity is new content at the end of the source order.",
      "documentation": "Removes this identity and its factories, not the caller's edges. A\nreinserted identity is new content at the end of the source order.",
      "signature": "pub fn remove (& self, id : & str) -> bool",
      "cfg": [],
      "target": "GraphSource"
    },
    {
      "id": "gpui_kit::canvas::source::GraphSource::replace_edges",
      "name": "replace_edges",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::source",
      "path": "gpui_kit::canvas::source",
      "source": "crates/gpui-kit/src/canvas/source.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn replace_edges (& self, edges : impl IntoIterator<Item = GraphEdge>,) -> Result<(), GraphSourceError>",
      "cfg": [],
      "target": "GraphSource"
    },
    {
      "id": "gpui_kit::canvas::source::GraphSource::revision",
      "name": "revision",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::source",
      "path": "gpui_kit::canvas::source",
      "source": "crates/gpui-kit/src/canvas/source.rs",
      "summary": "Monotonic accepted-mutation revision shared by every cloned handle.",
      "documentation": "Monotonic accepted-mutation revision shared by every cloned handle.",
      "signature": "pub fn revision (& self) -> u64",
      "cfg": [],
      "target": "GraphSource"
    },
    {
      "id": "gpui_kit::canvas::source::GraphSource::same_source",
      "name": "same_source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::source",
      "path": "gpui_kit::canvas::source",
      "source": "crates/gpui-kit/src/canvas/source.rs",
      "summary": "Identity is stable across mutations, and distinct from equal data.",
      "documentation": "Identity is stable across mutations, and distinct from equal data.",
      "signature": "pub fn same_source (& self, other : & Self) -> bool",
      "cfg": [],
      "target": "GraphSource"
    },
    {
      "id": "gpui_kit::canvas::source::GraphSource::set_content",
      "name": "set_content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::source",
      "path": "gpui_kit::canvas::source",
      "source": "crates/gpui-kit/src/canvas/source.rs",
      "summary": "Runs only when this card mounts. Captured host data remains caller-owned; replace the factory after changing its data to publish a new revision.",
      "documentation": "Runs only when this card mounts. Captured host data remains caller-owned;\nreplace the factory after changing its data to publish a new revision.",
      "signature": "pub fn set_content (& self, id : & str, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Result<(), GraphSourceError>",
      "cfg": [],
      "target": "GraphSource"
    },
    {
      "id": "gpui_kit::canvas::source::GraphSource::set_thumbnail",
      "name": "set_thumbnail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::source",
      "path": "gpui_kit::canvas::source",
      "source": "crates/gpui-kit/src/canvas/source.rs",
      "summary": "Lazy thumbnail with the canonical node's thumbnail aspect ratio.",
      "documentation": "Lazy thumbnail with the canonical node's thumbnail aspect ratio.",
      "signature": "pub fn set_thumbnail (& self, id : & str, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Result<(), GraphSourceError>",
      "cfg": [],
      "target": "GraphSource"
    },
    {
      "id": "gpui_kit::canvas::source::GraphSource::upsert",
      "name": "upsert",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::source",
      "path": "gpui_kit::canvas::source",
      "source": "crates/gpui-kit/src/canvas/source.rs",
      "summary": "Replaces canonical metadata while preserving existing factory ownership and insertion order. New identities append. Failed validation is atomic.",
      "documentation": "Replaces canonical metadata while preserving existing factory ownership\nand insertion order. New identities append. Failed validation is atomic.",
      "signature": "pub fn upsert (& self, placed : Placed) -> Result<(), GraphSourceError>",
      "cfg": [],
      "target": "GraphSource"
    },
    {
      "id": "gpui_kit::canvas::source::GraphSourceError",
      "name": "GraphSourceError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::source",
      "path": "gpui_kit::canvas::source",
      "source": "crates/gpui-kit/src/canvas/source.rs",
      "summary": "Rejected source mutation. Validation is atomic: neither metadata, factory ownership, ordering nor revision changes on error.",
      "documentation": "Rejected source mutation. Validation is atomic: neither metadata, factory\nownership, ordering nor revision changes on error.",
      "signature": "# [doc = \" Rejected source mutation. Validation is atomic: neither metadata, factory\"] # [doc = \" ownership, ordering nor revision changes on error.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum GraphSourceError { DuplicateNode (SharedString), DuplicateEdge (SharedString), DuplicatePort { node : SharedString, port : SharedString, }, MissingNode (SharedString), InvalidGeometry (SharedString), MissingHeight (SharedString), OpaqueContent (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::toolbar::CanvasToolbar",
      "name": "CanvasToolbar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::toolbar",
      "path": "gpui_kit::canvas::toolbar",
      "source": "crates/gpui-kit/src/canvas/toolbar.rs",
      "summary": "Compact canvas chrome: a host-formatted zoom and the intents the host can actually carry out.",
      "documentation": "Compact canvas chrome: a host-formatted zoom and the intents the host can\nactually carry out.",
      "signature": "# [doc = \" Compact canvas chrome: a host-formatted zoom and the intents the host can\"] # [doc = \" actually carry out.\"] # [derive (IntoElement)] pub struct CanvasToolbar { ident : Ident, zoom : SharedString, actions : Vec<CanvasToolbarAction>, snap : bool, glass : Option<GlassPreset>, disabled : bool, on_action : Option<ActionHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::toolbar::CanvasToolbar::actions",
      "name": "actions",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::toolbar",
      "path": "gpui_kit::canvas::toolbar",
      "source": "crates/gpui-kit/src/canvas/toolbar.rs",
      "summary": "The actions this toolbar offers, in the order it shows them.",
      "documentation": "The actions this toolbar offers, in the order it shows them.\n\nThe default is all three, which is the toolbar a graph editor wants.\nAn inspect-only canvas cannot snap or rearrange anything, and a chip\nthat reports an intent its host will not act on is a promise the\nreader is entitled to believe. Naming the actions is how a host says\nwhich promises it can keep; naming none leaves the zoom on its own,\nwhich is a legitimate readout.\n\nRepeats are dropped rather than drawn twice.",
      "signature": "pub fn actions (mut self, actions : impl IntoIterator<Item = CanvasToolbarAction>) -> Self",
      "cfg": [],
      "target": "CanvasToolbar"
    },
    {
      "id": "gpui_kit::canvas::toolbar::CanvasToolbar::glass",
      "name": "glass",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::toolbar",
      "path": "gpui_kit::canvas::toolbar",
      "source": "crates/gpui-kit/src/canvas/toolbar.rs",
      "summary": "Places this floating chrome on one of the kit's glass materials.",
      "documentation": "Places this floating chrome on one of the kit's glass materials.\n\nThe preset resolves exclusively through the theme's `effect.glass*`\ntokens and the shared [`Glass`] layer, including its renderer fallback\nand adaptive readability tint. Without this opt-in the toolbar keeps\nits ordinary opaque overlay surface.\n\n# Prefer a preset that scatters\n\nA canvas is line work — a grid, an axis rule, an edge, a region\nboundary — and this toolbar floats over it, so whatever is behind it is\na hairline sooner or later. [`GlassPreset::Liquid`] and\n[`GlassPreset::Lens`] are clear by default: their blur is zero, so a\nline arrives on the far side at full contrast and crosses the\ntoolbar's own readout. That is the material behaving as documented,\nand it is still a toolbar whose zoom percentage has a rule through it.\n\nAn adaptive tint cannot answer this. Tint darkens what shows through;\nit does not remove the *structure* of a line crossing a glyph, and a\ntint heavy enough to hide one is no longer glass. Scattering removes\nthe structure, which is the thing in the way. Reach for\n[`GlassPreset::Frosted`], or compose blur onto another preset with\n[`Glass::blur`], unless the surface behind this toolbar is known not to\ncarry line work.",
      "signature": "pub fn glass (mut self, preset : GlassPreset) -> Self",
      "cfg": [],
      "target": "CanvasToolbar"
    },
    {
      "id": "gpui_kit::canvas::toolbar::CanvasToolbar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::toolbar",
      "path": "gpui_kit::canvas::toolbar",
      "source": "crates/gpui-kit/src/canvas/toolbar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, zoom : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CanvasToolbar"
    },
    {
      "id": "gpui_kit::canvas::toolbar::CanvasToolbar::on_action",
      "name": "on_action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::toolbar",
      "path": "gpui_kit::canvas::toolbar",
      "source": "crates/gpui-kit/src/canvas/toolbar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_action (mut self, handler : impl Fn (CanvasToolbarAction, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "CanvasToolbar"
    },
    {
      "id": "gpui_kit::canvas::toolbar::CanvasToolbar::snap",
      "name": "snap",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::toolbar",
      "path": "gpui_kit::canvas::toolbar",
      "source": "crates/gpui-kit/src/canvas/toolbar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn snap (mut self, snap : bool) -> Self",
      "cfg": [],
      "target": "CanvasToolbar"
    },
    {
      "id": "gpui_kit::canvas::toolbar::CanvasToolbarAction",
      "name": "CanvasToolbarAction",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::toolbar",
      "path": "gpui_kit::canvas::toolbar",
      "source": "crates/gpui-kit/src/canvas/toolbar.rs",
      "summary": "A canvas chrome action the host already knows how to apply.",
      "documentation": "A canvas chrome action the host already knows how to apply.",
      "signature": "# [doc = \" A canvas chrome action the host already knows how to apply.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum CanvasToolbarAction { Fit, Snap, Arrange, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::canvas::toolbar::CanvasToolbarAction::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::toolbar",
      "path": "gpui_kit::canvas::toolbar",
      "source": "crates/gpui-kit/src/canvas/toolbar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "CanvasToolbarAction"
    },
    {
      "id": "gpui_kit::canvas::toolbar::CanvasToolbarEvent",
      "name": "CanvasToolbarEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "canvas::toolbar",
      "path": "gpui_kit::canvas::toolbar",
      "source": "crates/gpui-kit/src/canvas/toolbar.rs",
      "summary": "What the toolbar reported.",
      "documentation": "What the toolbar reported.",
      "signature": "# [doc = \" What the toolbar reported.\"] # [derive (Debug, Clone, PartialEq)] pub enum CanvasToolbarEvent { Action (CanvasToolbarAction), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::agent_document::AgentBlockKind",
      "name": "AgentBlockKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "The semantic kind of one document block.",
      "documentation": "The semantic kind of one document block.",
      "signature": "# [doc = \" The semantic kind of one document block.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum AgentBlockKind { Text, Markdown, Code, ToolCall, Diff, Artifact, Schema, Chart, Image, Notice, Choice, Custom, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::agent_document::AgentBlockKind::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (self) -> & 'static str",
      "cfg": [],
      "target": "AgentBlockKind"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentBlockKind::is_evidence",
      "name": "is_evidence",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "Supporting evidence in a transcript, rather than the answer or a media/result surface that deserves its own presentation.",
      "documentation": "Supporting evidence in a transcript, rather than the answer or a\nmedia/result surface that deserves its own presentation.",
      "signature": "pub fn is_evidence (self) -> bool",
      "cfg": [],
      "target": "AgentBlockKind"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocument",
      "name": "AgentDocument",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "A read-only sequence of typed agent output blocks.",
      "documentation": "A read-only sequence of typed agent output blocks.",
      "signature": "# [doc = \" A read-only sequence of typed agent output blocks.\"] # [derive (IntoElement)] pub struct AgentDocument { ident : Ident, state : AgentDocumentState, blocks : Vec<AgentDocumentBlock>, visible_rows : Option<usize>, on_event : Option<EventHandler>, markdown_options : Option<MarkdownOptions>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocument::block",
      "name": "block",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn block (mut self, block : AgentDocumentBlock) -> Self",
      "cfg": [],
      "target": "AgentDocument"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocument::blocks",
      "name": "blocks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn blocks (mut self, blocks : impl IntoIterator<Item = AgentDocumentBlock>) -> Self",
      "cfg": [],
      "target": "AgentDocument"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocument::configure_markdown",
      "name": "configure_markdown",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "Configures each mounted Markdown row with host-owned image resolution, highlighting or block plugins. The block id is the caller's identity, independent of revision and virtualization. The callback is repeatable.",
      "documentation": "Configures each mounted Markdown row with host-owned image resolution,\nhighlighting or block plugins. The block id is the caller's identity,\nindependent of revision and virtualization. The callback is repeatable.",
      "signature": "pub fn configure_markdown (mut self, configure : impl Fn (& SharedString, Markdown) -> Markdown + 'static,) -> Self",
      "cfg": [],
      "target": "AgentDocument"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocument::duplicate_ids",
      "name": "duplicate_ids",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "Repeated block identities are returned exactly as supplied. The host decides whether repeated records are revisions, duplicates, or distinct content and gives them distinct ids where appropriate.",
      "documentation": "Repeated block identities are returned exactly as supplied. The host\ndecides whether repeated records are revisions, duplicates, or distinct\ncontent and gives them distinct ids where appropriate.",
      "signature": "pub fn duplicate_ids (& self) -> Vec<SharedString>",
      "cfg": [],
      "target": "AgentDocument"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocument::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "AgentDocument"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocument::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& AgentDocumentEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "AgentDocument"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocument::remeasure_block",
      "name": "remeasure_block",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "Invalidates geometry for this caller-owned block after asynchronous image resolution or a native plugin changes size. Unrelated rows and the current scroll anchor stay intact; semantic ids do not change.",
      "documentation": "Invalidates geometry for this caller-owned block after asynchronous\nimage resolution or a native plugin changes size. Unrelated rows and\nthe current scroll anchor stay intact; semantic ids do not change.",
      "signature": "pub fn remeasure_block (ident : & Ident, block : & str, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "AgentDocument"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocument::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : AgentDocumentState) -> Self",
      "cfg": [],
      "target": "AgentDocument"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocument::virtualized",
      "name": "virtualized",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "Lays out only the blocks that are on screen, in a frame this many blocks tall.",
      "documentation": "Lays out only the blocks that are on screen, in a frame this many\nblocks tall.\n\nA conversation is not a document that happens to be long. It is a\nsurface that grows all day, is scrolled back through, and whose oldest\nblocks are a diff of four hundred lines and a tool call with a table in\nit. Drawn as a column, every one of those is laid out on every frame,\nincluding while the newest block is still arriving a token at a time —\nso the cost of showing the *last* block grows with everything said\nbefore it, which is the shape of a surface that gets slower the longer\nthe conversation is useful.\n\nVirtualized, the cost of a frame is the cost of the screenful. That is\nwhy a block holds a way to build its element rather than a built one:\nthere is no other way to draw a block that scrolled off and came back.\n\nBlocks are matched across frames by their ids, so a block whose text\ngrew re-measures that block and nothing else. Without that a streaming\nreply would discard every height the list had learned on every token,\nand the scrollbar would shudder for as long as the answer took to\narrive.\n\nThe trade is the usual one: a block that has never been on screen has\nno bounds and publishes nothing, so a copy across the whole document\nreaches what was mounted rather than everything that exists.",
      "signature": "pub fn virtualized (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "AgentDocument"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocument::work",
      "name": "work",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "Reports actual retained planning work for this virtualized identity.",
      "documentation": "Reports actual retained planning work for this virtualized identity.",
      "signature": "pub fn work (ident : & Ident, window : & Window, cx : & mut App) -> AgentDocumentWork",
      "cfg": [],
      "target": "AgentDocument"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock",
      "name": "AgentDocumentBlock",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "One stable part of an [`AgentDocument`].",
      "documentation": "One stable part of an [`AgentDocument`].",
      "signature": "# [doc = \" One stable part of an [`AgentDocument`].\"] pub struct AgentDocumentBlock { id : SharedString, revision : u64, kind : AgentBlockKind, label : Option<SharedString>, streaming : bool, body : AgentBlockBody, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::artifact",
      "name": "artifact",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn artifact (id : impl Into<SharedString>, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::chart",
      "name": "chart",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn chart (id : impl Into<SharedString>, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::choice",
      "name": "choice",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn choice (id : impl Into<SharedString>, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::code",
      "name": "code",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn code (id : impl Into<SharedString>, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::custom",
      "name": "custom",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn custom (id : impl Into<SharedString>, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::diff",
      "name": "diff",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn diff (id : impl Into<SharedString>, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::element",
      "name": "element",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "A typed block whose existing component owns its presentation.",
      "documentation": "A typed block whose existing component owns its presentation.\n\nTakes a way to build the element rather than a built one, so the block\ncan be drawn again when the reader scrolls back to it. See\n[`AgentDocument::virtualized`] for why that is not optional.",
      "signature": "pub fn element (id : impl Into<SharedString>, kind : AgentBlockKind, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::image",
      "name": "image",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn image (id : impl Into<SharedString>, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn kind (& self) -> AgentBlockKind",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "A host-authored heading for a non-prose block.",
      "documentation": "A host-authored heading for a non-prose block.",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::markdown",
      "name": "markdown",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "Safe read-only Markdown under [`Markdown`]'s host-owned link and image policy.",
      "documentation": "Safe read-only Markdown under [`Markdown`]'s host-owned link and image\npolicy.",
      "signature": "pub fn markdown (id : impl Into<SharedString>, source : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::notice",
      "name": "notice",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "A host-authored status or warning inside the document.",
      "documentation": "A host-authored status or warning inside the document.",
      "signature": "pub fn notice (id : impl Into<SharedString>, message : impl Into<SharedString>, tone : Tone,) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::revision",
      "name": "revision",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "The caller's monotonic version of this block.",
      "documentation": "The caller's monotonic version of this block.",
      "signature": "pub fn revision (mut self, revision : u64) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::schema",
      "name": "schema",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn schema (id : impl Into<SharedString>, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::streaming",
      "name": "streaming",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "Marks this block as still arriving without changing what has arrived.",
      "documentation": "Marks this block as still arriving without changing what has arrived.",
      "signature": "pub fn streaming (mut self, streaming : bool) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "Plain selectable text, with no markup interpreted.",
      "documentation": "Plain selectable text, with no markup interpreted.",
      "signature": "pub fn text (id : impl Into<SharedString>, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentBlock::tool_call",
      "name": "tool_call",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tool_call (id : impl Into<SharedString>, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "AgentDocumentBlock"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentEvent",
      "name": "AgentDocumentEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "An action originating in a typed document block.",
      "documentation": "An action originating in a typed document block.",
      "signature": "# [doc = \" An action originating in a typed document block.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum AgentDocumentEvent { Markdown { block : SharedString, event : MarkdownEvent, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentState",
      "name": "AgentDocumentState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "What is known about the document as a whole.",
      "documentation": "What is known about the document as a whole.",
      "signature": "# [doc = \" What is known about the document as a whole.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum AgentDocumentState { Idle (SharedString), Loading (SharedString), # [default] Ready, Empty (SharedString), Unavailable (SharedString), Failed (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentState::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "AgentDocumentState"
    },
    {
      "id": "gpui_kit::content::agent_document::AgentDocumentWork",
      "name": "AgentDocumentWork",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::agent_document",
      "path": "gpui_kit::content::agent_document",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "Work performed by a mounted virtual document's retained plans. Input checks are linear comparisons of caller records, not byte scans. Parser totals cover currently retained Markdown blocks. These counters do not include GPUI layout, key-vector copies into List, or wall-clock time.",
      "documentation": "Work performed by a mounted virtual document's retained plans.\nInput checks are linear comparisons of caller records, not byte scans.\nParser totals cover currently retained Markdown blocks. These counters do\nnot include GPUI layout, key-vector copies into List, or wall-clock time.",
      "signature": "# [doc = \" Work performed by a mounted virtual document's retained plans.\"] # [doc = \" Input checks are linear comparisons of caller records, not byte scans.\"] # [doc = \" Parser totals cover currently retained Markdown blocks. These counters do\"] # [doc = \" not include GPUI layout, key-vector copies into List, or wall-clock time.\"] # [derive (Debug, Default, Clone, Copy, PartialEq, Eq)] pub struct AgentDocumentWork { pub input_checks : usize, pub planned_rows : usize, pub parser : crate::content::markdown::MarkdownWork, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::ansi::AnsiRun",
      "name": "AnsiRun",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::ansi",
      "path": "gpui_kit::content::ansi",
      "source": "crates/gpui-kit/src/content/ansi.rs",
      "summary": "One coloured run of the stripped text.",
      "documentation": "One coloured run of the stripped text.",
      "signature": "# [doc = \" One coloured run of the stripped text.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct AnsiRun { pub range : Range<usize>, # [doc = \" An index into [`Theme::terminal_ansi`](gpui_kit_theme::Colors::terminal_ansi), when the run named a colour.\"] pub color : Option<u8>, pub bold : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::ansi::ansi_color",
      "name": "ansi_color",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::ansi",
      "path": "gpui_kit::content::ansi",
      "source": "crates/gpui-kit/src/content/ansi.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ansi_color (index : u8, theme : & Theme) -> Option<Hsla>",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::ansi::ansi_highlights",
      "name": "ansi_highlights",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::ansi",
      "path": "gpui_kit::content::ansi",
      "source": "crates/gpui-kit/src/content/ansi.rs",
      "summary": "Highlight styles for the runs [`strip_ansi`] produced, using the theme's sixteen ANSI colours.",
      "documentation": "Highlight styles for the runs [`strip_ansi`] produced, using the theme's\nsixteen ANSI colours.",
      "signature": "pub fn ansi_highlights (runs : & [AnsiRun], theme : & Theme) -> Vec<(Range<usize>, HighlightStyle)>",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::ansi::strip_ansi",
      "name": "strip_ansi",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::ansi",
      "path": "gpui_kit::content::ansi",
      "source": "crates/gpui-kit/src/content/ansi.rs",
      "summary": "Strips SGR sequences and returns the readable text plus the runs they coloured.",
      "documentation": "Strips SGR sequences and returns the readable text plus the runs they\ncoloured.",
      "signature": "pub fn strip_ansi (raw : & str) -> (SharedString, Vec<AnsiRun>)",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::browser::BrowserPanel",
      "name": "BrowserPanel",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::browser",
      "path": "gpui_kit::content::browser",
      "source": "crates/gpui-kit/src/content/browser.rs",
      "summary": "A framed web view: address, controls, and the rectangle a page goes in.",
      "documentation": "A framed web view: address, controls, and the rectangle a page goes in.",
      "signature": "# [doc = \" A framed web view: address, controls, and the rectangle a page goes in.\"] # [derive (IntoElement)] pub struct BrowserPanel { ident : Ident, # [doc = \" The address as the host reports it. The panel never edits or completes\"] # [doc = \" it, because what a typed string resolves to is the engine's decision.\"] url : SharedString, # [doc = \" Whether the host supplied an address at all. An empty string and \\\"no\"] # [doc = \" address yet\\\" are different, and only one of them is worth drawing an\"] # [doc = \" empty bar for.\"] url_set : bool, state : ViewportState, # [doc = \" Whether history has anywhere to go. A control with nowhere to go is\"] # [doc = \" disabled, and a disabled control installs no handler.\"] can_go_back : bool, can_go_forward : bool, on_back : Option<Action>, on_forward : Option<Action>, on_reload : Option<Action>, # [doc = \" The host's own painted surface for the page.\"] viewport : Option<AnyElement>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::browser::BrowserPanel::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::browser",
      "path": "gpui_kit::content::browser",
      "source": "crates/gpui-kit/src/content/browser.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "BrowserPanel"
    },
    {
      "id": "gpui_kit::content::browser::BrowserPanel::on_back",
      "name": "on_back",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::browser",
      "path": "gpui_kit::content::browser",
      "source": "crates/gpui-kit/src/content/browser.rs",
      "summary": "Enables the back control and gives it somewhere to go.",
      "documentation": "Enables the back control and gives it somewhere to go.",
      "signature": "pub fn on_back (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "BrowserPanel"
    },
    {
      "id": "gpui_kit::content::browser::BrowserPanel::on_forward",
      "name": "on_forward",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::browser",
      "path": "gpui_kit::content::browser",
      "source": "crates/gpui-kit/src/content/browser.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_forward (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "BrowserPanel"
    },
    {
      "id": "gpui_kit::content::browser::BrowserPanel::on_reload",
      "name": "on_reload",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::browser",
      "path": "gpui_kit::content::browser",
      "source": "crates/gpui-kit/src/content/browser.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_reload (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "BrowserPanel"
    },
    {
      "id": "gpui_kit::content::browser::BrowserPanel::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::browser",
      "path": "gpui_kit::content::browser",
      "source": "crates/gpui-kit/src/content/browser.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : ViewportState) -> Self",
      "cfg": [],
      "target": "BrowserPanel"
    },
    {
      "id": "gpui_kit::content::browser::BrowserPanel::url",
      "name": "url",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::browser",
      "path": "gpui_kit::content::browser",
      "source": "crates/gpui-kit/src/content/browser.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn url (mut self, url : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "BrowserPanel"
    },
    {
      "id": "gpui_kit::content::browser::BrowserPanel::viewport",
      "name": "viewport",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::browser",
      "path": "gpui_kit::content::browser",
      "source": "crates/gpui-kit/src/content/browser.rs",
      "summary": "The surface the host paints the page onto.",
      "documentation": "The surface the host paints the page onto.",
      "signature": "pub fn viewport (mut self, viewport : impl IntoElement) -> Self",
      "cfg": [],
      "target": "BrowserPanel"
    },
    {
      "id": "gpui_kit::content::browser::ViewportState",
      "name": "ViewportState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::browser",
      "path": "gpui_kit::content::browser",
      "source": "crates/gpui-kit/src/content/browser.rs",
      "summary": "What is behind the panel right now.",
      "documentation": "What is behind the panel right now.\n\nFive separate answers, kept separate. `Ready` is the only one that shows a\npage, and the four that do not each say a different thing about why.",
      "signature": "# [doc = \" What is behind the panel right now.\"] # [doc = \"\"] # [doc = \" Five separate answers, kept separate. `Ready` is the only one that shows a\"] # [doc = \" page, and the four that do not each say a different thing about why.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum ViewportState { # [doc = \" A page is on its way.\"] Loading, # [doc = \" Navigation completed successfully and returned no page content.\"] Empty, # [doc = \" The host cannot open this address. The reason remains the host's own;\"] # [doc = \" a refusal is not rewritten as an empty page or a failed navigation.\"] Unavailable (SharedString), # [doc = \" Navigation failed, in the host's own words.\"] Error (SharedString), # [doc = \" A page is there and the host is painting it.\"] Ready, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::browser::ViewportState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::browser",
      "path": "gpui_kit::content::browser",
      "source": "crates/gpui-kit/src/content/browser.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "ViewportState"
    },
    {
      "id": "gpui_kit::content::browser::ViewportState::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::browser",
      "path": "gpui_kit::content::browser",
      "source": "crates/gpui-kit/src/content/browser.rs",
      "summary": "What the panel publishes as its value.",
      "documentation": "What the panel publishes as its value.",
      "signature": "pub fn value (& self) -> & 'static str",
      "cfg": [],
      "target": "ViewportState"
    },
    {
      "id": "gpui_kit::content::code_view::CodeLine",
      "name": "CodeLine",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "One line of code, identified by its number.",
      "documentation": "One line of code, identified by its number.\n\nA line number is a line's business identity in a file: it survives the view\nscrolling, and it is what a diagnostic and a review comment already point\nat. It is not the row's position in whatever slice the caller passed, which\nis why a view of lines 400 to 450 numbers them 400 to 450.",
      "signature": "# [doc = \" One line of code, identified by its number.\"] # [doc = \"\"] # [doc = \" A line number is a line's business identity in a file: it survives the view\"] # [doc = \" scrolling, and it is what a diagnostic and a review comment already point\"] # [doc = \" at. It is not the row's position in whatever slice the caller passed, which\"] # [doc = \" is why a view of lines 400 to 450 numbers them 400 to 450.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct CodeLine { pub number : usize, pub text : SharedString, pub spans : Vec<CodeSpan>, pub mark : Option<LineMark>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::code_view::CodeLine::mark",
      "name": "mark",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn mark (mut self, mark : LineMark) -> Self",
      "cfg": [],
      "target": "CodeLine"
    },
    {
      "id": "gpui_kit::content::code_view::CodeLine::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (number : usize, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CodeLine"
    },
    {
      "id": "gpui_kit::content::code_view::CodeLine::spans",
      "name": "spans",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "Pre-classified runs, in byte offsets into this line's own text.",
      "documentation": "Pre-classified runs, in byte offsets into this line's own text.",
      "signature": "pub fn spans (mut self, spans : impl IntoIterator<Item = CodeSpan>) -> Self",
      "cfg": [],
      "target": "CodeLine"
    },
    {
      "id": "gpui_kit::content::code_view::CodeView",
      "name": "CodeView",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "Read-only code with a gutter.",
      "documentation": "Read-only code with a gutter.",
      "signature": "# [doc = \" Read-only code with a gutter.\"] # [derive (IntoElement)] pub struct CodeView { ident : Ident, lines : Vec<CodeLine>, # [doc = \" The fence's info string equivalent, shown exactly as written. Nothing\"] # [doc = \" here parses it.\"] language : Option<SharedString>, line_numbers : bool, visible_lines : Option<usize>, copyable : bool, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::code_view::CodeView::copyable",
      "name": "copyable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "Whether the view carries a control that copies the whole text.",
      "documentation": "Whether the view carries a control that copies the whole text.",
      "signature": "pub fn copyable (mut self, copyable : bool) -> Self",
      "cfg": [],
      "target": "CodeView"
    },
    {
      "id": "gpui_kit::content::code_view::CodeView::from_text",
      "name": "from_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "Splits plain text into numbered lines starting at 1.",
      "documentation": "Splits plain text into numbered lines starting at 1.\n\nA convenience over [`CodeView::new`] and nothing more: it classifies\nnothing and marks nothing.",
      "signature": "pub fn from_text (ident : impl Into<Ident>, text : & str) -> Self",
      "cfg": [],
      "target": "CodeView"
    },
    {
      "id": "gpui_kit::content::code_view::CodeView::language",
      "name": "language",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "The language's name, shown as written above the code.",
      "documentation": "The language's name, shown as written above the code.\n\nIt is also the caller's claim about what the code is, so a name\n[`crate::content::highlight`] recognises colours the lines that did not\narrive with spans of their own. A name it does not recognise is shown\nand nothing more.",
      "signature": "pub fn language (mut self, language : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CodeView"
    },
    {
      "id": "gpui_kit::content::code_view::CodeView::line_numbers",
      "name": "line_numbers",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn line_numbers (mut self, line_numbers : bool) -> Self",
      "cfg": [],
      "target": "CodeView"
    },
    {
      "id": "gpui_kit::content::code_view::CodeView::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, lines : impl IntoIterator<Item = CodeLine>) -> Self",
      "cfg": [],
      "target": "CodeView"
    },
    {
      "id": "gpui_kit::content::code_view::CodeView::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "The text a copy would put on the clipboard: every line, in order.",
      "documentation": "The text a copy would put on the clipboard: every line, in order.",
      "signature": "pub fn text (& self) -> String",
      "cfg": [],
      "target": "CodeView"
    },
    {
      "id": "gpui_kit::content::code_view::CodeView::visible_lines",
      "name": "visible_lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "Bounds the viewport to `lines` rows and virtualizes the body.",
      "documentation": "Bounds the viewport to `lines` rows and virtualizes the body.\n\nHorizontal scrolling goes with it; see the module documentation.",
      "signature": "pub fn visible_lines (mut self, lines : usize) -> Self",
      "cfg": [],
      "target": "CodeView"
    },
    {
      "id": "gpui_kit::content::code_view::LineMark",
      "name": "LineMark",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "What a line is being called out for.",
      "documentation": "What a line is being called out for.\n\nThese are the host's claims about the code, not judgements this view makes:\nnothing here diffs anything or finds an error.",
      "signature": "# [doc = \" What a line is being called out for.\"] # [doc = \"\"] # [doc = \" These are the host's claims about the code, not judgements this view makes:\"] # [doc = \" nothing here diffs anything or finds an error.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum LineMark { Added, Removed, Changed, # [doc = \" Called out for attention without saying anything about correctness.\"] Highlighted, Error, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::code_view::LineMark::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::code_view",
      "path": "gpui_kit::content::code_view",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "The name the semantic tree publishes, so a test tells the five apart without reading a colour.",
      "documentation": "The name the semantic tree publishes, so a test tells the five apart\nwithout reading a colour.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "LineMark"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffCursor",
      "name": "DiffCursor",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "Where the reader is in a diff they are stepping through.",
      "documentation": "Where the reader is in a diff they are stepping through.\n\nNamed the way the events are, because it is the other half of the same\nconversation: a host that hears [`DiffViewEvent::HunkActivated`] and a host\nthat steps to the next hunk are pointing at the same row.",
      "signature": "# [doc = \" Where the reader is in a diff they are stepping through.\"] # [doc = \"\"] # [doc = \" Named the way the events are, because it is the other half of the same\"] # [doc = \" conversation: a host that hears [`DiffViewEvent::HunkActivated`] and a host\"] # [doc = \" that steps to the next hunk are pointing at the same row.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum DiffCursor { File { file_id : SharedString, }, Hunk { file_id : SharedString, hunk_id : SharedString, }, Line { file_id : SharedString, hunk_id : SharedString, line_id : SharedString, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::diff_view::DiffFile",
      "name": "DiffFile",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, PartialEq, Eq)] pub struct DiffFile { pub id : SharedString, pub label : SharedString, pub hunks : Vec<DiffHunk>, # [doc = \" What is true of the file itself, drawn under its header.\"] pub notes : Vec<DiffNote>, # [doc = \" The language this file is written in, when it is not the one the view\"] # [doc = \" named.\"] pub language : Option<SharedString>, # [doc = \" When true the file's header stays and its hunks do not.\"] pub folded : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::diff_view::DiffFile::folded",
      "name": "folded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "Puts the whole file away behind its header.",
      "documentation": "Puts the whole file away behind its header.\n\nA review of forty files is unreadable as forty thousand rows, and the\nhunk-level collapse does not help: it still leaves every file's header\nand every hunk's header on screen. Folding is what makes the top of a\nlarge review a list of files again.\n\nThe header of a folded file says what it is hiding — how many lines\nwere added and removed — because a fold that says only \"there is\nsomething here\" makes the reader open every file to find out which ones\nmatter, which is the thing folding was for.",
      "signature": "pub fn folded (mut self, folded : bool) -> Self",
      "cfg": [],
      "target": "DiffFile"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffFile::language",
      "name": "language",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "The language this file is written in.",
      "documentation": "The language this file is written in.\n\nA review is not written in one language: a change reaches Rust, a\nmanifest and a note in the same patch, and a scanner given the wrong\ngrammar does not merely fail to colour — it colours the wrong things,\nwhich reads as a claim about code that is not true. So the file says\nwhat it is, and [`DiffView::language`] is the answer for the files that\ndo not.",
      "signature": "pub fn language (mut self, language : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DiffFile"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffFile::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>, hunks : impl IntoIterator<Item = DiffHunk>,) -> Self",
      "cfg": [],
      "target": "DiffFile"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffFile::notes",
      "name": "notes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "What is true of the file rather than of its lines.",
      "documentation": "What is true of the file rather than of its lines.\n\nA file carries at most one note of each kind, since that is what the\nkinds mean — a file is renamed from one place and ends in one mode —\nand a second note of a kind already present is dropped rather than\ndrawn under the same name as the first.",
      "signature": "pub fn notes (mut self, notes : impl IntoIterator<Item = DiffNote>) -> Self",
      "cfg": [],
      "target": "DiffFile"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffHunk",
      "name": "DiffHunk",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "One caller-supplied hunk.",
      "documentation": "One caller-supplied hunk.",
      "signature": "# [doc = \" One caller-supplied hunk.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct DiffHunk { pub id : SharedString, pub header : SharedString, pub lines : Vec<DiffLine>, # [doc = \" When true the hunk header stays and the lines do not, so a host can\"] # [doc = \" offer more context without this view inventing it.\"] pub collapsed : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::diff_view::DiffHunk::collapsed",
      "name": "collapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn collapsed (mut self, collapsed : bool) -> Self",
      "cfg": [],
      "target": "DiffHunk"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffHunk::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, header : impl Into<SharedString>, lines : impl IntoIterator<Item = DiffLine>,) -> Self",
      "cfg": [],
      "target": "DiffHunk"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffLine",
      "name": "DiffLine",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "One stable, caller-supplied logical diff row.",
      "documentation": "One stable, caller-supplied logical diff row.\n\nA context row carries the same text on both sides. A pure addition or\nremoval carries one side. A replacement carries both different sides, so\nsplit presentation can align them without this component deciding which\nremoval belongs with which addition.",
      "signature": "# [doc = \" One stable, caller-supplied logical diff row.\"] # [doc = \"\"] # [doc = \" A context row carries the same text on both sides. A pure addition or\"] # [doc = \" removal carries one side. A replacement carries both different sides, so\"] # [doc = \" split presentation can align them without this component deciding which\"] # [doc = \" removal belongs with which addition.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct DiffLine { pub id : SharedString, old : Option<DiffSide>, new : Option<DiffSide>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::diff_view::DiffLine::added",
      "name": "added",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "A pure addition supplied by the caller.",
      "documentation": "A pure addition supplied by the caller.",
      "signature": "pub fn added (id : impl Into<SharedString>, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DiffLine"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffLine::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "A context line. The text begins on both sides; old and new numbers are supplied independently.",
      "documentation": "A context line. The text begins on both sides; old and new numbers are\nsupplied independently.",
      "signature": "pub fn new (id : impl Into<SharedString>, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DiffLine"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffLine::new_number",
      "name": "new_number",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new_number (mut self, number : usize) -> Self",
      "cfg": [],
      "target": "DiffLine"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffLine::new_spans",
      "name": "new_spans",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new_spans (mut self, spans : impl IntoIterator<Item = CodeSpan>) -> Self",
      "cfg": [],
      "target": "DiffLine"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffLine::old_number",
      "name": "old_number",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn old_number (mut self, number : usize) -> Self",
      "cfg": [],
      "target": "DiffLine"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffLine::old_spans",
      "name": "old_spans",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn old_spans (mut self, spans : impl IntoIterator<Item = CodeSpan>) -> Self",
      "cfg": [],
      "target": "DiffLine"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffLine::paired",
      "name": "paired",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "An aligned replacement supplied by the caller. Unified presentation draws its removed and added sides as consecutive rows; split presentation draws them opposite one another.",
      "documentation": "An aligned replacement supplied by the caller. Unified presentation\ndraws its removed and added sides as consecutive rows; split\npresentation draws them opposite one another.",
      "signature": "pub fn paired (id : impl Into<SharedString>, old : impl Into<SharedString>, new : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "DiffLine"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffLine::removed",
      "name": "removed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "A pure removal supplied by the caller.",
      "documentation": "A pure removal supplied by the caller.",
      "signature": "pub fn removed (id : impl Into<SharedString>, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DiffLine"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffLine::spans",
      "name": "spans",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "Pre-classified spans for both sides. Use `old_spans` and `new_spans` when an aligned replacement has different classifications.",
      "documentation": "Pre-classified spans for both sides. Use `old_spans` and `new_spans`\nwhen an aligned replacement has different classifications.",
      "signature": "pub fn spans (mut self, spans : impl IntoIterator<Item = CodeSpan>) -> Self",
      "cfg": [],
      "target": "DiffLine"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffNote",
      "name": "DiffNote",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "One caller-supplied file and its hunks. Something a diff says about a file rather than about its lines.",
      "documentation": "One caller-supplied file and its hunks.\nSomething a diff says about a file rather than about its lines.\n\nA rename, a mode change or a file that arrived whole are facts no hunk\nstates: they are true of the file, and a reader who only sees added lines\ncannot tell a new file from a large addition to an old one. Each kind is\nnamed rather than free text so this crate can say it in the reader's\nlanguage, and so a host cannot put a path or a message of its own on a row\nthat a diagnostic snapshot reads.",
      "signature": "# [doc = \" One caller-supplied file and its hunks.\"] # [doc = \" Something a diff says about a file rather than about its lines.\"] # [doc = \"\"] # [doc = \" A rename, a mode change or a file that arrived whole are facts no hunk\"] # [doc = \" states: they are true of the file, and a reader who only sees added lines\"] # [doc = \" cannot tell a new file from a large addition to an old one. Each kind is\"] # [doc = \" named rather than free text so this crate can say it in the reader's\"] # [doc = \" language, and so a host cannot put a path or a message of its own on a row\"] # [doc = \" that a diagnostic snapshot reads.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum DiffNote { # [doc = \" The file did not exist before.\"] Added, # [doc = \" The file does not exist after.\"] Removed, # [doc = \" The file was moved, and this is where it came from.\"] Renamed { from : SharedString }, # [doc = \" The file changed, but not in lines anybody can read.\"] Binary, # [doc = \" The file's permissions changed, and this is what they became.\"] Mode { to : SharedString }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::diff_view::DiffPresentation",
      "name": "DiffPresentation",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "How the same caller-supplied lines are arranged.",
      "documentation": "How the same caller-supplied lines are arranged.",
      "signature": "# [doc = \" How the same caller-supplied lines are arranged.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum DiffPresentation { # [default] Unified, Split, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::diff_view::DiffPresentation::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "DiffPresentation"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffView",
      "name": "DiffView",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "A virtualized, read-only diff presentation.",
      "documentation": "A virtualized, read-only diff presentation.",
      "signature": "# [doc = \" A virtualized, read-only diff presentation.\"] # [derive (IntoElement)] pub struct DiffView { ident : Ident, files : Source, presentation : DiffPresentation, visible_rows : usize, fills : bool, wrapping : bool, language : Option<SharedString>, cursor : Option<DiffCursor>, on_event : Option<EventHandler>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::diff_view::DiffView::cursor",
      "name": "cursor",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "Marks the row the reader has stepped to, and puts it on screen when it moves.",
      "documentation": "Marks the row the reader has stepped to, and puts it on screen when it\nmoves.\n\nA diff is read by walking it — next change, next file — and a step that\nonly scrolled would leave the reader guessing which of the rows now in\nview is the one they asked for. The row is revealed when the cursor\nchanges and not on every frame, so a reader who then scrolls away with\nthe wheel is not dragged back to it.",
      "signature": "pub fn cursor (mut self, cursor : DiffCursor) -> Self",
      "cfg": [],
      "target": "DiffView"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffView::fills",
      "name": "fills",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "Takes the height of whatever holds it, instead of a number of rows.",
      "documentation": "Takes the height of whatever holds it, instead of a number of rows.\n\nA diff drawn in a pane is as tall as the pane, which the reader\nresizes; a row count would be wrong at every size but one.",
      "signature": "pub fn fills (mut self) -> Self",
      "cfg": [],
      "target": "DiffView"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffView::language",
      "name": "language",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "Colours code that arrived without colours, by the language the caller says it is, for every file that does not name one of its own with [`DiffFile::language`].",
      "documentation": "Colours code that arrived without colours, by the language the caller\nsays it is, for every file that does not name one of its own with\n[`DiffFile::language`].\n\nA diff of code is code, and reading it uncoloured next to a coloured\neditor is harder than it needs to be. The rule is the same one\n[`CodeView::language`](crate::content::CodeView::language) keeps: a\nline that arrived with spans keeps them, because the caller's grammar\noutranks this scanner, and a language this crate does not know colours\nnothing rather than guessing.\n\nA replacement keeps its word-level spans rather than gaining syntax\ncolour. Saying *which words changed* is the more specific claim on a\nrow that exists because two versions differ, and two claims in one\nplace is one too many.",
      "signature": "pub fn language (mut self, language : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DiffView"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffView::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, files : impl IntoIterator<Item = DiffFile>) -> Self",
      "cfg": [],
      "target": "DiffView"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffView::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "Reports file, hunk and line actions without changing or applying the diff.",
      "documentation": "Reports file, hunk and line actions without changing or applying the\ndiff.",
      "signature": "pub fn on_event (mut self, handler : impl Fn (DiffViewEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DiffView"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffView::presentation",
      "name": "presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn presentation (mut self, presentation : DiffPresentation) -> Self",
      "cfg": [],
      "target": "DiffView"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffView::shared",
      "name": "shared",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "The same view over a diff the caller keeps, and rebuilds only when it changes.",
      "documentation": "The same view over a diff the caller keeps, and rebuilds only when it\nchanges.\n\nFlattening the hierarchy and scanning it for syntax are both linear in\nthe whole diff, and a builder runs on every frame — so on a diff of any\nsize, a view built from an iterator does that work again for every\nanimation frame, every hover, every keystroke elsewhere in the window.\nThe cost is invisible on the ten-line diff a component's own exhibit\nshows and ruinous on a review of a thousand files.\n\nAn [`Arc`] the caller holds on to is a promise this view can check:\nwhile it is the same allocation, nothing in it can have changed, so the\nflattened rows and their colours are still the answer. A caller that\nfolds a file or receives a new patch builds a new one, which is exactly\nwhen the work should be done again.",
      "signature": "pub fn shared (ident : impl Into<Ident>, files : Arc<Vec<DiffFile>>) -> Self",
      "cfg": [],
      "target": "DiffView"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffView::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "Bounds and virtualizes the view to this many fixed-height rows. File and hunk headers each occupy one row too.",
      "documentation": "Bounds and virtualizes the view to this many fixed-height rows. File\nand hunk headers each occupy one row too.",
      "signature": "pub fn visible_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "DiffView"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffView::wrapping",
      "name": "wrapping",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "Wraps a line that is too long instead of clipping it.",
      "documentation": "Wraps a line that is too long instead of clipping it.\n\nFixed rows are what make a large diff cheap: every row's height is\nknown without laying it out, so the list can jump anywhere in a hundred\nthousand rows immediately. The price is that a long line is cut off at\nthe right edge, and in a diff that price is sometimes wrong — a\nminified bundle, a long string literal, a one-line JSON change is a\nline whose *end* is the change, and a diff that hides it is showing\nnothing.\n\nSo this is a choice rather than a default. Rows are then measured as\nthey are laid out, which costs layout for every row the reader passes\nand makes the scrollbar settle rather than being right immediately.",
      "signature": "pub fn wrapping (mut self, wrapping : bool) -> Self",
      "cfg": [],
      "target": "DiffView"
    },
    {
      "id": "gpui_kit::content::diff_view::DiffViewEvent",
      "name": "DiffViewEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "An action on caller-owned diff identity.",
      "documentation": "An action on caller-owned diff identity.",
      "signature": "# [doc = \" An action on caller-owned diff identity.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum DiffViewEvent { FileActivated { file_id : SharedString, }, HunkActivated { file_id : SharedString, hunk_id : SharedString, }, LineActivated { file_id : SharedString, hunk_id : SharedString, line_id : SharedString, }, # [doc = \" The host should disclose more context around this hunk.\"] ExpandHunk { file_id : SharedString, hunk_id : SharedString, }, # [doc = \" The host should put this file back on screen. Reported instead of\"] # [doc = \" [`DiffViewEvent::FileActivated`] while a file is folded, so a host that\"] # [doc = \" treats a header click as \\\"open this file elsewhere\\\" does not have to\"] # [doc = \" guess which of the two the reader meant.\"] UnfoldFile { file_id : SharedString, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::diff_view::word_spans",
      "name": "word_spans",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::diff_view",
      "path": "gpui_kit::content::diff_view",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "Highlights tokens that do not appear in the other side.",
      "documentation": "Highlights tokens that do not appear in the other side.\n\nThis is not a diff: both strings are complete, and the spans name the\ntokens that have no counterpart. A host that already computed a real\nintra-line diff should pass its own [`CodeSpan`]s instead.",
      "signature": "pub fn word_spans (old : & str, new : & str) -> (Vec<CodeSpan>, Vec<CodeSpan>)",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::highlight::Carry",
      "name": "Carry",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::highlight",
      "path": "gpui_kit::content::highlight",
      "source": "crates/gpui-kit/src/content/highlight.rs",
      "summary": "What the scanner is in the middle of, carried from one line to the next.",
      "documentation": "What the scanner is in the middle of, carried from one line to the next.",
      "signature": "# [doc = \" What the scanner is in the middle of, carried from one line to the next.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum Carry { # [default] None, Comment, # [doc = \" Inside a string, identified by which of the language's string forms\"] # [doc = \" opened it.\"] Text (u8), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::highlight::Language",
      "name": "Language",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::highlight",
      "path": "gpui_kit::content::highlight",
      "source": "crates/gpui-kit/src/content/highlight.rs",
      "summary": "A language this can scan.",
      "documentation": "A language this can scan.\n\nDeliberately short. Each entry is a table someone has to keep true, and a\nlanguage coloured from a stale table reads worse than one left plain.",
      "signature": "# [doc = \" A language this can scan.\"] # [doc = \"\"] # [doc = \" Deliberately short. Each entry is a table someone has to keep true, and a\"] # [doc = \" language coloured from a stale table reads worse than one left plain.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum Language { Rust, TypeScript, Python, Go, Json, Shell, Toml, Yaml, Markdown, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::highlight::Language::named",
      "name": "named",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::highlight",
      "path": "gpui_kit::content::highlight",
      "source": "crates/gpui-kit/src/content/highlight.rs",
      "summary": "The language a fence's info string names, when it names one of these.",
      "documentation": "The language a fence's info string names, when it names one of these.\n\nOnly what was written is read. Guessing a language from the shape of\nthe code would put a claim on the screen that nobody made, and would be\nwrong exactly where code is shortest.",
      "signature": "pub fn named (tag : & str) -> Option<Self>",
      "cfg": [],
      "target": "Language"
    },
    {
      "id": "gpui_kit::content::highlight::line_spans",
      "name": "line_spans",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::highlight",
      "path": "gpui_kit::content::highlight",
      "source": "crates/gpui-kit/src/content/highlight.rs",
      "summary": "Colours one line, given what the line before it left open.",
      "documentation": "Colours one line, given what the line before it left open.",
      "signature": "pub fn line_spans (language : Language, line : & str, carry : Carry) -> (Vec<CodeSpan>, Carry)",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::highlight::line_spans_of",
      "name": "line_spans_of",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::highlight",
      "path": "gpui_kit::content::highlight",
      "source": "crates/gpui-kit/src/content/highlight.rs",
      "summary": "Colours a block a line at a time, in byte offsets into each line.",
      "documentation": "Colours a block a line at a time, in byte offsets into each line.\n\nThis is the shape the scanner works in, and the shape a view that draws one\nelement per line needs.",
      "signature": "pub fn line_spans_of (language : Language, code : & str) -> Vec<Vec<CodeSpan>>",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::highlight::spans",
      "name": "spans",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::highlight",
      "path": "gpui_kit::content::highlight",
      "source": "crates/gpui-kit/src/content/highlight.rs",
      "summary": "Colours a whole block, in byte offsets into it.",
      "documentation": "Colours a whole block, in byte offsets into it.\n\nThe same colouring as [`line_spans_of`], moved onto the block's own\noffsets, because it is derived from it rather than found again — two scans\nthat could disagree about the same code would be one too many.",
      "signature": "pub fn spans (language : Language, code : & str) -> Vec<CodeSpan>",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::image_viewer::FitMode",
      "name": "FitMode",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "How the image is sized inside the frame.",
      "documentation": "How the image is sized inside the frame.",
      "signature": "# [doc = \" How the image is sized inside the frame.\"] # [derive (Debug, Clone, Copy, PartialEq, Default)] pub enum FitMode { # [doc = \" The whole image, inside the frame.\"] # [default] Contain, # [doc = \" The whole frame, covered by the image.\"] Cover, # [doc = \" One image pixel per frame pixel.\"] Actual, # [doc = \" The caller's own scale, where one is the actual size.\"] Zoom (f32), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::image_viewer::FitMode::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "The name a semantic node publishes, so a test reads the mode rather than the geometry it produced.",
      "documentation": "The name a semantic node publishes, so a test reads the mode rather\nthan the geometry it produced.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "FitMode"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageFrame",
      "name": "ImageFrame",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "One image the viewer can show.",
      "documentation": "One image the viewer can show.",
      "signature": "# [doc = \" One image the viewer can show.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct ImageFrame { id : SharedString, label : SharedString, source : SharedString, natural : Option<ImageSize>, state : ImageState, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageFrame::failed",
      "name": "failed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "The bytes arrived and could not be read, and this is why.",
      "documentation": "The bytes arrived and could not be read, and this is why.",
      "signature": "pub fn failed (self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ImageFrame"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageFrame::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "ImageFrame"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageFrame::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "ImageFrame"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageFrame::loading",
      "name": "loading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn loading (self) -> Self",
      "cfg": [],
      "target": "ImageFrame"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageFrame::natural",
      "name": "natural",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "The source's own pixel dimensions.",
      "documentation": "The source's own pixel dimensions.\n\nWithout this the viewer says the size is unknown and refuses to scale,\nbecause a scale nobody can compute is not a scale.",
      "signature": "pub fn natural (mut self, width : u32, height : u32) -> Self",
      "cfg": [],
      "target": "ImageFrame"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageFrame::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "`id` is the image's own identity, never its place in the list.",
      "documentation": "`id` is the image's own identity, never its place in the list.",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ImageFrame"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageFrame::source",
      "name": "source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "Where the image came from, shown whenever it is not on screen.",
      "documentation": "Where the image came from, shown whenever it is not on screen.",
      "signature": "pub fn source (mut self, source : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ImageFrame"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageFrame::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : ImageState) -> Self",
      "cfg": [],
      "target": "ImageFrame"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageFrame::unavailable",
      "name": "unavailable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "The host could not supply this image, and this is why.",
      "documentation": "The host could not supply this image, and this is why.",
      "signature": "pub fn unavailable (self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ImageFrame"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageRequest",
      "name": "ImageRequest",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "An image the viewer had to draw and the host has not supplied.",
      "documentation": "An image the viewer had to draw and the host has not supplied.",
      "signature": "# [doc = \" An image the viewer had to draw and the host has not supplied.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct ImageRequest { pub id : SharedString, pub label : SharedString, pub source : SharedString, # [doc = \" What the host said the source measures, when it said anything.\"] pub natural : Option<ImageSize>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageSize",
      "name": "ImageSize",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "The pixel size of a source, as the host stated it.",
      "documentation": "The pixel size of a source, as the host stated it.",
      "signature": "# [doc = \" The pixel size of a source, as the host stated it.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct ImageSize { pub width : u32, pub height : u32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageSize::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (width : u32, height : u32) -> Self",
      "cfg": [],
      "target": "ImageSize"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageState",
      "name": "ImageState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "What the host knows about one image right now.",
      "documentation": "What the host knows about one image right now.\n\nThis is the library's [`crate::state::Loadable`] vocabulary specialized to\na picture: an image the host refused and an image that arrived broken fail\ndifferently and read differently, so they are not one variant.",
      "signature": "# [doc = \" What the host knows about one image right now.\"] # [doc = \"\"] # [doc = \" This is the library's [`crate::state::Loadable`] vocabulary specialized to\"] # [doc = \" a picture: an image the host refused and an image that arrived broken fail\"] # [doc = \" differently and read differently, so they are not one variant.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum ImageState { # [doc = \" The host is still fetching it.\"] Loading, # [doc = \" The host could not supply it, in its own words.\"] Unavailable (SharedString), # [doc = \" The bytes arrived and could not be read, in the host's words.\"] Failed (SharedString), # [doc = \" The host has it.\"] # [default] Ready, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "ImageState"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageViewer",
      "name": "ImageViewer",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "A framed viewer for one image at a time.",
      "documentation": "A framed viewer for one image at a time.",
      "signature": "# [doc = \" A framed viewer for one image at a time.\"] # [derive (IntoElement)] pub struct ImageViewer { ident : Ident, frames : Vec<ImageFrame>, showing : Option<SharedString>, fit : FitMode, min_zoom : f32, max_zoom : f32, height : Option<f32>, control_size : ControlSize, disabled : bool, image : Option<ImageSupplier>, on_event : Option<EventHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageViewer::fit",
      "name": "fit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "How the caller says the image is sized. The viewer draws this and reports every request to change it.",
      "documentation": "How the caller says the image is sized. The viewer draws this and\nreports every request to change it.",
      "signature": "pub fn fit (mut self, fit : FitMode) -> Self",
      "cfg": [],
      "target": "ImageViewer"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageViewer::height",
      "name": "height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn height (mut self, height : f32) -> Self",
      "cfg": [],
      "target": "ImageViewer"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageViewer::image",
      "name": "image",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "Supplies the element to draw for an image the host already holds.",
      "documentation": "Supplies the element to draw for an image the host already holds.\n\nAnswering `None` leaves a placeholder naming the source, so a host that\ncannot supply one has said so rather than left a gap.",
      "signature": "pub fn image (mut self, supplier : impl Fn (& ImageFrame, & mut Window, & mut App) -> Option<AnyElement> + 'static,) -> Self",
      "cfg": [],
      "target": "ImageViewer"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageViewer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, frames : impl IntoIterator<Item = ImageFrame>) -> Self",
      "cfg": [],
      "target": "ImageViewer"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageViewer::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& ImageViewerEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "ImageViewer"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageViewer::showing",
      "name": "showing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "Which image the caller says is showing. Without one the first is.",
      "documentation": "Which image the caller says is showing. Without one the first is.",
      "signature": "pub fn showing (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ImageViewer"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageViewer::zoom_range",
      "name": "zoom_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "How far in and out the reader may go. Both ends are the caller's judgement: a thumbnail and a scan of a page have different answers.",
      "documentation": "How far in and out the reader may go. Both ends are the caller's\njudgement: a thumbnail and a scan of a page have different answers.",
      "signature": "pub fn zoom_range (mut self, min : f32, max : f32) -> Self",
      "cfg": [],
      "target": "ImageViewer"
    },
    {
      "id": "gpui_kit::content::image_viewer::ImageViewerEvent",
      "name": "ImageViewerEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::image_viewer",
      "path": "gpui_kit::content::image_viewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "What a viewer reports. It applies none of it.",
      "documentation": "What a viewer reports. It applies none of it.",
      "signature": "# [doc = \" What a viewer reports. It applies none of it.\"] # [derive (Debug, Clone, PartialEq)] pub enum ImageViewerEvent { # [doc = \" The reader asked for a different fit, by a control, the wheel, or a\"] # [doc = \" key. The viewer draws whatever the caller says is showing.\"] FitChanged (FitMode), # [doc = \" The reader asked for another image, by its own id.\"] Stepped { id : SharedString }, # [doc = \" An image the host has not supplied was drawn as a placeholder.\"] # [doc = \"\"] # [doc = \" Reported once per image per viewer rather than once per frame, so a\"] # [doc = \" host that answers by supplying it is not asked again for answering.\"] ImageRequested (ImageRequest), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::log_stream::LogEntry",
      "name": "LogEntry",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "One caller-owned log entry.",
      "documentation": "One caller-owned log entry.",
      "signature": "# [doc = \" One caller-owned log entry.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct LogEntry { pub id : SharedString, pub timestamp : SharedString, pub level : SharedString, pub source : SharedString, pub message : SharedString, pub tone : Tone, pub search_hits : Vec<Range<usize>>, pub current_hit : Option<usize>, compiled : Option<(SharedString, Vec<crate::content::ansi::AnsiRun>)>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::log_stream::LogEntry::current_hit",
      "name": "current_hit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "Which supplied search hit is current.",
      "documentation": "Which supplied search hit is current.",
      "signature": "pub fn current_hit (mut self, hit : usize) -> Self",
      "cfg": [],
      "target": "LogEntry"
    },
    {
      "id": "gpui_kit::content::log_stream::LogEntry::level",
      "name": "level",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "The caller's level name and the semantic tone it should carry.",
      "documentation": "The caller's level name and the semantic tone it should carry.",
      "signature": "pub fn level (mut self, level : impl Into<SharedString>, tone : Tone) -> Self",
      "cfg": [],
      "target": "LogEntry"
    },
    {
      "id": "gpui_kit::content::log_stream::LogEntry::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, message : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "LogEntry"
    },
    {
      "id": "gpui_kit::content::log_stream::LogEntry::prepare_ansi",
      "name": "prepare_ansi",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "Strips ANSI once so a virtualized row does not parse the same line again on every scroll.",
      "documentation": "Strips ANSI once so a virtualized row does not parse the same line\nagain on every scroll.",
      "signature": "pub fn prepare_ansi (mut self) -> Self",
      "cfg": [],
      "target": "LogEntry"
    },
    {
      "id": "gpui_kit::content::log_stream::LogEntry::search_hits",
      "name": "search_hits",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "Search hits as sorted, non-overlapping UTF-8 byte ranges into [`LogEntry::message`]. Invalid ranges are skipped by `HighlightedText`.",
      "documentation": "Search hits as sorted, non-overlapping UTF-8 byte ranges into\n[`LogEntry::message`]. Invalid ranges are skipped by `HighlightedText`.",
      "signature": "pub fn search_hits (mut self, hits : impl IntoIterator<Item = Range<usize>>) -> Self",
      "cfg": [],
      "target": "LogEntry"
    },
    {
      "id": "gpui_kit::content::log_stream::LogEntry::source",
      "name": "source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "The caller's source name. Nothing here interprets it.",
      "documentation": "The caller's source name. Nothing here interprets it.",
      "signature": "pub fn source (mut self, source : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "LogEntry"
    },
    {
      "id": "gpui_kit::content::log_stream::LogEntry::timestamp",
      "name": "timestamp",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "A timestamp the caller already formatted.",
      "documentation": "A timestamp the caller already formatted.",
      "signature": "pub fn timestamp (mut self, timestamp : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "LogEntry"
    },
    {
      "id": "gpui_kit::content::log_stream::LogStream",
      "name": "LogStream",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "A virtualized, read-only log presentation.",
      "documentation": "A virtualized, read-only log presentation.",
      "signature": "# [doc = \" A virtualized, read-only log presentation.\"] # [derive (IntoElement)] pub struct LogStream { ident : Ident, entries : Vec<LogEntry>, state : LogStreamState, visible_rows : usize, selected : Option<SharedString>, on_select : Option<EntryHandler>, on_copy : Option<EntryHandler>, ansi : bool, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::log_stream::LogStream::ansi",
      "name": "ansi",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "Treats each message as ANSI-coloured text. Search hits still win.",
      "documentation": "Treats each message as ANSI-coloured text. Search hits still win.",
      "signature": "pub fn ansi (mut self, ansi : bool) -> Self",
      "cfg": [],
      "target": "LogStream"
    },
    {
      "id": "gpui_kit::content::log_stream::LogStream::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, entries : impl IntoIterator<Item = LogEntry>) -> Self",
      "cfg": [],
      "target": "LogStream"
    },
    {
      "id": "gpui_kit::content::log_stream::LogStream::on_copy",
      "name": "on_copy",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "Reports that the selected entry should be copied. The host decides what representation belongs on the clipboard.",
      "documentation": "Reports that the selected entry should be copied. The host decides what\nrepresentation belongs on the clipboard.",
      "signature": "pub fn on_copy (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "LogStream"
    },
    {
      "id": "gpui_kit::content::log_stream::LogStream::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "Reports an entry selection and changes no data.",
      "documentation": "Reports an entry selection and changes no data.",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "LogStream"
    },
    {
      "id": "gpui_kit::content::log_stream::LogStream::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "The caller-owned selected entry.",
      "documentation": "The caller-owned selected entry.",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "LogStream"
    },
    {
      "id": "gpui_kit::content::log_stream::LogStream::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : LogStreamState) -> Self",
      "cfg": [],
      "target": "LogStream"
    },
    {
      "id": "gpui_kit::content::log_stream::LogStream::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "Bounds and virtualizes the stream to this many fixed-height entries.",
      "documentation": "Bounds and virtualizes the stream to this many fixed-height entries.",
      "signature": "pub fn visible_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "LogStream"
    },
    {
      "id": "gpui_kit::content::log_stream::LogStreamState",
      "name": "LogStreamState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "What is known about the stream as a whole.",
      "documentation": "What is known about the stream as a whole.",
      "signature": "# [doc = \" What is known about the stream as a whole.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum LogStreamState { Loading, Empty, Unavailable (SharedString), Error (SharedString), # [doc = \" Entries are the last verified value; the text says why they are stale.\"] Stale (SharedString), # [default] Ready, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::log_stream::LogStreamState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::log_stream",
      "path": "gpui_kit::content::log_stream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "LogStreamState"
    },
    {
      "id": "gpui_kit::content::markdown::CodeBlock",
      "name": "CodeBlock",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "A fenced block, as handed to a host that colours code.",
      "documentation": "A fenced block, as handed to a host that colours code.",
      "signature": "# [doc = \" A fenced block, as handed to a host that colours code.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct CodeBlock { # [doc = \" The fence's info string, exactly as written. Nothing here parses it.\"] pub language : Option<SharedString>, pub text : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::CodeSpan",
      "name": "CodeSpan",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "One coloured run of a code block, in byte offsets into its text.",
      "documentation": "One coloured run of a code block, in byte offsets into its text.\n\nThe role is a syntax class, not a general tone, so the same span means the\nsame thing whether [`crate::content::highlight`] found it or a host with a\nreal grammar did, and both land on the theme's syntax colours rather than\non whatever the caller thought a keyword should look like.",
      "signature": "# [doc = \" One coloured run of a code block, in byte offsets into its text.\"] # [doc = \"\"] # [doc = \" The role is a syntax class, not a general tone, so the same span means the\"] # [doc = \" same thing whether [`crate::content::highlight`] found it or a host with a\"] # [doc = \" real grammar did, and both land on the theme's syntax colours rather than\"] # [doc = \" on whatever the caller thought a keyword should look like.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct CodeSpan { pub range : Range<usize>, pub role : SyntaxColor, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::ImageRequest",
      "name": "ImageRequest",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "An image the document referred to and this crate did not fetch.",
      "documentation": "An image the document referred to and this crate did not fetch.",
      "signature": "# [doc = \" An image the document referred to and this crate did not fetch.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct ImageRequest { pub src : SharedString, pub alt : SharedString, pub title : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::Markdown",
      "name": "Markdown",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "A rendered Markdown document.",
      "documentation": "A rendered Markdown document.",
      "signature": "# [doc = \" A rendered Markdown document.\"] # [derive (IntoElement)] pub struct Markdown { ident : Ident, source : SharedString, parsed : Option<Rc<Document>>, parsed_tail : Option<Arc<Document>>, parsed_starts : Option<Rc<Vec<usize>>>, pending : bool, block_renderer : Option<BlockRenderer>, max_lines : Option<usize>, # [doc = \" The first reading-order value this document may claim when it is\"] # [doc = \" embedded in a larger document.\"] selection_order_start : u64, on_event : Option<EventHandler>, image : Option<ImageSource>, highlighter : Option<Highlighter>, code_presentation : MarkdownCodePresentation, streaming : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::Markdown::block_renderer",
      "name": "block_renderer",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "Installs a trusted native renderer for top-level parsed blocks. `None` keeps the safe built-in rendering. The identity and reading-order start are supplied so custom content can join document selection. Only mounted blocks invoke the callback; it must be repeatable and must not treat document text as executable HTML or application configuration.",
      "documentation": "Installs a trusted native renderer for top-level parsed blocks.\n`None` keeps the safe built-in rendering. The identity and reading-order\nstart are supplied so custom content can join document selection.\nOnly mounted blocks invoke the callback; it must be repeatable and must\nnot treat document text as executable HTML or application configuration.",
      "signature": "pub fn block_renderer (mut self, renderer : impl Fn (& Ident, & Block, u64, & mut Window, & mut App) -> Option<AnyElement> + 'static,) -> Self",
      "cfg": [],
      "target": "Markdown"
    },
    {
      "id": "gpui_kit::content::markdown::Markdown::code_presentation",
      "name": "code_presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "Chooses how fenced code blocks are presented inside this document.",
      "documentation": "Chooses how fenced code blocks are presented inside this document.\n\nThe default is [`MarkdownCodePresentation::Flat`]. Card presentation\nchanges only the fence's container treatment; its header, Copy action,\nhighlighting, selection, line count, and overflow behavior are the\nsame as the default presentation.",
      "signature": "pub fn code_presentation (mut self, presentation : MarkdownCodePresentation) -> Self",
      "cfg": [],
      "target": "Markdown"
    },
    {
      "id": "gpui_kit::content::markdown::Markdown::highlight",
      "name": "highlight",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "Colours code blocks from spans the host computed.",
      "documentation": "Colours code blocks from spans the host computed.\n\nA fence whose info string names a language\n[`crate::content::highlight`] knows is coloured without this. Install a\nhighlighter to override that with a real grammar's judgement, or to\nreach a language the built-in scanner has no table for.",
      "signature": "pub fn highlight (mut self, highlighter : impl Fn (& CodeBlock) -> Vec<CodeSpan> + 'static,) -> Self",
      "cfg": [],
      "target": "Markdown"
    },
    {
      "id": "gpui_kit::content::markdown::Markdown::image",
      "name": "image",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "Supplies the element to draw for an image the host already holds.",
      "documentation": "Supplies the element to draw for an image the host already holds.\n\nAnswering `None` leaves the placeholder, which names the source, so a\nhost that cannot supply one has said so rather than left a gap.",
      "signature": "pub fn image (mut self, source : impl Fn (& ImageRequest, & mut Window, & mut App) -> Option<AnyElement> + 'static,) -> Self",
      "cfg": [],
      "target": "Markdown"
    },
    {
      "id": "gpui_kit::content::markdown::Markdown::max_lines",
      "name": "max_lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "Shows at most `lines` of the document's own structure, and says how many were left out.",
      "documentation": "Shows at most `lines` of the document's own structure, and says how\nmany were left out.\n\nA line is a heading, a paragraph, one line of a code fence, one list\nentry, or one table row — not a line of wrapped text, whose count only\nlayout knows.",
      "signature": "pub fn max_lines (mut self, lines : usize) -> Self",
      "cfg": [],
      "target": "Markdown"
    },
    {
      "id": "gpui_kit::content::markdown::Markdown::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, source : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Markdown"
    },
    {
      "id": "gpui_kit::content::markdown::Markdown::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& MarkdownEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Markdown"
    },
    {
      "id": "gpui_kit::content::markdown::Markdown::selection_order_start",
      "name": "selection_order_start",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "Places this document inside a caller-owned reading-order partition.",
      "documentation": "Places this document inside a caller-owned reading-order partition.\n\nA window's document selection joins what it selected in reading order,\nand a document that draws its own runs from zero claims the same order\nas every other one. That is invisible while a Markdown is a whole\nsurface, and wrong the moment a caller draws several of them — one per\nmessage, or one per block of a long answer split across rows — because\na drag over three of them would then read them back interleaved.\n\nGive each document a start far enough apart that its own runs cannot\nreach the next one's: the count is emissions, so a stride per document\nbounds how many selectable runs one document may contain.",
      "signature": "pub fn selection_order_start (mut self, order : u64) -> Self",
      "cfg": [],
      "target": "Markdown"
    },
    {
      "id": "gpui_kit::content::markdown::Markdown::streaming",
      "name": "streaming",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "Reads this document as one that is still being written.",
      "documentation": "Reads this document as one that is still being written.\n\nThree things change. The source is reparsed from the last block that\ncould still be affected rather than from the beginning, so a long reply\ndoes not get slower as it gets longer. Inline markers that have opened\nand not yet closed are read as though they had, so a paragraph does not\ntwitch every time a `**` finishes. And text that has just arrived fades\nin over a fraction of a second, so a fast stream reads as a soft\nleading edge instead of a stutter.\n\nNone of it delays anything: every character is laid out the frame it\narrives, at the position it will keep.",
      "signature": "pub fn streaming (mut self, streaming : bool) -> Self",
      "cfg": [],
      "target": "Markdown"
    },
    {
      "id": "gpui_kit::content::markdown::MarkdownCodePresentation",
      "name": "MarkdownCodePresentation",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "How fenced code blocks are presented inside a Markdown document.",
      "documentation": "How fenced code blocks are presented inside a Markdown document.",
      "signature": "# [doc = \" How fenced code blocks are presented inside a Markdown document.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum MarkdownCodePresentation { # [doc = \" A raised card that separates code from the surrounding document.\"] Card, # [doc = \" An inline block without a raised surface, elevation, or card frame.\"] # [default] Flat, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::MarkdownEvent",
      "name": "MarkdownEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "What a rendered document reports. It applies none of it.",
      "documentation": "What a rendered document reports. It applies none of it.",
      "signature": "# [doc = \" What a rendered document reports. It applies none of it.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum MarkdownEvent { # [doc = \" A link was taken. The crate opens nothing.\"] LinkClicked { href : SharedString }, # [doc = \" An image the host has not supplied was drawn as a placeholder.\"] # [doc = \"\"] # [doc = \" Reported once per source per rendered document, not once per frame, so\"] # [doc = \" a host may answer it by supplying the image without the answer\"] # [doc = \" provoking another request.\"] ImageRequested { src : SharedString, alt : SharedString, }, # [doc = \" A code block's exact text was put on the clipboard.\"] CodeCopied { language : Option<SharedString>, text : SharedString, }, # [doc = \" The owner's clipboard policy refused the code-copy operation.\"] # [doc = \" A refusal contains no copied payload and is never a success event.\"] CodeCopyRefused { language : Option<SharedString>, reason : gpui::ClipboardDenied, }, # [doc = \" The reader asked for the lines [`Markdown::max_lines`] left out.\"] MoreRequested { lines : usize }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::Align",
      "name": "Align",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "GFM column alignment.",
      "documentation": "GFM column alignment.",
      "signature": "# [doc = \" GFM column alignment.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum Align { # [default] Left, Center, Right, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::Block",
      "name": "Block",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "One block, and how deeply it is nested.",
      "documentation": "One block, and how deeply it is nested.\n\n`indent` obeys one invariant, established by the parser and relied on by\nthe serializer: the first block is at 0, and no block is more than one\nlevel deeper than the block before it. A document that satisfies it always\nserializes to markdown that parses back to the same indents.",
      "signature": "# [doc = \" One block, and how deeply it is nested.\"] # [doc = \"\"] # [doc = \" `indent` obeys one invariant, established by the parser and relied on by\"] # [doc = \" the serializer: the first block is at 0, and no block is more than one\"] # [doc = \" level deeper than the block before it. A document that satisfies it always\"] # [doc = \" serializes to markdown that parses back to the same indents.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct Block { pub kind : BlockKind, pub indent : u8, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::Block::at",
      "name": "at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn at (kind : BlockKind, indent : u8) -> Self",
      "cfg": [],
      "target": "Block"
    },
    {
      "id": "gpui_kit::content::markdown::doc::Block::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (kind : BlockKind) -> Self",
      "cfg": [],
      "target": "Block"
    },
    {
      "id": "gpui_kit::content::markdown::doc::Block::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "The block's editable inline content, if it has any. `None` for the blocks an editor treats as atomic (code, images, rules) and for tables, whose cells are edited individually.",
      "documentation": "The block's editable inline content, if it has any. `None` for the\nblocks an editor treats as atomic (code, images, rules) and for tables,\nwhose cells are edited individually.",
      "signature": "pub fn text (& self) -> Option<& Text>",
      "cfg": [],
      "target": "Block"
    },
    {
      "id": "gpui_kit::content::markdown::doc::BlockKind",
      "name": "BlockKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "The block vocabulary. Closed by design — it is exactly what a block editor's insert menu offers, and a consumer that needs a block of its own is a reason to widen this enum rather than to grow an extension system.",
      "documentation": "The block vocabulary. Closed by design — it is exactly what a block\neditor's insert menu offers, and a consumer that needs a block of its own is\na reason to widen this enum rather than to grow an extension system.",
      "signature": "# [doc = \" The block vocabulary. Closed by design — it is exactly what a block\"] # [doc = \" editor's insert menu offers, and a consumer that needs a block of its own is\"] # [doc = \" a reason to widen this enum rather than to grow an extension system.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum BlockKind { Paragraph (Text), Heading { # [doc = \" 1–6.\"] level : u8, text : Text, }, Bullet (Text), Ordered { # [doc = \" The rendered number. Stored rather than derived so a list starting\"] # [doc = \" at 3 survives the round trip.\"] number : u64, text : Text, }, Task { checked : bool, text : Text, }, Quote (Text), Code { language : Option<String>, code : String, }, Image { url : String, alt : String, }, Table { align : Vec<Align>, header : Vec<Text>, rows : Vec<Vec<Text>>, }, Rule, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::Doc",
      "name": "Doc",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "A markdown document: blocks in document order.",
      "documentation": "A markdown document: blocks in document order.",
      "signature": "# [doc = \" A markdown document: blocks in document order.\"] # [derive (Debug, Clone, Default, PartialEq, Eq)] pub struct Doc { pub blocks : Vec<Block>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::Mark",
      "name": "Mark",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, PartialEq, Eq)] pub enum Mark { Bold, Italic, Strike, Code, Link (String), # [doc = \" An image among text. [`BlockKind::Image`] is the shape an editor offers;\"] # [doc = \" this is what keeps `see ![x](u) here` from silently becoming a link when\"] # [doc = \" the document is saved.\"] Image (String), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::MarkSpan",
      "name": "MarkSpan",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, PartialEq, Eq)] pub struct MarkSpan { pub range : Range<usize>, pub mark : Mark, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::Text",
      "name": "Text",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "Inline content: a string, plus marks over byte ranges of it.",
      "documentation": "Inline content: a string, plus marks over byte ranges of it.\n\nMarks are a separate list rather than flags on a run because an editor has\nto *map* them through insertions and deletions, and because run flags lose\nnesting order — under flags `**_x_**` and `_**x**_` are the same value.\nHere they differ by the order of the two spans, and both survive a round\ntrip.\n\nA newline in `text` is a line break within the block (markdown's soft or\nhard break, which this model does not distinguish). Whether it paints as a\nbreak or a space is a rendering decision.",
      "signature": "# [doc = \" Inline content: a string, plus marks over byte ranges of it.\"] # [doc = \"\"] # [doc = \" Marks are a separate list rather than flags on a run because an editor has\"] # [doc = \" to *map* them through insertions and deletions, and because run flags lose\"] # [doc = \" nesting order — under flags `**_x_**` and `_**x**_` are the same value.\"] # [doc = \" Here they differ by the order of the two spans, and both survive a round\"] # [doc = \" trip.\"] # [doc = \"\"] # [doc = \" A newline in `text` is a line break within the block (markdown's soft or\"] # [doc = \" hard break, which this model does not distinguish). Whether it paints as a\"] # [doc = \" break or a space is a rendering decision.\"] # [derive (Debug, Clone, Default, PartialEq, Eq)] pub struct Text { pub text : String, # [doc = \" Outermost first. Ranges may overlap and may be identical.\"] pub marks : Vec<MarkSpan>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::Text::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "Text"
    },
    {
      "id": "gpui_kit::content::markdown::doc::Text::plain",
      "name": "plain",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "Unmarked text.",
      "documentation": "Unmarked text.",
      "signature": "pub fn plain (text : impl Into<String>) -> Self",
      "cfg": [],
      "target": "Text"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Cursor",
      "name": "Cursor",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "A caret: which block, and how far into its text.",
      "documentation": "A caret: which block, and how far into its text.\n\nByte offsets, like the marks — and like them, always on a character\nboundary. It lives here rather than on the editing surface because a\nposition in a document is part of the document model: the pure half can move\nit, which is what makes the motion testable without a window.",
      "signature": "# [doc = \" A caret: which block, and how far into its text.\"] # [doc = \"\"] # [doc = \" Byte offsets, like the marks — and like them, always on a character\"] # [doc = \" boundary. It lives here rather than on the editing surface because a\"] # [doc = \" position in a document is part of the document model: the pure half can move\"] # [doc = \" it, which is what makes the motion testable without a window.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub struct Cursor { pub block : usize, pub offset : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Cursor::clamp",
      "name": "clamp",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Pull the caret back onto a real position: a block that exists, an offset inside it, and a character boundary.",
      "documentation": "Pull the caret back onto a real position: a block that exists, an offset\ninside it, and a character boundary.",
      "signature": "pub fn clamp (self, doc : & Doc) -> Self",
      "cfg": [],
      "target": "Cursor"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Cursor::down",
      "name": "down",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "The block below, keeping the offset where it fits.",
      "documentation": "The block below, keeping the offset where it fits.",
      "signature": "pub fn down (self, doc : & Doc) -> Self",
      "cfg": [],
      "target": "Cursor"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Cursor::end",
      "name": "end",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn end (self, doc : & Doc) -> Self",
      "cfg": [],
      "target": "Cursor"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Cursor::home",
      "name": "home",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn home (self) -> Self",
      "cfg": [],
      "target": "Cursor"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Cursor::left",
      "name": "left",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "One character left, stepping into the block above at the start of a line.",
      "documentation": "One character left, stepping into the block above at the start of a line.",
      "signature": "pub fn left (self, doc : & Doc) -> Self",
      "cfg": [],
      "target": "Cursor"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Cursor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (block : usize, offset : usize) -> Self",
      "cfg": [],
      "target": "Cursor"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Cursor::right",
      "name": "right",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "One character right, stepping into the block below at the end of a line.",
      "documentation": "One character right, stepping into the block below at the end of a line.",
      "signature": "pub fn right (self, doc : & Doc) -> Self",
      "cfg": [],
      "target": "Cursor"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Cursor::up",
      "name": "up",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "The block above, keeping the offset where it fits.",
      "documentation": "The block above, keeping the offset where it fits.",
      "signature": "pub fn up (self, doc : & Doc) -> Self",
      "cfg": [],
      "target": "Cursor"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Doc::ceiling",
      "name": "ceiling",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "How deep block `ix` is allowed to sit.",
      "documentation": "How deep block `ix` is allowed to sit.\n\nMarkdown expresses nesting through list items and nothing else, so a\nblock may only go deeper than the one above it when that one is a\nmarker. Indenting a paragraph under a *heading* would serialize to four\nleading spaces, which reads back as an indented code block.",
      "signature": "pub fn ceiling (& self, ix : usize) -> u8",
      "cfg": [],
      "target": "Doc"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Doc::edit_text",
      "name": "edit_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Apply an edit to block `ix`'s text, then put the block back in order.",
      "documentation": "Apply an edit to block `ix`'s text, then put the block back in order.\n\nThe editor should reach text through here rather than mutating a block\ndirectly: a heading that acquires a newline has no ATX spelling, and\nnothing else is positioned to notice.",
      "signature": "pub fn edit_text (& mut self, ix : usize, edit : impl FnOnce (& mut Text))",
      "cfg": [],
      "target": "Doc"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Doc::indent",
      "name": "indent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Tab. A block can go one level deeper than the one above it, and its children come with it.",
      "documentation": "Tab. A block can go one level deeper than the one above it, and its\nchildren come with it.",
      "signature": "pub fn indent (& mut self, ix : usize) -> bool",
      "cfg": [],
      "target": "Doc"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Doc::merge_back",
      "name": "merge_back",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Backspace at the start of block `ix`.",
      "documentation": "Backspace at the start of block `ix`.\n\nThe chain, in order: an indented block outdents, a list item becomes a\nparagraph, and only a plain block at the left margin merges into the one\nabove it. Returns the caret's new byte offset in whichever block now\nholds it, and `None` when nothing moved.",
      "signature": "pub fn merge_back (& mut self, ix : usize) -> Option<usize>",
      "cfg": [],
      "target": "Doc"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Doc::normalize",
      "name": "normalize",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Put the document into the form markdown can hold — the save step.",
      "documentation": "Put the document into the form markdown can hold — the save step.\n\nDrops the whitespace markdown discards anyway (leading and trailing on\nevery line, blank lines at a block's edges), flattens the blocks whose\noutput is one line, and renumbers ordered runs. After this,\n`parse(serialize(doc)) == doc`.",
      "signature": "pub fn normalize (& mut self)",
      "cfg": [],
      "target": "Doc"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Doc::outdent",
      "name": "outdent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Shift-Tab, children included.",
      "documentation": "Shift-Tab, children included.",
      "signature": "pub fn outdent (& mut self, ix : usize) -> bool",
      "cfg": [],
      "target": "Doc"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Doc::repair",
      "name": "repair",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Clamp every indent to what the document can actually express, then make ordered runs consecutive. Cheap, total, and called after anything structural — a local rule is not enough, because outdenting one block can leave the block *after* it stranded a level too deep.",
      "documentation": "Clamp every indent to what the document can actually express, then make\nordered runs consecutive. Cheap, total, and called after anything\nstructural — a local rule is not enough, because outdenting one block\ncan leave the block *after* it stranded a level too deep.\n\nPublic because an editor that changes a block's *kind* has to restore\nthe invariant too, and only this knows what it is.",
      "signature": "pub fn repair (& mut self)",
      "cfg": [],
      "target": "Doc"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Doc::split",
      "name": "split",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Split block `ix` at byte offset `at`, returning the new block's index.",
      "documentation": "Split block `ix` at byte offset `at`, returning the new block's index.\n\nThe tail keeps the block's kind so Enter in a list makes another item —\nexcept for a heading, where the body that follows a title is body text.",
      "signature": "pub fn split (& mut self, ix : usize, at : usize) -> usize",
      "cfg": [],
      "target": "Doc"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Shortcut",
      "name": "Shortcut",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "A markdown prefix typed at the start of a block, and what it turns it into.",
      "documentation": "A markdown prefix typed at the start of a block, and what it turns it into.",
      "signature": "# [doc = \" A markdown prefix typed at the start of a block, and what it turns it into.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum Shortcut { Heading (u8), Bullet, Ordered, Task (bool), Quote, Code, Rule, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Shortcut::apply",
      "name": "apply",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "The block this shortcut makes, carrying whatever text was left over.",
      "documentation": "The block this shortcut makes, carrying whatever text was left over.",
      "signature": "pub fn apply (self, text : Text) -> BlockKind",
      "cfg": [],
      "target": "Shortcut"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Text::append",
      "name": "append",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Append `other`, shifting its marks onto the end of this text.",
      "documentation": "Append `other`, shifting its marks onto the end of this text.",
      "signature": "pub fn append (& mut self, other : Text)",
      "cfg": [],
      "target": "Text"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Text::covered_by",
      "name": "covered_by",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Whether every byte of `range` already carries `mark`.",
      "documentation": "Whether every byte of `range` already carries `mark`.",
      "signature": "pub fn covered_by (& self, range : & Range<usize>, mark : & Mark) -> bool",
      "cfg": [],
      "target": "Text"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Text::insert",
      "name": "insert",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Insert at a byte offset, moving the marks with it.",
      "documentation": "Insert at a byte offset, moving the marks with it.",
      "signature": "pub fn insert (& mut self, at : usize, s : & str)",
      "cfg": [],
      "target": "Text"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Text::remove",
      "name": "remove",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Remove a byte range, collapsing any mark that covered it.",
      "documentation": "Remove a byte range, collapsing any mark that covered it.",
      "signature": "pub fn remove (& mut self, range : Range<usize>)",
      "cfg": [],
      "target": "Text"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Text::split_off",
      "name": "split_off",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Cut at `at`, returning the tail. The head keeps this [`Text`].",
      "documentation": "Cut at `at`, returning the tail. The head keeps this [`Text`].",
      "signature": "pub fn split_off (& mut self, at : usize) -> Text",
      "cfg": [],
      "target": "Text"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::Text::toggle",
      "name": "toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Add `mark` over `range`, or take it away if the whole range has it.",
      "documentation": "Add `mark` over `range`, or take it away if the whole range has it.",
      "signature": "pub fn toggle (& mut self, range : Range<usize>, mark : Mark)",
      "cfg": [],
      "target": "Text"
    },
    {
      "id": "gpui_kit::content::markdown::doc::edit::shortcut",
      "name": "shortcut",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::edit",
      "path": "gpui_kit::content::markdown::doc::edit",
      "source": "crates/gpui-kit/src/content/markdown/doc/edit.rs",
      "summary": "Match a markdown prefix at the start of a block, returning it and how many bytes it occupied.",
      "documentation": "Match a markdown prefix at the start of a block, returning it and how many\nbytes it occupied.\n\nThis is the input side of the same vocabulary [`super::read`] reads: typing\n`## ` makes a heading because pasting `## ` would have. Order matters — a\ntask marker is a bullet with more on the end.",
      "signature": "pub fn shortcut (text : & str) -> Option<(Shortcut, usize)>",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::read::parse",
      "name": "parse",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::read",
      "path": "gpui_kit::content::markdown::doc::read",
      "source": "crates/gpui-kit/src/content/markdown/doc/read.rs",
      "summary": "Parse a markdown document.",
      "documentation": "Parse a markdown document.",
      "signature": "pub fn parse (source : & str) -> Doc",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::reexport-1",
      "name": "edit :: { Cursor , Shortcut , shortcut }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use edit::{ Cursor, Shortcut, shortcut };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::reexport-2",
      "name": "read :: parse",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use read::parse;",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::reexport-3",
      "name": "write :: serialize",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc",
      "path": "gpui_kit::content::markdown::doc",
      "source": "crates/gpui-kit/src/content/markdown/doc.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use write::serialize;",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::doc::write::serialize",
      "name": "serialize",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::doc::write",
      "path": "gpui_kit::content::markdown::doc::write",
      "source": "crates/gpui-kit/src/content/markdown/doc/write.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn serialize (doc : & Doc) -> String",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::parse::Block",
      "name": "Block",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::parse",
      "path": "gpui_kit::content::markdown::parse",
      "source": "crates/gpui-kit/src/content/markdown/parse.rs",
      "summary": "One block of a document.",
      "documentation": "One block of a document.",
      "signature": "# [doc = \" One block of a document.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum Block { # [doc = \" Leading YAML (`---`) or TOML (`+++`) metadata, retained verbatim.\"] # [doc = \" Parsing metadata into application configuration is always host policy.\"] Frontmatter { format : SharedString, text : SharedString, }, Heading { level : u8, content : Vec<Inline>, }, Paragraph (Vec<Inline>), Code { # [doc = \" The fence's info string, exactly as it was written.\"] language : Option<SharedString>, text : SharedString, }, Quote (Vec<Block>), List { ordered : bool, start : u64, entries : Vec<ListEntry>, }, Rule, Table { alignment : Vec<CellAlign>, head : Vec<Vec<Inline>>, rows : Vec<Vec<Vec<Inline>>>, }, # [doc = \" An HTML block, kept verbatim and never interpreted.\"] Html (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::parse::Block::lines",
      "name": "lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::parse",
      "path": "gpui_kit::content::markdown::parse",
      "source": "crates/gpui-kit/src/content/markdown/parse.rs",
      "summary": "How many lines this block occupies, counted the way truncation counts.",
      "documentation": "How many lines this block occupies, counted the way truncation counts.\n\nA line here is a line of the document's own structure — a heading, a\nparagraph, one line of a code fence, one list entry — not a line of\nwrapped text, whose count only layout knows.",
      "signature": "pub fn lines (& self) -> usize",
      "cfg": [],
      "target": "Block"
    },
    {
      "id": "gpui_kit::content::markdown::parse::CellAlign",
      "name": "CellAlign",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::parse",
      "path": "gpui_kit::content::markdown::parse",
      "source": "crates/gpui-kit/src/content/markdown/parse.rs",
      "summary": "Which way a table column's cells are set.",
      "documentation": "Which way a table column's cells are set.",
      "signature": "# [doc = \" Which way a table column's cells are set.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum CellAlign { # [default] Start, Center, End, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::parse::Document",
      "name": "Document",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::parse",
      "path": "gpui_kit::content::markdown::parse",
      "source": "crates/gpui-kit/src/content/markdown/parse.rs",
      "summary": "A parsed document.",
      "documentation": "A parsed document.",
      "signature": "# [doc = \" A parsed document.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub struct Document { pub blocks : Vec<Block>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::parse::Document::block_ranges",
      "name": "block_ranges",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::parse",
      "path": "gpui_kit::content::markdown::parse",
      "source": "crates/gpui-kit/src/content/markdown/parse.rs",
      "summary": "The source ranges of the top-level blocks of `source`, or `None` when the offsets cannot be trusted to describe the blocks this parses to.",
      "documentation": "The source ranges of the top-level blocks of `source`, or `None` when\nthe offsets cannot be trusted to describe the blocks this parses to.\n\nA surface that draws a long answer as scrollable rows needs a place to\ncut it. Cutting by lines would put a fence's opening and closing halves\nin different rows; cutting by rendered blocks would mean holding a\nparsed tree per row and reparsing all of it whenever the answer grows.\nA range is neither: the row holds the slice of source it is responsible\nfor, renders it as its own document, and a row whose slice did not\nchange has nothing to do when the next token arrives.\n\n`None` is the honest answer for a source whose boundaries this reader\ncannot vouch for — a container it flattens, an extension that arrives\nas bare events. A caller that gets it draws the whole source as one row\nrather than cutting it somewhere that might not be a boundary.",
      "signature": "pub fn block_ranges (source : & str) -> Option<Vec<std::ops::Range<usize>>>",
      "cfg": [],
      "target": "Document"
    },
    {
      "id": "gpui_kit::content::markdown::parse::Document::lines",
      "name": "lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::parse",
      "path": "gpui_kit::content::markdown::parse",
      "source": "crates/gpui-kit/src/content/markdown/parse.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn lines (& self) -> usize",
      "cfg": [],
      "target": "Document"
    },
    {
      "id": "gpui_kit::content::markdown::parse::Document::parse",
      "name": "parse",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::parse",
      "path": "gpui_kit::content::markdown::parse",
      "source": "crates/gpui-kit/src/content/markdown/parse.rs",
      "summary": "Parses `source` with tables, strikethrough, task lists, and leading YAML/TOML metadata blocks enabled.",
      "documentation": "Parses `source` with tables, strikethrough, task lists, and leading\nYAML/TOML metadata blocks enabled.\n\nNothing else is enabled: footnotes, smart punctuation, and math would\neach change what a plain document means, and a reader who wrote three\ndots did not ask for an ellipsis.",
      "signature": "pub fn parse (source : & str) -> Self",
      "cfg": [],
      "target": "Document"
    },
    {
      "id": "gpui_kit::content::markdown::parse::Document::truncate",
      "name": "truncate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::parse",
      "path": "gpui_kit::content::markdown::parse",
      "source": "crates/gpui-kit/src/content/markdown/parse.rs",
      "summary": "The first `max` lines, and how many lines were left behind.",
      "documentation": "The first `max` lines, and how many lines were left behind.\n\nThe count is the point. A document cut to fit says how much was cut, so\na reader knows there is more rather than having to notice a fade.",
      "signature": "pub fn truncate (& self, max : usize) -> (Self, usize)",
      "cfg": [],
      "target": "Document"
    },
    {
      "id": "gpui_kit::content::markdown::parse::Inline",
      "name": "Inline",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::parse",
      "path": "gpui_kit::content::markdown::parse",
      "source": "crates/gpui-kit/src/content/markdown/parse.rs",
      "summary": "A run of content inside one line of prose.",
      "documentation": "A run of content inside one line of prose.",
      "signature": "# [doc = \" A run of content inside one line of prose.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum Inline { Text (SharedString), # [doc = \" Backticked text, set in the mono face and never highlighted.\"] Code (SharedString), Emphasis (Vec<Inline>), Strong (Vec<Inline>), Struck (Vec<Inline>), Link { href : SharedString, title : Option<SharedString>, content : Vec<Inline>, }, Image { src : SharedString, alt : SharedString, title : Option<SharedString>, }, # [doc = \" HTML written inside a line, kept verbatim and never interpreted.\"] Html (SharedString), SoftBreak, HardBreak, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::parse::ListEntry",
      "name": "ListEntry",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::parse",
      "path": "gpui_kit::content::markdown::parse",
      "source": "crates/gpui-kit/src/content/markdown/parse.rs",
      "summary": "One entry of a bulleted or numbered list.",
      "documentation": "One entry of a bulleted or numbered list.",
      "signature": "# [doc = \" One entry of a bulleted or numbered list.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub struct ListEntry { # [doc = \" `Some` when the entry carried a task marker, and whether it was ticked.\"] pub task : Option<bool>, pub blocks : Vec<Block>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::reexport-1",
      "name": "parse :: { Block , CellAlign , Document , Inline , ListEntry }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use parse::{ Block, CellAlign, Document, Inline, ListEntry };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::reexport-2",
      "name": "stream :: { MarkdownStream , MarkdownWork }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown",
      "path": "gpui_kit::content::markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use stream::{ MarkdownStream, MarkdownWork };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::stream::MarkdownStream",
      "name": "MarkdownStream",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::stream",
      "path": "gpui_kit::content::markdown::stream",
      "source": "crates/gpui-kit/src/content/markdown/stream.rs",
      "summary": "A document being read as it arrives.",
      "documentation": "A document being read as it arrives.",
      "signature": "# [doc = \" A document being read as it arrives.\"] # [derive (Debug, Default)] pub struct MarkdownStream { source : String, document : Document, # [doc = \" Where each block of [`Self::document`] begins in [`Self::source`].\"] # [doc = \"\"] # [doc = \" Empty when the parser cannot map its events to top-level blocks.\"] starts : Vec<usize>, # [doc = \" Whether this source contains something whose meaning is not local.\"] whole : bool, # [doc = \" How many leading blocks the last update left untouched.\"] stable : usize, # [doc = \" How many bytes the last update actually parsed, which is the claim this\"] # [doc = \" module makes and therefore the one its tests check.\"] parsed : usize, revision : u64, work : Cell<MarkdownWork>, mended_tail : RefCell<Option<(u64, Option<Arc<Document>>)>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::markdown::stream::MarkdownStream::append",
      "name": "append",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::stream",
      "path": "gpui_kit::content::markdown::stream",
      "source": "crates/gpui-kit/src/content/markdown/stream.rs",
      "summary": "Append a delta without scanning or copying the settled source prefix. Reference definitions can still require a complete parser pass.",
      "documentation": "Append a delta without scanning or copying the settled source prefix.\nReference definitions can still require a complete parser pass.",
      "signature": "pub fn append (& mut self, delta : & str)",
      "cfg": [],
      "target": "MarkdownStream"
    },
    {
      "id": "gpui_kit::content::markdown::stream::MarkdownStream::document",
      "name": "document",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::stream",
      "path": "gpui_kit::content::markdown::stream",
      "source": "crates/gpui-kit/src/content/markdown/stream.rs",
      "summary": "The document as it is, with every marker read literally.",
      "documentation": "The document as it is, with every marker read literally.",
      "signature": "pub fn document (& self) -> & Document",
      "cfg": [],
      "target": "MarkdownStream"
    },
    {
      "id": "gpui_kit::content::markdown::stream::MarkdownStream::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::stream",
      "path": "gpui_kit::content::markdown::stream",
      "source": "crates/gpui-kit/src/content/markdown/stream.rs",
      "summary": "Reads `source`, doing as little work as it can to be correct about it.",
      "documentation": "Reads `source`, doing as little work as it can to be correct about it.\n\nAppending takes the incremental path. Anything else — an edit, a\nreplacement, a different document under the same identity — is parsed\nwhole, because only an append has the property this relies on.",
      "signature": "pub fn read (& mut self, source : & str)",
      "cfg": [],
      "target": "MarkdownStream"
    },
    {
      "id": "gpui_kit::content::markdown::stream::MarkdownStream::revision",
      "name": "revision",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::stream",
      "path": "gpui_kit::content::markdown::stream",
      "source": "crates/gpui-kit/src/content/markdown/stream.rs",
      "summary": "The revision of the retained source; unchanged reads do not advance it.",
      "documentation": "The revision of the retained source; unchanged reads do not advance it.",
      "signature": "pub fn revision (& self) -> u64",
      "cfg": [],
      "target": "MarkdownStream"
    },
    {
      "id": "gpui_kit::content::markdown::stream::MarkdownStream::work",
      "name": "work",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::stream",
      "path": "gpui_kit::content::markdown::stream",
      "source": "crates/gpui-kit/src/content/markdown/stream.rs",
      "summary": "Cumulative work since creation, including fallback and mending parses.",
      "documentation": "Cumulative work since creation, including fallback and mending parses.",
      "signature": "pub fn work (& self) -> MarkdownWork",
      "cfg": [],
      "target": "MarkdownStream"
    },
    {
      "id": "gpui_kit::content::markdown::stream::MarkdownWork",
      "name": "MarkdownWork",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::markdown::stream",
      "path": "gpui_kit::content::markdown::stream",
      "source": "crates/gpui-kit/src/content/markdown/stream.rs",
      "summary": "Cumulative parser and source-buffer work, not a CPU-time estimate. Parsed bytes include boundary discovery and display-mending passes. Copied bytes count source-buffer writes, not allocations inside the syntax tree.",
      "documentation": "Cumulative parser and source-buffer work, not a CPU-time estimate.\nParsed bytes include boundary discovery and display-mending passes.\nCopied bytes count source-buffer writes, not allocations inside the syntax tree.",
      "signature": "# [doc = \" Cumulative parser and source-buffer work, not a CPU-time estimate.\"] # [doc = \" Parsed bytes include boundary discovery and display-mending passes.\"] # [doc = \" Copied bytes count source-buffer writes, not allocations inside the syntax tree.\"] # [derive (Debug, Default, Clone, Copy, PartialEq, Eq)] pub struct MarkdownWork { pub parser_passes : usize, pub parsed_bytes : usize, pub copied_bytes : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::message_list::Attachment",
      "name": "Attachment",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "Something carried alongside a message. The list names it and fetches nothing.",
      "documentation": "Something carried alongside a message. The list names it and fetches\nnothing.",
      "signature": "# [doc = \" Something carried alongside a message. The list names it and fetches\"] # [doc = \" nothing.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct Attachment { id : SharedString, name : SharedString, detail : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::message_list::Attachment::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "A size, a kind, or whatever else the host already knows about it.",
      "documentation": "A size, a kind, or whatever else the host already knows about it.",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Attachment"
    },
    {
      "id": "gpui_kit::content::message_list::Attachment::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Attachment"
    },
    {
      "id": "gpui_kit::content::message_list::DeliveryState",
      "name": "DeliveryState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "What a host said about a message's journey.",
      "documentation": "What a host said about a message's journey.\n\nFive states, five renderings. Collapsing sent, delivered, and read into one\ntick tells the reader less than the host knows, and folding a failure into\nany of them tells them something untrue.",
      "signature": "# [doc = \" What a host said about a message's journey.\"] # [doc = \"\"] # [doc = \" Five states, five renderings. Collapsing sent, delivered, and read into one\"] # [doc = \" tick tells the reader less than the host knows, and folding a failure into\"] # [doc = \" any of them tells them something untrue.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum DeliveryState { # [doc = \" Handed over, not yet acknowledged.\"] Sending, # [doc = \" The host accepted it.\"] # [default] Sent, # [doc = \" It reached the other side.\"] Delivered, # [doc = \" The other side opened it.\"] Read, # [doc = \" It did not arrive, and here is why, in the host's own words.\"] Failed { reason : SharedString }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::message_list::DeliveryState::failed",
      "name": "failed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn failed (& self) -> bool",
      "cfg": [],
      "target": "DeliveryState"
    },
    {
      "id": "gpui_kit::content::message_list::DeliveryState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "The name a node publishes, so a test asserts the state rather than the colour it was drawn in.",
      "documentation": "The name a node publishes, so a test asserts the state rather than the\ncolour it was drawn in.",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "DeliveryState"
    },
    {
      "id": "gpui_kit::content::message_list::Message",
      "name": "Message",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "One turn in a conversation.",
      "documentation": "One turn in a conversation.",
      "signature": "# [doc = \" One turn in a conversation.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct Message { id : SharedString, author : Option<SharedString>, time : EntryTime, body : MessageBody, delivery : DeliveryState, streaming : bool, tint : Option<Hsla>, attachments : Vec<Attachment>, reactions : Vec<Reaction>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::message_list::Message::attachment",
      "name": "attachment",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn attachment (mut self, attachment : Attachment) -> Self",
      "cfg": [],
      "target": "Message"
    },
    {
      "id": "gpui_kit::content::message_list::Message::author",
      "name": "author",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn author (mut self, author : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Message"
    },
    {
      "id": "gpui_kit::content::message_list::Message::delivery",
      "name": "delivery",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn delivery (mut self, delivery : DeliveryState) -> Self",
      "cfg": [],
      "target": "Message"
    },
    {
      "id": "gpui_kit::content::message_list::Message::failed",
      "name": "failed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn failed (self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Message"
    },
    {
      "id": "gpui_kit::content::message_list::Message::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "Message"
    },
    {
      "id": "gpui_kit::content::message_list::Message::markdown",
      "name": "markdown",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn markdown (id : impl Into<SharedString>, source : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Message"
    },
    {
      "id": "gpui_kit::content::message_list::Message::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "`id` is the message's own identity, which every node it publishes is derived from, so an assertion survives the conversation growing above it.",
      "documentation": "`id` is the message's own identity, which every node it publishes is\nderived from, so an assertion survives the conversation growing above\nit.",
      "signature": "pub fn new (id : impl Into<SharedString>, body : impl Into<MessageBody>) -> Self",
      "cfg": [],
      "target": "Message"
    },
    {
      "id": "gpui_kit::content::message_list::Message::reaction",
      "name": "reaction",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn reaction (mut self, reaction : Reaction) -> Self",
      "cfg": [],
      "target": "Message"
    },
    {
      "id": "gpui_kit::content::message_list::Message::streaming",
      "name": "streaming",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "Marks the message as still arriving. The body keeps whatever has arrived so far.",
      "documentation": "Marks the message as still arriving. The body keeps whatever has\narrived so far.",
      "signature": "pub fn streaming (mut self, streaming : bool) -> Self",
      "cfg": [],
      "target": "Message"
    },
    {
      "id": "gpui_kit::content::message_list::Message::time",
      "name": "time",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "The time, in the words the host chose.",
      "documentation": "The time, in the words the host chose.",
      "signature": "pub fn time (mut self, time : impl Into<EntryTime>) -> Self",
      "cfg": [],
      "target": "Message"
    },
    {
      "id": "gpui_kit::content::message_list::Message::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "The colour this speaker is known by.",
      "documentation": "The colour this speaker is known by.\n\nA transcript in which every turn is the same grey slab makes the\nreader work out who is talking from the byline alone, which is the one\nline a continued turn does not draw. The colour is carried as a wash\nbehind the turn and nothing else — no stripe beside the bubble, which\nwould be a second geometry saying what the wash has said — quiet enough\nthat a long thread still reads as one document.\n\nIt is never derived from the author's name, for the reason\n[`Avatar::tint`](crate::display::avatar::Avatar::tint) gives: this\ncomponent cannot know which colours the application has already spent.",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "Message"
    },
    {
      "id": "gpui_kit::content::message_list::MessageBody",
      "name": "MessageBody",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "What a message says.",
      "documentation": "What a message says.",
      "signature": "# [doc = \" What a message says.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum MessageBody { # [doc = \" Shown exactly as it is, with no markup read into it.\"] Text (SharedString), # [doc = \" Rendered through [`Markdown`], with its rules about HTML, links, and\"] # [doc = \" images.\"] Markdown (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::message_list::MessageBody::source",
      "name": "source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "The text as the caller wrote it, markup and all.",
      "documentation": "The text as the caller wrote it, markup and all.",
      "signature": "pub fn source (& self) -> & SharedString",
      "cfg": [],
      "target": "MessageBody"
    },
    {
      "id": "gpui_kit::content::message_list::MessageList",
      "name": "MessageList",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "A conversation.",
      "documentation": "A conversation.",
      "signature": "# [doc = \" A conversation.\"] # [derive (IntoElement)] pub struct MessageList { ident : Ident, messages : Vec<Message>, visible_rows : Option<usize>, # [doc = \" How many lines of body a slot holds, or `None` for a conversation whose\"] # [doc = \" messages are as tall as what they say.\"] body_lines : Option<usize>, group_consecutive : bool, on_retry : Option<RetryHandler>, on_markdown : Option<MarkdownHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::message_list::MessageList::body_lines",
      "name": "body_lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "How many lines of body each message's slot holds.",
      "documentation": "How many lines of body each message's slot holds.",
      "signature": "pub fn body_lines (mut self, lines : usize) -> Self",
      "cfg": [],
      "target": "MessageList"
    },
    {
      "id": "gpui_kit::content::message_list::MessageList::group_consecutive",
      "name": "group_consecutive",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "Whether consecutive messages from one author are drawn as one turn.",
      "documentation": "Whether consecutive messages from one author are drawn as one turn.\n\nDeclared, not inferred, for the same reason\n[`Toolbar::overflow_after`](crate::layout::Toolbar::overflow_after) is:\nwhether two messages a minute apart are one turn or two is a product\njudgement about the conversation, and this component knows nothing\nabout the conversation.",
      "signature": "pub fn group_consecutive (mut self, group : bool) -> Self",
      "cfg": [],
      "target": "MessageList"
    },
    {
      "id": "gpui_kit::content::message_list::MessageList::grows_to_fit",
      "name": "grows_to_fit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "Lets each message be as tall as what it says.",
      "documentation": "Lets each message be as tall as what it says.\n\nThe default is a slot: every message is the same height, which is what\nmakes a conversation of ten thousand cost the same as one of ten, and a\nbody longer than the slot says how many lines it left out. This trades\nthat for messages that are whole. The list then measures a message when\nit first comes into view, so it can only estimate how far a conversation\nit has not scrolled through reaches, and a scrollbar over one settles as\nthe reader moves down it.\n\nThis and [`MessageList::body_lines`] are the same setting: the last one\nnamed wins.",
      "signature": "pub fn grows_to_fit (mut self) -> Self",
      "cfg": [],
      "target": "MessageList"
    },
    {
      "id": "gpui_kit::content::message_list::MessageList::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, messages : impl IntoIterator<Item = Message>) -> Self",
      "cfg": [],
      "target": "MessageList"
    },
    {
      "id": "gpui_kit::content::message_list::MessageList::on_markdown",
      "name": "on_markdown",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "Forwards what a Markdown body reported, stamped with the message it came from.",
      "documentation": "Forwards what a Markdown body reported, stamped with the message it\ncame from.",
      "signature": "pub fn on_markdown (mut self, handler : impl Fn (SharedString, & MarkdownEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "MessageList"
    },
    {
      "id": "gpui_kit::content::message_list::MessageList::on_retry",
      "name": "on_retry",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "Reports that a failed message should be tried again. Nothing is resent and nothing is removed.",
      "documentation": "Reports that a failed message should be tried again. Nothing is resent\nand nothing is removed.",
      "signature": "pub fn on_retry (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "MessageList"
    },
    {
      "id": "gpui_kit::content::message_list::MessageList::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "Bounds the viewport to `rows` messages, which is what lets the list skip the ones it does not show.",
      "documentation": "Bounds the viewport to `rows` messages, which is what lets the list\nskip the ones it does not show.",
      "signature": "pub fn visible_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "MessageList"
    },
    {
      "id": "gpui_kit::content::message_list::Reaction",
      "name": "Reaction",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "A reaction and how many people left it.",
      "documentation": "A reaction and how many people left it.",
      "signature": "# [doc = \" A reaction and how many people left it.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct Reaction { key : SharedString, label : SharedString, count : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::message_list::Reaction::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (key : impl Into<SharedString>, label : impl Into<SharedString>, count : usize) -> Self",
      "cfg": [],
      "target": "Reaction"
    },
    {
      "id": "gpui_kit::content::message_list::streaming_since",
      "name": "streaming_since",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::message_list",
      "path": "gpui_kit::content::message_list",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "When the streaming indicator on `message` in `list` began.",
      "documentation": "When the streaming indicator on `message` in `list` began.\n\nKeyed by the message's identity and nothing else, so text arriving into a\nmessage that is already streaming does not restart the indicator: a\nconversation whose \"still writing\" mark flickered on every token would be\nreporting the token, not the stream. Answers `None` once the message stops\nstreaming.",
      "signature": "pub fn streaming_since (list : & Ident, message : & str, window : & Window, cx : & App) -> Option<Instant>",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::outline::Mark",
      "name": "Mark",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::outline",
      "path": "gpui_kit::content::outline",
      "source": "crates/gpui-kit/src/content/outline.rs",
      "summary": "A place in the mapped surface worth returning to.",
      "documentation": "A place in the mapped surface worth returning to.",
      "signature": "# [doc = \" A place in the mapped surface worth returning to.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct Mark { id : SharedString, row : usize, title : SharedString, detail : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::outline::Mark::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::outline",
      "path": "gpui_kit::content::outline",
      "source": "crates/gpui-kit/src/content/outline.rs",
      "summary": "A second line for the preview: what followed this place, typically, so the reader recognises the one they want without going there.",
      "documentation": "A second line for the preview: what followed this place, typically, so\nthe reader recognises the one they want without going there.",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Mark"
    },
    {
      "id": "gpui_kit::content::outline::Mark::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::outline",
      "path": "gpui_kit::content::outline",
      "source": "crates/gpui-kit/src/content/outline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "Mark"
    },
    {
      "id": "gpui_kit::content::outline::Mark::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::outline",
      "path": "gpui_kit::content::outline",
      "source": "crates/gpui-kit/src/content/outline.rs",
      "summary": "`row` is the mapped list's row index, which is what makes the mark a destination rather than only a label.",
      "documentation": "`row` is the mapped list's row index, which is what makes the mark a\ndestination rather than only a label.",
      "signature": "pub fn new (id : impl Into<SharedString>, row : usize, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Mark"
    },
    {
      "id": "gpui_kit::content::outline::Mark::row",
      "name": "row",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::outline",
      "path": "gpui_kit::content::outline",
      "source": "crates/gpui-kit/src/content/outline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn row (& self) -> usize",
      "cfg": [],
      "target": "Mark"
    },
    {
      "id": "gpui_kit::content::outline::Outline",
      "name": "Outline",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::outline",
      "path": "gpui_kit::content::outline",
      "source": "crates/gpui-kit/src/content/outline.rs",
      "summary": "The outline of a long surface. Reports the mark that was chosen, and travels there.",
      "documentation": "The outline of a long surface. Reports the mark that was chosen, and\ntravels there.",
      "signature": "# [doc = \" The outline of a long surface. Reports the mark that was chosen, and\"] # [doc = \" travels there.\"] # [derive (IntoElement)] pub struct Outline { ident : Ident, over : Option<Ident>, marks : Vec<Mark>, slots : Option<usize>, on_select : Option<SelectHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::outline::Outline::mark",
      "name": "mark",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::outline",
      "path": "gpui_kit::content::outline",
      "source": "crates/gpui-kit/src/content/outline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn mark (mut self, mark : Mark) -> Self",
      "cfg": [],
      "target": "Outline"
    },
    {
      "id": "gpui_kit::content::outline::Outline::marks",
      "name": "marks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::outline",
      "path": "gpui_kit::content::outline",
      "source": "crates/gpui-kit/src/content/outline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn marks (mut self, marks : impl IntoIterator<Item = Mark>) -> Self",
      "cfg": [],
      "target": "Outline"
    },
    {
      "id": "gpui_kit::content::outline::Outline::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::outline",
      "path": "gpui_kit::content::outline",
      "source": "crates/gpui-kit/src/content/outline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Outline"
    },
    {
      "id": "gpui_kit::content::outline::Outline::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::outline",
      "path": "gpui_kit::content::outline",
      "source": "crates/gpui-kit/src/content/outline.rs",
      "summary": "Reports the mark that was chosen. The travel happens either way: the minimap owns the scroll, and this is for a host that wants to know.",
      "documentation": "Reports the mark that was chosen. The travel happens either way: the\nminimap owns the scroll, and this is for a host that wants to know.",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Outline"
    },
    {
      "id": "gpui_kit::content::outline::Outline::over",
      "name": "over",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::outline",
      "path": "gpui_kit::content::outline",
      "source": "crates/gpui-kit/src/content/outline.rs",
      "summary": "The list this is an outline of, by name.",
      "documentation": "The list this is an outline of, by name.\n\nWithout one the outline still draws and still reports, but it cannot\nknow which mark you are reading and clicking one moves nothing — which\nis why every real use names a list.",
      "signature": "pub fn over (mut self, list : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Outline"
    },
    {
      "id": "gpui_kit::content::outline::Outline::slots",
      "name": "slots",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::outline",
      "path": "gpui_kit::content::outline",
      "source": "crates/gpui-kit/src/content/outline.rs",
      "summary": "Draws exactly this many marks instead of as many as the mapped list's height allows.",
      "documentation": "Draws exactly this many marks instead of as many as the mapped list's\nheight allows.\n\nFor a caller whose outline is not beside the list it maps, and for\ntests, which have no window height worth measuring.",
      "signature": "pub fn slots (mut self, slots : usize) -> Self",
      "cfg": [],
      "target": "Outline"
    },
    {
      "id": "gpui_kit::content::reexport-1",
      "name": "agent_document :: { AgentBlockKind , AgentDocument , AgentDocumentBlock , AgentDocumentEvent , AgentDocumentState , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use agent_document::{ AgentBlockKind, AgentDocument, AgentDocumentBlock, AgentDocumentEvent, AgentDocumentState, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::reexport-10",
      "name": "message_list :: { Attachment , DeliveryState , Message , MessageBody , MessageList , Reaction , streaming_since , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use message_list::{ Attachment, DeliveryState, Message, MessageBody, MessageList, Reaction, streaming_since, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::reexport-11",
      "name": "outline :: { Mark , Outline }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use outline::{ Mark, Outline };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::reexport-12",
      "name": "rich_text :: { RichTextAlignment , RichTextBlock , RichTextBlockId , RichTextDocument , RichTextEditResult , RichTextEditSession , RichTextError , RichTextFormat , RichTextInlineStyle , RichTextInputKind , RichTextIntent , RichTextListItem , RichTextListKind , RichTextParagraphStyle , RichTextPosition , RichTextRange , RichTextSelection , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use rich_text::{ RichTextAlignment, RichTextBlock, RichTextBlockId, RichTextDocument, RichTextEditResult, RichTextEditSession, RichTextError, RichTextFormat, RichTextInlineStyle, RichTextInputKind, RichTextIntent, RichTextListItem, RichTextListKind, RichTextParagraphStyle, RichTextPosition, RichTextRange, RichTextSelection, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::reexport-13",
      "name": "terminal :: { CellHit , CellSide , CellSnapshot , CursorSnapshot , Emulator , GridGeometry , GridPoint , GridSize , GridSnapshot , SelectionKind , Terminal , TerminalEvent , TerminalState , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (all (feature = \"terminal\", not (target_family = \"wasm\")))] pub use terminal::{ CellHit, CellSide, CellSnapshot, CursorSnapshot, Emulator, GridGeometry, GridPoint, GridSize, GridSnapshot, SelectionKind, Terminal, TerminalEvent, TerminalState, };",
      "cfg": [
        "cfg (all (feature = \"terminal\", not (target_family = \"wasm\")))"
      ]
    },
    {
      "id": "gpui_kit::content::reexport-14",
      "name": "transport :: { BufferedRange , MediaPresentation , TrackStep , TransportBar , TransportDuration , TransportEvent , TransportState , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use transport::{ BufferedRange, MediaPresentation, TrackStep, TransportBar, TransportDuration, TransportEvent, TransportState, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::reexport-2",
      "name": "ansi :: { AnsiRun , strip_ansi }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use ansi::{ AnsiRun, strip_ansi };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::reexport-3",
      "name": "browser :: { BrowserPanel , ViewportState }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use browser::{ BrowserPanel, ViewportState };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::reexport-4",
      "name": "code_view :: { CodeLine , CodeView , LineMark }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use code_view::{ CodeLine, CodeView, LineMark };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::reexport-5",
      "name": "diff_view :: { DiffCursor , DiffFile , DiffHunk , DiffLine , DiffNote , DiffPresentation , DiffView , DiffViewEvent , word_spans , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use diff_view::{ DiffCursor, DiffFile, DiffHunk, DiffLine, DiffNote, DiffPresentation, DiffView, DiffViewEvent, word_spans, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::reexport-6",
      "name": "highlight :: { Carry , Language }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use highlight::{ Carry, Language };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::reexport-7",
      "name": "image_viewer :: { FitMode , ImageFrame , ImageSize , ImageState , ImageViewer , ImageViewerEvent }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use image_viewer::{ FitMode, ImageFrame, ImageSize, ImageState, ImageViewer, ImageViewerEvent };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::reexport-8",
      "name": "log_stream :: { LogEntry , LogStream , LogStreamState }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use log_stream::{ LogEntry, LogStream, LogStreamState };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::reexport-9",
      "name": "markdown :: { Block , CellAlign , CodeBlock , CodeSpan , Document , ImageRequest , Inline , ListEntry , Markdown , MarkdownCodePresentation , MarkdownEvent , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content",
      "path": "gpui_kit::content",
      "source": "crates/gpui-kit/src/content/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use markdown::{ Block, CellAlign, CodeBlock, CodeSpan, Document, ImageRequest, Inline, ListEntry, Markdown, MarkdownCodePresentation, MarkdownEvent, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextAlignment",
      "name": "RichTextAlignment",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "Logical paragraph alignment. Start and end follow reading direction.",
      "documentation": "Logical paragraph alignment. Start and end follow reading direction.",
      "signature": "# [doc = \" Logical paragraph alignment. Start and end follow reading direction.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub enum RichTextAlignment { # [default] Start, Center, End, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextBlock",
      "name": "RichTextBlock",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "One paragraph-like block and its complete inline style coverage.",
      "documentation": "One paragraph-like block and its complete inline style coverage.",
      "signature": "# [doc = \" One paragraph-like block and its complete inline style coverage.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct RichTextBlock { id : RichTextBlockId, text : SharedString, styles : EditableStyleRuns<RichTextInlineStyle>, paragraph : RichTextParagraphStyle, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextBlock::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & RichTextBlockId",
      "cfg": [],
      "target": "RichTextBlock"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextBlock::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<RichTextBlockId>, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RichTextBlock"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextBlock::paragraph",
      "name": "paragraph",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn paragraph (& self) -> RichTextParagraphStyle",
      "cfg": [],
      "target": "RichTextBlock"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextBlock::styles",
      "name": "styles",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn styles (& self) -> & EditableStyleRuns<RichTextInlineStyle>",
      "cfg": [],
      "target": "RichTextBlock"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextBlock::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text (& self) -> & SharedString",
      "cfg": [],
      "target": "RichTextBlock"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextBlock::with_paragraph",
      "name": "with_paragraph",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_paragraph (mut self, paragraph : RichTextParagraphStyle) -> Self",
      "cfg": [],
      "target": "RichTextBlock"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextBlock::with_style",
      "name": "with_style",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "Applies one complete style over a grapheme-safe range.",
      "documentation": "Applies one complete style over a grapheme-safe range.",
      "signature": "pub fn with_style (mut self, range : Range<usize>, style : RichTextInlineStyle) -> Self",
      "cfg": [],
      "target": "RichTextBlock"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextBlockId",
      "name": "RichTextBlockId",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "Stable caller-visible identity for one rich-text block.",
      "documentation": "Stable caller-visible identity for one rich-text block.\n\nIt is content identity, not a list position. A host should preserve it\nwhile converting to and from its durable document so selection, semantics,\nand collaboration adapters do not rename every following paragraph after\none insertion.",
      "signature": "# [doc = \" Stable caller-visible identity for one rich-text block.\"] # [doc = \"\"] # [doc = \" It is content identity, not a list position. A host should preserve it\"] # [doc = \" while converting to and from its durable document so selection, semantics,\"] # [doc = \" and collaboration adapters do not rename every following paragraph after\"] # [doc = \" one insertion.\"] # [derive (Clone, Debug, PartialEq, Eq, Hash)] pub struct RichTextBlockId (SharedString);",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextBlockId::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & str",
      "cfg": [],
      "target": "RichTextBlockId"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextBlockId::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RichTextBlockId"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextDocument",
      "name": "RichTextDocument",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "A non-empty storage-neutral rich-text document.",
      "documentation": "A non-empty storage-neutral rich-text document.",
      "signature": "# [doc = \" A non-empty storage-neutral rich-text document.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct RichTextDocument { blocks : Vec<RichTextBlock>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextDocument::block",
      "name": "block",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn block (& self, id : & RichTextBlockId) -> Option<& RichTextBlock>",
      "cfg": [],
      "target": "RichTextDocument"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextDocument::blocks",
      "name": "blocks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn blocks (& self) -> & [RichTextBlock]",
      "cfg": [],
      "target": "RichTextDocument"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextDocument::empty",
      "name": "empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn empty (block_id : impl Into<RichTextBlockId>) -> Result<Self, RichTextError>",
      "cfg": [],
      "target": "RichTextDocument"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextDocument::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "Validates a caller-built document.",
      "documentation": "Validates a caller-built document.",
      "signature": "pub fn new (blocks : impl IntoIterator<Item = RichTextBlock>) -> Result<Self, RichTextError>",
      "cfg": [],
      "target": "RichTextDocument"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextDocument::plain",
      "name": "plain",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn plain (block_id : impl Into<RichTextBlockId>, text : impl Into<SharedString>,) -> Result<Self, RichTextError>",
      "cfg": [],
      "target": "RichTextDocument"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextDocument::selection_at_end",
      "name": "selection_at_end",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selection_at_end (& self) -> RichTextSelection",
      "cfg": [],
      "target": "RichTextDocument"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextDocument::selection_at_start",
      "name": "selection_at_start",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selection_at_start (& self) -> RichTextSelection",
      "cfg": [],
      "target": "RichTextDocument"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextEditResult",
      "name": "RichTextEditResult",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "What one command changed.",
      "documentation": "What one command changed.",
      "signature": "# [doc = \" What one command changed.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub struct RichTextEditResult { pub document_changed : bool, pub selection_changed : bool, pub pending_style_changed : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextEditResult::changed",
      "name": "changed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn changed (self) -> bool",
      "cfg": [],
      "target": "RichTextEditResult"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextEditSession",
      "name": "RichTextEditSession",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "Caller-owned editing state and reusable rich-document transaction history.",
      "documentation": "Caller-owned editing state and reusable rich-document transaction history.\n\nA component may hold an entity containing this session, but the host owns\nthat entity and decides its lifetime. Replacing the authoritative document\nclears history; undo can therefore never resurrect a document the host has\nsuperseded.",
      "signature": "# [doc = \" Caller-owned editing state and reusable rich-document transaction history.\"] # [doc = \"\"] # [doc = \" A component may hold an entity containing this session, but the host owns\"] # [doc = \" that entity and decides its lifetime. Replacing the authoritative document\"] # [doc = \" clears history; undo can therefore never resurrect a document the host has\"] # [doc = \" superseded.\"] # [derive (Debug)] pub struct RichTextEditSession { document : RichTextDocument, selection : RichTextSelection, pending_style : RichTextInlineStyle, done : Vec<HistoryEntry>, undone : Vec<HistoryEntry>, history_allowed : bool, composition : Option<Composition>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextEditSession::apply",
      "name": "apply",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn apply (& mut self, intent : RichTextIntent) -> Result<RichTextEditResult, RichTextError>",
      "cfg": [],
      "target": "RichTextEditSession"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextEditSession::can_redo",
      "name": "can_redo",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn can_redo (& self) -> bool",
      "cfg": [],
      "target": "RichTextEditSession"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextEditSession::can_undo",
      "name": "can_undo",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn can_undo (& self) -> bool",
      "cfg": [],
      "target": "RichTextEditSession"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextEditSession::document",
      "name": "document",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn document (& self) -> & RichTextDocument",
      "cfg": [],
      "target": "RichTextEditSession"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextEditSession::forbid_history",
      "name": "forbid_history",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "Stops recording permanently and clears recoverable text.",
      "documentation": "Stops recording permanently and clears recoverable text.",
      "signature": "pub fn forbid_history (& mut self)",
      "cfg": [],
      "target": "RichTextEditSession"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextEditSession::marked_range",
      "name": "marked_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn marked_range (& self) -> Option<& RichTextRange>",
      "cfg": [],
      "target": "RichTextEditSession"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextEditSession::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (document : RichTextDocument) -> Self",
      "cfg": [],
      "target": "RichTextEditSession"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextEditSession::pending_style",
      "name": "pending_style",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn pending_style (& self) -> & RichTextInlineStyle",
      "cfg": [],
      "target": "RichTextEditSession"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextEditSession::replace_document",
      "name": "replace_document",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "Replaces the host authority and forgets transactions over the old one.",
      "documentation": "Replaces the host authority and forgets transactions over the old one.",
      "signature": "pub fn replace_document (& mut self, document : RichTextDocument, selection : RichTextSelection,) -> Result<(), RichTextError>",
      "cfg": [],
      "target": "RichTextEditSession"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextEditSession::selection",
      "name": "selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selection (& self) -> & RichTextSelection",
      "cfg": [],
      "target": "RichTextEditSession"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextError",
      "name": "RichTextError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "Invalid caller-owned document or position data.",
      "documentation": "Invalid caller-owned document or position data.",
      "signature": "# [doc = \" Invalid caller-owned document or position data.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub enum RichTextError { EmptyDocument, EmptyBlockId, DuplicateBlockId (RichTextBlockId), UnknownBlock (RichTextBlockId), BlockIdCount { expected : usize, actual : usize }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextFormat",
      "name": "RichTextFormat",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "Inline formats whose active state can be toggled independently.",
      "documentation": "Inline formats whose active state can be toggled independently.",
      "signature": "# [doc = \" Inline formats whose active state can be toggled independently.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum RichTextFormat { Bold, Italic, Underline, Strike, Code, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextInlineStyle",
      "name": "RichTextInlineStyle",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "The complete inline style at one source byte.",
      "documentation": "The complete inline style at one source byte.\n\nLinks are data, not actions. The editor reports their destination but does\nnot validate, fetch, or open it; those remain host policy.",
      "signature": "# [doc = \" The complete inline style at one source byte.\"] # [doc = \"\"] # [doc = \" Links are data, not actions. The editor reports their destination but does\"] # [doc = \" not validate, fetch, or open it; those remain host policy.\"] # [derive (Clone, Debug, Default, PartialEq, Eq)] pub struct RichTextInlineStyle { bold : bool, italic : bool, underline : bool, strike : bool, code : bool, link : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextInlineStyle::format",
      "name": "format",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn format (& self, format : RichTextFormat) -> bool",
      "cfg": [],
      "target": "RichTextInlineStyle"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextInlineStyle::link",
      "name": "link",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn link (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "RichTextInlineStyle"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextInlineStyle::with_format",
      "name": "with_format",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_format (mut self, format : RichTextFormat, active : bool) -> Self",
      "cfg": [],
      "target": "RichTextInlineStyle"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextInlineStyle::with_link",
      "name": "with_link",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_link (mut self, destination : Option<SharedString>) -> Self",
      "cfg": [],
      "target": "RichTextInlineStyle"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextInputKind",
      "name": "RichTextInputKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "What supplied a text replacement, for transaction grouping.",
      "documentation": "What supplied a text replacement, for transaction grouping.",
      "signature": "# [doc = \" What supplied a text replacement, for transaction grouping.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum RichTextInputKind { Typing, Deleting, Paste, Cut, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextIntent",
      "name": "RichTextIntent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "A typed command accepted by [`RichTextEditSession::apply`].",
      "documentation": "A typed command accepted by [`RichTextEditSession::apply`].",
      "signature": "# [doc = \" A typed command accepted by [`RichTextEditSession::apply`].\"] # [derive (Clone, Debug, PartialEq, Eq)] pub enum RichTextIntent { Select (RichTextSelection), Replace { text : SharedString, kind : RichTextInputKind, }, # [doc = \" Replaces the selection with plain text whose normalized line breaks\"] # [doc = \" become hard blocks. There must be one fresh stable id per break.\"] ReplaceMultiline { text : SharedString, new_blocks : Vec<RichTextBlockId>, kind : RichTextInputKind, }, InsertSoftBreak, InsertHardBreak { new_block : RichTextBlockId, }, BackspaceAtStart, ToggleFormat (RichTextFormat), SetLink (Option<SharedString>), SetAlignment (RichTextAlignment), SetList (Option<RichTextListKind>), ChangeListDepth (i8), Compose { text : SharedString, selection_in_text : Option<Range<usize>>, }, EndComposition, Undo, Redo, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextListItem",
      "name": "RichTextListItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "List metadata for one paragraph.",
      "documentation": "List metadata for one paragraph.",
      "signature": "# [doc = \" List metadata for one paragraph.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub struct RichTextListItem { pub kind : RichTextListKind, pub depth : u8, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextListItem::depth",
      "name": "depth",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn depth (mut self, depth : u8) -> Self",
      "cfg": [],
      "target": "RichTextListItem"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextListItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (kind : RichTextListKind) -> Self",
      "cfg": [],
      "target": "RichTextListItem"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextListKind",
      "name": "RichTextListKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "The marker family of a list item.",
      "documentation": "The marker family of a list item.",
      "signature": "# [doc = \" The marker family of a list item.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum RichTextListKind { Unordered, Ordered, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextParagraphStyle",
      "name": "RichTextParagraphStyle",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "Block presentation metadata independent of any storage syntax.",
      "documentation": "Block presentation metadata independent of any storage syntax.",
      "signature": "# [doc = \" Block presentation metadata independent of any storage syntax.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub struct RichTextParagraphStyle { alignment : RichTextAlignment, list : Option<RichTextListItem>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextParagraphStyle::alignment",
      "name": "alignment",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn alignment (& self) -> RichTextAlignment",
      "cfg": [],
      "target": "RichTextParagraphStyle"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextParagraphStyle::list",
      "name": "list",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn list (& self) -> Option<RichTextListItem>",
      "cfg": [],
      "target": "RichTextParagraphStyle"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextParagraphStyle::with_alignment",
      "name": "with_alignment",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_alignment (mut self, alignment : RichTextAlignment) -> Self",
      "cfg": [],
      "target": "RichTextParagraphStyle"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextParagraphStyle::with_list",
      "name": "with_list",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_list (mut self, list : Option<RichTextListItem>) -> Self",
      "cfg": [],
      "target": "RichTextParagraphStyle"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextPosition",
      "name": "RichTextPosition",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "One UTF-8 position inside a stable block.",
      "documentation": "One UTF-8 position inside a stable block.",
      "signature": "# [doc = \" One UTF-8 position inside a stable block.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct RichTextPosition { pub block : RichTextBlockId, pub offset : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextPosition::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (block : impl Into<RichTextBlockId>, offset : usize) -> Self",
      "cfg": [],
      "target": "RichTextPosition"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextRange",
      "name": "RichTextRange",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "One normalized document range.",
      "documentation": "One normalized document range.",
      "signature": "# [doc = \" One normalized document range.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct RichTextRange { pub start : RichTextPosition, pub end : RichTextPosition, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextSelection",
      "name": "RichTextSelection",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "An anchor and moving head. Their order is preserved across bidi and drag selection; document operations normalize them only while applying an edit.",
      "documentation": "An anchor and moving head. Their order is preserved across bidi and drag\nselection; document operations normalize them only while applying an edit.",
      "signature": "# [doc = \" An anchor and moving head. Their order is preserved across bidi and drag\"] # [doc = \" selection; document operations normalize them only while applying an edit.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct RichTextSelection { pub anchor : RichTextPosition, pub head : RichTextPosition, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextSelection::caret",
      "name": "caret",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn caret (position : RichTextPosition) -> Self",
      "cfg": [],
      "target": "RichTextSelection"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextSelection::is_caret",
      "name": "is_caret",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_caret (& self) -> bool",
      "cfg": [],
      "target": "RichTextSelection"
    },
    {
      "id": "gpui_kit::content::rich_text::RichTextSelection::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::rich_text",
      "path": "gpui_kit::content::rich_text",
      "source": "crates/gpui-kit/src/content/rich_text.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (anchor : RichTextPosition, head : RichTextPosition) -> Self",
      "cfg": [],
      "target": "RichTextSelection"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::CellColor",
      "name": "CellColor",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "What a cell says its colour is, before a theme decides what that means.",
      "documentation": "What a cell says its colour is, before a theme decides what that means.\n\nKept symbolic on purpose. `Foreground` and `Background` are the terminal's\ndefaults and follow the theme; an index is a named slot or a point in the\ncolour cube; and only `Rgb` is a colour the program actually chose. A\nsnapshot that resolved these to pixels would have to be rebuilt on every\ntheme change, and would lose the distinction between \"red\" and `#ff0000`.",
      "signature": "# [doc = \" What a cell says its colour is, before a theme decides what that means.\"] # [doc = \"\"] # [doc = \" Kept symbolic on purpose. `Foreground` and `Background` are the terminal's\"] # [doc = \" defaults and follow the theme; an index is a named slot or a point in the\"] # [doc = \" colour cube; and only `Rgb` is a colour the program actually chose. A\"] # [doc = \" snapshot that resolved these to pixels would have to be rebuilt on every\"] # [doc = \" theme change, and would lose the distinction between \\\"red\\\" and `#ff0000`.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum CellColor { Foreground, Background, # [doc = \" 0-15 the ANSI slots, 16-231 the colour cube, 232-255 the grey ramp.\"] Indexed (u8), Rgb (u8, u8, u8), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::emulator::CellSide",
      "name": "CellSide",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "Which edge of a cell an anchor sits on.",
      "documentation": "Which edge of a cell an anchor sits on.\n\nA selection anchors to an edge, not to a cell: pressing on the left half of\na glyph includes it, the right half excludes it. Without the distinction a\ndrag cannot express \"up to but not including this character\".",
      "signature": "# [doc = \" Which edge of a cell an anchor sits on.\"] # [doc = \"\"] # [doc = \" A selection anchors to an edge, not to a cell: pressing on the left half of\"] # [doc = \" a glyph includes it, the right half excludes it. Without the distinction a\"] # [doc = \" drag cannot express \\\"up to but not including this character\\\".\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum CellSide { Left, Right, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::emulator::CellSnapshot",
      "name": "CellSnapshot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "One cell as it stands: the character, its colours, and the attributes that change how it is painted.",
      "documentation": "One cell as it stands: the character, its colours, and the attributes that\nchange how it is painted.",
      "signature": "# [doc = \" One cell as it stands: the character, its colours, and the attributes that\"] # [doc = \" change how it is painted.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct CellSnapshot { pub ch : char, pub fg : CellColor, pub bg : CellColor, pub bold : bool, pub dim : bool, pub italic : bool, pub underline : bool, pub inverse : bool, pub hidden : bool, # [doc = \" A double-width character, covering this cell and the spacer after it.\"] pub wide : bool, # [doc = \" The spacer half of a wide character. Never shaped; only its background\"] # [doc = \" is painted, because the glyph beside it already covers this column.\"] pub wide_spacer : bool, pub selected : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::emulator::CellSnapshot::display_colors",
      "name": "display_colors",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "The colours to paint with, after INVERSE and HIDDEN are resolved.",
      "documentation": "The colours to paint with, after INVERSE and HIDDEN are resolved.\n\nBoth are attributes about painting rather than about the text, so they\nare resolved here and not stored twice: a cell keeps what the program\nset, and this answers what a painter should use.",
      "signature": "pub fn display_colors (& self) -> (CellColor, CellColor)",
      "cfg": [],
      "target": "CellSnapshot"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::CursorSnapshot",
      "name": "CursorSnapshot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "Where the cursor is, in viewport rows (row 0 is the top of what is visible).",
      "documentation": "Where the cursor is, in viewport rows (row 0 is the top of what is visible).",
      "signature": "# [doc = \" Where the cursor is, in viewport rows (row 0 is the top of what is visible).\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct CursorSnapshot { pub row : usize, pub col : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator",
      "name": "Emulator",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "A terminal's state: a pure fold of output bytes into a grid.",
      "documentation": "A terminal's state: a pure fold of output bytes into a grid.",
      "signature": "# [doc = \" A terminal's state: a pure fold of output bytes into a grid.\"] pub struct Emulator { term : Term<EventCapture>, parser : Processor, capture : EventCapture, title : Option<String>, bell : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::app_cursor_mode",
      "name": "app_cursor_mode",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "Whether arrows should be sent as SS3 (`ESC O A`) rather than CSI.",
      "documentation": "Whether arrows should be sent as SS3 (`ESC O A`) rather than CSI.",
      "signature": "pub fn app_cursor_mode (& self) -> bool",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::bracketed_paste_mode",
      "name": "bracketed_paste_mode",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "Whether a paste should be wrapped in `ESC [200~` / `ESC [201~`.",
      "documentation": "Whether a paste should be wrapped in `ESC [200~` / `ESC [201~`.",
      "signature": "pub fn bracketed_paste_mode (& self) -> bool",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::clear_selection",
      "name": "clear_selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clear_selection (& mut self)",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::cols",
      "name": "cols",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cols (& self) -> usize",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::cursor",
      "name": "cursor",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "The cursor in viewport coordinates, or `None` when it is hidden or has scrolled out of view.",
      "documentation": "The cursor in viewport coordinates, or `None` when it is hidden or has\nscrolled out of view.",
      "signature": "pub fn cursor (& self) -> Option<CursorSnapshot>",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::display_offset",
      "name": "display_offset",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "How far the view is scrolled back; 0 is pinned to the live bottom.",
      "documentation": "How far the view is scrolled back; 0 is pinned to the live bottom.",
      "signature": "pub fn display_offset (& self) -> usize",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::feed",
      "name": "feed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "Advance over output bytes, returning whatever the terminal wants written back.",
      "documentation": "Advance over output bytes, returning whatever the terminal wants\nwritten back.\n\nThe return value is not decoration: a cursor position report or a device\nattributes query is a question the program is waiting on, and a host\nthat drops the answer hangs it. Handing the bytes back rather than\nwriting them keeps this module free of the pty.",
      "signature": "pub fn feed (& mut self, bytes : & [u8]) -> Vec<u8>",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::grid_point",
      "name": "grid_point",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "The grid point under a viewport cell.",
      "documentation": "The grid point under a viewport cell.\n\nThe two coordinate systems differ by the scrollback offset, and this is\nthe only place they meet. The column clamps into the grid so a pointer\npast the right edge cannot anchor a selection outside it.",
      "signature": "pub fn grid_point (& self, viewport_row : usize, col : usize) -> GridPoint",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::has_selection",
      "name": "has_selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "Whether anything is actually selected.",
      "documentation": "Whether anything is actually selected.",
      "signature": "pub fn has_selection (& self) -> bool",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::history_lines",
      "name": "history_lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "How many lines are available above the viewport.",
      "documentation": "How many lines are available above the viewport.",
      "signature": "pub fn history_lines (& self) -> usize",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::line",
      "name": "line",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "One viewport row, top row first.",
      "documentation": "One viewport row, top row first.",
      "signature": "pub fn line (& self, viewport_row : usize) -> Vec<CellSnapshot>",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::lines",
      "name": "lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "Every viewport row, top to bottom.",
      "documentation": "Every viewport row, top to bottom.",
      "signature": "pub fn lines (& self) -> Vec<Vec<CellSnapshot>>",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (cols : u16, rows : u16) -> Self",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::resize",
      "name": "resize",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn resize (& mut self, cols : u16, rows : u16)",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::row_text",
      "name": "row_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "One viewport row as trimmed text, with wide-character spacers skipped.",
      "documentation": "One viewport row as trimmed text, with wide-character spacers skipped.\n\nA reading rather than a rendering: it is what a test asserts against and\nwhat a copy of a single row would contain.",
      "signature": "pub fn row_text (& self, viewport_row : usize) -> String",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::rows",
      "name": "rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rows (& self) -> usize",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::scroll",
      "name": "scroll",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "Scroll the view: positive goes up into history, negative toward live.",
      "documentation": "Scroll the view: positive goes up into history, negative toward live.",
      "signature": "pub fn scroll (& mut self, delta : i32)",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::scroll_to_bottom",
      "name": "scroll_to_bottom",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn scroll_to_bottom (& mut self)",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::selection_text",
      "name": "selection_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "The selected text, or `None` when nothing is selected.",
      "documentation": "The selected text, or `None` when nothing is selected.\n\nA click with no drag leaves an empty selection behind, and reporting\nthat as a selection is what makes a bare click clobber the clipboard.",
      "signature": "pub fn selection_text (& self) -> Option<String>",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::start_selection",
      "name": "start_selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "Begin a selection at a point, with the granularity the gesture implies.",
      "documentation": "Begin a selection at a point, with the granularity the gesture implies.",
      "signature": "pub fn start_selection (& mut self, kind : SelectionKind, point : GridPoint, side : CellSide)",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::take_bell",
      "name": "take_bell",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "Whether a BEL has arrived since this was last asked. Reading clears it, because a bell is an event and a caller that missed one has missed it.",
      "documentation": "Whether a BEL has arrived since this was last asked. Reading clears it,\nbecause a bell is an event and a caller that missed one has missed it.",
      "signature": "pub fn take_bell (& mut self) -> bool",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::title",
      "name": "title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "The title the running program set, if it set one. Text somebody else wrote, so a caller showing it owes it the same treatment as any other content it did not write.",
      "documentation": "The title the running program set, if it set one. Text somebody else\nwrote, so a caller showing it owes it the same treatment as any other\ncontent it did not write.",
      "signature": "pub fn title (& self) -> Option<& str>",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::Emulator::update_selection",
      "name": "update_selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "Extend the selection in progress. Does nothing without one, so a drag that never started cannot invent a selection out of a pointer move.",
      "documentation": "Extend the selection in progress. Does nothing without one, so a drag\nthat never started cannot invent a selection out of a pointer move.",
      "signature": "pub fn update_selection (& mut self, point : GridPoint, side : CellSide)",
      "cfg": [],
      "target": "Emulator"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::GridPoint",
      "name": "GridPoint",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "A place on the grid, in the coordinates a *selection* anchors to.",
      "documentation": "A place on the grid, in the coordinates a *selection* anchors to.\n\n`line` is signed and counts down from the live viewport, so a negative line\nis scrollback. That is the difference between this and a viewport row: a\nviewport row is what a pointer hits and moves out from under the text as\noutput arrives, while a grid point stays on the text it named. Anchoring in\ngrid space is the whole reason a selection survives the screen scrolling.",
      "signature": "# [doc = \" A place on the grid, in the coordinates a *selection* anchors to.\"] # [doc = \"\"] # [doc = \" `line` is signed and counts down from the live viewport, so a negative line\"] # [doc = \" is scrollback. That is the difference between this and a viewport row: a\"] # [doc = \" viewport row is what a pointer hits and moves out from under the text as\"] # [doc = \" output arrives, while a grid point stays on the text it named. Anchoring in\"] # [doc = \" grid space is the whole reason a selection survives the screen scrolling.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct GridPoint { pub line : i32, pub column : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::emulator::GridPoint::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (line : i32, column : usize) -> Self",
      "cfg": [],
      "target": "GridPoint"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::GridSize",
      "name": "GridSize",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "The viewport, in cells.",
      "documentation": "The viewport, in cells.",
      "signature": "# [doc = \" The viewport, in cells.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct GridSize { pub cols : u16, pub rows : u16, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::emulator::GridSize::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "Clamps to a grid that can hold something. A zero-column terminal is not a smaller terminal, it is a division by zero waiting to happen, and the caller measuring one has a window mid-collapse rather than an opinion.",
      "documentation": "Clamps to a grid that can hold something. A zero-column terminal is not\na smaller terminal, it is a division by zero waiting to happen, and the\ncaller measuring one has a window mid-collapse rather than an opinion.",
      "signature": "pub fn new (cols : u16, rows : u16) -> Self",
      "cfg": [],
      "target": "GridSize"
    },
    {
      "id": "gpui_kit::content::terminal::emulator::SCROLLBACK_LINES",
      "name": "SCROLLBACK_LINES",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "Scrollback kept on the client, in lines.",
      "documentation": "Scrollback kept on the client, in lines.\n\nIt bounds what stays scrollable in the view and nothing else: whatever\nwindow of output the host keeps for itself is a separate decision, made\nwhere the output comes from.",
      "signature": "pub const SCROLLBACK_LINES: usize",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::emulator::SelectionKind",
      "name": "SelectionKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::emulator",
      "path": "gpui_kit::content::terminal::emulator",
      "source": "crates/gpui-kit/src/content/terminal/emulator.rs",
      "summary": "How much a selection takes per gesture: a drag, a double-click word, a triple-click row.",
      "documentation": "How much a selection takes per gesture: a drag, a double-click word, a\ntriple-click row.\n\nThe granularity is the emulator's business rather than the caller's because\ndeciding where a word ends means reading the grid, and a caller that did it\nfrom the text it can see would disagree with the copy it gets back.",
      "signature": "# [doc = \" How much a selection takes per gesture: a drag, a double-click word, a\"] # [doc = \" triple-click row.\"] # [doc = \"\"] # [doc = \" The granularity is the emulator's business rather than the caller's because\"] # [doc = \" deciding where a word ends means reading the grid, and a caller that did it\"] # [doc = \" from the text it can see would disagree with the copy it gets back.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum SelectionKind { Drag, Word, Line, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::input::COALESCE_MS",
      "name": "COALESCE_MS",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::input",
      "path": "gpui_kit::content::terminal::input",
      "source": "crates/gpui-kit/src/content/terminal/input.rs",
      "summary": "How long keyboard bytes are held before the host is told to write them.",
      "documentation": "How long keyboard bytes are held before the host is told to write them.\n\nA held key repeats faster than a frame, and a write per repeat turns a\nscrolled page into a write storm. The timer belongs to the host; the buffer\nunder it is [`InputCoalescer`], which is pure.",
      "signature": "pub const COALESCE_MS: u64",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::input::CellHit",
      "name": "CellHit",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::input",
      "path": "gpui_kit::content::terminal::input",
      "source": "crates/gpui-kit/src/content/terminal/input.rs",
      "summary": "Which cell a pointer landed on, and which edge of it an anchor takes.",
      "documentation": "Which cell a pointer landed on, and which edge of it an anchor takes.",
      "signature": "# [doc = \" Which cell a pointer landed on, and which edge of it an anchor takes.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct CellHit { pub row : usize, pub col : usize, pub side : CellSide, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::input::InputCoalescer",
      "name": "InputCoalescer",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::input",
      "path": "gpui_kit::content::terminal::input",
      "source": "crates/gpui-kit/src/content/terminal/input.rs",
      "summary": "Holds keyboard bytes between flushes.",
      "documentation": "Holds keyboard bytes between flushes.\n\n[`Self::push`] reports `true` exactly when a flush should be scheduled — the\nbuffer having been empty — so a burst of repeats schedules one timer rather\nthan one per key.",
      "signature": "# [doc = \" Holds keyboard bytes between flushes.\"] # [doc = \"\"] # [doc = \" [`Self::push`] reports `true` exactly when a flush should be scheduled — the\"] # [doc = \" buffer having been empty — so a burst of repeats schedules one timer rather\"] # [doc = \" than one per key.\"] # [derive (Debug, Default)] pub struct InputCoalescer { pending : Vec<u8>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::input::InputCoalescer::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::input",
      "path": "gpui_kit::content::terminal::input",
      "source": "crates/gpui-kit/src/content/terminal/input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "InputCoalescer"
    },
    {
      "id": "gpui_kit::content::terminal::input::InputCoalescer::push",
      "name": "push",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::input",
      "path": "gpui_kit::content::terminal::input",
      "source": "crates/gpui-kit/src/content/terminal/input.rs",
      "summary": "Add bytes, reporting whether a flush now needs scheduling.",
      "documentation": "Add bytes, reporting whether a flush now needs scheduling.",
      "signature": "pub fn push (& mut self, bytes : & [u8]) -> bool",
      "cfg": [],
      "target": "InputCoalescer"
    },
    {
      "id": "gpui_kit::content::terminal::input::InputCoalescer::take",
      "name": "take",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::input",
      "path": "gpui_kit::content::terminal::input",
      "source": "crates/gpui-kit/src/content/terminal/input.rs",
      "summary": "Take everything buffered, leaving the coalescer empty.",
      "documentation": "Take everything buffered, leaving the coalescer empty.",
      "signature": "pub fn take (& mut self) -> Vec<u8>",
      "cfg": [],
      "target": "InputCoalescer"
    },
    {
      "id": "gpui_kit::content::terminal::input::RESIZE_DEBOUNCE_MS",
      "name": "RESIZE_DEBOUNCE_MS",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::input",
      "path": "gpui_kit::content::terminal::input",
      "source": "crates/gpui-kit/src/content/terminal/input.rs",
      "summary": "How long a measured grid size waits before the host is told to resize.",
      "documentation": "How long a measured grid size waits before the host is told to resize.\n\nA drag across a window edge produces a size per frame, and a program that\nredraws on `SIGWINCH` redraws for each one. Waiting for the drag to settle\ncosts a moment of stale wrapping and saves the redraw storm.",
      "signature": "pub const RESIZE_DEBOUNCE_MS: u64",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::input::SELECTION_DRAG_THRESHOLD",
      "name": "SELECTION_DRAG_THRESHOLD",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::input",
      "path": "gpui_kit::content::terminal::input",
      "source": "crates/gpui-kit/src/content/terminal/input.rs",
      "summary": "How far a pointer travels before a press becomes a selection.",
      "documentation": "How far a pointer travels before a press becomes a selection.\n\nWithout a threshold, the click that focuses the panel starts a one-cell\nselection whenever the hand moves a pixel, and a host that copies on\nselection change then clobbers the clipboard on every click.",
      "signature": "pub const SELECTION_DRAG_THRESHOLD: f32",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::input::cell_at",
      "name": "cell_at",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::input",
      "path": "gpui_kit::content::terminal::input",
      "source": "crates/gpui-kit/src/content/terminal/input.rs",
      "summary": "Map a position measured from the grid's first glyph onto a cell.",
      "documentation": "Map a position measured from the grid's first glyph onto a cell.\n\nA position outside the grid clamps to the nearest cell rather than reporting\nnothing, because that is what a drag needs: the pointer routinely leaves the\npanel mid-gesture, and the selection should reach the edge it left through\ninstead of freezing at the last sample taken inside.\n\nOvershoot also *forces the side*, which clamping alone does not do. Dragging\npast the bottom should take the last row whole even when the pointer drifted\nleft of where it started, and deriving the side from x there would stop the\nselection mid-row.",
      "signature": "pub fn cell_at (x : f32, y : f32, cell_width : f32, line_height : f32, cols : usize, rows : usize,) -> CellHit",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::input::control_bytes",
      "name": "control_bytes",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::input",
      "path": "gpui_kit::content::terminal::input",
      "source": "crates/gpui-kit/src/content/terminal/input.rs",
      "summary": "Encode a Ctrl combination in caret notation.",
      "documentation": "Encode a Ctrl combination in caret notation.\n\nPublic because a host with its own keymap has to be able to ask what\n`ctrl-c` is without going through a whole `Modifiers`.",
      "signature": "pub fn control_bytes (key : & str) -> Option<Vec<u8>>",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::input::keystroke_bytes",
      "name": "keystroke_bytes",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::input",
      "path": "gpui_kit::content::terminal::input",
      "source": "crates/gpui-kit/src/content/terminal/input.rs",
      "summary": "Encode a keystroke as terminal bytes, or report that it is not the terminal's.",
      "documentation": "Encode a keystroke as terminal bytes, or report that it is not the\nterminal's.\n\n`None` is not a failure: it is how a keystroke falls through to the\napplication keymap. A platform-primary combination is always the\napplication's, because a terminal that swallowed it would take the window's\nclose and quit with it.\n\n`app_cursor` is DECCKM, and it is why this needs the emulator's mode rather\nthan a fixed table: the same arrow key is `ESC [ A` normally and `ESC O A`\nonce a full-screen program has asked for application cursor keys.",
      "signature": "pub fn keystroke_bytes (key : & str, key_char : Option<& str>, modifiers : & Modifiers, app_cursor : bool,) -> Option<Vec<u8>>",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::input::paste_bytes",
      "name": "paste_bytes",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::input",
      "path": "gpui_kit::content::terminal::input",
      "source": "crates/gpui-kit/src/content/terminal/input.rs",
      "summary": "Wrap pasted text for the terminal.",
      "documentation": "Wrap pasted text for the terminal.\n\nThe end marker is stripped whatever the mode, and that is a safety property\nrather than tidiness: text containing `ESC [201~` would otherwise end the\nbracket early and hand the rest of itself to the shell as typed input, which\nis how a copied block of text runs a command nobody typed.",
      "signature": "pub fn paste_bytes (text : & str, bracketed : bool) -> Vec<u8>",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::reexport-1",
      "name": "emulator :: { CellColor , CellSide , CellSnapshot , CursorSnapshot , Emulator , GridPoint , GridSize , SCROLLBACK_LINES , SelectionKind , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal",
      "path": "gpui_kit::content::terminal",
      "source": "crates/gpui-kit/src/content/terminal/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use emulator::{ CellColor, CellSide, CellSnapshot, CursorSnapshot, Emulator, GridPoint, GridSize, SCROLLBACK_LINES, SelectionKind, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::reexport-2",
      "name": "input :: { COALESCE_MS , CellHit , InputCoalescer , RESIZE_DEBOUNCE_MS , SELECTION_DRAG_THRESHOLD , cell_at , control_bytes , keystroke_bytes , paste_bytes , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal",
      "path": "gpui_kit::content::terminal",
      "source": "crates/gpui-kit/src/content/terminal/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use input::{ COALESCE_MS, CellHit, InputCoalescer, RESIZE_DEBOUNCE_MS, SELECTION_DRAG_THRESHOLD, cell_at, control_bytes, keystroke_bytes, paste_bytes, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::reexport-3",
      "name": "view :: { GridGeometry , GridSnapshot , Terminal , TerminalEvent , TerminalState }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal",
      "path": "gpui_kit::content::terminal",
      "source": "crates/gpui-kit/src/content/terminal/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use view::{ GridGeometry, GridSnapshot, Terminal, TerminalEvent, TerminalState };",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::view::GridGeometry",
      "name": "GridGeometry",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::view",
      "path": "gpui_kit::content::terminal::view",
      "source": "crates/gpui-kit/src/content/terminal/view.rs",
      "summary": "The grid the element measured, in the coordinates a pointer arrives in.",
      "documentation": "The grid the element measured, in the coordinates a pointer arrives in.",
      "signature": "# [doc = \" The grid the element measured, in the coordinates a pointer arrives in.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct GridGeometry { # [doc = \" The top-left of the first glyph, in window space.\"] pub origin : Point<Pixels>, pub cell_width : f32, pub line_height : f32, pub cols : u16, pub rows : u16, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::view::GridSnapshot",
      "name": "GridSnapshot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::view",
      "path": "gpui_kit::content::terminal::view",
      "source": "crates/gpui-kit/src/content/terminal/view.rs",
      "summary": "What the host hands back to be painted.",
      "documentation": "What the host hands back to be painted.",
      "signature": "# [doc = \" What the host hands back to be painted.\"] pub struct GridSnapshot { pub lines : Vec<Vec<CellSnapshot>>, pub cursor : Option<CursorSnapshot>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::view::Terminal",
      "name": "Terminal",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::view",
      "path": "gpui_kit::content::terminal::view",
      "source": "crates/gpui-kit/src/content/terminal/view.rs",
      "summary": "A terminal grid.",
      "documentation": "A terminal grid.",
      "signature": "# [doc = \" A terminal grid.\"] # [derive (IntoElement)] pub struct Terminal { ident : Ident, state : TerminalState, grid : Option<GridHook>, on_event : Option<EventHandler>, focused : bool, scrollback : bool, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::view::Terminal::focused",
      "name": "focused",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::view",
      "path": "gpui_kit::content::terminal::view",
      "source": "crates/gpui-kit/src/content/terminal/view.rs",
      "summary": "Whether the grid holds keyboard focus. A focused cursor is a filled block and an unfocused one an outline, which is the difference between \"typing goes here\" and \"this is where typing left off\".",
      "documentation": "Whether the grid holds keyboard focus. A focused cursor is a filled\nblock and an unfocused one an outline, which is the difference between\n\"typing goes here\" and \"this is where typing left off\".",
      "signature": "pub fn focused (mut self, focused : bool) -> Self",
      "cfg": [],
      "target": "Terminal"
    },
    {
      "id": "gpui_kit::content::terminal::view::Terminal::grid",
      "name": "grid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::view",
      "path": "gpui_kit::content::terminal::view",
      "source": "crates/gpui-kit/src/content/terminal/view.rs",
      "summary": "The host's once-a-frame hook: it is told the grid that fits and returns what to draw in it. Without one the panel draws its chrome and nothing else, which is what a terminal with no session looks like.",
      "documentation": "The host's once-a-frame hook: it is told the grid that fits and returns\nwhat to draw in it. Without one the panel draws its chrome and nothing\nelse, which is what a terminal with no session looks like.",
      "signature": "pub fn grid (mut self, grid : impl Fn (GridGeometry, & mut App) -> Option<GridSnapshot> + 'static,) -> Self",
      "cfg": [],
      "target": "Terminal"
    },
    {
      "id": "gpui_kit::content::terminal::view::Terminal::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::view",
      "path": "gpui_kit::content::terminal::view",
      "source": "crates/gpui-kit/src/content/terminal/view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Terminal"
    },
    {
      "id": "gpui_kit::content::terminal::view::Terminal::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::view",
      "path": "gpui_kit::content::terminal::view",
      "source": "crates/gpui-kit/src/content/terminal/view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (TerminalEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Terminal"
    },
    {
      "id": "gpui_kit::content::terminal::view::Terminal::scrollback",
      "name": "scrollback",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::view",
      "path": "gpui_kit::content::terminal::view",
      "source": "crates/gpui-kit/src/content/terminal/view.rs",
      "summary": "Whether the wheel scrolls the view. A full-screen program on the alternate screen has no scrollback, and scrolling one is how a reader ends up dragging a view that cannot move.",
      "documentation": "Whether the wheel scrolls the view. A full-screen program on the\nalternate screen has no scrollback, and scrolling one is how a reader\nends up dragging a view that cannot move.",
      "signature": "pub fn scrollback (mut self, scrollback : bool) -> Self",
      "cfg": [],
      "target": "Terminal"
    },
    {
      "id": "gpui_kit::content::terminal::view::Terminal::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::view",
      "path": "gpui_kit::content::terminal::view",
      "source": "crates/gpui-kit/src/content/terminal/view.rs",
      "summary": "What is known about the session.",
      "documentation": "What is known about the session.",
      "signature": "pub fn state (mut self, state : TerminalState) -> Self",
      "cfg": [],
      "target": "Terminal"
    },
    {
      "id": "gpui_kit::content::terminal::view::TerminalEvent",
      "name": "TerminalEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::view",
      "path": "gpui_kit::content::terminal::view",
      "source": "crates/gpui-kit/src/content/terminal/view.rs",
      "summary": "What the grid reports. Every variant is the host's to act on.",
      "documentation": "What the grid reports. Every variant is the host's to act on.",
      "signature": "# [doc = \" What the grid reports. Every variant is the host's to act on.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum TerminalEvent { # [doc = \" A gesture began on a cell. The row is a *viewport* row, so the host\"] # [doc = \" turns it into a grid point with `Emulator::grid_point`, which is the\"] # [doc = \" only thing that knows how far the view is scrolled back.\"] SelectionStarted { hit : CellHit, kind : SelectionKind, }, SelectionUpdated { hit : CellHit, }, SelectionCleared, # [doc = \" The wheel asked to move the view, in lines; positive goes into history.\"] Scrolled { lines : i32, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::view::TerminalState",
      "name": "TerminalState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::view",
      "path": "gpui_kit::content::terminal::view",
      "source": "crates/gpui-kit/src/content/terminal/view.rs",
      "summary": "What is known about the session behind the grid.",
      "documentation": "What is known about the session behind the grid.\n\nA terminal whose process never started and one whose process ended are not\nthe same thing as one with nothing on screen yet, and an empty grid is a\nperfectly ordinary Ready terminal.",
      "signature": "# [doc = \" What is known about the session behind the grid.\"] # [doc = \"\"] # [doc = \" A terminal whose process never started and one whose process ended are not\"] # [doc = \" the same thing as one with nothing on screen yet, and an empty grid is a\"] # [doc = \" perfectly ordinary Ready terminal.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum TerminalState { # [doc = \" A session is being opened. Nothing has been drawn yet.\"] Loading, # [doc = \" No session could be opened, and the host says why.\"] Unavailable (SharedString), # [doc = \" The session ended or failed, and the host says why. Whatever was last\"] # [doc = \" on the grid is not erased by this: a reader still needs to see it.\"] Error (SharedString), # [default] Ready, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::terminal::view::TerminalState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::terminal::view",
      "path": "gpui_kit::content::terminal::view",
      "source": "crates/gpui-kit/src/content/terminal/view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "TerminalState"
    },
    {
      "id": "gpui_kit::content::transport::BufferedRange",
      "name": "BufferedRange",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "One span of media the host already holds, in seconds.",
      "documentation": "One span of media the host already holds, in seconds.",
      "signature": "# [doc = \" One span of media the host already holds, in seconds.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct BufferedRange { pub start : f32, pub end : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::transport::BufferedRange::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (start : f32, end : f32) -> Self",
      "cfg": [],
      "target": "BufferedRange"
    },
    {
      "id": "gpui_kit::content::transport::MediaPresentation",
      "name": "MediaPresentation",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "The host's actual video presentation, independent of playback and window fullscreen.",
      "documentation": "The host's actual video presentation, independent of playback and window fullscreen.",
      "signature": "# [doc = \" The host's actual video presentation, independent of playback and window fullscreen.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum MediaPresentation { # [default] Inline, Fullscreen, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::transport::MediaPresentation::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "MediaPresentation"
    },
    {
      "id": "gpui_kit::content::transport::TrackStep",
      "name": "TrackStep",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "Which way a previous or next control steps.",
      "documentation": "Which way a previous or next control steps.",
      "signature": "# [doc = \" Which way a previous or next control steps.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum TrackStep { Previous, Next, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::transport::TrackStep::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "TrackStep"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar",
      "name": "TransportBar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "A transport for one piece of media.",
      "documentation": "A transport for one piece of media.",
      "signature": "# [doc = \" A transport for one piece of media.\"] # [derive (IntoElement)] pub struct TransportBar { ident : Ident, label : Option<SharedString>, state : TransportState, position : f32, duration : TransportDuration, elapsed : Option<SharedString>, remaining : Option<SharedString>, buffered : Vec<BufferedRange>, volume : f32, muted : bool, speed : f32, speeds : Vec<f32>, step : f32, seekable : bool, volume_control : bool, has_previous : bool, has_next : bool, control_size : ControlSize, presentation : Option<(MediaPresentation, SharedString)>, presentation_refusal : Option<SharedString>, disabled : bool, on_event : Option<EventHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::buffered",
      "name": "buffered",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "The spans the host already holds. Supplying none draws no buffer.",
      "documentation": "The spans the host already holds. Supplying none draws no buffer.",
      "signature": "pub fn buffered (mut self, ranges : impl IntoIterator<Item = BufferedRange>) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::duration",
      "name": "duration",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn duration (mut self, seconds : f32) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::elapsed",
      "name": "elapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "How far in the media is, in the host's own words. This crate formats no durations.",
      "documentation": "How far in the media is, in the host's own words. This crate formats\nno durations.",
      "signature": "pub fn elapsed (mut self, elapsed : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::has_next",
      "name": "has_next",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn has_next (mut self, has_next : bool) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::has_previous",
      "name": "has_previous",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn has_previous (mut self, has_previous : bool) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "What is playing, shown beside the controls.",
      "documentation": "What is playing, shown beside the controls.",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::muted",
      "name": "muted",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn muted (mut self, muted : bool) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& TransportEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::position",
      "name": "position",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "Where the caller says the head is, in seconds.",
      "documentation": "Where the caller says the head is, in seconds.",
      "signature": "pub fn position (mut self, seconds : f32) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::presentation",
      "name": "presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "Offers a host-supported presentation toggle. `label` names the next action in the host's locale; `state` is the verified presentation, not the request. Omit this method when native presentation is unsupported.",
      "documentation": "Offers a host-supported presentation toggle. `label` names the next action\nin the host's locale; `state` is the verified presentation, not the request.\nOmit this method when native presentation is unsupported.",
      "signature": "pub fn presentation (mut self, state : MediaPresentation, label : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::presentation_refused",
      "name": "presentation_refused",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "Keeps the actual presentation visible and disables its request with the host's reason. Other playback controls remain independent.",
      "documentation": "Keeps the actual presentation visible and disables its request with the\nhost's reason. Other playback controls remain independent.",
      "signature": "pub fn presentation_refused (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::remaining",
      "name": "remaining",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "How much is left, in the host's own words. Without one nothing is shown, because the remainder is a duration and this crate computes none.",
      "documentation": "How much is left, in the host's own words. Without one nothing is\nshown, because the remainder is a duration and this crate computes\nnone.",
      "signature": "pub fn remaining (mut self, remaining : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::seekable",
      "name": "seekable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "Whether the transport accepts seeks.",
      "documentation": "Whether the transport accepts seeks.\n\nA false capability keeps the position visible but installs no pointer,\nkeyboard, or native slider action for moving it.",
      "signature": "pub fn seekable (mut self, seekable : bool) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::speeds",
      "name": "speeds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "The speeds the host offers, and which of them holds. Offering none leaves the control out entirely.",
      "documentation": "The speeds the host offers, and which of them holds. Offering none\nleaves the control out entirely.",
      "signature": "pub fn speeds (mut self, speeds : impl IntoIterator<Item = f32>, current : f32) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : TransportState) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::step_seconds",
      "name": "step_seconds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "How far one arrow key jumps, in seconds.",
      "documentation": "How far one arrow key jumps, in seconds.\n\nA caller input, because whether an arrow should move a second or a\nminute is a judgement about the media, and this component knows\nnothing about the media.",
      "signature": "pub fn step_seconds (mut self, seconds : f32) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::unknown_duration",
      "name": "unknown_duration",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "Says there is a position and no total, for a live stream.",
      "documentation": "Says there is a position and no total, for a live stream.",
      "signature": "pub fn unknown_duration (mut self) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::volume",
      "name": "volume",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "Where the volume control sits, between zero and one.",
      "documentation": "Where the volume control sits, between zero and one.",
      "signature": "pub fn volume (mut self, volume : f32) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportBar::volume_control",
      "name": "volume_control",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "Whether mute and volume controls are meaningful for this transport. Unsupported controls are absent rather than disabled forever.",
      "documentation": "Whether mute and volume controls are meaningful for this transport.\nUnsupported controls are absent rather than disabled forever.",
      "signature": "pub fn volume_control (mut self, available : bool) -> Self",
      "cfg": [],
      "target": "TransportBar"
    },
    {
      "id": "gpui_kit::content::transport::TransportDuration",
      "name": "TransportDuration",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "How long the media runs, as far as the host knows.",
      "documentation": "How long the media runs, as far as the host knows.\n\n`Unknown` is a live stream: there is a position and there is no total, and\na bar that drew a fraction anyway would be reporting a number nobody has.",
      "signature": "# [doc = \" How long the media runs, as far as the host knows.\"] # [doc = \"\"] # [doc = \" `Unknown` is a live stream: there is a position and there is no total, and\"] # [doc = \" a bar that drew a fraction anyway would be reporting a number nobody has.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub enum TransportDuration { Known (f32), Unknown, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::transport::TransportDuration::is_known",
      "name": "is_known",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_known (self) -> bool",
      "cfg": [],
      "target": "TransportDuration"
    },
    {
      "id": "gpui_kit::content::transport::TransportDuration::seconds",
      "name": "seconds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn seconds (self) -> Option<f32>",
      "cfg": [],
      "target": "TransportDuration"
    },
    {
      "id": "gpui_kit::content::transport::TransportEvent",
      "name": "TransportEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "What a transport reports. It applies none of it.",
      "documentation": "What a transport reports. It applies none of it.",
      "signature": "# [doc = \" What a transport reports. It applies none of it.\"] # [derive (Debug, Clone, PartialEq)] pub enum TransportEvent { PlayRequested, PauseRequested, # [doc = \" Where the scrubber is while it is being dragged, in seconds.\"] # [doc = \"\"] # [doc = \" Reported on every move so a host can show a preview frame, and never\"] # [doc = \" as a seek, so a host does not seek once per pixel.\"] SeekPreview (f32), # [doc = \" Abandon any host preview without seeking or changing the verified position.\"] SeekCancelled, # [doc = \" Where the reader let go, or where a key asked to go, in seconds.\"] SeekRequested (f32), VolumeRequested (f32), MuteToggled, SpeedRequested (f32), Stepped (TrackStep), # [doc = \" Intent only. The host must present/dismiss the native video controller,\"] # [doc = \" then supply its actual state or refusal; this never changes the window.\"] PresentationRequested (MediaPresentation), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::transport::TransportState",
      "name": "TransportState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "What the transport is doing, as the host reports it.",
      "documentation": "What the transport is doing, as the host reports it.",
      "signature": "# [doc = \" What the transport is doing, as the host reports it.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum TransportState { Playing, # [default] Paused, # [doc = \" Playing, and waiting for data. This is not paused, and it does not\"] # [doc = \" offer the control that would resume, because nothing has stopped.\"] Buffering, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::content::transport::TransportState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "content::transport",
      "path": "gpui_kit::content::transport",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "The name a semantic node publishes, so a test asserts the state rather than the label drawn for it.",
      "documentation": "The name a semantic node publishes, so a test asserts the state rather\nthan the label drawn for it.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "TransportState"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput",
      "name": "OneTimeCodeInput",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "One sensitive editor presented as a bounded run of visual slots.",
      "documentation": "One sensitive editor presented as a bounded run of visual slots.\n\nA slot accepts one Unicode grapheme. The slots are not fields: one\n`TextInput` owns the focus, selection, composition, paste, and native text\nactions for the entire control.",
      "signature": "# [doc = \" One sensitive editor presented as a bounded run of visual slots.\"] # [doc = \"\"] # [doc = \" A slot accepts one Unicode grapheme. The slots are not fields: one\"] # [doc = \" `TextInput` owns the focus, selection, composition, paste, and native text\"] # [doc = \" actions for the entire control.\"] pub struct OneTimeCodeInput { ident : Ident, field : Entity<TextInput>, name : Option<SharedString>, initial : Option<SharedString>, slots : usize, size : ControlSize, input_options : gpui::TextInputOptions, disabled : bool, invalid : bool, required : bool, read_only : bool, seeded : bool, configured : bool, _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::input_options",
      "name": "input_options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "Requests keyboard/autofill hints. `OneTimeCode` is only an operating system hint: clipboard paste is not SMS autofill, and this control neither reads SMS nor guarantees suggestions. Alphanumeric codes remain valid; callers choose whether a numeric keyboard suits their code.",
      "documentation": "Requests keyboard/autofill hints. `OneTimeCode` is only an operating\nsystem hint: clipboard paste is not SMS autofill, and this control\nneither reads SMS nor guarantees suggestions. Alphanumeric codes remain\nvalid; callers choose whether a numeric keyboard suits their code.",
      "signature": "pub fn input_options (mut self, options : gpui::TextInputOptions) -> Self",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::is_complete",
      "name": "is_complete",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_complete (& self, cx : & App) -> bool",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self, cx : & App) -> bool",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn len (& self, cx : & App) -> usize",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "Names the one native sensitive input when its visible label is outside this view.",
      "documentation": "Names the one native sensitive input when its visible label is outside\nthis view.",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::read_only",
      "name": "read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn read_only (mut self, read_only : bool) -> Self",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::required",
      "name": "required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn required (mut self, required : bool) -> Self",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::set_input_options",
      "name": "set_input_options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "Updates hints without resetting code slots or the sensitive editor.",
      "documentation": "Updates hints without resetting code slots or the sensitive editor.",
      "signature": "pub fn set_input_options (& mut self, options : gpui::TextInputOptions, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::set_invalid",
      "name": "set_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_invalid (& mut self, invalid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::set_name",
      "name": "set_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "`None` removes the accessible name without replacing the sensitive editor.",
      "documentation": "`None` removes the accessible name without replacing the sensitive editor.",
      "signature": "pub fn set_name (& mut self, name : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::set_read_only",
      "name": "set_read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_read_only (& mut self, read_only : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::set_required",
      "name": "set_required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_required (& mut self, required : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::set_slots",
      "name": "set_slots",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "Changes the visual slots and future input limit. Existing text is retained.",
      "documentation": "Changes the visual slots and future input limit. Existing text is retained.",
      "signature": "pub fn set_slots (& mut self, slots : usize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::set_value",
      "name": "set_value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_value (& mut self, value : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::slot_count",
      "name": "slot_count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn slot_count (& self) -> usize",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::slots",
      "name": "slots",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "Chooses the visual/code length. Values outside 1 through 12 use the nearest bound so the control remains legible and finite.",
      "documentation": "Chooses the visual/code length. Values outside 1 through 12 use the\nnearest bound so the control remains legible and finite.",
      "signature": "pub fn slots (mut self, slots : usize) -> Self",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "Seeds the sensitive text without reporting a caller edit.",
      "documentation": "Seeds the sensitive text without reporting a caller edit.",
      "signature": "pub fn text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInput::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn value (& self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "OneTimeCodeInput"
    },
    {
      "id": "gpui_kit::controls::auth::OneTimeCodeInputEvent",
      "name": "OneTimeCodeInputEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "What a one-time code field reports to its owner.",
      "documentation": "What a one-time code field reports to its owner.",
      "signature": "# [doc = \" What a one-time code field reports to its owner.\"] # [derive (Clone, PartialEq, Eq)] pub enum OneTimeCodeInputEvent { Change (SharedString), Submit, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput",
      "name": "PasswordInput",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "One sensitive password editor with a visual reveal action.",
      "documentation": "One sensitive password editor with a visual reveal action.\n\nRevealing changes only the pixels. The value remains a secret for\ndeterministic semantics, AccessKit text runs and values, Debug, and\nclipboard copy/cut.",
      "signature": "# [doc = \" One sensitive password editor with a visual reveal action.\"] # [doc = \"\"] # [doc = \" Revealing changes only the pixels. The value remains a secret for\"] # [doc = \" deterministic semantics, AccessKit text runs and values, Debug, and\"] # [doc = \" clipboard copy/cut.\"] pub struct PasswordInput { ident : Ident, field : Entity<TextInput>, reveal_focus : FocusHandle, placeholder : Option<SharedString>, name : Option<SharedString>, initial : Option<SharedString>, size : ControlSize, input_options : gpui::TextInputOptions, disabled : bool, invalid : bool, required : bool, read_only : bool, revealed : bool, seeded : bool, configured : bool, _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::bind",
      "name": "bind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "Keeps a password field and a caller-owned [`Signal`] holding the same text.",
      "documentation": "Keeps a password field and a caller-owned [`Signal`] holding the same\ntext.\n\nThe signal is the caller's storage for a credential, and it stays the\ncaller's: nothing here writes it anywhere else, and a [`Signal`] does\nnot print what it holds. Neither direction fires when the two already\nagree.\n\nThe subscriptions are the binding: the caller holds them for as long\nas the field and the signal should stay together.",
      "signature": "pub fn bind (field : & Entity<Self>, signal : & Signal<String>, cx : & mut App) -> Vec<Subscription>",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::input_options",
      "name": "input_options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "Caller-selected keyboard and autofill hints; reveal never removes the editor's secure flag. Next/previous emit [`gpui::TextInputAction`].",
      "documentation": "Caller-selected keyboard and autofill hints; reveal never removes the\neditor's secure flag. Next/previous emit [`gpui::TextInputAction`].",
      "signature": "pub fn input_options (mut self, options : gpui::TextInputOptions) -> Self",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::is_revealed",
      "name": "is_revealed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_revealed (& self) -> bool",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "Names the one native password input when its visible label is outside this view.",
      "documentation": "Names the one native password input when its visible label is outside\nthis view.",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::read_only",
      "name": "read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn read_only (mut self, read_only : bool) -> Self",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::required",
      "name": "required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn required (mut self, required : bool) -> Self",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::selected_range",
      "name": "selected_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_range (& self, cx : & App) -> Range<usize>",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::set_input_options",
      "name": "set_input_options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "Updates native hints while retaining the sensitive editing session.",
      "documentation": "Updates native hints while retaining the sensitive editing session.",
      "signature": "pub fn set_input_options (& mut self, options : gpui::TextInputOptions, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::set_invalid",
      "name": "set_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_invalid (& mut self, invalid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::set_name",
      "name": "set_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "`None` removes the name without replacing the sensitive editor.",
      "documentation": "`None` removes the name without replacing the sensitive editor.",
      "signature": "pub fn set_name (& mut self, name : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::set_placeholder",
      "name": "set_placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "`None` restores the native empty placeholder.",
      "documentation": "`None` restores the native empty placeholder.",
      "signature": "pub fn set_placeholder (& mut self, placeholder : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::set_read_only",
      "name": "set_read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_read_only (& mut self, read_only : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::set_required",
      "name": "set_required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_required (& mut self, required : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::set_value",
      "name": "set_value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_value (& mut self, value : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "Seeds the sensitive text without reporting a caller edit.",
      "documentation": "Seeds the sensitive text without reporting a caller edit.",
      "signature": "pub fn text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInput::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn value (& self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "PasswordInput"
    },
    {
      "id": "gpui_kit::controls::auth::PasswordInputEvent",
      "name": "PasswordInputEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::auth",
      "path": "gpui_kit::controls::auth",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "What a password field reports to its owner.",
      "documentation": "What a password field reports to its owner.",
      "signature": "# [doc = \" What a password field reports to its owner.\"] # [derive (Clone, PartialEq, Eq)] pub enum PasswordInputEvent { Change (SharedString), Submit, Cancel, BackspaceAtStart, Focus, Blur, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::button::Button",
      "name": "Button",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "A labeled action.",
      "documentation": "A labeled action.\n\nThe click handler is only installed when the button is enabled and not\nloading, so an unavailable action cannot fire through a stray event.",
      "signature": "# [doc = \" A labeled action.\"] # [doc = \"\"] # [doc = \" The click handler is only installed when the button is enabled and not\"] # [doc = \" loading, so an unavailable action cannot fire through a stray event.\"] # [derive (IntoElement)] pub struct Button { ident : Ident, semantic_parent : Option<SharedString>, focus_handle : Option<FocusHandle>, label : Option<SharedString>, # [doc = \" What the button is called when the label is not what it is called, or\"] # [doc = \" when there is no label at all.\"] name : Option<SharedString>, description : Option<SharedString>, glyph : Option<Icon>, icon_position : IconPosition, variant : ButtonVariant, tier : Option<Variant>, color : Option<ColorChoice>, ground : Surface, size : ControlSize, disabled : bool, selected : bool, checked : Option<bool>, loading : bool, full_width : bool, icon_only : bool, join : ButtonJoin, on_click : Option<ClickHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::button::Button::accessible_description",
      "name": "accessible_description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "Adds supplementary literal help to the native button node.",
      "documentation": "Adds supplementary literal help to the native button node.",
      "signature": "pub fn accessible_description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::accessible_name",
      "name": "accessible_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "What assistive technology and a test call this action.",
      "documentation": "What assistive technology and a test call this action.\n\nOverrides the label, which a graphic button does not have.",
      "signature": "pub fn accessible_name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::checked_state",
      "name": "checked_state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "Publishes an explicit two-state answer, for a button that stays in.",
      "documentation": "Publishes an explicit two-state answer, for a button that stays in.\n\nA selected button publishes `checked` only when it is selected, because\n\"this is the current one\" has no meaningful false. A toggle does: out\nis a state, not the absence of one, so it says so.",
      "signature": "pub fn checked_state (mut self, checked : bool) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "The colour the shared tiers are resolved against.",
      "documentation": "The colour the shared tiers are resolved against.\n\nSetting a colour moves the button onto [`Theme::variant_colors`]; the\ntier defaults to the one the current weight maps to, so `.danger()`\nwith a colour keeps reading as filled intent in that colour.",
      "signature": "pub fn color (mut self, color : impl Into<ColorChoice>) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::danger",
      "name": "danger",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn danger (self) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::full_width",
      "name": "full_width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn full_width (mut self, full_width : bool) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::ghost",
      "name": "ghost",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ghost (self) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::ground",
      "name": "ground",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "The surface this control stands on.",
      "documentation": "The surface this control stands on.\n\nA neutral button normally takes the raised surface step above a panel.\nWhen that step does not clear the theme's surface-separation floor over\nthe ground named here, it uses the shared light-tier neutral wash\ninstead. The default remains [`Surface::Panel`], preserving the paint\nof buttons built before this setting existed.",
      "signature": "pub fn ground (mut self, ground : Surface) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, glyph : Icon) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::icon_only",
      "name": "icon_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "Draws the button as a square carrying only its glyph, and names it.",
      "documentation": "Draws the button as a square carrying only its glyph, and names it.\n\nThe name is required rather than optional because a glyph on its own\nis an action nobody can announce or address.",
      "signature": "pub fn icon_only (mut self, glyph : Icon, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::icon_position",
      "name": "icon_position",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon_position (mut self, position : IconPosition) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::join",
      "name": "join",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "Places the button in a joined run.",
      "documentation": "Places the button in a joined run.",
      "signature": "pub fn join (mut self, join : ButtonJoin) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::link",
      "name": "link",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn link (self) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::loading",
      "name": "loading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "Marks the action as in flight. A loading button is not actionable.",
      "documentation": "Marks the action as in flight. A loading button is not actionable.",
      "signature": "pub fn loading (mut self, loading : bool) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "A new button carries Primary weight until told otherwise: it is the one decision its local area is asking for, so a second action on the same surface must say it is [`Button::secondary`] or [`Button::ghost`]. [`IconButton`] starts Ghost instead, because a bare glyph is almost never that one decision.",
      "documentation": "A new button carries Primary weight until told otherwise: it is the\none decision its local area is asking for, so a second action on the\nsame surface must say it is [`Button::secondary`] or [`Button::ghost`].\n[`IconButton`] starts Ghost instead, because a bare glyph is almost\nnever that one decision.",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::on_click",
      "name": "on_click",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_click (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::primary",
      "name": "primary",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn primary (self) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::secondary",
      "name": "secondary",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn secondary (self) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::semantic_parent",
      "name": "semantic_parent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "Names the surface this action belongs to in the semantic tree, so a reader can tell which notification or row an action came from.",
      "documentation": "Names the surface this action belongs to in the semantic tree, so a\nreader can tell which notification or row an action came from.",
      "signature": "pub fn semantic_parent (mut self, parent : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::track_focus",
      "name": "track_focus",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "Puts the button on a caller-owned focus handle.",
      "documentation": "Puts the button on a caller-owned focus handle.\n\nAn overlay that keeps its own tab order needs a handle it can focus\ndirectly, and the published node then reports whether the keyboard is\non this action.",
      "signature": "pub fn track_focus (mut self, handle : & FocusHandle) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::Button::variant",
      "name": "variant",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn variant (mut self, variant : impl Into<ButtonStyle>) -> Self",
      "cfg": [],
      "target": "Button"
    },
    {
      "id": "gpui_kit::controls::button::ButtonGroup",
      "name": "ButtonGroup",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "Adjacent related actions sharing one frame.",
      "documentation": "Adjacent related actions sharing one frame.\n\nThe group reports nothing: every action still reports itself, and the\ngroup only decides where the corners are. It publishes a `Group` node so\nthe actions inside it can be addressed as a set, and names each button as\nits child.",
      "signature": "# [doc = \" Adjacent related actions sharing one frame.\"] # [doc = \"\"] # [doc = \" The group reports nothing: every action still reports itself, and the\"] # [doc = \" group only decides where the corners are. It publishes a `Group` node so\"] # [doc = \" the actions inside it can be addressed as a set, and names each button as\"] # [doc = \" its child.\"] # [derive (IntoElement)] pub struct ButtonGroup { ident : Ident, buttons : Vec<EffectScoped<Button>>, size : ControlSize, disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::button::ButtonGroup::child",
      "name": "child",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn child (mut self, button : impl Into<EffectScoped<Button>>) -> Self",
      "cfg": [],
      "target": "ButtonGroup"
    },
    {
      "id": "gpui_kit::controls::button::ButtonGroup::children",
      "name": "children",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn children<B : Into<EffectScoped<Button>>> (mut self, buttons : impl IntoIterator<Item = B>,) -> Self",
      "cfg": [],
      "target": "ButtonGroup"
    },
    {
      "id": "gpui_kit::controls::button::ButtonGroup::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "ButtonGroup"
    },
    {
      "id": "gpui_kit::controls::button::ButtonJoin",
      "name": "ButtonJoin",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "Where a button sits in a joined run of them.",
      "documentation": "Where a button sits in a joined run of them.\n\nA joined button gives up the radius on the side it touches its neighbour\nand overlaps its border, so the run reads as one frame.",
      "signature": "# [doc = \" Where a button sits in a joined run of them.\"] # [doc = \"\"] # [doc = \" A joined button gives up the radius on the side it touches its neighbour\"] # [doc = \" and overlaps its border, so the run reads as one frame.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum ButtonJoin { # [default] Alone, Leading, Middle, Trailing, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::button::ButtonStyle",
      "name": "ButtonStyle",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "Either presentation vocabulary a button accepts.",
      "documentation": "Either presentation vocabulary a button accepts.\n\n[`ButtonVariant`] is the button's own weight ladder; [`Variant`] is the\nshared tier system every coloured component resolves through\n[`Theme::variant_colors`]. `.variant(..)` takes both, so a caller moving\nto the shared tiers changes an argument, not a method.",
      "signature": "# [doc = \" Either presentation vocabulary a button accepts.\"] # [doc = \"\"] # [doc = \" [`ButtonVariant`] is the button's own weight ladder; [`Variant`] is the\"] # [doc = \" shared tier system every coloured component resolves through\"] # [doc = \" [`Theme::variant_colors`]. `.variant(..)` takes both, so a caller moving\"] # [doc = \" to the shared tiers changes an argument, not a method.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum ButtonStyle { Weight (ButtonVariant), Tier (Variant), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::button::ButtonVariant",
      "name": "ButtonVariant",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "How much weight an action carries. Primary is the one decision a local area is asking for; Danger is reserved for irreversible intent.",
      "documentation": "How much weight an action carries. Primary is the one decision a local\narea is asking for; Danger is reserved for irreversible intent.",
      "signature": "# [doc = \" How much weight an action carries. Primary is the one decision a local\"] # [doc = \" area is asking for; Danger is reserved for irreversible intent.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum ButtonVariant { # [default] Primary, Secondary, Ghost, Danger, Link, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::button::IconButton",
      "name": "IconButton",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "An action carried by a glyph alone.",
      "documentation": "An action carried by a glyph alone.\n\nThe accessible name is a constructor argument rather than an option: an\nicon with no name is an action neither a screen reader nor a test can\naddress, and there is no sensible default for what a picture means.\nEverything else — tone, size, refusal, the action in flight — is\n[`Button`]'s behaviour, reused rather than reimplemented.\n\nWhere [`Button`] starts Primary, this starts Ghost: a bare glyph is\nalmost never the one decision an area is asking for, so weight on one is\nsomething a caller opts into rather than something it has to remember to\ntake away.",
      "signature": "# [doc = \" An action carried by a glyph alone.\"] # [doc = \"\"] # [doc = \" The accessible name is a constructor argument rather than an option: an\"] # [doc = \" icon with no name is an action neither a screen reader nor a test can\"] # [doc = \" address, and there is no sensible default for what a picture means.\"] # [doc = \" Everything else — tone, size, refusal, the action in flight — is\"] # [doc = \" [`Button`]'s behaviour, reused rather than reimplemented.\"] # [doc = \"\"] # [doc = \" Where [`Button`] starts Primary, this starts Ghost: a bare glyph is\"] # [doc = \" almost never the one decision an area is asking for, so weight on one is\"] # [doc = \" something a caller opts into rather than something it has to remember to\"] # [doc = \" take away.\"] # [derive (IntoElement)] pub struct IconButton { button : Button, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::button::IconButton::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "The colour the shared tiers are resolved against. See [`Button::color`].",
      "documentation": "The colour the shared tiers are resolved against. See [`Button::color`].",
      "signature": "pub fn color (mut self, color : impl Into<ColorChoice>) -> Self",
      "cfg": [],
      "target": "IconButton"
    },
    {
      "id": "gpui_kit::controls::button::IconButton::danger",
      "name": "danger",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn danger (self) -> Self",
      "cfg": [],
      "target": "IconButton"
    },
    {
      "id": "gpui_kit::controls::button::IconButton::ghost",
      "name": "ghost",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ghost (self) -> Self",
      "cfg": [],
      "target": "IconButton"
    },
    {
      "id": "gpui_kit::controls::button::IconButton::ground",
      "name": "ground",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "The surface this control stands on. See [`Button::ground`].",
      "documentation": "The surface this control stands on. See [`Button::ground`].",
      "signature": "pub fn ground (mut self, ground : Surface) -> Self",
      "cfg": [],
      "target": "IconButton"
    },
    {
      "id": "gpui_kit::controls::button::IconButton::join",
      "name": "join",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn join (mut self, join : ButtonJoin) -> Self",
      "cfg": [],
      "target": "IconButton"
    },
    {
      "id": "gpui_kit::controls::button::IconButton::loading",
      "name": "loading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn loading (mut self, loading : bool) -> Self",
      "cfg": [],
      "target": "IconButton"
    },
    {
      "id": "gpui_kit::controls::button::IconButton::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, glyph : Icon, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "IconButton"
    },
    {
      "id": "gpui_kit::controls::button::IconButton::on_click",
      "name": "on_click",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_click (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "IconButton"
    },
    {
      "id": "gpui_kit::controls::button::IconButton::primary",
      "name": "primary",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn primary (self) -> Self",
      "cfg": [],
      "target": "IconButton"
    },
    {
      "id": "gpui_kit::controls::button::IconButton::secondary",
      "name": "secondary",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn secondary (self) -> Self",
      "cfg": [],
      "target": "IconButton"
    },
    {
      "id": "gpui_kit::controls::button::IconButton::semantic_parent",
      "name": "semantic_parent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn semantic_parent (mut self, parent : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "IconButton"
    },
    {
      "id": "gpui_kit::controls::button::IconButton::track_focus",
      "name": "track_focus",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn track_focus (mut self, handle : & FocusHandle) -> Self",
      "cfg": [],
      "target": "IconButton"
    },
    {
      "id": "gpui_kit::controls::button::IconButton::variant",
      "name": "variant",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn variant (mut self, variant : impl Into<ButtonStyle>) -> Self",
      "cfg": [],
      "target": "IconButton"
    },
    {
      "id": "gpui_kit::controls::button::IconPosition",
      "name": "IconPosition",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::button",
      "path": "gpui_kit::controls::button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "Which side of the label the glyph sits on.",
      "documentation": "Which side of the label the glyph sits on.",
      "signature": "# [doc = \" Which side of the label the glyph sits on.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum IconPosition { # [default] Leading, Trailing, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader",
      "name": "Cascader",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "A menu of progressively revealed caller-owned option columns.",
      "documentation": "A menu of progressively revealed caller-owned option columns.",
      "signature": "# [doc = \" A menu of progressively revealed caller-owned option columns.\"] pub struct Cascader { ident : Ident, focus_handle : FocusHandle, options : Vec<CascaderOption>, selected : Option<SharedString>, name : SharedString, placeholder : Option<SharedString>, size : ControlSize, disabled : bool, open : bool, open_path : Vec<SharedString>, active : Option<SharedString>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "Closes the transient option surface and clears its open path.",
      "documentation": "Closes the transient option surface and clears its open path.",
      "signature": "pub fn close (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self) -> bool",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, _window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "Opens the transient option surface without changing any caller-owned value.",
      "documentation": "Opens the transient option surface without changing any caller-owned value.",
      "signature": "pub fn open (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::open_path",
      "name": "open_path",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn open_path (& self) -> & [SharedString]",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::options",
      "name": "options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn options (mut self, options : impl IntoIterator<Item = CascaderOption>) -> Self",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::selected_id",
      "name": "selected_id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_id (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::set_name",
      "name": "set_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_name (& mut self, name : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::set_options",
      "name": "set_options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_options (& mut self, options : Vec<CascaderOption>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::set_placeholder",
      "name": "set_placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_placeholder (& mut self, placeholder : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::Cascader::set_selected",
      "name": "set_selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_selected (& mut self, selected : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Cascader"
    },
    {
      "id": "gpui_kit::controls::cascader::CascaderEvent",
      "name": "CascaderEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, PartialEq, Eq)] pub enum CascaderEvent { Selected (SharedString), Expanded (SharedString), Retry (SharedString), Opened, Closed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::cascader::CascaderOption",
      "name": "CascaderOption",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "One caller-owned node in a cascader.",
      "documentation": "One caller-owned node in a cascader.",
      "signature": "# [doc = \" One caller-owned node in a cascader.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct CascaderOption { pub id : SharedString, pub label : SharedString, pub disabled : bool, # [doc = \" `None` is a leaf; `Some` is a branch, including before it is loaded.\"] pub children : Option<Loadable<Vec<CascaderOption>, SharedString>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::cascader::CascaderOption::children",
      "name": "children",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn children (mut self, children : impl IntoIterator<Item = CascaderOption>) -> Self",
      "cfg": [],
      "target": "CascaderOption"
    },
    {
      "id": "gpui_kit::controls::cascader::CascaderOption::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "CascaderOption"
    },
    {
      "id": "gpui_kit::controls::cascader::CascaderOption::empty_children",
      "name": "empty_children",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn empty_children (mut self) -> Self",
      "cfg": [],
      "target": "CascaderOption"
    },
    {
      "id": "gpui_kit::controls::cascader::CascaderOption::error_children",
      "name": "error_children",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn error_children (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CascaderOption"
    },
    {
      "id": "gpui_kit::controls::cascader::CascaderOption::idle_children",
      "name": "idle_children",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn idle_children (mut self) -> Self",
      "cfg": [],
      "target": "CascaderOption"
    },
    {
      "id": "gpui_kit::controls::cascader::CascaderOption::loading_children",
      "name": "loading_children",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn loading_children (mut self) -> Self",
      "cfg": [],
      "target": "CascaderOption"
    },
    {
      "id": "gpui_kit::controls::cascader::CascaderOption::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CascaderOption"
    },
    {
      "id": "gpui_kit::controls::cascader::CascaderOption::unavailable_children",
      "name": "unavailable_children",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::cascader",
      "path": "gpui_kit::controls::cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn unavailable_children (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CascaderOption"
    },
    {
      "id": "gpui_kit::controls::color_picker::ColorPicker",
      "name": "ColorPicker",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::color_picker",
      "path": "gpui_kit::controls::color_picker",
      "source": "crates/gpui-kit/src/controls/color_picker.rs",
      "summary": "Hue, saturation-brightness, optional opacity, and host-owned swatches.",
      "documentation": "Hue, saturation-brightness, optional opacity, and host-owned swatches.",
      "signature": "# [doc = \" Hue, saturation-brightness, optional opacity, and host-owned swatches.\"] # [derive (IntoElement)] pub struct ColorPicker { ident : Ident, value : Hsla, alpha : bool, presets : Vec<Hsla>, recent : Vec<Hsla>, disabled : bool, on_change : Option<ChangeHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::color_picker::ColorPicker::alpha",
      "name": "alpha",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::color_picker",
      "path": "gpui_kit::controls::color_picker",
      "source": "crates/gpui-kit/src/controls/color_picker.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn alpha (mut self, alpha : bool) -> Self",
      "cfg": [],
      "target": "ColorPicker"
    },
    {
      "id": "gpui_kit::controls::color_picker::ColorPicker::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::color_picker",
      "path": "gpui_kit::controls::color_picker",
      "source": "crates/gpui-kit/src/controls/color_picker.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, value : Hsla) -> Self",
      "cfg": [],
      "target": "ColorPicker"
    },
    {
      "id": "gpui_kit::controls::color_picker::ColorPicker::on_change",
      "name": "on_change",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::color_picker",
      "path": "gpui_kit::controls::color_picker",
      "source": "crates/gpui-kit/src/controls/color_picker.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_change (mut self, handler : impl Fn (Hsla, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "ColorPicker"
    },
    {
      "id": "gpui_kit::controls::color_picker::ColorPicker::presets",
      "name": "presets",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::color_picker",
      "path": "gpui_kit::controls::color_picker",
      "source": "crates/gpui-kit/src/controls/color_picker.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn presets (mut self, colors : impl IntoIterator<Item = Hsla>) -> Self",
      "cfg": [],
      "target": "ColorPicker"
    },
    {
      "id": "gpui_kit::controls::color_picker::ColorPicker::recent",
      "name": "recent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::color_picker",
      "path": "gpui_kit::controls::color_picker",
      "source": "crates/gpui-kit/src/controls/color_picker.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn recent (mut self, colors : impl IntoIterator<Item = Hsla>) -> Self",
      "cfg": [],
      "target": "ColorPicker"
    },
    {
      "id": "gpui_kit::controls::color_picker::ColorSwatch",
      "name": "ColorSwatch",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::color_picker",
      "path": "gpui_kit::controls::color_picker",
      "source": "crates/gpui-kit/src/controls/color_picker.rs",
      "summary": "A clickable colour chip. Reports the colour it was given; applies nothing.",
      "documentation": "A clickable colour chip. Reports the colour it was given; applies nothing.",
      "signature": "# [doc = \" A clickable colour chip. Reports the colour it was given; applies nothing.\"] # [derive (IntoElement)] pub struct ColorSwatch { ident : Ident, color : Hsla, selected : bool, disabled : bool, on_click : Option<ChangeHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::color_picker::ColorSwatch::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::color_picker",
      "path": "gpui_kit::controls::color_picker",
      "source": "crates/gpui-kit/src/controls/color_picker.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, color : Hsla) -> Self",
      "cfg": [],
      "target": "ColorSwatch"
    },
    {
      "id": "gpui_kit::controls::color_picker::ColorSwatch::on_click",
      "name": "on_click",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::color_picker",
      "path": "gpui_kit::controls::color_picker",
      "source": "crates/gpui-kit/src/controls/color_picker.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_click (mut self, handler : impl Fn (Hsla, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "ColorSwatch"
    },
    {
      "id": "gpui_kit::controls::color_picker::ColorSwatch::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::color_picker",
      "path": "gpui_kit::controls::color_picker",
      "source": "crates/gpui-kit/src/controls/color_picker.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : bool) -> Self",
      "cfg": [],
      "target": "ColorSwatch"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox",
      "name": "Combobox",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "A [`Select`](crate::controls::select::Select) you can type into.",
      "documentation": "A [`Select`](crate::controls::select::Select) you can type into.\n\nIt owns the query and whether the menu is open. Which option holds is the\ncaller's answer, so escape puts the query back to it and reports nothing.",
      "signature": "# [doc = \" A [`Select`](crate::controls::select::Select) you can type into.\"] # [doc = \"\"] # [doc = \" It owns the query and whether the menu is open. Which option holds is the\"] # [doc = \" caller's answer, so escape puts the query back to it and reports nothing.\"] pub struct Combobox { ident : Ident, query : Entity<TextInput>, options : Vec<SelectOption>, selected : Option<SharedString>, name : SharedString, placeholder : Option<SharedString>, size : ControlSize, disabled : bool, invalid : bool, open : bool, # [doc = \" The highlighted option by identity, so filtering does not move the\"] # [doc = \" highlight onto whatever happens to sit at the same position.\"] active : Option<SharedString>, allow_custom : bool, # [doc = \" Whether the current answer has been put in the field. The text is the\"] # [doc = \" typist's afterwards, so it is written once.\"] seeded : bool, scroll : ScrollHandle, trigger_bounds : Rc<Cell<Bounds<Pixels>>>, reveal_active : bool, menu_geometry : Option<popover::MenuGeometry>, presentation : popover::PickerPresentation, sheet : Option<popover::PickerSheet>, slots : Slots, # [doc = \" Held so the query subscription lives as long as the combobox does.\"] _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::allow_custom",
      "name": "allow_custom",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "Whether a query nothing answers may be reported as a new value.",
      "documentation": "Whether a query nothing answers may be reported as a new value.\n\nWith it off the combobox reports nothing at all for such a query, and\nthe list says that this is a closed set rather than drawing an empty\nlist that looks like a list with nothing in it.",
      "signature": "pub fn allow_custom (mut self, allow_custom : bool) -> Self",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self) -> bool",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "Names both the combobox and its editable query target.",
      "documentation": "Names both the combobox and its editable query target.",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn open (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::options",
      "name": "options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn options (mut self, options : impl IntoIterator<Item = SelectOption>) -> Self",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::presentation",
      "name": "presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "Chooses an anchored menu or retained bottom modal for the same options.",
      "documentation": "Chooses an anchored menu or retained bottom modal for the same options.",
      "signature": "pub fn presentation (mut self, presentation : popover::PickerPresentation) -> Self",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::query_input",
      "name": "query_input",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn query_input (& self) -> & Entity<TextInput>",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::query_text",
      "name": "query_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn query_text (& self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::selected_id",
      "name": "selected_id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_id (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::selected_option",
      "name": "selected_option",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_option (& self) -> Option<& SelectOption>",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::set_allow_custom",
      "name": "set_allow_custom",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_allow_custom (& mut self, allow : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::set_invalid",
      "name": "set_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "Draws the control as refused after it was built, for an owner that learns the answer is wrong later — a host that rejected it, or a form that found a required answer missing. Without it the message and the control it is about disagree.",
      "documentation": "Draws the control as refused after it was built, for an owner that\nlearns the answer is wrong later — a host that rejected it, or a form\nthat found a required answer missing. Without it the message and the\ncontrol it is about disagree.",
      "signature": "pub fn set_invalid (& mut self, invalid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::set_name",
      "name": "set_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_name (& mut self, name : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::set_options",
      "name": "set_options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_options (& mut self, options : Vec<SelectOption>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::set_placeholder",
      "name": "set_placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "Restore the localized default with `None`, retaining the query editor.",
      "documentation": "Restore the localized default with `None`, retaining the query editor.",
      "signature": "pub fn set_placeholder (& mut self, placeholder : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::set_presentation",
      "name": "set_presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "Changes presentation without resetting the query or caller selection.",
      "documentation": "Changes presentation without resetting the query or caller selection.",
      "signature": "pub fn set_presentation (& mut self, presentation : popover::PickerPresentation, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::set_query",
      "name": "set_query",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_query (& mut self, text : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::set_selected",
      "name": "set_selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "Replaces the choice from the host side, and puts its label back in the field so the query and the answer agree again.",
      "documentation": "Replaces the choice from the host side, and puts its label back in the\nfield so the query and the answer agree again.",
      "signature": "pub fn set_selected (& mut self, id : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::Combobox::toggle",
      "name": "toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn toggle (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Combobox"
    },
    {
      "id": "gpui_kit::controls::combobox::ComboboxEvent",
      "name": "ComboboxEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::combobox",
      "path": "gpui_kit::controls::combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "What a combobox reports. The owner decides what any of it means.",
      "documentation": "What a combobox reports. The owner decides what any of it means.",
      "signature": "# [doc = \" What a combobox reports. The owner decides what any of it means.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum ComboboxEvent { QueryChanged (SharedString), # [doc = \" One of the offered options was taken.\"] Selected (SharedString), # [doc = \" A value nothing offered answers, reported only when the caller allows\"] # [doc = \" custom values.\"] Custom (SharedString), Opened, Closed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton",
      "name": "CopyButton",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "A button that copies caller-supplied text and confirms what happened.",
      "documentation": "A button that copies caller-supplied text and confirms what happened.",
      "signature": "# [doc = \" A button that copies caller-supplied text and confirms what happened.\"] pub struct CopyButton { ident : Ident, focus_handle : FocusHandle, text : SharedString, label : Option<SharedString>, # [doc = \" What the button is called when it carries only a glyph.\"] name : Option<SharedString>, glyph_only : bool, variant : ButtonVariant, size : ControlSize, disabled : bool, copier : Option<Copier>, confirmation : Duration, state : CopyState, # [doc = \" Whether the current refusal came from the fallback clipboard check.\"] default_failure : bool, # [doc = \" How much of the confirmation is left, and when it was last spent.\"] remaining : Option<Duration>, last_tick : Option<Instant>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::clear_copier",
      "name": "clear_copier",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "Restores owner-checked platform write and readback for future copies.",
      "documentation": "Restores owner-checked platform write and readback for future copies.",
      "signature": "pub fn clear_copier (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::confirmation",
      "name": "confirmation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "How long a confirmation stays. A refusal is not timed and this does not touch it.",
      "documentation": "How long a confirmation stays. A refusal is not timed and this does not\ntouch it.",
      "signature": "pub fn confirmation (mut self, confirmation : Duration) -> Self",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::copier",
      "name": "copier",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "Supplies a host that knows whether the copy worked.",
      "documentation": "Supplies a host that knows whether the copy worked.\n\nThe default writes to the platform clipboard and reads it back; a host\nwith a better answer replaces it, and the failure text it returns is\nshown verbatim rather than reworded.",
      "signature": "pub fn copier (mut self, copier : impl Fn (& str, & mut App) -> Result<(), SharedString> + 'static,) -> Self",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::copy",
      "name": "copy",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "Does the copy and records what actually happened.",
      "documentation": "Does the copy and records what actually happened.",
      "signature": "pub fn copy (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::glyph_only",
      "name": "glyph_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "Draws the button as a square carrying only its glyph, and names it.",
      "documentation": "Draws the button as a square carrying only its glyph, and names it.",
      "signature": "pub fn glyph_only (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "Words on the button instead of the catalogue's own.",
      "documentation": "Words on the button instead of the catalogue's own.",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, _window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::set_confirmation",
      "name": "set_confirmation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "Sets the duration for future copies without restarting an active confirmation.",
      "documentation": "Sets the duration for future copies without restarting an active confirmation.",
      "signature": "pub fn set_confirmation (& mut self, confirmation : Duration, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::set_copier",
      "name": "set_copier",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "Replaces the native host copier without changing the last outcome.",
      "documentation": "Replaces the native host copier without changing the last outcome.",
      "signature": "pub fn set_copier (& mut self, copier : impl Fn (& str, & mut App) -> Result<(), SharedString> + 'static, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::set_glyph_only",
      "name": "set_glyph_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "Enables a named glyph-only button, or restores labeled mode with `None`.",
      "documentation": "Enables a named glyph-only button, or restores labeled mode with `None`.",
      "signature": "pub fn set_glyph_only (& mut self, name : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::set_label",
      "name": "set_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "Replaces the label, or restores the localized default with `None`.",
      "documentation": "Replaces the label, or restores the localized default with `None`.",
      "signature": "pub fn set_label (& mut self, label : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::set_text",
      "name": "set_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "Replaces the payload from the host side, between frames.",
      "documentation": "Replaces the payload from the host side, between frames.",
      "signature": "pub fn set_text (& mut self, text : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::set_variant",
      "name": "set_variant",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_variant (& mut self, variant : ButtonVariant, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (& self) -> & CopyState",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "The text this button copies. Never published: a copy button is a plausible carrier of a credential, so the tree gets the button, not its payload.",
      "documentation": "The text this button copies. Never published: a copy button is a\nplausible carrier of a credential, so the tree gets the button, not its\npayload.",
      "signature": "pub fn text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyButton::variant",
      "name": "variant",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn variant (mut self, variant : ButtonVariant) -> Self",
      "cfg": [],
      "target": "CopyButton"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyEvent",
      "name": "CopyEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "What a copy button reports. The owner decides what any of it means.",
      "documentation": "What a copy button reports. The owner decides what any of it means.",
      "signature": "# [doc = \" What a copy button reports. The owner decides what any of it means.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum CopyEvent { Copied, # [doc = \" Carries the reason, which is the same text the button shows.\"] Failed (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyState",
      "name": "CopyState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "What the button is currently claiming.",
      "documentation": "What the button is currently claiming.",
      "signature": "# [doc = \" What the button is currently claiming.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum CopyState { # [doc = \" Nothing has been tried, or the last confirmation has expired.\"] # [default] Idle, # [doc = \" The clipboard took it, and reading it back agreed.\"] Copied, # [doc = \" It did not go through, for the reason carried here.\"] Failed (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyState::is_copied",
      "name": "is_copied",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_copied (& self) -> bool",
      "cfg": [],
      "target": "CopyState"
    },
    {
      "id": "gpui_kit::controls::copy_button::CopyState::is_failed",
      "name": "is_failed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_failed (& self) -> bool",
      "cfg": [],
      "target": "CopyState"
    },
    {
      "id": "gpui_kit::controls::copy_button::verified_clipboard_copy",
      "name": "verified_clipboard_copy",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::copy_button",
      "path": "gpui_kit::controls::copy_button",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "Writes to the platform clipboard and reads it back to check.",
      "documentation": "Writes to the platform clipboard and reads it back to check.\n\nThe readback verifies delivery; an authorized write alone is only submission.",
      "signature": "pub fn verified_clipboard_copy (text : & str, cx : & mut App) -> Result<(), SharedString>",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::dropzone::Dropzone",
      "name": "Dropzone",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::dropzone",
      "path": "gpui_kit::controls::dropzone",
      "source": "crates/gpui-kit/src/controls/dropzone.rs",
      "summary": "An area that accepts a drop.",
      "documentation": "An area that accepts a drop.",
      "signature": "# [doc = \" An area that accepts a drop.\"] # [derive (IntoElement)] pub struct Dropzone { ident : Ident, label : SharedString, hint : Option<SharedString>, # [doc = \" Why a payload this zone does not handle is refused.\"] refusal : Option<SharedString>, kinds : Vec<SharedString>, pinned : Option<DropzoneState>, disabled : bool, # [doc = \" Validation owned by a surrounding field, separate from a live drag\"] # [doc = \" payload this zone itself refuses.\"] invalid : bool, icon : Option<Icon>, on_drop : Option<DropHandler>, on_files : Option<FilesHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::dropzone::Dropzone::accepts",
      "name": "accepts",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::dropzone",
      "path": "gpui_kit::controls::dropzone",
      "source": "crates/gpui-kit/src/controls/dropzone.rs",
      "summary": "Which payload kinds this zone handles. Anything else is refused.",
      "documentation": "Which payload kinds this zone handles. Anything else is refused.",
      "signature": "pub fn accepts<S : Into<SharedString>> (mut self, kinds : impl IntoIterator<Item = S>) -> Self",
      "cfg": [],
      "target": "Dropzone"
    },
    {
      "id": "gpui_kit::controls::dropzone::Dropzone::hint",
      "name": "hint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::dropzone",
      "path": "gpui_kit::controls::dropzone",
      "source": "crates/gpui-kit/src/controls/dropzone.rs",
      "summary": "A second line, shown while the zone is idle.",
      "documentation": "A second line, shown while the zone is idle.",
      "signature": "pub fn hint (mut self, hint : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Dropzone"
    },
    {
      "id": "gpui_kit::controls::dropzone::Dropzone::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::dropzone",
      "path": "gpui_kit::controls::dropzone",
      "source": "crates/gpui-kit/src/controls/dropzone.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, icon : Icon) -> Self",
      "cfg": [],
      "target": "Dropzone"
    },
    {
      "id": "gpui_kit::controls::dropzone::Dropzone::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::dropzone",
      "path": "gpui_kit::controls::dropzone",
      "source": "crates/gpui-kit/src/controls/dropzone.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "Dropzone"
    },
    {
      "id": "gpui_kit::controls::dropzone::Dropzone::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::dropzone",
      "path": "gpui_kit::controls::dropzone",
      "source": "crates/gpui-kit/src/controls/dropzone.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Dropzone"
    },
    {
      "id": "gpui_kit::controls::dropzone::Dropzone::on_drop",
      "name": "on_drop",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::dropzone",
      "path": "gpui_kit::controls::dropzone",
      "source": "crates/gpui-kit/src/controls/dropzone.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_drop (mut self, handler : impl Fn (& DragItem, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Dropzone"
    },
    {
      "id": "gpui_kit::controls::dropzone::Dropzone::on_files",
      "name": "on_files",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::dropzone",
      "path": "gpui_kit::controls::dropzone",
      "source": "crates/gpui-kit/src/controls/dropzone.rs",
      "summary": "Reports paths the platform handed over when files were dropped.",
      "documentation": "Reports paths the platform handed over when files were dropped.\n\nThe paths are user-generated content, so they reach the handler and\nnever the semantic tree.",
      "signature": "pub fn on_files (mut self, handler : impl Fn (& ExternalPaths, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Dropzone"
    },
    {
      "id": "gpui_kit::controls::dropzone::Dropzone::refusal",
      "name": "refusal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::dropzone",
      "path": "gpui_kit::controls::dropzone",
      "source": "crates/gpui-kit/src/controls/dropzone.rs",
      "summary": "What the zone says when it refuses a payload.",
      "documentation": "What the zone says when it refuses a payload.",
      "signature": "pub fn refusal (mut self, refusal : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Dropzone"
    },
    {
      "id": "gpui_kit::controls::dropzone::Dropzone::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::dropzone",
      "path": "gpui_kit::controls::dropzone",
      "source": "crates/gpui-kit/src/controls/dropzone.rs",
      "summary": "Pins the zone to one state.",
      "documentation": "Pins the zone to one state.\n\nA live drag decides the state otherwise. Pinning exists so all three\ncan be reviewed side by side in a capture, which no single pointer\nposition could produce.",
      "signature": "pub fn state (mut self, state : DropzoneState) -> Self",
      "cfg": [],
      "target": "Dropzone"
    },
    {
      "id": "gpui_kit::controls::dropzone::DropzoneState",
      "name": "DropzoneState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::dropzone",
      "path": "gpui_kit::controls::dropzone",
      "source": "crates/gpui-kit/src/controls/dropzone.rs",
      "summary": "What a dropzone is currently saying.",
      "documentation": "What a dropzone is currently saying.",
      "signature": "# [doc = \" What a dropzone is currently saying.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum DropzoneState { Idle, Accepting, Refusing, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::dropzone::DropzoneState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::dropzone",
      "path": "gpui_kit::controls::dropzone",
      "source": "crates/gpui-kit/src/controls/dropzone.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "DropzoneState"
    },
    {
      "id": "gpui_kit::controls::editor::Editor",
      "name": "Editor",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "Plain source editing with caller-owned language policy.",
      "documentation": "Plain source editing with caller-owned language policy.",
      "signature": "# [doc = \" Plain source editing with caller-owned language policy.\"] pub struct Editor { ident : Ident, label : SharedString, area : Entity<TextArea>, rows : usize, line_numbers : bool, disabled : bool, read_only : bool, highlights : Option<EditorHighlights>, indenter : Option<Indenter>, services_enabled : bool, next_service_request : u64, service_popup : Option<services::ServicePopup>, hover_position : Option<(u64, usize)>, diagnostics : Option<(u64, Vec<EditorDiagnostic>)>, semantic_tokens : Option<(u64, Vec<EditorSemanticToken>)>, folds : Vec<EditorFold>, collapsed_folds : std::collections::HashSet<SharedString>, # [cfg (feature = \"syntax\")] syntax : Option<EditorSyntax>, _subscription : Subscription, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::Editor::apply_edits",
      "name": "apply_edits",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "Applies caller-supplied changes only to the revision they describe. Overlapping or invalid edits are refused before any text/history change.",
      "documentation": "Applies caller-supplied changes only to the revision they describe.\nOverlapping or invalid edits are refused before any text/history change.",
      "signature": "pub fn apply_edits (& mut self, revision : u64, edits : impl IntoIterator<Item = (Range<usize>, SharedString)>, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::geometry",
      "name": "geometry",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn geometry (& self, cx : & App) -> Option<EditorGeometry>",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::highlights",
      "name": "highlights",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn highlights (mut self, highlights : EditorHighlights) -> Self",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::indent_with",
      "name": "indent_with",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "Installs a synchronous, caller-owned indentation policy.",
      "documentation": "Installs a synchronous, caller-owned indentation policy.\n\nWithout one, tab is not claimed by the editor. The policy receives an\nimmutable revision and returns at most one replacement; it never gets\naccess to the editor's internal buffer or history.",
      "signature": "pub fn indent_with (mut self, indenter : impl Fn (EditorIndentRequest) -> Option<EditorIndentation> + 'static,) -> Self",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::is_read_only",
      "name": "is_read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_read_only (& self) -> bool",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::line_numbers",
      "name": "line_numbers",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn line_numbers (mut self, visible : bool) -> Self",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, text : impl Into<SharedString>, window : & mut Window, cx : & mut Context<Self>,) -> Self",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::read_only",
      "name": "read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn read_only (mut self, read_only : bool) -> Self",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::rows",
      "name": "rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::select_rectangle",
      "name": "select_rectangle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn select_rectangle (& mut self, anchor : Point<Pixels>, focus : Point<Pixels>, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::selected_range",
      "name": "selected_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_range (& self, cx : & App) -> Range<usize>",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::selections",
      "name": "selections",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "Primary-first selections owned by the shared input/history surface.",
      "documentation": "Primary-first selections owned by the shared input/history surface.",
      "signature": "pub fn selections (& self, cx : & App) -> Vec<(Range<usize>, bool)>",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::set_highlights",
      "name": "set_highlights",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_highlights (& mut self, highlights : EditorHighlights, cx : & mut Context<Self>) -> bool",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::set_indent_with",
      "name": "set_indent_with",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "Replaces the caller indentation policy in place. `None` restores literal Tab input. The closure is never called merely to update this option.",
      "documentation": "Replaces the caller indentation policy in place. `None` restores literal\nTab input. The closure is never called merely to update this option.",
      "signature": "pub fn set_indent_with (& mut self, indenter : Option<Rc<dyn Fn (EditorIndentRequest) -> Option<EditorIndentation>>>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::set_label",
      "name": "set_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_label (& mut self, label : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::set_language_services",
      "name": "set_language_services",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "Changes service bindings in place. Disabling cancels the visible request; late replies cannot restore its popup. Caller diagnostics remain intact.",
      "documentation": "Changes service bindings in place. Disabling cancels the visible request;\nlate replies cannot restore its popup. Caller diagnostics remain intact.",
      "signature": "pub fn set_language_services (& mut self, enabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::set_line_numbers",
      "name": "set_line_numbers",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_line_numbers (& mut self, visible : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::set_read_only",
      "name": "set_read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_read_only (& mut self, read_only : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::set_rows",
      "name": "set_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_rows (& mut self, rows : usize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::set_selections",
      "name": "set_selections",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_selections (& mut self, selections : impl IntoIterator<Item = (Range<usize>, bool)>, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::set_syntax",
      "name": "set_syntax",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "Installs/replaces a parser or removes it without replacing document state.",
      "documentation": "Installs/replaces a parser or removes it without replacing document state.",
      "signature": "pub fn set_syntax (& mut self, syntax : Option<EditorSyntax>, cx : & mut Context<Self>)",
      "cfg": [
        "cfg (feature = \"syntax\")"
      ],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::set_value",
      "name": "set_value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_value (& mut self, value : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::snapshot",
      "name": "snapshot",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn snapshot (& self, cx : & App) -> TextAreaSnapshot",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::syntax",
      "name": "syntax",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "Installs actual incremental in-process syntax parsing. Explicit caller highlights for the current revision take precedence over it.",
      "documentation": "Installs actual incremental in-process syntax parsing. Explicit\ncaller highlights for the current revision take precedence over it.",
      "signature": "pub fn syntax (mut self, syntax : EditorSyntax) -> Self",
      "cfg": [
        "cfg (feature = \"syntax\")"
      ],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::syntax_state",
      "name": "syntax_state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "The parser's current revision, captures, grammar errors and work counts.",
      "documentation": "The parser's current revision, captures, grammar errors and work counts.",
      "signature": "pub fn syntax_state (& self) -> Option<& EditorSyntax>",
      "cfg": [
        "cfg (feature = \"syntax\")"
      ],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::Editor::text_area",
      "name": "text_area",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text_area (& self) -> & Entity<TextArea>",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::EditorEvent",
      "name": "EditorEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "What a source editor reports to its owner.",
      "documentation": "What a source editor reports to its owner.",
      "signature": "# [doc = \" What a source editor reports to its owner.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum EditorEvent { # [doc = \" The host should answer this revision-tagged language request.\"] ServiceRequested (EditorServiceRequest), # [doc = \" A stable service item was accepted successfully.\"] ServiceAccepted (SharedString), # [doc = \" Navigation belongs to the caller's document/workspace host.\"] DefinitionRequested { target : SharedString, range : Range<usize>, }, # [doc = \" A caller-defined code action requires host execution.\"] CodeActionRequested (SharedString), # [doc = \" One replacement entered the shared undo history.\"] Edited (TextAreaEdit), # [doc = \" The value changed. The persistent snapshot does not materialize a\"] # [doc = \" contiguous string unless the recipient explicitly calls `text()`.\"] Changed (gpui::EditSnapshot), # [doc = \" The byte selection changed on grapheme boundaries.\"] SelectionChanged (Range<usize>), # [doc = \" A caller-identified fold changed its transient collapsed state.\"] FoldChanged { id : SharedString, collapsed : bool }, # [doc = \" The platform clipboard supplied non-text input.\"] Pasted (Pasted), # [doc = \" The configured submit chord was pressed.\"] Submitted, # [doc = \" Escape or the configured cancellation chord was pressed.\"] Cancelled, # [doc = \" The shared editing surface gained focus.\"] Focused, # [doc = \" The shared editing surface lost focus.\"] Blurred, # [doc = \" A revision was parsed in-process, including any grammar errors.\"] # [cfg (feature = \"syntax\")] Parsed { revision : u64, errors : Vec<EditorSyntaxError>, }, # [doc = \" The configured highlight query refused to publish a partial result.\"] # [cfg (feature = \"syntax\")] SyntaxUnavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::EditorGeometry",
      "name": "EditorGeometry",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "The measured source viewport, tagged with the revision it describes.",
      "documentation": "The measured source viewport, tagged with the revision it describes.",
      "signature": "# [doc = \" The measured source viewport, tagged with the revision it describes.\"] # [derive (Debug, Clone, PartialEq)] pub struct EditorGeometry { # [doc = \" The text revision whose hard lines were measured.\"] pub revision : u64, # [doc = \" The painted text viewport in window coordinates.\"] pub viewport : Bounds<Pixels>, # [doc = \" The no-wrap source row's offset from its logical left edge.\"] pub horizontal_scroll : Pixels, # [doc = \" The hard-line stack's offset from its logical top edge.\"] pub vertical_scroll : Pixels, # [doc = \" Every hard source line, in source order.\"] pub lines : Vec<EditorLineGeometry>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::EditorHighlight",
      "name": "EditorHighlight",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "One caller-owned style range in an editor revision.",
      "documentation": "One caller-owned style range in an editor revision.",
      "signature": "# [doc = \" One caller-owned style range in an editor revision.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct EditorHighlight { range : Range<usize>, style : HighlightStyle, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::EditorHighlight::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (range : Range<usize>, style : HighlightStyle) -> Self",
      "cfg": [],
      "target": "EditorHighlight"
    },
    {
      "id": "gpui_kit::controls::editor::EditorHighlight::range",
      "name": "range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn range (& self) -> & Range<usize>",
      "cfg": [],
      "target": "EditorHighlight"
    },
    {
      "id": "gpui_kit::controls::editor::EditorHighlight::style",
      "name": "style",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn style (& self) -> HighlightStyle",
      "cfg": [],
      "target": "EditorHighlight"
    },
    {
      "id": "gpui_kit::controls::editor::EditorHighlights",
      "name": "EditorHighlights",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "Syntax and diagnostic styles tagged with the text revision they describe.",
      "documentation": "Syntax and diagnostic styles tagged with the text revision they describe.",
      "signature": "# [doc = \" Syntax and diagnostic styles tagged with the text revision they describe.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct EditorHighlights { revision : u64, spans : Vec<EditorHighlight>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::EditorHighlights::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (revision : u64, spans : impl IntoIterator<Item = EditorHighlight>) -> Self",
      "cfg": [],
      "target": "EditorHighlights"
    },
    {
      "id": "gpui_kit::controls::editor::EditorHighlights::revision",
      "name": "revision",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn revision (& self) -> u64",
      "cfg": [],
      "target": "EditorHighlights"
    },
    {
      "id": "gpui_kit::controls::editor::EditorHighlights::spans",
      "name": "spans",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn spans (& self) -> & [EditorHighlight]",
      "cfg": [],
      "target": "EditorHighlights"
    },
    {
      "id": "gpui_kit::controls::editor::EditorIndentDirection",
      "name": "EditorIndentDirection",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "Which indentation chord the source editor received.",
      "documentation": "Which indentation chord the source editor received.",
      "signature": "# [doc = \" Which indentation chord the source editor received.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum EditorIndentDirection { Indent, Outdent, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::EditorIndentRequest",
      "name": "EditorIndentRequest",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "The immutable input to a caller-owned indentation policy.",
      "documentation": "The immutable input to a caller-owned indentation policy.",
      "signature": "# [doc = \" The immutable input to a caller-owned indentation policy.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct EditorIndentRequest { pub snapshot : TextAreaSnapshot, pub selection : Range<usize>, pub direction : EditorIndentDirection, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::EditorIndentation",
      "name": "EditorIndentation",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "One synchronous replacement returned by an indentation policy.",
      "documentation": "One synchronous replacement returned by an indentation policy.",
      "signature": "# [doc = \" One synchronous replacement returned by an indentation policy.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct EditorIndentation { pub range : Range<usize>, pub text : SharedString, # [doc = \" The selection to apply after replacement, in the resulting revision.\"] pub selection : Option<Range<usize>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::EditorIndentation::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (range : Range<usize>, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "EditorIndentation"
    },
    {
      "id": "gpui_kit::controls::editor::EditorIndentation::selection",
      "name": "selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selection (mut self, selection : Range<usize>) -> Self",
      "cfg": [],
      "target": "EditorIndentation"
    },
    {
      "id": "gpui_kit::controls::editor::EditorLineGeometry",
      "name": "EditorLineGeometry",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "Current-frame geometry for one hard source line.",
      "documentation": "Current-frame geometry for one hard source line.",
      "signature": "# [doc = \" Current-frame geometry for one hard source line.\"] # [derive (Debug, Clone, PartialEq)] pub struct EditorLineGeometry { # [doc = \" One-based line number.\"] pub line : usize, # [doc = \" UTF-8 source range, including its trailing line break when present.\"] pub range : Range<usize>, # [doc = \" Painted row bounds in window coordinates.\"] pub bounds : Bounds<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::folding::Editor::is_fold_collapsed",
      "name": "is_fold_collapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::folding",
      "path": "gpui_kit::controls::editor::folding",
      "source": "crates/gpui-kit/src/controls/editor/folding.rs",
      "summary": "Whether a caller-identified fold is currently collapsed.",
      "documentation": "Whether a caller-identified fold is currently collapsed.",
      "signature": "pub fn is_fold_collapsed (& self, id : & str) -> bool",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::folding::Editor::set_fold_collapsed",
      "name": "set_fold_collapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::folding",
      "path": "gpui_kit::controls::editor::folding",
      "source": "crates/gpui-kit/src/controls/editor/folding.rs",
      "summary": "Changes one fold's transient visual state without changing text, selection or history. Disabled editors refuse interaction. Read-only editors still permit browsing. Navigation into hidden text expands it.",
      "documentation": "Changes one fold's transient visual state without changing text,\nselection or history. Disabled editors refuse interaction. Read-only\neditors still permit browsing. Navigation into hidden text expands it.",
      "signature": "pub fn set_fold_collapsed (& mut self, id : & str, collapsed : bool, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::folding::Editor::set_folds",
      "name": "set_folds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::folding",
      "path": "gpui_kit::controls::editor::folding",
      "source": "crates/gpui-kit/src/controls/editor/folding.rs",
      "summary": "Installs folds for the current revision atomically. Invalid/stale sets leave the previous set unchanged. Editing invalidates all fold ranges; callers can publish a fresh set from their parser's new revision.",
      "documentation": "Installs folds for the current revision atomically. Invalid/stale sets\nleave the previous set unchanged. Editing invalidates all fold ranges;\ncallers can publish a fresh set from their parser's new revision.",
      "signature": "pub fn set_folds (& mut self, revision : u64, mut folds : Vec<EditorFold>, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::folding::EditorFold",
      "name": "EditorFold",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::folding",
      "path": "gpui_kit::controls::editor::folding",
      "source": "crates/gpui-kit/src/controls/editor/folding.rs",
      "summary": "A fold header and its body, in zero-based, half-open source line indices. The first line remains visible. Identities must be unique and stable across caller updates. Nested folds are supported; crossing ranges are refused.",
      "documentation": "A fold header and its body, in zero-based, half-open source line indices.\nThe first line remains visible. Identities must be unique and stable across\ncaller updates. Nested folds are supported; crossing ranges are refused.",
      "signature": "# [doc = \" A fold header and its body, in zero-based, half-open source line indices.\"] # [doc = \" The first line remains visible. Identities must be unique and stable across\"] # [doc = \" caller updates. Nested folds are supported; crossing ranges are refused.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct EditorFold { pub id : SharedString, pub lines : Range<usize>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::reexport-1",
      "name": "syntax :: { EditorParseWork , EditorSyntax , EditorSyntaxCapture , EditorSyntaxError }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (feature = \"syntax\")] pub use syntax::{ EditorParseWork, EditorSyntax, EditorSyntaxCapture, EditorSyntaxError };",
      "cfg": [
        "cfg (feature = \"syntax\")"
      ]
    },
    {
      "id": "gpui_kit::controls::editor::reexport-2",
      "name": "services :: *",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use services::*;",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::reexport-3",
      "name": "folding :: EditorFold",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor",
      "path": "gpui_kit::controls::editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use folding::EditorFold;",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::services::Editor::accept_service_item",
      "name": "accept_service_item",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Accepts a stable result identity. Edits are one undo transaction; navigation and external actions are emitted for the caller to handle.",
      "documentation": "Accepts a stable result identity. Edits are one undo transaction;\nnavigation and external actions are emitted for the caller to handle.",
      "signature": "pub fn accept_service_item (& mut self, id : & str, cx : & mut Context<Self>) -> bool",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::services::Editor::dismiss_service",
      "name": "dismiss_service",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Dismisses the current popup and invalidates its outstanding reply.",
      "documentation": "Dismisses the current popup and invalidates its outstanding reply.",
      "signature": "pub fn dismiss_service (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::services::Editor::language_services",
      "name": "language_services",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Enables caller language requests and their keyboard/mouse bindings.",
      "documentation": "Enables caller language requests and their keyboard/mouse bindings.",
      "signature": "pub fn language_services (mut self, enabled : bool) -> Self",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::services::Editor::request_service",
      "name": "request_service",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Requests a language operation at a UTF-8 byte position. No service process, file, or network operation is started by Kit.",
      "documentation": "Requests a language operation at a UTF-8 byte position. No service\nprocess, file, or network operation is started by Kit.",
      "signature": "pub fn request_service (& mut self, kind : EditorServiceKind, position : usize, cx : & mut Context<Self>,) -> Option<EditorServiceRequest>",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::services::Editor::set_diagnostics",
      "name": "set_diagnostics",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Publishes revision-paired diagnostic ranges and messages. Stale or malformed batches are refused without dropping the previous batch.",
      "documentation": "Publishes revision-paired diagnostic ranges and messages. Stale or\nmalformed batches are refused without dropping the previous batch.",
      "signature": "pub fn set_diagnostics (& mut self, revision : u64, diagnostics : Vec<EditorDiagnostic>, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::services::Editor::set_semantic_tokens",
      "name": "set_semantic_tokens",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Semantic tokens override parser colors only for their current revision.",
      "documentation": "Semantic tokens override parser colors only for their current revision.",
      "signature": "pub fn set_semantic_tokens (& mut self, revision : u64, mut tokens : Vec<EditorSemanticToken>, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::services::Editor::set_service_result",
      "name": "set_service_result",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Publishes a reply only while its request and document revision remain current. Refresh errors retain the last verified result for inspection.",
      "documentation": "Publishes a reply only while its request and document revision remain\ncurrent. Refresh errors retain the last verified result for inspection.",
      "signature": "pub fn set_service_result (& mut self, request : u64, mut result : AsyncValue<EditorServiceResult, SharedString>, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "Editor"
    },
    {
      "id": "gpui_kit::controls::editor::services::EditorDiagnostic",
      "name": "EditorDiagnostic",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Diagnostics are caller claims about one revision, not parser error nodes.",
      "documentation": "Diagnostics are caller claims about one revision, not parser error nodes.",
      "signature": "# [doc = \" Diagnostics are caller claims about one revision, not parser error nodes.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct EditorDiagnostic { pub id : SharedString, pub range : Range<usize>, pub message : SharedString, pub severity : EditorDiagnosticSeverity, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::services::EditorDiagnosticSeverity",
      "name": "EditorDiagnosticSeverity",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq, Eq)] pub enum EditorDiagnosticSeverity { Error, Warning, Information, Hint, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::services::EditorHover",
      "name": "EditorHover",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Hover content is plain caller text, not interpreted HTML or executable code.",
      "documentation": "Hover content is plain caller text, not interpreted HTML or executable code.",
      "signature": "# [doc = \" Hover content is plain caller text, not interpreted HTML or executable code.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct EditorHover { pub range : Range<usize>, pub contents : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::services::EditorReplacement",
      "name": "EditorReplacement",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Current-document replacement in the request's original UTF-8 coordinates.",
      "documentation": "Current-document replacement in the request's original UTF-8 coordinates.",
      "signature": "# [doc = \" Current-document replacement in the request's original UTF-8 coordinates.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct EditorReplacement { pub range : Range<usize>, pub text : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::services::EditorSemanticToken",
      "name": "EditorSemanticToken",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Caller-classified semantic token using the shared theme's code palette.",
      "documentation": "Caller-classified semantic token using the shared theme's code palette.",
      "signature": "# [doc = \" Caller-classified semantic token using the shared theme's code palette.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct EditorSemanticToken { pub range : Range<usize>, pub class : gpui_kit_theme::SyntaxColor, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::services::EditorServiceEffect",
      "name": "EditorServiceEffect",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Effects are either local atomic edits or caller-owned navigation/actions.",
      "documentation": "Effects are either local atomic edits or caller-owned navigation/actions.",
      "signature": "# [doc = \" Effects are either local atomic edits or caller-owned navigation/actions.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub enum EditorServiceEffect { Edits (Vec<EditorReplacement>), Definition { target : SharedString, range : Range<usize>, }, Action (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::services::EditorServiceItem",
      "name": "EditorServiceItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Stable caller identity, display label, and the effect of accepting a result.",
      "documentation": "Stable caller identity, display label, and the effect of accepting a result.",
      "signature": "# [doc = \" Stable caller identity, display label, and the effect of accepting a result.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct EditorServiceItem { pub id : SharedString, pub label : SharedString, pub detail : Option<SharedString>, pub effect : EditorServiceEffect, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::services::EditorServiceKind",
      "name": "EditorServiceKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "A caller-owned language operation requested by the editing surface.",
      "documentation": "A caller-owned language operation requested by the editing surface.",
      "signature": "# [doc = \" A caller-owned language operation requested by the editing surface.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum EditorServiceKind { Completion, Hover, Definition, CodeActions, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::services::EditorServiceRequest",
      "name": "EditorServiceRequest",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Immutable request identity. Replies must match this id and text revision.",
      "documentation": "Immutable request identity. Replies must match this id and text revision.",
      "signature": "# [doc = \" Immutable request identity. Replies must match this id and text revision.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct EditorServiceRequest { pub id : u64, pub revision : u64, pub kind : EditorServiceKind, pub position : usize, pub selection : Range<usize>, pub document : EditSnapshot, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::services::EditorServiceResult",
      "name": "EditorServiceResult",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::services",
      "path": "gpui_kit::controls::editor::services",
      "source": "crates/gpui-kit/src/controls/editor/services.rs",
      "summary": "Service result paired with a request by `Editor::set_service_result`.",
      "documentation": "Service result paired with a request by `Editor::set_service_result`.",
      "signature": "# [doc = \" Service result paired with a request by `Editor::set_service_result`.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub enum EditorServiceResult { Items (Vec<EditorServiceItem>), Hover (EditorHover), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::syntax::EditorParseWork",
      "name": "EditorParseWork",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::syntax",
      "path": "gpui_kit::controls::editor::syntax",
      "source": "crates/gpui-kit/src/controls/editor/syntax.rs",
      "summary": "Observed input work and reuse for the last syntax parse. Offered bytes may be requested more than once by Tree-sitter; no source bytes are copied.",
      "documentation": "Observed input work and reuse for the last syntax parse. Offered bytes may\nbe requested more than once by Tree-sitter; no source bytes are copied.",
      "signature": "# [doc = \" Observed input work and reuse for the last syntax parse. Offered bytes may\"] # [doc = \" be requested more than once by Tree-sitter; no source bytes are copied.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub struct EditorParseWork { pub incremental : bool, pub input_bytes_offered : usize, pub input_requests : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::syntax::EditorSyntax",
      "name": "EditorSyntax",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::syntax",
      "path": "gpui_kit::controls::editor::syntax",
      "source": "crates/gpui-kit/src/controls/editor/syntax.rs",
      "summary": "Revision-aware Tree-sitter adapter, available with the `syntax` feature.",
      "documentation": "Revision-aware Tree-sitter adapter, available with the `syntax` feature.",
      "signature": "# [doc = \" Revision-aware Tree-sitter adapter, available with the `syntax` feature.\"] pub struct EditorSyntax { parser : Parser, query : Query, tree : Option<Tree>, document : EditSnapshot, revision : Option<u64>, styles : HashMap<SharedString, HighlightStyle>, work : EditorParseWork, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::syntax::EditorSyntax::capture_style",
      "name": "capture_style",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::syntax",
      "path": "gpui_kit::controls::editor::syntax",
      "source": "crates/gpui-kit/src/controls/editor/syntax.rs",
      "summary": "Overrides one named query capture's theme-derived appearance.",
      "documentation": "Overrides one named query capture's theme-derived appearance.",
      "signature": "pub fn capture_style (mut self, name : impl Into<SharedString>, style : HighlightStyle) -> Self",
      "cfg": [],
      "target": "EditorSyntax"
    },
    {
      "id": "gpui_kit::controls::editor::syntax::EditorSyntax::captures",
      "name": "captures",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::syntax",
      "path": "gpui_kit::controls::editor::syntax",
      "source": "crates/gpui-kit/src/controls/editor/syntax.rs",
      "summary": "Queries only the requested source region. Captures retain their full node ranges; callers can clip at paint boundaries. Query exhaustion is reported rather than presenting a partial result as complete.",
      "documentation": "Queries only the requested source region. Captures retain their full\nnode ranges; callers can clip at paint boundaries. Query exhaustion is\nreported rather than presenting a partial result as complete.",
      "signature": "pub fn captures (& self, range : Range<usize>) -> Result<Vec<EditorSyntaxCapture>, SharedString>",
      "cfg": [],
      "target": "EditorSyntax"
    },
    {
      "id": "gpui_kit::controls::editor::syntax::EditorSyntax::errors",
      "name": "errors",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::syntax",
      "path": "gpui_kit::controls::editor::syntax",
      "source": "crates/gpui-kit/src/controls/editor/syntax.rs",
      "summary": "Error nodes in source order. Error-free subtrees are skipped outright.",
      "documentation": "Error nodes in source order. Error-free subtrees are skipped outright.",
      "signature": "pub fn errors (& self) -> Vec<EditorSyntaxError>",
      "cfg": [],
      "target": "EditorSyntax"
    },
    {
      "id": "gpui_kit::controls::editor::syntax::EditorSyntax::json",
      "name": "json",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::syntax",
      "path": "gpui_kit::controls::editor::syntax",
      "source": "crates/gpui-kit/src/controls/editor/syntax.rs",
      "summary": "Working bundled JSON grammar; other languages use `new` with their grammar crate and query. No grammar is fetched at runtime.",
      "documentation": "Working bundled JSON grammar; other languages use `new` with their\ngrammar crate and query. No grammar is fetched at runtime.",
      "signature": "pub fn json () -> Self",
      "cfg": [],
      "target": "EditorSyntax"
    },
    {
      "id": "gpui_kit::controls::editor::syntax::EditorSyntax::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::syntax",
      "path": "gpui_kit::controls::editor::syntax",
      "source": "crates/gpui-kit/src/controls/editor/syntax.rs",
      "summary": "Configures a registry-provided grammar and its highlighting query.",
      "documentation": "Configures a registry-provided grammar and its highlighting query.",
      "signature": "pub fn new (language : Language, highlights : & str) -> Result<Self, SharedString>",
      "cfg": [],
      "target": "EditorSyntax"
    },
    {
      "id": "gpui_kit::controls::editor::syntax::EditorSyntax::revision",
      "name": "revision",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::syntax",
      "path": "gpui_kit::controls::editor::syntax",
      "source": "crates/gpui-kit/src/controls/editor/syntax.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn revision (& self) -> Option<u64>",
      "cfg": [],
      "target": "EditorSyntax"
    },
    {
      "id": "gpui_kit::controls::editor::syntax::EditorSyntax::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::syntax",
      "path": "gpui_kit::controls::editor::syntax",
      "source": "crates/gpui-kit/src/controls/editor/syntax.rs",
      "summary": "Parses a revision. `edit`, when supplied, must be the exact transition from the preceding revision to `document`; missing/skipped revisions deliberately reparse without an old tree. Stale revisions are refused.",
      "documentation": "Parses a revision. `edit`, when supplied, must be the exact transition\nfrom the preceding revision to `document`; missing/skipped revisions\ndeliberately reparse without an old tree. Stale revisions are refused.",
      "signature": "pub fn update (& mut self, revision : u64, document : EditSnapshot, edit : Option<& TextAreaEdit>,) -> bool",
      "cfg": [],
      "target": "EditorSyntax"
    },
    {
      "id": "gpui_kit::controls::editor::syntax::EditorSyntax::work",
      "name": "work",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::syntax",
      "path": "gpui_kit::controls::editor::syntax",
      "source": "crates/gpui-kit/src/controls/editor/syntax.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn work (& self) -> EditorParseWork",
      "cfg": [],
      "target": "EditorSyntax"
    },
    {
      "id": "gpui_kit::controls::editor::syntax::EditorSyntaxCapture",
      "name": "EditorSyntaxCapture",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::syntax",
      "path": "gpui_kit::controls::editor::syntax",
      "source": "crates/gpui-kit/src/controls/editor/syntax.rs",
      "summary": "One query capture in UTF-8 source coordinates.",
      "documentation": "One query capture in UTF-8 source coordinates.",
      "signature": "# [doc = \" One query capture in UTF-8 source coordinates.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct EditorSyntaxCapture { pub range : Range<usize>, pub name : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::editor::syntax::EditorSyntaxError",
      "name": "EditorSyntaxError",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::editor::syntax",
      "path": "gpui_kit::controls::editor::syntax",
      "source": "crates/gpui-kit/src/controls/editor/syntax.rs",
      "summary": "A grammar error or missing node, not an LSP diagnostic.",
      "documentation": "A grammar error or missing node, not an LSP diagnostic.",
      "signature": "# [doc = \" A grammar error or missing node, not an LSP diagnostic.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct EditorSyntaxError { pub id : usize, pub range : Range<usize>, pub kind : SharedString, pub missing : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::field::FieldState",
      "name": "FieldState",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::field",
      "path": "gpui_kit::controls::field",
      "source": "crates/gpui-kit/src/controls/field.rs",
      "summary": "What an editable surface currently reports about itself.",
      "documentation": "What an editable surface currently reports about itself.\n\nThe chrome is drawn from this alone, so every field in the library says\nthe same thing the same way.",
      "signature": "# [doc = \" What an editable surface currently reports about itself.\"] # [doc = \"\"] # [doc = \" The chrome is drawn from this alone, so every field in the library says\"] # [doc = \" the same thing the same way.\"] # [derive (Debug, Clone, Copy, Default, PartialEq, Eq)] pub struct FieldState { pub focused : bool, pub invalid : bool, pub disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::field::FieldState::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::field",
      "path": "gpui_kit::controls::field",
      "source": "crates/gpui-kit/src/controls/field.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "FieldState"
    },
    {
      "id": "gpui_kit::controls::field::FieldState::focused",
      "name": "focused",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::field",
      "path": "gpui_kit::controls::field",
      "source": "crates/gpui-kit/src/controls/field.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn focused (mut self, focused : bool) -> Self",
      "cfg": [],
      "target": "FieldState"
    },
    {
      "id": "gpui_kit::controls::field::FieldState::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::field",
      "path": "gpui_kit::controls::field",
      "source": "crates/gpui-kit/src/controls/field.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "FieldState"
    },
    {
      "id": "gpui_kit::controls::field::field_shell",
      "name": "field_shell",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::field",
      "path": "gpui_kit::controls::field",
      "source": "crates/gpui-kit/src/controls/field.rs",
      "summary": "The surface, focus and invalid treatment every editable control wears.",
      "documentation": "The surface, focus and invalid treatment every editable control wears.\n\n`TextInput` renders inside it, and the composed fields — `NumberInput`,\n`Combobox`, `TagInput` — wrap a bare input in one of these so a composed\ncontrol is not two nested frames.",
      "signature": "pub fn field_shell (theme : & Theme, size : ControlSize, state : FieldState) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::field::nested_control_size",
      "name": "nested_control_size",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::field",
      "path": "gpui_kit::controls::field",
      "source": "crates/gpui-kit/src/controls/field.rs",
      "summary": "The size an adornment control takes when it sits *inside* a field.",
      "documentation": "The size an adornment control takes when it sits *inside* a field.\n\nA stepper built at the field's own size fills the field edge to edge, so it\nreads as a block wedged into the field's rounded end rather than as a\ncontrol the field contains. One step down leaves the field's own corners\nand borders visible around it.",
      "signature": "pub fn nested_control_size (size : ControlSize) -> ControlSize",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterBar",
      "name": "FilterBar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "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.",
      "documentation": "A row of active conditions, a way to add one, a clear-all, and the count.",
      "signature": "# [doc = \" A row of active conditions, a way to add one, a clear-all, and the count.\"] # [derive (IntoElement)] pub struct FilterBar { ident : Ident, conditions : Vec<FilterCondition>, count : ResultCount, noun : Option<SharedString>, add_control : Option<AnyElement>, add_label : Option<SharedString>, clear_label : Option<SharedString>, size : gpui_kit_theme::ControlSize, disabled : bool, on_add : Option<AddHandler>, on_remove : Option<RemoveHandler>, on_clear : Option<ClearHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterBar::add_control",
      "name": "add_control",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "The affordance that offers the fields a filter can be built on, usually a [`crate::overlay::Popover`] or a [`crate::overlay::Menu`]. It takes the place of the built-in button.",
      "documentation": "The affordance that offers the fields a filter can be built on, usually\na [`crate::overlay::Popover`] or a [`crate::overlay::Menu`]. It takes\nthe place of the built-in button.",
      "signature": "pub fn add_control (mut self, control : impl IntoElement) -> Self",
      "cfg": [],
      "target": "FilterBar"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterBar::add_label",
      "name": "add_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn add_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FilterBar"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterBar::clear_label",
      "name": "clear_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clear_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FilterBar"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterBar::condition",
      "name": "condition",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn condition (mut self, condition : FilterCondition) -> Self",
      "cfg": [],
      "target": "FilterBar"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterBar::conditions",
      "name": "conditions",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn conditions (mut self, conditions : impl IntoIterator<Item = FilterCondition>) -> Self",
      "cfg": [],
      "target": "FilterBar"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterBar::count",
      "name": "count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "The count the host established. The bar never counts anything itself.",
      "documentation": "The count the host established. The bar never counts anything itself.",
      "signature": "pub fn count (mut self, count : ResultCount) -> Self",
      "cfg": [],
      "target": "FilterBar"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterBar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "FilterBar"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterBar::noun",
      "name": "noun",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "What is being counted, for the sentence beside the number. This is caller-owned copy and must already agree with every count the caller supplies. Without it, the catalogue selects the full localized result phrase by plural category.",
      "documentation": "What is being counted, for the sentence beside the number. This is\ncaller-owned copy and must already agree with every count the caller\nsupplies. Without it, the catalogue selects the full localized result\nphrase by plural category.",
      "signature": "pub fn noun (mut self, noun : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FilterBar"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterBar::on_add",
      "name": "on_add",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "Reports that the typist asked to add a condition. Ignored when the caller supplied their own affordance with [`FilterBar::add_control`].",
      "documentation": "Reports that the typist asked to add a condition. Ignored when the\ncaller supplied their own affordance with [`FilterBar::add_control`].",
      "signature": "pub fn on_add (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "FilterBar"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterBar::on_clear",
      "name": "on_clear",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_clear (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "FilterBar"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterBar::on_remove",
      "name": "on_remove",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "Reports the condition the typist took off. The bar removes nothing.",
      "documentation": "Reports the condition the typist took off. The bar removes nothing.",
      "signature": "pub fn on_remove (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "FilterBar"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterCondition",
      "name": "FilterCondition",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "One condition the list is narrowed by.",
      "documentation": "One condition the list is narrowed by.",
      "signature": "# [doc = \" One condition the list is narrowed by.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct FilterCondition { id : SharedString, field : SharedString, operator : SharedString, value : SharedString, tone : Tone, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterCondition::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "FilterCondition"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterCondition::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "How the condition reads as one line: field, operator, value.",
      "documentation": "How the condition reads as one line: field, operator, value.",
      "signature": "pub fn label (& self) -> SharedString",
      "cfg": [],
      "target": "FilterCondition"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterCondition::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, field : impl Into<SharedString>, operator : impl Into<SharedString>, value : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "FilterCondition"
    },
    {
      "id": "gpui_kit::controls::filter_bar::FilterCondition::tone",
      "name": "tone",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tone (mut self, tone : Tone) -> Self",
      "cfg": [],
      "target": "FilterCondition"
    },
    {
      "id": "gpui_kit::controls::filter_bar::ResultCount",
      "name": "ResultCount",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "How many rows the host says the filter matched.",
      "documentation": "How many rows the host says the filter matched.\n\nCounting is not zero. A bar that renders an unfinished count as \"0 results\"\ntells the typist their filter matched nothing, which nobody has established\nyet.",
      "signature": "# [doc = \" How many rows the host says the filter matched.\"] # [doc = \"\"] # [doc = \" Counting is not zero. A bar that renders an unfinished count as \\\"0 results\\\"\"] # [doc = \" tells the typist their filter matched nothing, which nobody has established\"] # [doc = \" yet.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum ResultCount { # [doc = \" Nothing has been counted, and nothing is claimed.\"] # [default] Unknown, # [doc = \" The host is counting right now.\"] Counting, # [doc = \" The host counted, and this is the number.\"] Known (usize), # [doc = \" The host could not count, in its own words.\"] Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::filter_bar::ResultCount::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::filter_bar",
      "path": "gpui_kit::controls::filter_bar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "ResultCount"
    },
    {
      "id": "gpui_kit::controls::form_field::FormField",
      "name": "FormField",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::form_field",
      "path": "gpui_kit::controls::form_field",
      "source": "crates/gpui-kit/src/controls/form_field.rs",
      "summary": "A labelled control, with the secondary text a typist needs around it.",
      "documentation": "A labelled control, with the secondary text a typist needs around it.\n\nThe description and the error are both shown. An error is information the\ndescription did not already carry — what went wrong this time, on top of\nwhat the field is for — so it is added rather than substituted. The one\nexception is an error worded exactly like the description, which would\notherwise be printed twice; then only the error is drawn, because it is\nthe one that also carries the failure.",
      "signature": "# [doc = \" A labelled control, with the secondary text a typist needs around it.\"] # [doc = \"\"] # [doc = \" The description and the error are both shown. An error is information the\"] # [doc = \" description did not already carry — what went wrong this time, on top of\"] # [doc = \" what the field is for — so it is added rather than substituted. The one\"] # [doc = \" exception is an error worded exactly like the description, which would\"] # [doc = \" otherwise be printed twice; then only the error is drawn, because it is\"] # [doc = \" the one that also carries the failure.\"] # [derive (IntoElement)] pub struct FormField { ident : Ident, label : SharedString, control : Option<SharedString>, description : Option<SharedString>, validation : ValidationState, hint : Option<SharedString>, required : bool, children : Vec<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::form_field::FormField::control",
      "name": "control",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::form_field",
      "path": "gpui_kit::controls::form_field",
      "source": "crates/gpui-kit/src/controls/form_field.rs",
      "summary": "The semantic id of the control this label names.",
      "documentation": "The semantic id of the control this label names.\n\nThe label publishes the association, so a test that knows only what a\nfield is called can find the control it belongs to.",
      "signature": "pub fn control (mut self, control : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FormField"
    },
    {
      "id": "gpui_kit::controls::form_field::FormField::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::form_field",
      "path": "gpui_kit::controls::form_field",
      "source": "crates/gpui-kit/src/controls/form_field.rs",
      "summary": "What the field is for, shown whether or not anything went wrong.",
      "documentation": "What the field is for, shown whether or not anything went wrong.",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FormField"
    },
    {
      "id": "gpui_kit::controls::form_field::FormField::error",
      "name": "error",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::form_field",
      "path": "gpui_kit::controls::form_field",
      "source": "crates/gpui-kit/src/controls/form_field.rs",
      "summary": "What the host says is wrong, in the host's own words.",
      "documentation": "What the host says is wrong, in the host's own words.\n\nThis is the compatibility shorthand for\n`validation(ValidationState::invalid(error))`.",
      "signature": "pub fn error (mut self, error : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FormField"
    },
    {
      "id": "gpui_kit::controls::form_field::FormField::hint",
      "name": "hint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::form_field",
      "path": "gpui_kit::controls::form_field",
      "source": "crates/gpui-kit/src/controls/form_field.rs",
      "summary": "The keystroke that operates the control without the pointer.",
      "documentation": "The keystroke that operates the control without the pointer.",
      "signature": "pub fn hint (mut self, keystroke : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FormField"
    },
    {
      "id": "gpui_kit::controls::form_field::FormField::is_invalid",
      "name": "is_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::form_field",
      "path": "gpui_kit::controls::form_field",
      "source": "crates/gpui-kit/src/controls/form_field.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_invalid (& self) -> bool",
      "cfg": [],
      "target": "FormField"
    },
    {
      "id": "gpui_kit::controls::form_field::FormField::is_validating",
      "name": "is_validating",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::form_field",
      "path": "gpui_kit::controls::form_field",
      "source": "crates/gpui-kit/src/controls/form_field.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_validating (& self) -> bool",
      "cfg": [],
      "target": "FormField"
    },
    {
      "id": "gpui_kit::controls::form_field::FormField::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::form_field",
      "path": "gpui_kit::controls::form_field",
      "source": "crates/gpui-kit/src/controls/form_field.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FormField"
    },
    {
      "id": "gpui_kit::controls::form_field::FormField::required",
      "name": "required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::form_field",
      "path": "gpui_kit::controls::form_field",
      "source": "crates/gpui-kit/src/controls/form_field.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn required (mut self, required : bool) -> Self",
      "cfg": [],
      "target": "FormField"
    },
    {
      "id": "gpui_kit::controls::form_field::FormField::validation",
      "name": "validation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::form_field",
      "path": "gpui_kit::controls::form_field",
      "source": "crates/gpui-kit/src/controls/form_field.rs",
      "summary": "What the caller currently knows about this field's validation.",
      "documentation": "What the caller currently knows about this field's validation.",
      "signature": "pub fn validation (mut self, validation : ValidationState) -> Self",
      "cfg": [],
      "target": "FormField"
    },
    {
      "id": "gpui_kit::controls::inline_edit::InlineEdit",
      "name": "InlineEdit",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::inline_edit",
      "path": "gpui_kit::controls::inline_edit",
      "source": "crates/gpui-kit/src/controls/inline_edit.rs",
      "summary": "Text that a click or enter turns into a field.",
      "documentation": "Text that a click or enter turns into a field.",
      "signature": "# [doc = \" Text that a click or enter turns into a field.\"] # [derive (IntoElement)] pub struct InlineEdit { ident : Ident, value : SharedString, placeholder : Option<SharedString>, editing : bool, multiline : bool, rows : usize, failure : Option<SharedString>, size : ControlSize, disabled : bool, on_edit : Option<EditHandler>, on_commit : Option<CommitHandler>, on_cancel : Option<EditHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::inline_edit::InlineEdit::editing",
      "name": "editing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::inline_edit",
      "path": "gpui_kit::controls::inline_edit",
      "source": "crates/gpui-kit/src/controls/inline_edit.rs",
      "summary": "Whether the caller has opened the field. The component never opens it on its own; a click reports the request.",
      "documentation": "Whether the caller has opened the field. The component never opens it\non its own; a click reports the request.",
      "signature": "pub fn editing (mut self, editing : bool) -> Self",
      "cfg": [],
      "target": "InlineEdit"
    },
    {
      "id": "gpui_kit::controls::inline_edit::InlineEdit::failure",
      "name": "failure",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::inline_edit",
      "path": "gpui_kit::controls::inline_edit",
      "source": "crates/gpui-kit/src/controls/inline_edit.rs",
      "summary": "Why the last save did not take, in the host's own words. The typed text stays exactly as it was.",
      "documentation": "Why the last save did not take, in the host's own words. The typed text\nstays exactly as it was.",
      "signature": "pub fn failure (mut self, failure : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "InlineEdit"
    },
    {
      "id": "gpui_kit::controls::inline_edit::InlineEdit::multiline",
      "name": "multiline",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::inline_edit",
      "path": "gpui_kit::controls::inline_edit",
      "source": "crates/gpui-kit/src/controls/inline_edit.rs",
      "summary": "Edits over a [`TextArea`] rather than a [`TextInput`], so enter inserts a line and the platform modifier plus enter commits.",
      "documentation": "Edits over a [`TextArea`] rather than a [`TextInput`], so enter inserts\na line and the platform modifier plus enter commits.",
      "signature": "pub fn multiline (mut self, multiline : bool) -> Self",
      "cfg": [],
      "target": "InlineEdit"
    },
    {
      "id": "gpui_kit::controls::inline_edit::InlineEdit::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::inline_edit",
      "path": "gpui_kit::controls::inline_edit",
      "source": "crates/gpui-kit/src/controls/inline_edit.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "InlineEdit"
    },
    {
      "id": "gpui_kit::controls::inline_edit::InlineEdit::on_cancel",
      "name": "on_cancel",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::inline_edit",
      "path": "gpui_kit::controls::inline_edit",
      "source": "crates/gpui-kit/src/controls/inline_edit.rs",
      "summary": "Reports that the edit was abandoned. Nothing was typed as far as the host is concerned.",
      "documentation": "Reports that the edit was abandoned. Nothing was typed as far as the\nhost is concerned.",
      "signature": "pub fn on_cancel (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "InlineEdit"
    },
    {
      "id": "gpui_kit::controls::inline_edit::InlineEdit::on_commit",
      "name": "on_commit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::inline_edit",
      "path": "gpui_kit::controls::inline_edit",
      "source": "crates/gpui-kit/src/controls/inline_edit.rs",
      "summary": "Reports the text the field held when the edit ended.",
      "documentation": "Reports the text the field held when the edit ended.",
      "signature": "pub fn on_commit (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "InlineEdit"
    },
    {
      "id": "gpui_kit::controls::inline_edit::InlineEdit::on_edit",
      "name": "on_edit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::inline_edit",
      "path": "gpui_kit::controls::inline_edit",
      "source": "crates/gpui-kit/src/controls/inline_edit.rs",
      "summary": "Reports that the typist asked to edit.",
      "documentation": "Reports that the typist asked to edit.",
      "signature": "pub fn on_edit (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "InlineEdit"
    },
    {
      "id": "gpui_kit::controls::inline_edit::InlineEdit::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::inline_edit",
      "path": "gpui_kit::controls::inline_edit",
      "source": "crates/gpui-kit/src/controls/inline_edit.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "InlineEdit"
    },
    {
      "id": "gpui_kit::controls::inline_edit::InlineEdit::rows",
      "name": "rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::inline_edit",
      "path": "gpui_kit::controls::inline_edit",
      "source": "crates/gpui-kit/src/controls/inline_edit.rs",
      "summary": "How many rows a multi-line field opens at.",
      "documentation": "How many rows a multi-line field opens at.",
      "signature": "pub fn rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "InlineEdit"
    },
    {
      "id": "gpui_kit::controls::input::KEY_CONTEXT",
      "name": "KEY_CONTEXT",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "The key context every input publishes, so a host can layer its own bindings on top without re-declaring these.",
      "documentation": "The key context every input publishes, so a host can layer its own\nbindings on top without re-declaring these.",
      "signature": "pub const KEY_CONTEXT: & str",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::input::TextInput",
      "name": "TextInput",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "One line of editable text.",
      "documentation": "One line of editable text.\n\nThe field owns the caret, the selection, and any composition in flight; the\ncommitted text belongs to the caller, which is why a host that refuses a\nchange simply does not apply it and the field keeps showing what is true.\nA secret field publishes its shape and never its content.",
      "signature": "# [doc = \" One line of editable text.\"] # [doc = \"\"] # [doc = \" The field owns the caret, the selection, and any composition in flight; the\"] # [doc = \" committed text belongs to the caller, which is why a host that refuses a\"] # [doc = \" change simply does not apply it and the field keeps showing what is true.\"] # [doc = \" A secret field publishes its shape and never its content.\"] pub struct TextInput { ident : Ident, focus_handle : FocusHandle, placeholder : SharedString, # [doc = \" What to call the field where nothing on screen already does. A control\"] # [doc = \" that wraps a bare field owns the visible label, so the field it types\"] # [doc = \" into has to be told its own name or it reaches a reader unnamed.\"] name : SharedString, # [doc = \" The value, the caret, the composition in flight, and the transactions\"] # [doc = \" that got here. Every mutation goes through it, so undo describes the\"] # [doc = \" value the field is actually showing.\"] edit : text_edit::EditBuffer, size : ControlSize, disabled : bool, invalid : bool, required : bool, read_only : bool, # [doc = \" Sensitivity controls every export boundary and never changes while a\"] # [doc = \" credential is visually revealed.\"] secret : bool, # [doc = \" Visual masking is deliberately separate from sensitivity. A password\"] # [doc = \" reveal changes this bit and leaves semantic, accessibility, clipboard,\"] # [doc = \" and Debug redaction untouched.\"] visually_masked : bool, # [doc = \" Set when a composing control supplies the frame itself.\"] bare : bool, max_length : Option<usize>, # [doc = \" Used by segmented sensitive inputs, where one slot means one Unicode\"] # [doc = \" grapheme rather than one UTF-8 byte.\"] max_graphemes : Option<usize>, input_options : gpui::TextInputOptions, # [doc = \" A custom visual may segment the one editor into this many slots. The\"] # [doc = \" editor still owns hit testing and IME geometry for the full surface.\"] visual_slots : Option<usize>, # [doc = \" Each well retains its own logical bounds and captured transform.\"] visual_slot_bounds : Vec<(Bounds<Pixels>, gpui::VisualTransform)>, scroll_offset : Pixels, is_selecting : bool, last_layout : Option<EditableTextLayout>, last_layout_text : SharedString, last_bounds : Option<Bounds<Pixels>>, visual_transform : gpui::VisualTransform, accessibility_revision : u64, accessible_snapshot : Arc<Mutex<Option<text_edit::PublishedAccessibleText>>>, accessible_geometry : Arc<Mutex<Option<text_edit::AccessibleTextGeometry>>>, # [doc = \" Held so the focus listeners live as long as the input does.\"] _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::input::TextInput::bare",
      "name": "bare",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Drops the input's own border and background.",
      "documentation": "Drops the input's own border and background.\n\nFor a control that composes the input with something else — a step\nbutton, a token list — and draws one [`crate::controls::field::field_shell`]\naround the lot, so a composed field is not two nested frames.",
      "signature": "pub fn bare (mut self, bare : bool) -> Self",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::bind",
      "name": "bind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Keeps a field and a caller-owned [`Signal`] holding the same text.",
      "documentation": "Keeps a field and a caller-owned [`Signal`] holding the same text.\n\nThe field is seeded from the signal, typing writes the signal, and a\nchange to the signal writes the field. Neither direction fires when\nthe two already agree, which is what stops a value from travelling\nround the loop and what keeps the caret where the typist left it.\n\nThe subscriptions are the binding: the caller holds them for as long\nas the field and the signal should stay together.",
      "signature": "pub fn bind (input : & Entity<Self>, signal : & Signal<String>, cx : & mut App) -> Vec<Subscription>",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::cursor_offset",
      "name": "cursor_offset",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cursor_offset (& self) -> usize",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::input_options",
      "name": "input_options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Requests a platform keyboard and autofill purpose. Hints are best-effort, not evidence of credential or SMS access. This editor always overrides `multiline` and `secure` with its actual editing and sensitivity policy. Next/previous emit [`gpui::TextInputAction`] for the caller to route.",
      "documentation": "Requests a platform keyboard and autofill purpose. Hints are best-effort,\nnot evidence of credential or SMS access. This editor always overrides\n`multiline` and `secure` with its actual editing and sensitivity policy.\nNext/previous emit [`gpui::TextInputAction`] for the caller to route.",
      "signature": "pub fn input_options (mut self, options : gpui::TextInputOptions) -> Self",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::is_secret",
      "name": "is_secret",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_secret (& self) -> bool",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::max_length",
      "name": "max_length",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Refuses input past a length in bytes of UTF-8.",
      "documentation": "Refuses input past a length in bytes of UTF-8.",
      "signature": "pub fn max_length (mut self, max_length : usize) -> Self",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Names the field for a reader without drawing anything. Use it when a surrounding control carries the visible label.",
      "documentation": "Names the field for a reader without drawing anything. Use it when a\nsurrounding control carries the visible label.",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::read_only",
      "name": "read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Keeps the value focusable and selectable while refusing editing, IME, and accessibility value changes.",
      "documentation": "Keeps the value focusable and selectable while refusing editing, IME,\nand accessibility value changes.",
      "signature": "pub fn read_only (mut self, read_only : bool) -> Self",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::required",
      "name": "required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn required (mut self, required : bool) -> Self",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::secret",
      "name": "secret",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Renders as dots and keeps the text out of every snapshot and export.",
      "documentation": "Renders as dots and keeps the text out of every snapshot and export.",
      "signature": "pub fn secret (mut self, secret : bool) -> Self",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::selected_range",
      "name": "selected_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_range (& self) -> Range<usize>",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::set_bare",
      "name": "set_bare",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Changes whether a composing control supplies the frame.",
      "documentation": "Changes whether a composing control supplies the frame.",
      "signature": "pub fn set_bare (& mut self, bare : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Changes control metrics while retaining text, selection, and focus.",
      "documentation": "Changes control metrics while retaining text, selection, and focus.",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::set_input_options",
      "name": "set_input_options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Changes keyboard hints without replacing text, selection, or composition.",
      "documentation": "Changes keyboard hints without replacing text, selection, or composition.",
      "signature": "pub fn set_input_options (& mut self, options : gpui::TextInputOptions, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::set_invalid",
      "name": "set_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_invalid (& mut self, invalid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::set_max_length",
      "name": "set_max_length",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Changes the UTF-8 byte limit for subsequent edits; `None` removes it. Existing text, selection, and composition are not truncated or reset.",
      "documentation": "Changes the UTF-8 byte limit for subsequent edits; `None` removes it.\nExisting text, selection, and composition are not truncated or reset.",
      "signature": "pub fn set_max_length (& mut self, max_length : Option<usize>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::set_name",
      "name": "set_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Names the field after it has been built.",
      "documentation": "Names the field after it has been built.",
      "signature": "pub fn set_name (& mut self, name : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::set_placeholder",
      "name": "set_placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_placeholder (& mut self, placeholder : impl Into<SharedString>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::set_read_only",
      "name": "set_read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_read_only (& mut self, read_only : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::set_required",
      "name": "set_required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Changes required semantics without replacing the editor.",
      "documentation": "Changes required semantics without replacing the editor.",
      "signature": "pub fn set_required (& mut self, required : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::set_secret",
      "name": "set_secret",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Changes sensitivity without replacing the editor, caret, or focus. Enabling sensitivity irreversibly discards undo history. Disabling it is an explicit declassification, not the password reveal operation.",
      "documentation": "Changes sensitivity without replacing the editor, caret, or focus.\nEnabling sensitivity irreversibly discards undo history. Disabling it\nis an explicit declassification, not the password reveal operation.",
      "signature": "pub fn set_secret (& mut self, secret : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::set_text_quietly",
      "name": "set_text_quietly",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Replaces the text without reporting a change.",
      "documentation": "Replaces the text without reporting a change.\n\nFor a composing control that is putting its owner's value on screen:\nnobody asked for that text, so reporting it as an edit would send the\nhost a change it made itself.",
      "signature": "pub fn set_text_quietly (& mut self, value : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::set_value",
      "name": "set_value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Replaces the text from the host side, for example when a form resets.",
      "documentation": "Replaces the text from the host side, for example when a form resets.",
      "signature": "pub fn set_value (& mut self, value : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "Seeds the initial text, with the caret at the end.",
      "documentation": "Seeds the initial text, with the caret at the end.",
      "signature": "pub fn text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInput::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn value (& self) -> & SharedString",
      "cfg": [],
      "target": "TextInput"
    },
    {
      "id": "gpui_kit::controls::input::TextInputEvent",
      "name": "TextInputEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input",
      "path": "gpui_kit::controls::input",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "What an input reports to its owner.",
      "documentation": "What an input reports to its owner.",
      "signature": "# [doc = \" What an input reports to its owner.\"] # [derive (Clone, PartialEq, Eq)] pub enum TextInputEvent { # [doc = \" The text changed, by typing, deletion, paste, or a programmatic set.\"] Change (SharedString), # [doc = \" The primary key was pressed while the input had focus.\"] Submit, # [doc = \" Editing was abandoned with the cancel key.\"] Cancel, # [doc = \" Backspace was pressed with nothing before the caret to delete.\"] # [doc = \"\"] # [doc = \" A bound key never reaches an ancestor listener, so a control that\"] # [doc = \" composes an input — a tag field, where backspace reaches past the\"] # [doc = \" start of the text — is told here instead.\"] BackspaceAtStart, Focus, Blur, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::input::element::PrepaintState",
      "name": "PrepaintState",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input::element",
      "path": "gpui_kit::controls::input::element",
      "source": "crates/gpui-kit/src/controls/input/element.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct PrepaintState { layout : Option<EditableTextLayout>, document_layout : Option<EditableTextLayout>, cursor : Option<PaintQuad>, selection : Vec<PaintQuad>, scroll_offset : Pixels, custom_visual : bool, visual_transform : gpui::VisualTransform, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::input::element::TextElement",
      "name": "TextElement",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input::element",
      "path": "gpui_kit::controls::input::element",
      "source": "crates/gpui-kit/src/controls/input/element.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct TextElement { input : Entity<TextInput>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::input::element::TextElement::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::input::element",
      "path": "gpui_kit::controls::input::element",
      "source": "crates/gpui-kit/src/controls/input/element.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (input : Entity<TextInput>) -> Self",
      "cfg": [],
      "target": "TextElement"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder",
      "name": "KeybindingRecorder",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "A field that records one keystroke.",
      "documentation": "A field that records one keystroke.\n\nWhether recording is in flight is transient view state, so this is a view\nrather than a builder. The binding itself is not: the recorder reports the\nkeystroke that was pressed and renders whatever the caller says is bound,\nso a host that refuses a binding keeps showing the one that still holds.",
      "signature": "# [doc = \" A field that records one keystroke.\"] # [doc = \"\"] # [doc = \" Whether recording is in flight is transient view state, so this is a view\"] # [doc = \" rather than a builder. The binding itself is not: the recorder reports the\"] # [doc = \" keystroke that was pressed and renders whatever the caller says is bound,\"] # [doc = \" so a host that refuses a binding keeps showing the one that still holds.\"] pub struct KeybindingRecorder { ident : Ident, focus_handle : FocusHandle, label : Option<SharedString>, placeholder : Option<SharedString>, binding : Option<SharedString>, conflict : Option<SharedString>, allow_escape : bool, size : ControlSize, disabled : bool, recording : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::allow_escape",
      "name": "allow_escape",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "Lets escape be captured as a binding rather than ending recording.",
      "documentation": "Lets escape be captured as a binding rather than ending recording.\n\nA caller that turns this on owes the typist another way out, because\nthe usual one is now a keystroke the recorder eats.",
      "signature": "pub fn allow_escape (mut self, allow : bool) -> Self",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::binding",
      "name": "binding",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "The binding the caller says is current, in GPUI's syntax.",
      "documentation": "The binding the caller says is current, in GPUI's syntax.",
      "signature": "pub fn binding (mut self, binding : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::cancel",
      "name": "cancel",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "Ends recording without capturing anything.",
      "documentation": "Ends recording without capturing anything.",
      "signature": "pub fn cancel (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::conflict",
      "name": "conflict",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "The conflict the **host** found, in its own words.",
      "documentation": "The conflict the **host** found, in its own words.\n\nThe recorder has no keymap and never decides that two bindings clash.",
      "signature": "pub fn conflict (mut self, reason : Option<impl Into<SharedString>>) -> Self",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::current_binding",
      "name": "current_binding",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current_binding (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::is_recording",
      "name": "is_recording",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_recording (& self) -> bool",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "What the binding is for, for a reader that has only the tree.",
      "documentation": "What the binding is for, for a reader that has only the tree.",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, _window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::set_allow_escape",
      "name": "set_allow_escape",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "Changes how the next escape is handled, preserving the current session.",
      "documentation": "Changes how the next escape is handled, preserving the current session.",
      "signature": "pub fn set_allow_escape (& mut self, allow : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::set_binding",
      "name": "set_binding",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_binding (& mut self, binding : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::set_conflict",
      "name": "set_conflict",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_conflict (& mut self, reason : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "Updates presentation without replacing the focus handle or recording session.",
      "documentation": "Updates presentation without replacing the focus handle or recording session.",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "Refuses input and cancels any active recording; reenabling does not start one.",
      "documentation": "Refuses input and cancels any active recording; reenabling does not start one.",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::set_label",
      "name": "set_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "Replaces or removes the accessible label without ending recording.",
      "documentation": "Replaces or removes the accessible label without ending recording.",
      "signature": "pub fn set_label (& mut self, label : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::set_placeholder",
      "name": "set_placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "`None` restores the localized unbound placeholder.",
      "documentation": "`None` restores the localized unbound placeholder.",
      "signature": "pub fn set_placeholder (& mut self, placeholder : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorder::start",
      "name": "start",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "Begins recording and takes the keyboard.",
      "documentation": "Begins recording and takes the keyboard.",
      "signature": "pub fn start (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "KeybindingRecorder"
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::KeybindingRecorderEvent",
      "name": "KeybindingRecorderEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "What a [`KeybindingRecorder`] reports.",
      "documentation": "What a [`KeybindingRecorder`] reports.",
      "signature": "# [doc = \" What a [`KeybindingRecorder`] reports.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum KeybindingRecorderEvent { # [doc = \" Recording began. Every keystroke now goes to the recorder.\"] Started, # [doc = \" A keystroke was captured, in GPUI's syntax. Nothing has been bound.\"] Captured (SharedString), # [doc = \" Recording ended without a keystroke.\"] Cancelled, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::keybinding_recorder::is_modifier",
      "name": "is_modifier",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keybinding_recorder",
      "path": "gpui_kit::controls::keybinding_recorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "Whether a key name is a modifier rather than a key.",
      "documentation": "Whether a key name is a modifier rather than a key.\n\nGPUI names a bare modifier `shift`, `control`, `alt`, `platform`, or\n`function` when it parses one; platforms deliver the more familiar spelling\nof the same keys, so both are refused.",
      "signature": "pub fn is_modifier (key : & str) -> bool",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapBinding",
      "name": "KeymapBinding",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "One effective binding, identified independently of its position.",
      "documentation": "One effective binding, identified independently of its position.",
      "signature": "# [doc = \" One effective binding, identified independently of its position.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct KeymapBinding { id : SharedString, keystroke : SharedString, conflict : Option<SharedString>, provenance : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapBinding::conflict",
      "name": "conflict",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn conflict (mut self, value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "KeymapBinding"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapBinding::conflict_reason",
      "name": "conflict_reason",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn conflict_reason (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "KeymapBinding"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapBinding::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "KeymapBinding"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapBinding::keystroke",
      "name": "keystroke",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn keystroke (& self) -> & SharedString",
      "cfg": [],
      "target": "KeymapBinding"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapBinding::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, keystroke : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "KeymapBinding"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapBinding::provenance",
      "name": "provenance",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn provenance (mut self, value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "KeymapBinding"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapBinding::provenance_label",
      "name": "provenance_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn provenance_label (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "KeymapBinding"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand",
      "name": "KeymapCommand",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "Caller-owned command metadata and binding facts.",
      "documentation": "Caller-owned command metadata and binding facts.",
      "signature": "# [doc = \" Caller-owned command metadata and binding facts.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct KeymapCommand { id : SharedString, label : SharedString, context : Option<SharedString>, default_bindings : Vec<SharedString>, effective_bindings : Vec<KeymapBinding>, search_text : SharedString, keywords : Vec<SharedString>, refusal : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::bindings",
      "name": "bindings",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bindings (mut self, values : impl IntoIterator<Item = KeymapBinding>) -> Self",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::context",
      "name": "context",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn context (mut self, value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::context_label",
      "name": "context_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn context_label (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::default_bindings",
      "name": "default_bindings",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn default_bindings (& self) -> & [SharedString]",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::defaults",
      "name": "defaults",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn defaults (mut self, values : impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::effective_bindings",
      "name": "effective_bindings",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn effective_bindings (& self) -> & [KeymapBinding]",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::keywords",
      "name": "keywords",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn keywords (& self) -> & [SharedString]",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::label_text",
      "name": "label_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label_text (& self) -> & SharedString",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::refusal_reason",
      "name": "refusal_reason",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn refusal_reason (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::refused",
      "name": "refused",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn refused (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::search_text",
      "name": "search_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn search_text (& self) -> & SharedString",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapCommand::searchable",
      "name": "searchable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn searchable (mut self, text : impl Into<SharedString>, keywords : impl IntoIterator<Item = impl Into<SharedString>>,) -> Self",
      "cfg": [],
      "target": "KeymapCommand"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapEditor",
      "name": "KeymapEditor",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "Coordinates one recorder over caller-owned keymap rows; it never applies a binding.",
      "documentation": "Coordinates one recorder over caller-owned keymap rows; it never applies a binding.",
      "signature": "# [doc = \" Coordinates one recorder over caller-owned keymap rows; it never applies a binding.\"] pub struct KeymapEditor { ident : Ident, commands : Vec<KeymapCommand>, query : SharedString, disabled : bool, active_command : Option<SharedString>, suppress_next_recorder_cancel : bool, recorder : Entity<KeybindingRecorder>, _recorder_subscription : Subscription, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapEditor::active_command",
      "name": "active_command",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn active_command (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "KeymapEditor"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapEditor::commands",
      "name": "commands",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn commands (mut self, commands : impl IntoIterator<Item = KeymapCommand>) -> Self",
      "cfg": [],
      "target": "KeymapEditor"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapEditor::current_commands",
      "name": "current_commands",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current_commands (& self) -> & [KeymapCommand]",
      "cfg": [],
      "target": "KeymapEditor"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapEditor::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "KeymapEditor"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapEditor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "KeymapEditor"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapEditor::query",
      "name": "query",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn query (mut self, query : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "KeymapEditor"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapEditor::set_commands",
      "name": "set_commands",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_commands (& mut self, commands : Vec<KeymapCommand>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "KeymapEditor"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapEditor::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "Refuses every editor action without removing caller-owned bindings.",
      "documentation": "Refuses every editor action without removing caller-owned bindings.",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "KeymapEditor"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapEditor::set_query",
      "name": "set_query",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_query (& mut self, query : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "KeymapEditor"
    },
    {
      "id": "gpui_kit::controls::keymap_editor::KeymapEditorEvent",
      "name": "KeymapEditorEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::keymap_editor",
      "path": "gpui_kit::controls::keymap_editor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, PartialEq, Eq)] pub enum KeymapEditorEvent { AddCaptured { command_id : SharedString, keystroke : SharedString, }, Remove { command_id : SharedString, binding_id : SharedString, }, Reset { command_id : SharedString, }, RecordingCancelled { command_id : SharedString, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::mention::MentionCandidate",
      "name": "MentionCandidate",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "One caller-owned answer to a mention query.",
      "documentation": "One caller-owned answer to a mention query.",
      "signature": "# [doc = \" One caller-owned answer to a mention query.\"] # [derive (Clone, PartialEq, Eq)] pub struct MentionCandidate { pub id : SharedString, pub label : SharedString, pub description : Option<SharedString>, replacement : SharedString, search_terms : Vec<SharedString>, refusal : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::mention::MentionCandidate::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MentionCandidate"
    },
    {
      "id": "gpui_kit::controls::mention::MentionCandidate::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "Creates a candidate whose visible label is also its inserted text. Use [`Self::replacement`] when the transcript spelling differs.",
      "documentation": "Creates a candidate whose visible label is also its inserted text.\nUse [`Self::replacement`] when the transcript spelling differs.",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MentionCandidate"
    },
    {
      "id": "gpui_kit::controls::mention::MentionCandidate::refusal",
      "name": "refusal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn refusal (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "MentionCandidate"
    },
    {
      "id": "gpui_kit::controls::mention::MentionCandidate::replacement",
      "name": "replacement",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "The exact text that replaces `@query` when this candidate is accepted.",
      "documentation": "The exact text that replaces `@query` when this candidate is accepted.",
      "signature": "pub fn replacement (mut self, replacement : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MentionCandidate"
    },
    {
      "id": "gpui_kit::controls::mention::MentionCandidate::search_terms",
      "name": "search_terms",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "Caller-owned aliases that participate in locale-aware matching but are never rendered or published in semantic snapshots.",
      "documentation": "Caller-owned aliases that participate in locale-aware matching but are\nnever rendered or published in semantic snapshots.",
      "signature": "pub fn search_terms (mut self, terms : impl IntoIterator<Item = impl Into<SharedString>>,) -> Self",
      "cfg": [],
      "target": "MentionCandidate"
    },
    {
      "id": "gpui_kit::controls::mention::MentionCandidate::unavailable",
      "name": "unavailable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "Keeps the answer visible with the caller's reason, but installs no pointer or keyboard acceptance handler for it.",
      "documentation": "Keeps the answer visible with the caller's reason, but installs no\npointer or keyboard acceptance handler for it.",
      "signature": "pub fn unavailable (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MentionCandidate"
    },
    {
      "id": "gpui_kit::controls::mention::MentionInput",
      "name": "MentionInput",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "A multiline editor with one caret-anchored mention completion surface.",
      "documentation": "A multiline editor with one caret-anchored mention completion surface.\n\nThe supplied [`TextArea`] entity must not also be mounted elsewhere. It is\nexposed through [`Self::editor`] so the caller keeps the full plain-text\nconfiguration and value API rather than receiving a reduced proxy.",
      "signature": "# [doc = \" A multiline editor with one caret-anchored mention completion surface.\"] # [doc = \"\"] # [doc = \" The supplied [`TextArea`] entity must not also be mounted elsewhere. It is\"] # [doc = \" exposed through [`Self::editor`] so the caller keeps the full plain-text\"] # [doc = \" configuration and value API rather than receiving a reduced proxy.\"] pub struct MentionInput { ident : Ident, editor : Entity<TextArea>, suggestions : AsyncValue<Vec<MentionCandidate>, SharedString>, trigger : Option<MentionQuery>, reported_query : Option<MentionQuery>, dismissed : Option<MentionQuery>, active : Option<SharedString>, focused : bool, scroll : ScrollHandle, reveal_active : bool, # [doc = \" Where the editor was painted on the previous frame, so the completion\"] # [doc = \" surface can clear the whole control instead of only the caret.\"] editor_bounds : Rc<Cell<Bounds<Pixels>>>, _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::mention::MentionInput::active_query",
      "name": "active_query",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn active_query (& self) -> Option<& MentionQuery>",
      "cfg": [],
      "target": "MentionInput"
    },
    {
      "id": "gpui_kit::controls::mention::MentionInput::candidates",
      "name": "candidates",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn candidates (mut self, candidates : impl IntoIterator<Item = MentionCandidate>) -> Self",
      "cfg": [],
      "target": "MentionInput"
    },
    {
      "id": "gpui_kit::controls::mention::MentionInput::editor",
      "name": "editor",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn editor (& self) -> & Entity<TextArea>",
      "cfg": [],
      "target": "MentionInput"
    },
    {
      "id": "gpui_kit::controls::mention::MentionInput::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self) -> bool",
      "cfg": [],
      "target": "MentionInput"
    },
    {
      "id": "gpui_kit::controls::mention::MentionInput::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, editor : Entity<TextArea>, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "MentionInput"
    },
    {
      "id": "gpui_kit::controls::mention::MentionInput::set_suggestions",
      "name": "set_suggestions",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_suggestions (& mut self, suggestions : AsyncValue<Vec<MentionCandidate>, SharedString>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "MentionInput"
    },
    {
      "id": "gpui_kit::controls::mention::MentionInput::suggestions",
      "name": "suggestions",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn suggestions (mut self, suggestions : AsyncValue<Vec<MentionCandidate>, SharedString>,) -> Self",
      "cfg": [],
      "target": "MentionInput"
    },
    {
      "id": "gpui_kit::controls::mention::MentionInput::suggestions_state",
      "name": "suggestions_state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn suggestions_state (& self) -> & AsyncValue<Vec<MentionCandidate>, SharedString>",
      "cfg": [],
      "target": "MentionInput"
    },
    {
      "id": "gpui_kit::controls::mention::MentionInputEvent",
      "name": "MentionInputEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "What a mention editor reports without applying caller-owned meaning.",
      "documentation": "What a mention editor reports without applying caller-owned meaning.",
      "signature": "# [doc = \" What a mention editor reports without applying caller-owned meaning.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum MentionInputEvent { Changed (SharedString), Submitted, Cancelled, Pasted (Pasted), Focused, Blurred, # [doc = \" `None` means the former query closed, moved away from the caret, or was\"] # [doc = \" dismissed. A later focus or changed token reports it again.\"] QueryChanged (Option<MentionQuery>), # [doc = \" The caller-owned identity and the byte range of the inserted text.\"] Accepted { id : SharedString, range : Range<usize>, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::mention::MentionQuery",
      "name": "MentionQuery",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::mention",
      "path": "gpui_kit::controls::mention",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "The active token, in UTF-8 byte offsets into the editor's current value.",
      "documentation": "The active token, in UTF-8 byte offsets into the editor's current value.",
      "signature": "# [doc = \" The active token, in UTF-8 byte offsets into the editor's current value.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct MentionQuery { pub text : SharedString, pub range : Range<usize>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect",
      "name": "MultiSelect",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "A selectable option set with search, chips, and listbox semantics.",
      "documentation": "A selectable option set with search, chips, and listbox semantics.",
      "signature": "# [doc = \" A selectable option set with search, chips, and listbox semantics.\"] pub struct MultiSelect { ident : Ident, query : Entity<TextInput>, options : Vec<SelectOption>, selected : Vec<SharedString>, name : SharedString, placeholder : Option<SharedString>, size : ControlSize, disabled : bool, invalid : bool, open : bool, clearable : bool, active : Option<SharedString>, scroll : ScrollHandle, trigger_bounds : Rc<Cell<Bounds<Pixels>>>, reveal_active : bool, presentation : popover::PickerPresentation, sheet : Option<popover::PickerSheet>, _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::clearable",
      "name": "clearable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clearable (mut self, clearable : bool) -> Self",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self) -> bool",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn open (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::options",
      "name": "options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn options (mut self, options : impl IntoIterator<Item = SelectOption>) -> Self",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::presentation",
      "name": "presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "Presents the existing options in an anchored menu or bottom modal.",
      "documentation": "Presents the existing options in an anchored menu or bottom modal.",
      "signature": "pub fn presentation (mut self, presentation : popover::PickerPresentation) -> Self",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::query_input",
      "name": "query_input",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn query_input (& self) -> & Entity<TextInput>",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::selected_ids",
      "name": "selected_ids",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_ids (& self) -> & [SharedString]",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::set_clearable",
      "name": "set_clearable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_clearable (& mut self, clearable : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::set_invalid",
      "name": "set_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_invalid (& mut self, invalid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::set_name",
      "name": "set_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_name (& mut self, name : SharedString, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::set_options",
      "name": "set_options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_options (& mut self, options : Vec<SelectOption>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::set_placeholder",
      "name": "set_placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "`None` restores the localized selection placeholder without resetting text.",
      "documentation": "`None` restores the localized selection placeholder without resetting text.",
      "signature": "pub fn set_placeholder (& mut self, placeholder : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::set_presentation",
      "name": "set_presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "Adapts the surface while preserving query and caller-owned selections.",
      "documentation": "Adapts the surface while preserving query and caller-owned selections.",
      "signature": "pub fn set_presentation (& mut self, presentation : popover::PickerPresentation, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelect::set_selected",
      "name": "set_selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_selected (& mut self, selected : impl IntoIterator<Item = impl Into<SharedString>>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "MultiSelect"
    },
    {
      "id": "gpui_kit::controls::multi_select::MultiSelectEvent",
      "name": "MultiSelectEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::multi_select",
      "path": "gpui_kit::controls::multi_select",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "What a multi-select reports. The owner decides whether the intent changes its selected ids or query.",
      "documentation": "What a multi-select reports. The owner decides whether the intent changes\nits selected ids or query.",
      "signature": "# [doc = \" What a multi-select reports. The owner decides whether the intent changes\"] # [doc = \" its selected ids or query.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum MultiSelectEvent { # [doc = \" Toggle the option with this business identity.\"] Toggled (SharedString), # [doc = \" Remove a selected option from the set.\"] Removed (SharedString), # [doc = \" Clear all selected options.\"] Cleared, # [doc = \" The typist changed the search query.\"] QueryChanged (SharedString), Opened, Closed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput",
      "name": "NumberInput",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "A number field with a step grid and, optionally, a range.",
      "documentation": "A number field with a step grid and, optionally, a range.\n\nIt never clamps. A value outside the range stays on screen exactly as it is\nand is published `invalid`, because silently correcting a number nobody\nchose hides the disagreement instead of reporting it.",
      "signature": "# [doc = \" A number field with a step grid and, optionally, a range.\"] # [doc = \"\"] # [doc = \" It never clamps. A value outside the range stays on screen exactly as it is\"] # [doc = \" and is published `invalid`, because silently correcting a number nobody\"] # [doc = \" chose hides the disagreement instead of reporting it.\"] pub struct NumberInput { ident : Ident, focus_handle : FocusHandle, field : Entity<TextInput>, value : Option<f64>, min : Option<f64>, max : Option<f64>, step : f64, page_step : Option<f64>, precision : usize, unit : Option<SharedString>, prefix : Option<SharedString>, size : ControlSize, disabled : bool, required : bool, # [doc = \" Validation owned by a surrounding form, separate from this control's\"] # [doc = \" parse and range checks.\"] invalid : bool, # [doc = \" What a reader should call this control, when the visible label lives\"] # [doc = \" outside it.\"] name : Option<SharedString>, # [doc = \" The number the caller seeded, once it has been put on screen. The text\"] # [doc = \" belongs to the typist afterwards, so it is written once.\"] # [doc = \"\"] # [doc = \" A control nobody gave a number to starts empty rather than at zero: a\"] # [doc = \" zero would be a number nobody entered, and against a range that\"] # [doc = \" excludes it the control would open already marked wrong.\"] seeded : bool, # [doc = \" Held so the field subscription lives as long as the control does.\"] _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::bind",
      "name": "bind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "Keeps a number field and a caller-owned [`Signal`] holding the same number.",
      "documentation": "Keeps a number field and a caller-owned [`Signal`] holding the same\nnumber.\n\nTyping writes the signal, and a change to the signal writes the field.\nText that is not a number at all writes nothing: the signal keeps the\nlast number that was one, and the field keeps showing what was typed,\nso the disagreement stays visible instead of being resolved by\nguessing. A value outside the range is still a number and is still\nreported, exactly as [`NumberInputEvent::Changed`] says.\n\nThe subscriptions are the binding: the caller holds them for as long\nas the field and the signal should stay together.",
      "signature": "pub fn bind (field : & Entity<Self>, signal : & Signal<f64>, cx : & mut App) -> Vec<Subscription>",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::can_step",
      "name": "can_step",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "Whether a step in this direction has anywhere to go.",
      "documentation": "Whether a step in this direction has anywhere to go.\n\nAt a boundary there is no next number, so nothing is reported and the\nbutton that would report it is refused rather than inert-looking.",
      "signature": "pub fn can_step (& self, delta : f64, cx : & App) -> bool",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "The number the control last held, or `None` when nobody has given it one and nobody has typed one.",
      "documentation": "The number the control last held, or `None` when nobody has given it\none and nobody has typed one.",
      "signature": "pub fn current (& self) -> Option<f64>",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::field",
      "name": "field",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn field (& self) -> & Entity<TextInput>",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::invalid_reason",
      "name": "invalid_reason",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "Why this control's own parser or range check refuses the field. Caller-owned invalidity is explained by its surrounding [`FormField`](crate::controls::form_field::FormField) rather than duplicated here.",
      "documentation": "Why this control's own parser or range check refuses the field.\nCaller-owned invalidity is explained by its surrounding\n[`FormField`](crate::controls::form_field::FormField) rather than\nduplicated here.",
      "signature": "pub fn invalid_reason (& self, cx : & App) -> Option<SharedString>",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::is_invalid",
      "name": "is_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "Whether either the surrounding field or this control's parser/range check currently refuses the value. An intrinsically empty field says nothing about a number, but caller-owned invalidity still applies.",
      "documentation": "Whether either the surrounding field or this control's parser/range\ncheck currently refuses the value. An intrinsically empty field says\nnothing about a number, but caller-owned invalidity still applies.",
      "signature": "pub fn is_invalid (& self, cx : & App) -> bool",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::max",
      "name": "max",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn max (mut self, max : f64) -> Self",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::min",
      "name": "min",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn min (mut self, min : f64) -> Self",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "Names the control for a reader. A number field is usually labelled by the form around it, and the name is passed to the field that actually takes the keystrokes so a reader landing there knows what it is.",
      "documentation": "Names the control for a reader. A number field is usually labelled by\nthe form around it, and the name is passed to the field that actually\ntakes the keystrokes so a reader landing there knows what it is.",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::page_step",
      "name": "page_step",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "How far page-up and page-down move. Ten steps unless told otherwise.",
      "documentation": "How far page-up and page-down move. Ten steps unless told otherwise.",
      "signature": "pub fn page_step (mut self, page_step : f64) -> Self",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::precision",
      "name": "precision",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "How many decimals the field draws and reports.",
      "documentation": "How many decimals the field draws and reports.",
      "signature": "pub fn precision (mut self, precision : usize) -> Self",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::prefix",
      "name": "prefix",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "What stands in front of the number, such as `\"$\"`. Shown before the field and carried in the published value.",
      "documentation": "What stands in front of the number, such as `\"$\"`. Shown before the\nfield and carried in the published value.",
      "signature": "pub fn prefix (mut self, prefix : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::range",
      "name": "range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn range (mut self, min : f64, max : f64) -> Self",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::required",
      "name": "required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn required (mut self, required : bool) -> Self",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::set_invalid",
      "name": "set_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_invalid (& mut self, invalid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::set_precision",
      "name": "set_precision",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "Changes future number formatting without overwriting an in-progress edit.",
      "documentation": "Changes future number formatting without overwriting an in-progress edit.",
      "signature": "pub fn set_precision (& mut self, precision : usize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::set_presentation",
      "name": "set_presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "Replaces presentation, including removing optional adornments and names.",
      "documentation": "Replaces presentation, including removing optional adornments and names.",
      "signature": "pub fn set_presentation (& mut self, name : Option<SharedString>, unit : Option<SharedString>, prefix : Option<SharedString>, size : ControlSize, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::set_range",
      "name": "set_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "Replaces optional bounds without replacing the typist's text or selection.",
      "documentation": "Replaces optional bounds without replacing the typist's text or selection.",
      "signature": "pub fn set_range (& mut self, min : Option<f64>, max : Option<f64>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::set_required",
      "name": "set_required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_required (& mut self, required : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::set_steps",
      "name": "set_steps",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "Replaces the step grid; an absent page step restores ten ordinary steps.",
      "documentation": "Replaces the step grid; an absent page step restores ten ordinary steps.",
      "signature": "pub fn set_steps (& mut self, step : f64, page_step : Option<f64>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::set_value",
      "name": "set_value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "Replaces the number from the host side.",
      "documentation": "Replaces the number from the host side.\n\nThe host already knows the number it just set, so this reports\nnothing; only what a typist asks for is reported.",
      "signature": "pub fn set_value (& mut self, value : f64, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::shown",
      "name": "shown",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "The number in the field, which is the typist's text rather than the host's value while an edit is in progress.",
      "documentation": "The number in the field, which is the typist's text rather than the\nhost's value while an edit is in progress.",
      "signature": "pub fn shown (& self, cx : & App) -> Option<f64>",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::step",
      "name": "step",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "How far one arrow key or one step button moves.",
      "documentation": "How far one arrow key or one step button moves.",
      "signature": "pub fn step (mut self, step : f64) -> Self",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::unit",
      "name": "unit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "What the number counts, such as `\"ms\"`. Shown after the field and carried in the published value.",
      "documentation": "What the number counts, such as `\"ms\"`. Shown after the field and\ncarried in the published value.",
      "signature": "pub fn unit (mut self, unit : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInput::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "Seeds the number the control draws. The caller keeps owning it.",
      "documentation": "Seeds the number the control draws. The caller keeps owning it.",
      "signature": "pub fn value (mut self, value : f64) -> Self",
      "cfg": [],
      "target": "NumberInput"
    },
    {
      "id": "gpui_kit::controls::number_input::NumberInputEvent",
      "name": "NumberInputEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::number_input",
      "path": "gpui_kit::controls::number_input",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "What a number field reports. The owner decides what any of it means.",
      "documentation": "What a number field reports. The owner decides what any of it means.",
      "signature": "# [doc = \" What a number field reports. The owner decides what any of it means.\"] # [derive (Debug, Clone, PartialEq)] pub enum NumberInputEvent { # [doc = \" The number that was asked for, by typing or by a step. It is reported\"] # [doc = \" exactly as it was asked for, including outside the range, so the host\"] # [doc = \" decides what to do about it.\"] Changed (f64), # [doc = \" What is in the field is not a number at all.\"] Unparsable (SharedString), Submit, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::KEY_CONTEXT",
      "name": "KEY_CONTEXT",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "The key context a rich-text editor publishes.",
      "documentation": "The key context a rich-text editor publishes.",
      "signature": "pub const KEY_CONTEXT: & str",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextDiagnostic",
      "name": "RichTextDiagnostic",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "A diagnostic projection. The editor draws it but never decides when or how validation runs.",
      "documentation": "A diagnostic projection. The editor draws it but never decides when or how\nvalidation runs.",
      "signature": "# [doc = \" A diagnostic projection. The editor draws it but never decides when or how\"] # [doc = \" validation runs.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct RichTextDiagnostic { pub range : RichTextRange, pub severity : RichTextDiagnosticSeverity, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextDiagnostic::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (range : RichTextRange, severity : RichTextDiagnosticSeverity) -> Self",
      "cfg": [],
      "target": "RichTextDiagnostic"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextDiagnosticSeverity",
      "name": "RichTextDiagnosticSeverity",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "Severity rendered under one caller-owned document range.",
      "documentation": "Severity rendered under one caller-owned document range.",
      "signature": "# [doc = \" Severity rendered under one caller-owned document range.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] pub enum RichTextDiagnosticSeverity { Info, Warning, Error, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor",
      "name": "RichTextEditor",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "The visible projection over a caller-owned rich-text editing session.",
      "documentation": "The visible projection over a caller-owned rich-text editing session.",
      "signature": "# [doc = \" The visible projection over a caller-owned rich-text editing session.\"] pub struct RichTextEditor { ident : Ident, session : Entity<RichTextEditSession>, new_block_id : BlockIdFactory, focus_handle : FocusHandle, name : SharedString, placeholder : SharedString, disabled : bool, read_only : bool, invalid : bool, required : bool, frame : Frame, toolbar : bool, rows : usize, max_rows : Option<usize>, visible_rows : usize, scroll_offset : Pixels, goal_x : Option<Pixels>, is_selecting : bool, diagnostics : Vec<RichTextDiagnostic>, last_layouts : Vec<StoredBlockLayout>, last_bounds : Option<Bounds<Pixels>>, content_height : Pixels, accessibility_revision : u64, accessible_snapshot : Arc<Mutex<Option<gpui::PublishedAccessibleText>>>, accessible_geometry : Arc<Mutex<Option<text_edit::AccessibleTextGeometry>>>, _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::apply_intent",
      "name": "apply_intent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "Applies a host-created intent through the same boundary as keyboard and toolbar actions.",
      "documentation": "Applies a host-created intent through the same boundary as keyboard and\ntoolbar actions.",
      "signature": "pub fn apply_intent (& mut self, intent : RichTextIntent, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::diagnostics",
      "name": "diagnostics",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn diagnostics (mut self, diagnostics : impl IntoIterator<Item = RichTextDiagnostic>,) -> Self",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::frame",
      "name": "frame",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn frame (mut self, frame : Frame) -> Self",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::is_read_only",
      "name": "is_read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_read_only (& self) -> bool",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::max_rows",
      "name": "max_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn max_rows (mut self, max_rows : usize) -> Self",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "Names the field for a reader without drawing another label.",
      "documentation": "Names the field for a reader without drawing another label.",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "Creates an editor over caller-owned state. `new_block_id` is called for each hard break and must return a fresh stable content identity.",
      "documentation": "Creates an editor over caller-owned state. `new_block_id` is called for\neach hard break and must return a fresh stable content identity.",
      "signature": "pub fn new (ident : impl Into<Ident>, session : Entity<RichTextEditSession>, new_block_id : impl Fn () -> RichTextBlockId + 'static, window : & mut Window, cx : & mut Context<Self>,) -> Self",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::read_only",
      "name": "read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "Keeps selection, copy, and semantics available while refusing edits.",
      "documentation": "Keeps selection, copy, and semantics available while refusing edits.",
      "signature": "pub fn read_only (mut self, read_only : bool) -> Self",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::required",
      "name": "required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn required (mut self, required : bool) -> Self",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::rows",
      "name": "rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::session",
      "name": "session",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn session (& self) -> & Entity<RichTextEditSession>",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::set_diagnostics",
      "name": "set_diagnostics",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_diagnostics (& mut self, diagnostics : impl IntoIterator<Item = RichTextDiagnostic>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::set_frame",
      "name": "set_frame",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_frame (& mut self, frame : Frame, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::set_invalid",
      "name": "set_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_invalid (& mut self, invalid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::set_max_rows",
      "name": "set_max_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "`None` restores fixed minimum-row height without replacing the session.",
      "documentation": "`None` restores fixed minimum-row height without replacing the session.",
      "signature": "pub fn set_max_rows (& mut self, max_rows : Option<usize>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::set_name",
      "name": "set_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_name (& mut self, name : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::set_placeholder",
      "name": "set_placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_placeholder (& mut self, placeholder : impl Into<SharedString>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::set_read_only",
      "name": "set_read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_read_only (& mut self, read_only : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::set_required",
      "name": "set_required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_required (& mut self, required : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::set_rows",
      "name": "set_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_rows (& mut self, rows : usize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::set_toolbar",
      "name": "set_toolbar",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_toolbar (& mut self, toolbar : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditor::toolbar",
      "name": "toolbar",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn toolbar (mut self, toolbar : bool) -> Self",
      "cfg": [],
      "target": "RichTextEditor"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::RichTextEditorEvent",
      "name": "RichTextEditorEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor",
      "path": "gpui_kit::controls::rich_text_editor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "Typed output from the editor.",
      "documentation": "Typed output from the editor.",
      "signature": "# [doc = \" Typed output from the editor.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum RichTextEditorEvent { # [doc = \" An intent reached the caller-owned session.\"] IntentApplied { intent : RichTextIntent, result : RichTextEditResult, }, # [doc = \" A malformed caller range or duplicate generated block id was refused.\"] IntentRefused { intent : RichTextIntent, error : RichTextError, }, # [doc = \" The link action needs the host's destination picker and URL policy.\"] LinkRequested (RichTextSelection), Focus, Blur, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::element::RichTextEditorElement::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor::element",
      "path": "gpui_kit::controls::rich_text_editor::element",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/element.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (editor : Entity<RichTextEditor>) -> Self",
      "cfg": [],
      "target": "RichTextEditorElement"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::projection::Projection::block",
      "name": "block",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor::projection",
      "path": "gpui_kit::controls::rich_text_editor::projection",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/projection.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn block (& self, id : & RichTextBlockId) -> Option<& ProjectedBlock>",
      "cfg": [],
      "target": "Projection"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::projection::Projection::blocks",
      "name": "blocks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor::projection",
      "path": "gpui_kit::controls::rich_text_editor::projection",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/projection.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn blocks (& self) -> & [ProjectedBlock]",
      "cfg": [],
      "target": "Projection"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::projection::Projection::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor::projection",
      "path": "gpui_kit::controls::rich_text_editor::projection",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/projection.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "Projection"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::projection::Projection::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor::projection",
      "path": "gpui_kit::controls::rich_text_editor::projection",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/projection.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (document : & RichTextDocument) -> Self",
      "cfg": [],
      "target": "Projection"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::projection::Projection::offset_for_position",
      "name": "offset_for_position",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor::projection",
      "path": "gpui_kit::controls::rich_text_editor::projection",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/projection.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn offset_for_position (& self, position : & RichTextPosition) -> Option<usize>",
      "cfg": [],
      "target": "Projection"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::projection::Projection::offsets_for_selection",
      "name": "offsets_for_selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor::projection",
      "path": "gpui_kit::controls::rich_text_editor::projection",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/projection.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn offsets_for_selection (& self, selection : & RichTextSelection) -> Option<(usize, usize)>",
      "cfg": [],
      "target": "Projection"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::projection::Projection::position_for_offset",
      "name": "position_for_offset",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor::projection",
      "path": "gpui_kit::controls::rich_text_editor::projection",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/projection.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn position_for_offset (& self, offset : usize) -> RichTextPosition",
      "cfg": [],
      "target": "Projection"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::projection::Projection::range_for_selection",
      "name": "range_for_selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor::projection",
      "path": "gpui_kit::controls::rich_text_editor::projection",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/projection.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn range_for_selection (& self, selection : & RichTextSelection) -> Option<Range<usize>>",
      "cfg": [],
      "target": "Projection"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::projection::Projection::selected_text",
      "name": "selected_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor::projection",
      "path": "gpui_kit::controls::rich_text_editor::projection",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/projection.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_text (& self, selection : & RichTextSelection) -> Option<String>",
      "cfg": [
        "cfg (test)"
      ],
      "target": "Projection"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::projection::Projection::selection_for_range",
      "name": "selection_for_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor::projection",
      "path": "gpui_kit::controls::rich_text_editor::projection",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/projection.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selection_for_range (& self, range : Range<usize>) -> RichTextSelection",
      "cfg": [],
      "target": "Projection"
    },
    {
      "id": "gpui_kit::controls::rich_text_editor::projection::Projection::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::rich_text_editor::projection",
      "path": "gpui_kit::controls::rich_text_editor::projection",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/projection.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text (& self) -> & SharedString",
      "cfg": [],
      "target": "Projection"
    },
    {
      "id": "gpui_kit::controls::search::FindReplace",
      "name": "FindReplace",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "A [`SearchField`] with a replacement field and the two replace actions.",
      "documentation": "A [`SearchField`] with a replacement field and the two replace actions.\n\nReplace-all says how many hits it will change **before** it is taken, and\nis only offered when that number is a counted one: an unfinished count, a\ncount that stopped early, and a search the host could not run are all\nnumbers nobody has, so the action is refused with the reason on it rather\nthan fired against a guess.",
      "signature": "# [doc = \" A [`SearchField`] with a replacement field and the two replace actions.\"] # [doc = \"\"] # [doc = \" Replace-all says how many hits it will change **before** it is taken, and\"] # [doc = \" is only offered when that number is a counted one: an unfinished count, a\"] # [doc = \" count that stopped early, and a search the host could not run are all\"] # [doc = \" numbers nobody has, so the action is refused with the reason on it rather\"] # [doc = \" than fired against a guess.\"] pub struct FindReplace { ident : Ident, focus_handle : FocusHandle, search : Entity<SearchField>, replacement : Entity<TextInput>, size : ControlSize, disabled : bool, _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::search::FindReplace::count",
      "name": "count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn count (& self, cx : & App) -> HitCount",
      "cfg": [],
      "target": "FindReplace"
    },
    {
      "id": "gpui_kit::controls::search::FindReplace::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "FindReplace"
    },
    {
      "id": "gpui_kit::controls::search::FindReplace::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "FindReplace"
    },
    {
      "id": "gpui_kit::controls::search::FindReplace::replacement_input",
      "name": "replacement_input",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn replacement_input (& self) -> & Entity<TextInput>",
      "cfg": [],
      "target": "FindReplace"
    },
    {
      "id": "gpui_kit::controls::search::FindReplace::replacement_text",
      "name": "replacement_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn replacement_text (& self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "FindReplace"
    },
    {
      "id": "gpui_kit::controls::search::FindReplace::search_field",
      "name": "search_field",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn search_field (& self) -> & Entity<SearchField>",
      "cfg": [],
      "target": "FindReplace"
    },
    {
      "id": "gpui_kit::controls::search::FindReplace::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "Updates the outer action sizing without replacing either input.",
      "documentation": "Updates the outer action sizing without replacing either input.",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "FindReplace"
    },
    {
      "id": "gpui_kit::controls::search::FindReplace::set_count",
      "name": "set_count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_count (& mut self, count : HitCount, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "FindReplace"
    },
    {
      "id": "gpui_kit::controls::search::FindReplace::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "FindReplace"
    },
    {
      "id": "gpui_kit::controls::search::FindReplaceEvent",
      "name": "FindReplaceEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "What a find-and-replace surface reports. It replaces nothing.",
      "documentation": "What a find-and-replace surface reports. It replaces nothing.",
      "signature": "# [doc = \" What a find-and-replace surface reports. It replaces nothing.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum FindReplaceEvent { # [doc = \" Whatever the search field itself reported.\"] Search (SearchFieldEvent), ReplacementChanged (SharedString), # [doc = \" Replace the hit the typist is on.\"] ReplaceOne, # [doc = \" Replace every hit. `count` is the number the control stated before it\"] # [doc = \" was taken, so a host that has since found more can refuse.\"] ReplaceAll { count : usize, }, # [doc = \" The typist asked for the surface to go away. It stays until the host\"] # [doc = \" takes it away, because whether there is anywhere to go back to is not\"] # [doc = \" something a bar can know.\"] Close, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::search::HitCount",
      "name": "HitCount",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "How many hits the host says the query has.",
      "documentation": "How many hits the host says the query has.\n\nCounting is not zero, and a count that stopped early is not a count. A\nfield that renders an unfinished search as \"No results\" tells the typist\ntheir query matched nothing, which nobody has established yet.",
      "signature": "# [doc = \" How many hits the host says the query has.\"] # [doc = \"\"] # [doc = \" Counting is not zero, and a count that stopped early is not a count. A\"] # [doc = \" field that renders an unfinished search as \\\"No results\\\" tells the typist\"] # [doc = \" their query matched nothing, which nobody has established yet.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum HitCount { # [doc = \" Nothing has been searched, so nothing is claimed. A field with an\"] # [doc = \" empty query sits here.\"] # [default] Unsearched, # [doc = \" The host is looking right now.\"] Counting, # [doc = \" The host looked and found nothing.\"] None, # [doc = \" The host counted. `current` is the hit the typist is on, zero-based,\"] # [doc = \" or `None` when the hits are known and no particular one is current.\"] Known { total : usize, current : Option<usize>, }, # [doc = \" The host stopped counting at `counted` and there are more.\"] # [doc = \"\"] # [doc = \" Distinct from [`HitCount::Known`] because \\\"at least 500\\\" is not 500,\"] # [doc = \" and a replace-all that trusted it would change a number nobody knows.\"] TooMany { counted : usize }, # [doc = \" The host could not search, in its own words.\"] Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::search::HitCount::exact",
      "name": "exact",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "How many hits this claims exactly, which is only ever a counted one.",
      "documentation": "How many hits this claims exactly, which is only ever a counted one.",
      "signature": "pub fn exact (& self) -> Option<usize>",
      "cfg": [],
      "target": "HitCount"
    },
    {
      "id": "gpui_kit::controls::search::HitCount::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "The name the semantic tree publishes, so a test tells the five apart.",
      "documentation": "The name the semantic tree publishes, so a test tells the five apart.",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "HitCount"
    },
    {
      "id": "gpui_kit::controls::search::SearchField",
      "name": "SearchField",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "A query field, a hit count, and next and previous.",
      "documentation": "A query field, a hit count, and next and previous.",
      "signature": "# [doc = \" A query field, a hit count, and next and previous.\"] pub struct SearchField { ident : Ident, focus_handle : FocusHandle, query : Entity<TextInput>, count : HitCount, placeholder : Option<SharedString>, size : ControlSize, disabled : bool, match_case : Option<bool>, whole_word : Option<bool>, _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::search::SearchField::count",
      "name": "count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn count (& self) -> & HitCount",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::focus",
      "name": "focus",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "Puts the keyboard in the query field, which is where a find surface that has just opened expects it.",
      "documentation": "Puts the keyboard in the query field, which is where a find surface\nthat has just opened expects it.",
      "signature": "pub fn focus (& self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::match_case",
      "name": "match_case",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "Offers a match-case toggle in the state the host holds. Without a call there is no such control, because a control over a rule the host does not implement would report a change nothing acts on.",
      "documentation": "Offers a match-case toggle in the state the host holds. Without a call\nthere is no such control, because a control over a rule the host does\nnot implement would report a change nothing acts on.",
      "signature": "pub fn match_case (mut self, on : bool) -> Self",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::query_input",
      "name": "query_input",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn query_input (& self) -> & Entity<TextInput>",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::query_text",
      "name": "query_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn query_text (& self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::set_count",
      "name": "set_count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_count (& mut self, count : HitCount, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::set_match_case",
      "name": "set_match_case",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "The count the host established. The field counts nothing itself. Offers the match-case toggle, or withdraws it, after construction. The state stays the host's; the field only draws it.",
      "documentation": "The count the host established. The field counts nothing itself.\nOffers the match-case toggle, or withdraws it, after construction.\nThe state stays the host's; the field only draws it.",
      "signature": "pub fn set_match_case (& mut self, on : Option<bool>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::set_placeholder",
      "name": "set_placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "Restores the localized query label when absent, preserving the editor.",
      "documentation": "Restores the localized query label when absent, preserving the editor.",
      "signature": "pub fn set_placeholder (& mut self, placeholder : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::set_query",
      "name": "set_query",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_query (& mut self, text : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::set_whole_word",
      "name": "set_whole_word",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "Offers the whole-word toggle, or withdraws it, after construction.",
      "documentation": "Offers the whole-word toggle, or withdraws it, after construction.",
      "signature": "pub fn set_whole_word (& mut self, on : Option<bool>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchField::whole_word",
      "name": "whole_word",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "Offers a whole-word toggle in the state the host holds.",
      "documentation": "Offers a whole-word toggle in the state the host holds.",
      "signature": "pub fn whole_word (mut self, on : bool) -> Self",
      "cfg": [],
      "target": "SearchField"
    },
    {
      "id": "gpui_kit::controls::search::SearchFieldEvent",
      "name": "SearchFieldEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "What a search field reports. It applies none of it.",
      "documentation": "What a search field reports. It applies none of it.",
      "signature": "# [doc = \" What a search field reports. It applies none of it.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum SearchFieldEvent { QueryChanged (SharedString), # [doc = \" Enter, or the next control.\"] Next, # [doc = \" Shift-enter, or the previous control.\"] Previous, # [doc = \" Escape. The host decides whether that closes the field.\"] Cancelled, MatchCaseToggled (bool), WholeWordToggled (bool), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::search::SearchInput",
      "name": "SearchInput",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "An in-content query with a magnifier and a clear action when nonempty.",
      "documentation": "An in-content query with a magnifier and a clear action when nonempty.\n\nFor project filters and similar queries, not document find/replace.\nOwns only the edit buffer and reports `SearchInputEvent`; the host owns\nmatching, results and debounce. Sizes use the same field metrics as inputs.",
      "signature": "# [doc = \" An in-content query with a magnifier and a clear action when nonempty.\"] # [doc = \"\"] # [doc = \" For project filters and similar queries, not document find/replace.\"] # [doc = \" Owns only the edit buffer and reports `SearchInputEvent`; the host owns\"] # [doc = \" matching, results and debounce. Sizes use the same field metrics as inputs.\"] pub struct SearchInput { ident : Ident, input : Entity<TextInput>, name : Option<SharedString>, placeholder : Option<SharedString>, size : ControlSize, disabled : bool, _subscription : Subscription, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::search::SearchInput::input",
      "name": "input",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "The underlying editable control, for bindings and selection access.",
      "documentation": "The underlying editable control, for bindings and selection access.",
      "signature": "pub fn input (& self) -> & Entity<TextInput>",
      "cfg": [],
      "target": "SearchInput"
    },
    {
      "id": "gpui_kit::controls::search::SearchInput::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "SearchInput"
    },
    {
      "id": "gpui_kit::controls::search::SearchInput::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "Names the query independently of its visible empty hint. When omitted, the accessible name falls back to the placeholder.",
      "documentation": "Names the query independently of its visible empty hint. When omitted,\nthe accessible name falls back to the placeholder.",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SearchInput"
    },
    {
      "id": "gpui_kit::controls::search::SearchInput::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "SearchInput"
    },
    {
      "id": "gpui_kit::controls::search::SearchInput::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "Supplies the empty hint, also used as the name unless explicitly named.",
      "documentation": "Supplies the empty hint, also used as the name unless explicitly named.",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SearchInput"
    },
    {
      "id": "gpui_kit::controls::search::SearchInput::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SearchInput"
    },
    {
      "id": "gpui_kit::controls::search::SearchInput::set_name",
      "name": "set_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "Updates the accessible name without changing the hint or query.",
      "documentation": "Updates the accessible name without changing the hint or query.",
      "signature": "pub fn set_name (& mut self, name : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SearchInput"
    },
    {
      "id": "gpui_kit::controls::search::SearchInput::set_placeholder",
      "name": "set_placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "Updates the empty hint without changing an explicit name or query.",
      "documentation": "Updates the empty hint without changing an explicit name or query.",
      "signature": "pub fn set_placeholder (& mut self, placeholder : impl Into<SharedString>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "SearchInput"
    },
    {
      "id": "gpui_kit::controls::search::SearchInput::set_presentation",
      "name": "set_presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "Reconciles presentation without replacing the editable entity or its selection.",
      "documentation": "Reconciles presentation without replacing the editable entity or its selection.",
      "signature": "pub fn set_presentation (& mut self, name : Option<SharedString>, placeholder : Option<SharedString>, size : ControlSize, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "SearchInput"
    },
    {
      "id": "gpui_kit::controls::search::SearchInput::set_value",
      "name": "set_value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "Updates the query and reports the same Change event as editing.",
      "documentation": "Updates the query and reports the same Change event as editing.",
      "signature": "pub fn set_value (& mut self, value : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SearchInput"
    },
    {
      "id": "gpui_kit::controls::search::SearchInput::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn value (& self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "SearchInput"
    },
    {
      "id": "gpui_kit::controls::search::SearchInputEvent",
      "name": "SearchInputEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::search",
      "path": "gpui_kit::controls::search",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "The query edit and focus events reported to the host; no search is run here.",
      "documentation": "The query edit and focus events reported to the host; no search is run here.",
      "signature": "# [doc = \" The query edit and focus events reported to the host; no search is run here.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum SearchInputEvent { Change (SharedString), Submit, Cancel, BackspaceAtStart, Focus, Blur, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::segmented::Segment",
      "name": "Segment",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "One choice in the strip, identified by business identity.",
      "documentation": "One choice in the strip, identified by business identity.",
      "signature": "# [doc = \" One choice in the strip, identified by business identity.\"] # [derive (Debug, Clone, PartialEq)] pub struct Segment { id : SharedString, label : SharedString, icon : Option<Icon>, tint : Option<Hsla>, disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::segmented::Segment::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "Refuses the segment. A refused segment installs no handler and the keyboard steps over it.",
      "documentation": "Refuses the segment. A refused segment installs no handler and the\nkeyboard steps over it.",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "Segment"
    },
    {
      "id": "gpui_kit::controls::segmented::Segment::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, glyph : Icon) -> Self",
      "cfg": [],
      "target": "Segment"
    },
    {
      "id": "gpui_kit::controls::segmented::Segment::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "Segment"
    },
    {
      "id": "gpui_kit::controls::segmented::Segment::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "Segment"
    },
    {
      "id": "gpui_kit::controls::segmented::Segment::is_tinted",
      "name": "is_tinted",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_tinted (& self) -> bool",
      "cfg": [],
      "target": "Segment"
    },
    {
      "id": "gpui_kit::controls::segmented::Segment::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "Segment"
    },
    {
      "id": "gpui_kit::controls::segmented::Segment::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Segment"
    },
    {
      "id": "gpui_kit::controls::segmented::Segment::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "The colour this segment wears while it holds, in place of the accent.",
      "documentation": "The colour this segment wears while it holds, in place of the accent.\n\nFor a strip whose segments are colour-identified things — a Studio, a\nbranch, an environment — where the answer is which one, and each one\nalready has a colour the reader knows it by. The tint replaces the\naccent and nothing else: the raised pill, the resting and hover tones,\nand what the node publishes are what an untinted strip has, so a\ncolour cannot turn one segment into a second segment shape. An\nuntinted segment, and every segment that is not the current answer,\nstays on the accent language.",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "Segment"
    },
    {
      "id": "gpui_kit::controls::segmented::SegmentedControl",
      "name": "SegmentedControl",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "A strip where exactly one segment holds.",
      "documentation": "A strip where exactly one segment holds.",
      "signature": "# [doc = \" A strip where exactly one segment holds.\"] # [derive (IntoElement)] pub struct SegmentedControl { ident : Ident, label : Option<SharedString>, segments : Vec<Segment>, selected : Option<SharedString>, size : ControlSize, disabled : bool, on_select : Option<SelectHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::segmented::SegmentedControl::bind",
      "name": "bind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "Draws the segment the caller's [`Binding`] names, and writes the one that was picked. Sugar for [`Self::selected`] and [`Self::on_select`].",
      "documentation": "Draws the segment the caller's [`Binding`] names, and writes the one\nthat was picked. Sugar for [`Self::selected`] and [`Self::on_select`].",
      "signature": "pub fn bind (self, binding : & Binding<SharedString>, cx : & App) -> Self",
      "cfg": [],
      "target": "SegmentedControl"
    },
    {
      "id": "gpui_kit::controls::segmented::SegmentedControl::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "What the whole strip is asking, for assistive technology.",
      "documentation": "What the whole strip is asking, for assistive technology.",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SegmentedControl"
    },
    {
      "id": "gpui_kit::controls::segmented::SegmentedControl::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "SegmentedControl"
    },
    {
      "id": "gpui_kit::controls::segmented::SegmentedControl::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "SegmentedControl"
    },
    {
      "id": "gpui_kit::controls::segmented::SegmentedControl::segments",
      "name": "segments",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn segments (mut self, segments : impl IntoIterator<Item = Segment>) -> Self",
      "cfg": [],
      "target": "SegmentedControl"
    },
    {
      "id": "gpui_kit::controls::segmented::SegmentedControl::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::segmented",
      "path": "gpui_kit::controls::segmented",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SegmentedControl"
    },
    {
      "id": "gpui_kit::controls::select::Select",
      "name": "Select",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "A closed list of options with one answer.",
      "documentation": "A closed list of options with one answer.\n\nThe select owns only whether its menu is open. It reports the option that\nwas picked and draws whatever the caller says is current, so a refused\nchoice is visible as the checkmark not moving.",
      "signature": "# [doc = \" A closed list of options with one answer.\"] # [doc = \"\"] # [doc = \" The select owns only whether its menu is open. It reports the option that\"] # [doc = \" was picked and draws whatever the caller says is current, so a refused\"] # [doc = \" choice is visible as the checkmark not moving.\"] pub struct Select { ident : Ident, focus_handle : FocusHandle, options : Vec<SelectOption>, selected : Option<SharedString>, name : SharedString, placeholder : Option<SharedString>, size : ControlSize, disabled : bool, invalid : bool, open : bool, clearable : bool, # [doc = \" Which row the keyboard is on, which is not a choice until it is taken.\"] active : Option<usize>, scroll : ScrollHandle, trigger_bounds : Rc<Cell<Bounds<Pixels>>>, reveal_active : bool, menu_geometry : Option<popover::MenuGeometry>, presentation : popover::PickerPresentation, sheet : Option<popover::PickerSheet>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::select::Select::bind",
      "name": "bind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "Keeps a select and a caller-owned [`Signal`] naming the same option.",
      "documentation": "Keeps a select and a caller-owned [`Signal`] naming the same option.\n\nThe signal holds the option id, and `None` is the answer being\ncleared, which a select only offers when it is\n[`Select::clearable`]. Picking writes the signal, and a change to the\nsignal moves the checkmark; neither direction fires when the two\nalready agree.\n\nThe subscriptions are the binding: the caller holds them for as long\nas the select and the signal should stay together.",
      "signature": "pub fn bind (select : & Entity<Self>, signal : & Signal<Option<SharedString>>, cx : & mut App,) -> Vec<Subscription>",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::clearable",
      "name": "clearable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "Offers a control that reports [`SelectEvent::Cleared`]. Disabled options stay offered; an empty answer is a different fact.",
      "documentation": "Offers a control that reports [`SelectEvent::Cleared`]. Disabled\noptions stay offered; an empty answer is a different fact.",
      "signature": "pub fn clearable (mut self, clearable : bool) -> Self",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "Closes either presentation without changing the caller-owned selection. A retained bottom modal releases focus ownership on its next render.",
      "documentation": "Closes either presentation without changing the caller-owned selection.\nA retained bottom modal releases focus ownership on its next render.",
      "signature": "pub fn close (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "Whether native selection and opening are currently refused.",
      "documentation": "Whether native selection and opening are currently refused.",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self) -> bool",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "Names the control independently of its current answer or placeholder.",
      "documentation": "Names the control independently of its current answer or placeholder.",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, _window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::options",
      "name": "options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn options (mut self, options : impl IntoIterator<Item = SelectOption>) -> Self",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::presentation",
      "name": "presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "Presents the same caller-owned choices in an anchored menu or bottom modal.",
      "documentation": "Presents the same caller-owned choices in an anchored menu or bottom modal.",
      "signature": "pub fn presentation (mut self, presentation : popover::PickerPresentation) -> Self",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::selected_id",
      "name": "selected_id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_id (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::selected_option",
      "name": "selected_option",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_option (& self) -> Option<& SelectOption>",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::set_clearable",
      "name": "set_clearable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "Changes the clear affordance without clearing the caller's selection.",
      "documentation": "Changes the clear affordance without clearing the caller's selection.",
      "signature": "pub fn set_clearable (& mut self, clearable : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "Changes control metrics without replacing focus or open-menu state.",
      "documentation": "Changes control metrics without replacing focus or open-menu state.",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::set_invalid",
      "name": "set_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "Draws the control as refused after it was built, for an owner that learns the answer is wrong later — a host that rejected it, or a form that found a required answer missing. Without it the message and the control it is about disagree.",
      "documentation": "Draws the control as refused after it was built, for an owner that\nlearns the answer is wrong later — a host that rejected it, or a form\nthat found a required answer missing. Without it the message and the\ncontrol it is about disagree.",
      "signature": "pub fn set_invalid (& mut self, invalid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::set_name",
      "name": "set_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_name (& mut self, name : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::set_options",
      "name": "set_options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "Replaces the options from the host side, keeping a selection that is still offered and dropping one that is not.",
      "documentation": "Replaces the options from the host side, keeping a selection that is\nstill offered and dropping one that is not.",
      "signature": "pub fn set_options (& mut self, options : Vec<SelectOption>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::set_placeholder",
      "name": "set_placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "Changes the placeholder without disturbing the open menu. `None` restores the current locale's built-in placeholder.",
      "documentation": "Changes the placeholder without disturbing the open menu. `None`\nrestores the current locale's built-in placeholder.",
      "signature": "pub fn set_placeholder (& mut self, placeholder : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::set_presentation",
      "name": "set_presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "Adapts presentation without resetting the current selection.",
      "documentation": "Adapts presentation without resetting the current selection.",
      "signature": "pub fn set_presentation (& mut self, presentation : popover::PickerPresentation, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::Select::set_selected",
      "name": "set_selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_selected (& mut self, id : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Select"
    },
    {
      "id": "gpui_kit::controls::select::SelectEvent",
      "name": "SelectEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "What a [`Select`] reports. The owner decides what any of it means.",
      "documentation": "What a [`Select`] reports. The owner decides what any of it means.",
      "signature": "# [doc = \" What a [`Select`] reports. The owner decides what any of it means.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum SelectEvent { # [doc = \" The typist picked this option. The owner decides whether it holds.\"] Selected (SharedString), # [doc = \" The typist cleared the answer. The owner decides whether it holds.\"] Cleared, Opened, Closed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::select::SelectOption",
      "name": "SelectOption",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "One choice, identified by business identity rather than by position.",
      "documentation": "One choice, identified by business identity rather than by position.",
      "signature": "# [doc = \" One choice, identified by business identity rather than by position.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct SelectOption { pub id : SharedString, pub label : SharedString, pub description : Option<SharedString>, pub disabled : bool, # [doc = \" Options that share a group label are drawn under one heading.\"] pub group : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::select::SelectOption::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SelectOption"
    },
    {
      "id": "gpui_kit::controls::select::SelectOption::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "SelectOption"
    },
    {
      "id": "gpui_kit::controls::select::SelectOption::group",
      "name": "group",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "Places the option under a section heading in the menu.",
      "documentation": "Places the option under a section heading in the menu.",
      "signature": "pub fn group (mut self, group : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SelectOption"
    },
    {
      "id": "gpui_kit::controls::select::SelectOption::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::select",
      "path": "gpui_kit::controls::select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SelectOption"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsList",
      "name": "SettingsList",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "Settings sections filtered by one caller-owned query.",
      "documentation": "Settings sections filtered by one caller-owned query.\n\nThe list searches every visible row phrase plus [`SettingsRow::search_terms`]\nwith the active locale matcher. It does not reorder matches: a settings\npage remains spatially familiar while it narrows. The query field is kept\noutside so a host can place it in its own page chrome without rebuilding a\nsecond filtering state machine.",
      "signature": "# [doc = \" Settings sections filtered by one caller-owned query.\"] # [doc = \"\"] # [doc = \" The list searches every visible row phrase plus [`SettingsRow::search_terms`]\"] # [doc = \" with the active locale matcher. It does not reorder matches: a settings\"] # [doc = \" page remains spatially familiar while it narrows. The query field is kept\"] # [doc = \" outside so a host can place it in its own page chrome without rebuilding a\"] # [doc = \" second filtering state machine.\"] # [derive (IntoElement)] pub struct SettingsList { ident : Ident, query : SharedString, sections : Vec<EffectScoped<SettingsSection>>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsList::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "SettingsList"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsList::query",
      "name": "query",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn query (mut self, query : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SettingsList"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsList::section",
      "name": "section",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn section (mut self, section : impl Into<EffectScoped<SettingsSection>>) -> Self",
      "cfg": [],
      "target": "SettingsList"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsList::sections",
      "name": "sections",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sections<S : Into<EffectScoped<SettingsSection>>> (mut self, sections : impl IntoIterator<Item = S>,) -> Self",
      "cfg": [],
      "target": "SettingsList"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsRow",
      "name": "SettingsRow",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "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.",
      "documentation": "One setting: what it is called on the left, what it is set to on the right.",
      "signature": "# [doc = \" One setting: what it is called on the left, what it is set to on the right.\"] # [derive (IntoElement)] pub struct SettingsRow { ident : Ident, label : SharedString, label_width : Option<Pixels>, description : Option<SharedString>, badge : Option<SharedString>, # [doc = \" What the setting currently holds, in the caller's words.\"] value : Option<SharedString>, control : Option<AnyElement>, withheld : Option<Withheld>, search_terms : Vec<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsRow::badge",
      "name": "badge",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "A short note beside the label, such as \"Requires restart\".",
      "documentation": "A short note beside the label, such as \"Requires restart\".",
      "signature": "pub fn badge (mut self, badge : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SettingsRow"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsRow::control",
      "name": "control",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn control (mut self, control : impl IntoElement) -> Self",
      "cfg": [],
      "target": "SettingsRow"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsRow::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SettingsRow"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsRow::label_width",
      "name": "label_width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "Overrides this row's inherited section label-column width.",
      "documentation": "Overrides this row's inherited section label-column width.",
      "signature": "pub fn label_width (mut self, width : Pixels) -> Self",
      "cfg": [],
      "target": "SettingsRow"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsRow::managed",
      "name": "managed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "Marks the setting as decided elsewhere, and by whom.",
      "documentation": "Marks the setting as decided elsewhere, and by whom.\n\nThe control is not rendered at all — a managed setting installs no\nhandler because there is nothing there to install one on — and the row\nstates the value and its controller instead.",
      "signature": "pub fn managed (mut self, controller : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SettingsRow"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsRow::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SettingsRow"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsRow::search_terms",
      "name": "search_terms",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "Caller-authored aliases and control vocabulary that are not already visible in the row.",
      "documentation": "Caller-authored aliases and control vocabulary that are not already\nvisible in the row.\n\nLabel, description, badge, displayed value, and withholding reason are\nsearched automatically. An arbitrary control is opaque to the row, so\nnames that exist only inside it — an option label, for example — belong\nhere rather than in a second downstream filtering implementation.",
      "signature": "pub fn search_terms (mut self, terms : impl IntoIterator<Item = impl Into<SharedString>>,) -> Self",
      "cfg": [],
      "target": "SettingsRow"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsRow::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "What the setting holds, published whether or not the control is drawn. A managed row has nothing else to show, so it is the only reading the typist gets.",
      "documentation": "What the setting holds, published whether or not the control is drawn.\nA managed row has nothing else to show, so it is the only reading the\ntypist gets.",
      "signature": "pub fn value (mut self, value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SettingsRow"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsSection",
      "name": "SettingsSection",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "A headed group of settings rows.",
      "documentation": "A headed group of settings rows.",
      "signature": "# [doc = \" A headed group of settings rows.\"] # [derive (IntoElement)] pub struct SettingsSection { ident : Ident, title : SharedString, description : Option<SharedString>, dimmed : Option<SharedString>, label_width : Option<Pixels>, content : Vec<SectionContent>, action : Option<ActionSlot>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsSection::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "A control in the section heading, such as \"Reset to defaults\".",
      "documentation": "A control in the section heading, such as \"Reset to defaults\".",
      "signature": "pub fn action (mut self, action : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "SettingsSection"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsSection::child",
      "name": "child",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "A full-width block among rows, preserving builder call order. Blocks share row padding and inset separators. A dimmed section omits blocks because their arbitrary controls cannot be made inapplicable safely. SettingsList includes blocks only when the section itself matches.",
      "documentation": "A full-width block among rows, preserving builder call order. Blocks\nshare row padding and inset separators. A dimmed section omits blocks\nbecause their arbitrary controls cannot be made inapplicable safely.\nSettingsList includes blocks only when the section itself matches.",
      "signature": "pub fn child (mut self, child : impl IntoElement) -> Self",
      "cfg": [],
      "target": "SettingsSection"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsSection::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SettingsSection"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsSection::dimmed_by",
      "name": "dimmed_by",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "States that nothing in this group applies here, and why.",
      "documentation": "States that nothing in this group applies here, and why.\n\nA dimmed group renders none of its controls, for the same reason a\nmanaged row renders none of its own: a setting that cannot take effect\nmust not look as though it can.",
      "signature": "pub fn dimmed_by (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SettingsSection"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsSection::label_width",
      "name": "label_width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "The shared label width; rows with an explicit width keep their override. Defaults to `measure.settingsLabel`, scaled with density and local zoom.",
      "documentation": "The shared label width; rows with an explicit width keep their override.\nDefaults to `measure.settingsLabel`, scaled with density and local zoom.",
      "signature": "pub fn label_width (mut self, width : Pixels) -> Self",
      "cfg": [],
      "target": "SettingsSection"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsSection::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SettingsSection"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsSection::row",
      "name": "row",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn row (mut self, row : impl Into<EffectScoped<SettingsRow>>) -> Self",
      "cfg": [],
      "target": "SettingsSection"
    },
    {
      "id": "gpui_kit::controls::settings_row::SettingsSection::rows",
      "name": "rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::settings_row",
      "path": "gpui_kit::controls::settings_row",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rows<R : Into<EffectScoped<SettingsRow>>> (mut self, rows : impl IntoIterator<Item = R>,) -> Self",
      "cfg": [],
      "target": "SettingsSection"
    },
    {
      "id": "gpui_kit::controls::slider::Slider",
      "name": "Slider",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "A track with one or two handles.",
      "documentation": "A track with one or two handles.\n\nThe value is caller-owned: the slider reports where the typist pointed and\nrenders whatever the caller decides, so a rejected or clamped change is\nvisible as the value not moving.",
      "signature": "# [doc = \" A track with one or two handles.\"] # [doc = \"\"] # [doc = \" The value is caller-owned: the slider reports where the typist pointed and\"] # [doc = \" renders whatever the caller decides, so a rejected or clamped change is\"] # [doc = \" visible as the value not moving.\"] # [derive (IntoElement)] pub struct Slider { ident : Ident, label : Option<SharedString>, min : f32, max : f32, value : f32, step : Option<f32>, orientation : SliderOrientation, length : Option<f32>, size : ControlSize, disabled : bool, # [doc = \" Rendered next to the label, for a unit the number alone does not carry.\"] display : Option<SharedString>, # [doc = \" The high end of a range slider. `None` is a single handle.\"] high : Option<f32>, # [doc = \" Tick marks on the track, as values on the same range as the handle.\"] marks : Vec<f32>, on_change : Option<ChangeHandler>, on_range_change : Option<RangeHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::slider::Slider::bind",
      "name": "bind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "Draws what the caller's [`Binding`] currently holds, and writes back through it. Sugar for [`Self::value`] and [`Self::on_change`].",
      "documentation": "Draws what the caller's [`Binding`] currently holds, and writes back\nthrough it. Sugar for [`Self::value`] and [`Self::on_change`].\n\nA range slider has two ends and one binding cannot carry both, so this\nis the single-handle case; a range keeps\n[`Slider::on_range_change`].",
      "signature": "pub fn bind (self, binding : & Binding<f32>, cx : & App) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::Slider::display",
      "name": "display",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "What to show for the current value, such as `\"70%\"`.",
      "documentation": "What to show for the current value, such as `\"70%\"`.",
      "signature": "pub fn display (mut self, display : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::Slider::high",
      "name": "high",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "A second handle. The fill then sits between the two values rather than from the start of the track, and [`Slider::on_range_change`] reports both ends.",
      "documentation": "A second handle. The fill then sits between the two values rather than\nfrom the start of the track, and [`Slider::on_range_change`] reports\nboth ends.",
      "signature": "pub fn high (mut self, high : f32) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::Slider::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::Slider::length",
      "name": "length",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "Sets the cross-axis length used by a vertical slider. When omitted, the theme's `measure.sliderVerticalHeight` token supplies it.",
      "documentation": "Sets the cross-axis length used by a vertical slider. When omitted,\nthe theme's `measure.sliderVerticalHeight` token supplies it.",
      "signature": "pub fn length (mut self, length : f32) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::Slider::marks",
      "name": "marks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "Tick marks on the track. Values outside the range are skipped rather than drawn off the ends.",
      "documentation": "Tick marks on the track. Values outside the range are skipped rather\nthan drawn off the ends.",
      "signature": "pub fn marks (mut self, marks : impl IntoIterator<Item = f32>) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::Slider::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::Slider::on_change",
      "name": "on_change",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_change (mut self, handler : impl Fn (f32, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::Slider::on_range_change",
      "name": "on_range_change",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "Reports both ends of a range slider. A single-handle slider ignores it.",
      "documentation": "Reports both ends of a range slider. A single-handle slider ignores it.",
      "signature": "pub fn on_range_change (mut self, handler : impl Fn (f32, f32, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::Slider::orientation",
      "name": "orientation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "Sets the layout, hit-test, keyboard, and accessibility axis together.",
      "documentation": "Sets the layout, hit-test, keyboard, and accessibility axis together.",
      "signature": "pub fn orientation (mut self, orientation : SliderOrientation) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::Slider::range",
      "name": "range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "The bounds the value lives in. A reversed or empty range is corrected here rather than producing a handle at an arbitrary position.",
      "documentation": "The bounds the value lives in. A reversed or empty range is corrected\nhere rather than producing a handle at an arbitrary position.",
      "signature": "pub fn range (mut self, min : f32, max : f32) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::Slider::step",
      "name": "step",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "Rounds every reported value to a multiple of `step`.",
      "documentation": "Rounds every reported value to a multiple of `step`.",
      "signature": "pub fn step (mut self, step : f32) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::Slider::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn value (mut self, value : f32) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::Slider::values",
      "name": "values",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn values (self, low : f32, high : f32) -> Self",
      "cfg": [],
      "target": "Slider"
    },
    {
      "id": "gpui_kit::controls::slider::SliderOrientation",
      "name": "SliderOrientation",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::slider",
      "path": "gpui_kit::controls::slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "The axis on which a slider lays out and accepts input.",
      "documentation": "The axis on which a slider lays out and accepts input.",
      "signature": "# [doc = \" The axis on which a slider lays out and accepts input.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum SliderOrientation { # [default] Horizontal, Vertical, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton",
      "name": "SplitButton",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "One action, plus the ones it stands in for.",
      "documentation": "One action, plus the ones it stands in for.\n\nThe default action and the arrow are separate targets with separate ids,\nbecause they do separate things: clicking the button acts, clicking the\narrow only offers. Refusing the whole control refuses both. Refusing only\nthe default action — [`SplitButton::default_disabled`] — leaves the arrow\nworking, because the alternatives may well be exactly what a typist needs\nwhen the usual thing cannot be done.",
      "signature": "# [doc = \" One action, plus the ones it stands in for.\"] # [doc = \"\"] # [doc = \" The default action and the arrow are separate targets with separate ids,\"] # [doc = \" because they do separate things: clicking the button acts, clicking the\"] # [doc = \" arrow only offers. Refusing the whole control refuses both. Refusing only\"] # [doc = \" the default action — [`SplitButton::default_disabled`] — leaves the arrow\"] # [doc = \" working, because the alternatives may well be exactly what a typist needs\"] # [doc = \" when the usual thing cannot be done.\"] pub struct SplitButton { ident : Ident, label : SharedString, icon : Option<Icon>, variant : ButtonVariant, size : ControlSize, disabled : bool, default_disabled : bool, focus_handle : FocusHandle, menu : Entity<Menu>, # [doc = \" The paint already pushed into the menu trigger, so a frame that\"] # [doc = \" changes nothing does not ask for another frame.\"] applied_trigger : Option<(ButtonVariant, ControlSize)>, on_click : Option<ClickHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::clear_on_click",
      "name": "clear_on_click",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clear_on_click (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::default_disabled",
      "name": "default_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "Refuses the default action while leaving the alternatives reachable.",
      "documentation": "Refuses the default action while leaving the alternatives reachable.",
      "signature": "pub fn default_disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, glyph : Icon) -> Self",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self, cx : & App) -> bool",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "The alternatives. They are reported by the menu, as [`crate::overlay::MenuEvent::Invoked`].",
      "documentation": "The alternatives. They are reported by the menu, as\n[`crate::overlay::MenuEvent::Invoked`].",
      "signature": "pub fn items (self, items : impl IntoIterator<Item = MenuItem>, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::menu",
      "name": "menu",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn menu (& self) -> & Entity<Menu>",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::menu_name",
      "name": "menu_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "What the arrow is named for a reader that cannot see it.",
      "documentation": "What the arrow is named for a reader that cannot see it.",
      "signature": "pub fn menu_name (self, name : impl Into<SharedString>, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::on_click",
      "name": "on_click",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_click (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::open_menu",
      "name": "open_menu",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn open_menu (& self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::primary",
      "name": "primary",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn primary (self) -> Self",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::secondary",
      "name": "secondary",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn secondary (self) -> Self",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::set_default_disabled",
      "name": "set_default_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_default_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::set_icon",
      "name": "set_icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_icon (& mut self, icon : Option<Icon>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::set_items",
      "name": "set_items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_items (& mut self, items : Vec<MenuItem>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::set_label",
      "name": "set_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "Updates the default action without replacing its focus or retained menu.",
      "documentation": "Updates the default action without replacing its focus or retained menu.",
      "signature": "pub fn set_label (& mut self, label : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::set_menu_name",
      "name": "set_menu_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_menu_name (& mut self, name : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::set_on_click",
      "name": "set_on_click",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_on_click (& mut self, handler : impl Fn (& mut Window, & mut App) + 'static, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::set_variant",
      "name": "set_variant",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_variant (& mut self, variant : ButtonVariant, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::split_button::SplitButton::variant",
      "name": "variant",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::split_button",
      "path": "gpui_kit::controls::split_button",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn variant (mut self, variant : ButtonVariant) -> Self",
      "cfg": [],
      "target": "SplitButton"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput",
      "name": "TagInput",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "A field that collects a set of short tokens.",
      "documentation": "A field that collects a set of short tokens.\n\nA duplicate and a full field are refusals, shown where the typist is\nlooking and with the typed text left in place, because a token the host\nwill not take is not a token that silently vanished.",
      "signature": "# [doc = \" A field that collects a set of short tokens.\"] # [doc = \"\"] # [doc = \" A duplicate and a full field are refusals, shown where the typist is\"] # [doc = \" looking and with the typed text left in place, because a token the host\"] # [doc = \" will not take is not a token that silently vanished.\"] pub struct TagInput { ident : Ident, focus_handle : FocusHandle, field : Entity<TextInput>, tags : Vec<SharedString>, placeholder : Option<SharedString>, max : Option<usize>, size : ControlSize, disabled : bool, invalid : bool, # [doc = \" The tag backspace has singled out, which is not a tag that is gone.\"] targeted : Option<SharedString>, # [doc = \" What the control last refused, in the words it will show.\"] refusal : Option<SharedString>, reorderable : bool, collapse_at : Option<usize>, # [doc = \" Held so the field subscription lives as long as the control does.\"] _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::bind",
      "name": "bind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "Replaces the set from the host side, which is how an addition or a removal actually takes effect. Keeps a tag field and a caller-owned [`Signal`] holding the same set.",
      "documentation": "Replaces the set from the host side, which is how an addition or a\nremoval actually takes effect.\nKeeps a tag field and a caller-owned [`Signal`] holding the same set.\n\nThe field reports what the typist asked for and never applies it, so\nthis is what applying it looks like: an addition appends, a removal\ndrops the first match, and a move reorders. A duplicate and a full\nfield are refusals — the field is already saying so where the typist\nis looking — and the set does not change.\n\nThe subscriptions are the binding: the caller holds them for as long\nas the field and the signal should stay together.",
      "signature": "pub fn bind (field : & Entity<Self>, signal : & Signal<Vec<SharedString>>, cx : & mut App,) -> Vec<Subscription>",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::collapse_at",
      "name": "collapse_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "How many tags stay visible before the rest collapse into a count.",
      "documentation": "How many tags stay visible before the rest collapse into a count.",
      "signature": "pub fn collapse_at (mut self, visible : usize) -> Self",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (& self) -> & [SharedString]",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::field",
      "name": "field",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn field (& self) -> & Entity<TextInput>",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::max",
      "name": "max",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "How many tags the set may hold. Reaching it is reported as a refusal, not enforced by swallowing what was typed.",
      "documentation": "How many tags the set may hold. Reaching it is reported as a refusal,\nnot enforced by swallowing what was typed.",
      "signature": "pub fn max (mut self, max : usize) -> Self",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::refusal",
      "name": "refusal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "What the control last refused, in the words it shows.",
      "documentation": "What the control last refused, in the words it shows.",
      "signature": "pub fn refusal (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::reorderable",
      "name": "reorderable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "Lets a tag be picked up and put somewhere else in the set.",
      "documentation": "Lets a tag be picked up and put somewhere else in the set.",
      "signature": "pub fn reorderable (mut self, reorderable : bool) -> Self",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::set_collapse_at",
      "name": "set_collapse_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_collapse_at (& mut self, visible : Option<usize>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::set_invalid",
      "name": "set_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "Draws the control as refused after it was built, for an owner that learns the answer is wrong later — a host that rejected it, or a form that found a required answer missing. Without it the message and the control it is about disagree.",
      "documentation": "Draws the control as refused after it was built, for an owner that\nlearns the answer is wrong later — a host that rejected it, or a form\nthat found a required answer missing. Without it the message and the\ncontrol it is about disagree.",
      "signature": "pub fn set_invalid (& mut self, invalid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::set_max",
      "name": "set_max",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "Change future acceptance; never truncate existing caller-owned tags.",
      "documentation": "Change future acceptance; never truncate existing caller-owned tags.",
      "signature": "pub fn set_max (& mut self, max : Option<usize>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::set_placeholder",
      "name": "set_placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "Restore the localized default without replacing the draft editor.",
      "documentation": "Restore the localized default without replacing the draft editor.",
      "signature": "pub fn set_placeholder (& mut self, placeholder : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::set_reorderable",
      "name": "set_reorderable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_reorderable (& mut self, reorderable : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::set_tags",
      "name": "set_tags",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_tags (& mut self, tags : Vec<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::tags",
      "name": "tags",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tags (mut self, tags : impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInput::targeted",
      "name": "targeted",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "The tag the next backspace would remove, if there is one.",
      "documentation": "The tag the next backspace would remove, if there is one.",
      "signature": "pub fn targeted (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "TagInput"
    },
    {
      "id": "gpui_kit::controls::tag_input::TagInputEvent",
      "name": "TagInputEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::tag_input",
      "path": "gpui_kit::controls::tag_input",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "What a tag field reports. The owner decides what any of it means.",
      "documentation": "What a tag field reports. The owner decides what any of it means.",
      "signature": "# [doc = \" What a tag field reports. The owner decides what any of it means.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum TagInputEvent { # [doc = \" A value the typist asked to add.\"] Added (SharedString), # [doc = \" A tag the typist asked to remove.\"] Removed (SharedString), # [doc = \" The value is already in the set. Reported rather than dropped, so a\"] # [doc = \" host can say so where the typist is looking.\"] Duplicate (SharedString), # [doc = \" The set is already as large as it was allowed to be.\"] Refused (SharedString), # [doc = \" A tag should move from `from` to `to`. The field does not move it.\"] Moved { from : usize, to : usize }, # [doc = \" The typist asked to edit this tag in place.\"] EditRequested (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::textarea::Enter",
      "name": "Enter",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "What the enter key does.",
      "documentation": "What the enter key does.\n\nBoth are ordinary and neither is a preference: it depends on what the text\nis. A field in a form holds a value that is edited and then committed, and\nenter is part of editing it. A composer holds a message, where sending is\nthe common act and a second line is the exception.",
      "signature": "# [doc = \" What the enter key does.\"] # [doc = \"\"] # [doc = \" Both are ordinary and neither is a preference: it depends on what the text\"] # [doc = \" is. A field in a form holds a value that is edited and then committed, and\"] # [doc = \" enter is part of editing it. A composer holds a message, where sending is\"] # [doc = \" the common act and a second line is the exception.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum Enter { # [doc = \" Enter opens a line; the platform modifier plus enter submits.\"] # [default] Opens, # [doc = \" Enter submits; shift plus enter opens a line.\"] Submits, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::textarea::Frame",
      "name": "Frame",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Who draws the frame the text sits in.",
      "documentation": "Who draws the frame the text sits in.\n\nA field standing in a form is a control, and the area draws the whole of\nit. An area inside a composer's pill, or inside a row a settings page\nalready framed, is not: drawing a second well inside the first is two\nsurfaces where the reader sees one control, and the frame the host drew is\nthe one they will aim at.",
      "signature": "# [doc = \" Who draws the frame the text sits in.\"] # [doc = \"\"] # [doc = \" A field standing in a form is a control, and the area draws the whole of\"] # [doc = \" it. An area inside a composer's pill, or inside a row a settings page\"] # [doc = \" already framed, is not: drawing a second well inside the first is two\"] # [doc = \" surfaces where the reader sees one control, and the frame the host drew is\"] # [doc = \" the one they will aim at.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum Frame { # [doc = \" The area draws its own well, radius, padding and focus ring.\"] # [default] Own, # [doc = \" The host drew the frame. The area contributes text, caret, selection\"] # [doc = \" and every editing behaviour, and inherits the type it is placed in, so\"] # [doc = \" the frame around it can be any shape the host wants — including one\"] # [doc = \" that changes shape from what [`Measured`] reports.\"] Host, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::textarea::KEY_CONTEXT",
      "name": "KEY_CONTEXT",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "The key context every text area publishes, so a host can layer its own bindings on top without re-declaring these.",
      "documentation": "The key context every text area publishes, so a host can layer its own\nbindings on top without re-declaring these.",
      "signature": "pub const KEY_CONTEXT: & str",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::textarea::Measured",
      "name": "Measured",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "What a text area measured the last time it was laid out.",
      "documentation": "What a text area measured the last time it was laid out.\n\nAn area grows itself between `rows` and `max_rows`, which is the whole\nanswer for a field that stands in a column. It is not the answer for a\nframe that changes shape around the text — a one-line pill that becomes a\npanel when the message outgrows it — because that host has to decide\nbefore it lays the area out, and at a width the area is not currently in.\nSo the area publishes what it knows rather than the decision: how wide the\ntext wants to be, how tall it came out, and the frame it was measured in.",
      "signature": "# [doc = \" What a text area measured the last time it was laid out.\"] # [doc = \"\"] # [doc = \" An area grows itself between `rows` and `max_rows`, which is the whole\"] # [doc = \" answer for a field that stands in a column. It is not the answer for a\"] # [doc = \" frame that changes shape around the text — a one-line pill that becomes a\"] # [doc = \" panel when the message outgrows it — because that host has to decide\"] # [doc = \" before it lays the area out, and at a width the area is not currently in.\"] # [doc = \" So the area publishes what it knows rather than the decision: how wide the\"] # [doc = \" text wants to be, how tall it came out, and the frame it was measured in.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Measured { # [doc = \" The widest line's width with nothing wrapping it, which is what a\"] # [doc = \" narrower frame would have to hold to keep the text on one row.\"] pub text : Pixels, # [doc = \" The height of the wrapped text, before the frame clamps it.\"] pub height : Pixels, # [doc = \" The width the text was wrapped against, which is the area's own frame\"] # [doc = \" less the padding the control keeps around it.\"] pub wrapped : Pixels, # [doc = \" Which layout pass this came from. A host that changes the frame should\"] # [doc = \" wait for a pass later than the one it acted on, or it will read the old\"] # [doc = \" shape and change its mind twice.\"] pub pass : u64, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::textarea::Pasted",
      "name": "Pasted",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "What a paste carried, when it was not text.",
      "documentation": "What a paste carried, when it was not text.\n\nAn area cannot put an image or a file into a string, so it says what\narrived and stops there. Whether this text is a message that takes\nattachments, or a field that has no use for one, is the host's to know.",
      "signature": "# [doc = \" What a paste carried, when it was not text.\"] # [doc = \"\"] # [doc = \" An area cannot put an image or a file into a string, so it says what\"] # [doc = \" arrived and stops there. Whether this text is a message that takes\"] # [doc = \" attachments, or a field that has no use for one, is the host's to know.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum Pasted { # [doc = \" Image data, such as a screenshot or a copied picture.\"] Images (Vec<gpui::Image>), # [doc = \" Paths, from a file manager's copy.\"] Paths (Vec<PathBuf>), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea",
      "name": "TextArea",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Wrapped, multi-line editable text.",
      "documentation": "Wrapped, multi-line editable text.\n\nEnter inserts a line and the platform modifier plus enter submits. Motion\nfollows visual rows with a preserved goal column, and the frame grows from\n`rows` to `max_rows` before it scrolls rather than pushing the page around.",
      "signature": "# [doc = \" Wrapped, multi-line editable text.\"] # [doc = \"\"] # [doc = \" Enter inserts a line and the platform modifier plus enter submits. Motion\"] # [doc = \" follows visual rows with a preserved goal column, and the frame grows from\"] # [doc = \" `rows` to `max_rows` before it scrolls rather than pushing the page around.\"] pub struct TextArea { ident : Ident, focus_handle : FocusHandle, placeholder : SharedString, # [doc = \" The value, the caret, the composition in flight, and the transactions\"] # [doc = \" that got here. Every mutation goes through it, so undo describes the\"] # [doc = \" value the area is actually showing.\"] edit : text_edit::EditBuffer, size : ControlSize, disabled : bool, invalid : bool, required : bool, read_only : bool, max_length : Option<usize>, rows : usize, max_rows : Option<usize>, enter : Enter, input_options : gpui::TextInputOptions, frame : Frame, wrap : TextAreaWrap, line_projection : Option<gpui::EditableLineProjection>, # [doc = \" Whether the vertical arrows belong to something other than the caret.\"] # [doc = \" Set from the host's render while a surface over the area is listing\"] # [doc = \" options, because that is the only thing that knows there is one.\"] arrows_claimed : bool, # [doc = \" Whether enter and escape belong to the open completion surface.\"] completion_claimed : bool, # [doc = \" Whether tab belongs to a source editor wrapped around this area.\"] indentation_claimed : bool, # [doc = \" The rows the frame decided to occupy, which grows with the text until\"] # [doc = \" `max_rows` and is measured rather than guessed.\"] visible_rows : usize, scroll_offset : Pixels, horizontal_scroll_offset : Pixels, reveal_caret : bool, scroll_dirty : bool, known_text_width : Pixels, # [doc = \" The horizontal position vertical motion aims for, so a run of up or\"] # [doc = \" down keys through a short line does not drag the caret leftwards.\"] goal_x : Option<Pixels>, multi_goal_x : Vec<Pixels>, is_selecting : bool, rectangular_anchor : Option<Point<Pixels>>, last_layout : Option<EditableTextLayout>, wrapped_cache : RefCell<gpui::EditableWrappedCache>, last_layout_text : SharedString, last_layout_rows : Arc<[Range<usize>]>, hard_rows : Option<(u64, Arc<[Range<usize>]>)>, row_index_work : usize, last_bounds : Option<Bounds<Pixels>>, visual_transform : gpui::VisualTransform, caret_width : Pixels, # [doc = \" Bumped once per layout pass, so a host that resizes the frame around\"] # [doc = \" this area can tell a measurement taken after its last change from one\"] # [doc = \" taken before it.\"] layout_pass : u64, revision : u64, highlight_revision : Option<u64>, highlights : Vec<(Range<usize>, HighlightStyle)>, accessibility_revision : u64, accessible_snapshot : Arc<Mutex<Option<text_edit::PublishedAccessibleText>>>, accessible_geometry : Arc<Mutex<Option<AccessibleLayout>>>, accessible_cache : Arc<Mutex<gpui::AccessibleTextCache>>, # [doc = \" Held so the focus listeners live as long as the area does.\"] _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::accessibility_work",
      "name": "accessibility_work",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Text segmentation and payload work of the last native accessibility publication, separate from shaping and full-frame allocation costs.",
      "documentation": "Text segmentation and payload work of the last native accessibility\npublication, separate from shaping and full-frame allocation costs.",
      "signature": "pub fn accessibility_work (& self) -> gpui::AccessibleTextWork",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::arrows_claimed",
      "name": "arrows_claimed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn arrows_claimed (& self) -> bool",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::autosize",
      "name": "autosize",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Enables measured auto-sizing between an inclusive minimum and maximum row count. Once the maximum is reached, the editor keeps that height and scrolls its content instead of changing the surrounding layout.",
      "documentation": "Enables measured auto-sizing between an inclusive minimum and maximum\nrow count. Once the maximum is reached, the editor keeps that height\nand scrolls its content instead of changing the surrounding layout.\n\nThis is the named convenience API for the MUI `Textarea Autosize`\ncontract. It uses the same shaped layout as ordinary text areas, so\nIME composition, selection, caret geometry, and undo history remain\nattached to this editor rather than to a second measuring field.",
      "signature": "pub fn autosize (mut self, min_rows : usize, max_rows : usize) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::bind",
      "name": "bind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Keeps an area and a caller-owned [`Signal`] holding the same text.",
      "documentation": "Keeps an area and a caller-owned [`Signal`] holding the same text.\n\nThe area is seeded from the signal, typing writes the signal, and a\nchange to the signal writes the area. Neither direction fires when the\ntwo already agree, so the caret is not thrown to the end of the text\non every keystroke.\n\nThe subscriptions are the binding: the caller holds them for as long\nas the area and the signal should stay together.",
      "signature": "pub fn bind (area : & Entity<Self>, signal : & Signal<String>, cx : & mut App) -> Vec<Subscription>",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::bounds_for_position",
      "name": "bounds_for_position",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Current painted insertion rectangle for a source byte position.",
      "documentation": "Current painted insertion rectangle for a source byte position.",
      "signature": "pub fn bounds_for_position (& self, offset : usize) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::bounds_for_range",
      "name": "bounds_for_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Painted rectangles for a byte range in window coordinates.",
      "documentation": "Painted rectangles for a byte range in window coordinates.\n\nNothing is returned until the current value has been shaped. Wrapped\nand bidirectional ranges can produce more than one rectangle; callers\nthat need only the insertion point should use [`Self::caret_bounds`].",
      "signature": "pub fn bounds_for_range (& self, range : Range<usize>) -> Option<Vec<Bounds<Pixels>>>",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::caret_bounds",
      "name": "caret_bounds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "The current insertion rectangle in window coordinates.",
      "documentation": "The current insertion rectangle in window coordinates.",
      "signature": "pub fn caret_bounds (& self) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::completion_claimed",
      "name": "completion_claimed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn completion_claimed (& self) -> bool",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::cursor_offset",
      "name": "cursor_offset",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cursor_offset (& self) -> usize",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::cursor_row",
      "name": "cursor_row",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "The visual row the caret sits on, counting wrapped rows.",
      "documentation": "The visual row the caret sits on, counting wrapped rows.\n\nZero until the area has been laid out once, because a wrapped row only\nexists once a width is known.",
      "signature": "pub fn cursor_row (& self) -> usize",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::detached",
      "name": "detached",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Builds an area where there is no window to hand.",
      "documentation": "Builds an area where there is no window to hand.\n\nFocus belongs to a window, so an area normally takes one and starts\nwatching immediately. A host does not always have one: a view built\ninside a subscription, a background task, or a test that never opened\na window has a `Context` and nothing else. Such an area starts\nwatching at its first render, which is the first moment a window\ncertainly exists, and reports focus from then on.",
      "signature": "pub fn detached (ident : impl Into<Ident>, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::document",
      "name": "document",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Persistent current document for indexed line, range, and UTF-16 access. Unlike `snapshot`, this does not materialize the whole UTF-8 value.",
      "documentation": "Persistent current document for indexed line, range, and UTF-16 access.\nUnlike `snapshot`, this does not materialize the whole UTF-8 value.",
      "signature": "pub fn document (& self) -> gpui::EditSnapshot",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::enter",
      "name": "enter",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Truncates input past a length in bytes of UTF-8. What the enter key does. See [`Enter`].",
      "documentation": "Truncates input past a length in bytes of UTF-8.\nWhat the enter key does. See [`Enter`].",
      "signature": "pub fn enter (mut self, enter : Enter) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::frame",
      "name": "frame",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Who draws the frame around the text. See [`Frame`].",
      "documentation": "Who draws the frame around the text. See [`Frame`].",
      "signature": "pub fn frame (mut self, frame : Frame) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::horizontal_scroll_offset",
      "name": "horizontal_scroll_offset",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn horizontal_scroll_offset (& self) -> Pixels",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::input_options",
      "name": "input_options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Platform keyboard/autofill hints, not a guarantee of platform support. Multiline and non-sensitive semantics follow the actual editor. A default action follows [`Enter`]; explicit next/previous actions emit [`gpui::TextInputAction`] for caller-owned focus routing.",
      "documentation": "Platform keyboard/autofill hints, not a guarantee of platform support.\nMultiline and non-sensitive semantics follow the actual editor. A\ndefault action follows [`Enter`]; explicit next/previous actions emit\n[`gpui::TextInputAction`] for caller-owned focus routing.",
      "signature": "pub fn input_options (mut self, options : gpui::TextInputOptions) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::insert",
      "name": "insert",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Inserts text at the caret, replacing the selection, exactly as a paste would.",
      "documentation": "Inserts text at the caret, replacing the selection, exactly as a paste\nwould.\n\nThis is what a drop onto the area is: text that arrived from outside\nwith no keystroke behind it. It goes through the same edit as\neverything else, so it is one undo step and it reports one change.",
      "signature": "pub fn insert (& mut self, text : & str, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::is_read_only",
      "name": "is_read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_read_only (& self) -> bool",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::max_length",
      "name": "max_length",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn max_length (mut self, max_length : usize) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::max_rows",
      "name": "max_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Grows with the text up to this many rows, then scrolls instead.",
      "documentation": "Grows with the text up to this many rows, then scrolls instead.",
      "signature": "pub fn max_rows (mut self, max_rows : usize) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::measured",
      "name": "measured",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "What the last layout pass measured, or nothing before the first one.",
      "documentation": "What the last layout pass measured, or nothing before the first one.",
      "signature": "pub fn measured (& self) -> Option<Measured>",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::read_only",
      "name": "read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Keeps the value focusable and exposed while refusing keyboard, pointer, IME, and accessibility value changes.",
      "documentation": "Keeps the value focusable and exposed while refusing keyboard,\npointer, IME, and accessibility value changes.",
      "signature": "pub fn read_only (mut self, read_only : bool) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::replace_range",
      "name": "replace_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Replaces a caller-named UTF-8 byte range as one undoable edit.",
      "documentation": "Replaces a caller-named UTF-8 byte range as one undoable edit.\n\nCompletion surfaces use this to replace the trigger and query without\nmanufacturing selection gestures. Ranges must name UTF-8 and grapheme\nboundaries; invalid ranges, disabled and read-only areas are refused.\nThe returned range is what survived the area's normalisation and length\nrules.",
      "signature": "pub fn replace_range (& mut self, range : Range<usize>, text : & str, cx : & mut Context<Self>,) -> Option<Range<usize>>",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::replace_ranges",
      "name": "replace_ranges",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Applies disjoint original-document replacements as one undo step. Invalid ranges and disabled/read-only controls are refused atomically. The first replacement's resulting caret is primary.",
      "documentation": "Applies disjoint original-document replacements as one undo step.\nInvalid ranges and disabled/read-only controls are refused atomically.\nThe first replacement's resulting caret is primary.",
      "signature": "pub fn replace_ranges (& mut self, edits : impl IntoIterator<Item = (Range<usize>, SharedString)>, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::required",
      "name": "required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn required (mut self, required : bool) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::revision",
      "name": "revision",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn revision (& self) -> u64",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::row_index_work",
      "name": "row_index_work",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Logical row entries constructed during the latest render/layout pass. Unchanged no-wrap rows share storage; this excludes explicit caller geometry exports and native child-id metadata.",
      "documentation": "Logical row entries constructed during the latest render/layout pass.\nUnchanged no-wrap rows share storage; this excludes explicit caller\ngeometry exports and native child-id metadata.",
      "signature": "pub fn row_index_work (& self) -> usize",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::rows",
      "name": "rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "The rows the area occupies before it has anything longer to show.",
      "documentation": "The rows the area occupies before it has anything longer to show.",
      "signature": "pub fn rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::select_rectangle",
      "name": "select_rectangle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Selects one source range per visual row between two window positions. Glyph hit testing, tabs and wrapping use the same painted layout as the input method. The focus row is primary; short rows clamp to their ends.",
      "documentation": "Selects one source range per visual row between two window positions.\nGlyph hit testing, tabs and wrapping use the same painted layout as the\ninput method. The focus row is primary; short rows clamp to their ends.",
      "signature": "pub fn select_rectangle (& mut self, anchor : Point<Pixels>, focus : Point<Pixels>, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::selected_range",
      "name": "selected_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_range (& self) -> Range<usize>",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::selections",
      "name": "selections",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Primary-first, non-overlapping Unicode selections, including carets.",
      "documentation": "Primary-first, non-overlapping Unicode selections, including carets.",
      "signature": "pub fn selections (& self) -> Vec<(Range<usize>, bool)>",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_arrows_claimed",
      "name": "set_arrows_claimed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Hands the vertical arrows to the host, or takes them back.",
      "documentation": "Hands the vertical arrows to the host, or takes them back.\n\nWhile they are claimed, up and down report [`TextAreaEvent::MoveUp`]\nand [`TextAreaEvent::MoveDown`] and the caret does not move. A menu\ndrawn over the area cannot take them for itself: GPUI dispatches a\nbound key before any raw listener, so the area has to hand them over,\nand it only does so while the host says there is something up there to\nmove through.\n\nThere is no notify, because this is set from the host's own render and\nasking for a frame from inside one would spin.",
      "signature": "pub fn set_arrows_claimed (& mut self, claimed : bool)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_autosize",
      "name": "set_autosize",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "`None` removes autosizing while retaining the current minimum rows.",
      "documentation": "`None` removes autosizing while retaining the current minimum rows.",
      "signature": "pub fn set_autosize (& mut self, rows : Option<(usize, usize)>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_completion_claimed",
      "name": "set_completion_claimed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Hands enter, escape, and the unmodified vertical arrows to a completion surface without changing shift-enter or the platform submit chord.",
      "documentation": "Hands enter, escape, and the unmodified vertical arrows to a completion\nsurface without changing shift-enter or the platform submit chord.\n\nThis is intentionally separate from [`Self::set_arrows_claimed`]: an\nowner can use the older arrow handoff for a surface that has no accept\naction, while a completion surface gets one coherent key contract.\nThere is no notify because owners set this during their own render.",
      "signature": "pub fn set_completion_claimed (& mut self, claimed : bool)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_enter",
      "name": "set_enter",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_enter (& mut self, enter : Enter, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_frame",
      "name": "set_frame",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Changes frame ownership without replacing the editing session.",
      "documentation": "Changes frame ownership without replacing the editing session.",
      "signature": "pub fn set_frame (& mut self, frame : Frame, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_input_options",
      "name": "set_input_options",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Updates hints without discarding text, composition, selection or history.",
      "documentation": "Updates hints without discarding text, composition, selection or history.",
      "signature": "pub fn set_input_options (& mut self, options : gpui::TextInputOptions, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_invalid",
      "name": "set_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_invalid (& mut self, invalid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_max_length",
      "name": "set_max_length",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Changes the byte limit for future input; existing text and history are not truncated. `None` removes the limit.",
      "documentation": "Changes the byte limit for future input; existing text and history are\nnot truncated. `None` removes the limit.",
      "signature": "pub fn set_max_length (& mut self, max_length : Option<usize>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_max_rows",
      "name": "set_max_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "`None` removes autosizing's maximum and restores fixed `rows` height.",
      "documentation": "`None` removes autosizing's maximum and restores fixed `rows` height.",
      "signature": "pub fn set_max_rows (& mut self, max_rows : Option<usize>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_placeholder",
      "name": "set_placeholder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Changes what the empty area suggests, after it was built.",
      "documentation": "Changes what the empty area suggests, after it was built.\n\nWhat an empty area is waiting for can change without the area being\nrebuilt — the language it is read in, or a question the host is part\nway through asking — and rebuilding it to say so would throw away\nwhatever had been typed.",
      "signature": "pub fn set_placeholder (& mut self, placeholder : impl Into<SharedString>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_read_only",
      "name": "set_read_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_read_only (& mut self, read_only : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_required",
      "name": "set_required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_required (& mut self, required : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_rows",
      "name": "set_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_rows (& mut self, rows : usize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_selected_range",
      "name": "set_selected_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Moves the selection from the host side using UTF-8 byte offsets. Invalid offsets are clamped to surrounding grapheme boundaries by the shared editable-text buffer.",
      "documentation": "Moves the selection from the host side using UTF-8 byte offsets.\nInvalid offsets are clamped to surrounding grapheme boundaries by the\nshared editable-text buffer.",
      "signature": "pub fn set_selected_range (& mut self, range : Range<usize>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_selections",
      "name": "set_selections",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Sets primary-first selections. Overlaps and duplicate carets merge; offsets follow the shared grapheme-clamping rules. Empty input is refused.",
      "documentation": "Sets primary-first selections. Overlaps and duplicate carets merge;\noffsets follow the shared grapheme-clamping rules. Empty input is refused.",
      "signature": "pub fn set_selections (& mut self, selections : impl IntoIterator<Item = (Range<usize>, bool)>, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_value",
      "name": "set_value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Replaces the text from the host side, for example when a form resets.",
      "documentation": "Replaces the text from the host side, for example when a form resets.",
      "signature": "pub fn set_value (& mut self, value : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::set_wrap",
      "name": "set_wrap",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Changes wrapping and invalidates measured geometry, preserving text, selection, composition and history. The caret is revealed on relayout.",
      "documentation": "Changes wrapping and invalidates measured geometry, preserving text,\nselection, composition and history. The caret is revealed on relayout.",
      "signature": "pub fn set_wrap (& mut self, wrap : TextAreaWrap, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::shaping_work",
      "name": "shaping_work",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Actual shaped UTF-8 bytes and hard lines in the current layout, including offscreen geometry explicitly requested by input/navigation.",
      "documentation": "Actual shaped UTF-8 bytes and hard lines in the current layout,\nincluding offscreen geometry explicitly requested by input/navigation.",
      "signature": "pub fn shaping_work (& self) -> Option<gpui::EditableTextWork>",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::snapshot",
      "name": "snapshot",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "The current immutable value and the monotonic revision that produced it.",
      "documentation": "The current immutable value and the monotonic revision that produced it.",
      "signature": "pub fn snapshot (& self) -> TextAreaSnapshot",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Seeds the initial text, with the caret at the end.",
      "documentation": "Seeds the initial text, with the caret at the end.",
      "signature": "pub fn text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn value (& self) -> & SharedString",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::wrap",
      "name": "wrap",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Chooses soft wrapping or a horizontally scrolling hard-line viewport.",
      "documentation": "Chooses soft wrapping or a horizontally scrolling hard-line viewport.",
      "signature": "pub fn wrap (mut self, wrap : TextAreaWrap) -> Self",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::wrap_mode",
      "name": "wrap_mode",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn wrap_mode (& self) -> TextAreaWrap",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextArea::wrapped_index_work",
      "name": "wrapped_index_work",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Hard-line metadata rebuilt by the latest soft-wrap update. Static updates reuse the index; source edits currently rebuild its metadata.",
      "documentation": "Hard-line metadata rebuilt by the latest soft-wrap update. Static\nupdates reuse the index; source edits currently rebuild its metadata.",
      "signature": "pub fn wrapped_index_work (& self) -> usize",
      "cfg": [],
      "target": "TextArea"
    },
    {
      "id": "gpui_kit::controls::textarea::TextAreaEdit",
      "name": "TextAreaEdit",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "The single contiguous replacement between two text-area revisions.",
      "documentation": "The single contiguous replacement between two text-area revisions.\n\nOffsets are UTF-8 byte offsets in the preceding revision. `inserted` is\nthe text occupying that range in `revision`. Typing, IME composition,\npaste, programmatic replacement, undo, and redo all report through this\nsame contract.",
      "signature": "# [doc = \" The single contiguous replacement between two text-area revisions.\"] # [doc = \"\"] # [doc = \" Offsets are UTF-8 byte offsets in the preceding revision. `inserted` is\"] # [doc = \" the text occupying that range in `revision`. Typing, IME composition,\"] # [doc = \" paste, programmatic replacement, undo, and redo all report through this\"] # [doc = \" same contract.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct TextAreaEdit { # [doc = \" The new revision after this replacement was applied.\"] pub revision : u64, # [doc = \" The UTF-8 range replaced in the preceding revision.\"] pub replaced : Range<usize>, # [doc = \" The text inserted at `replaced.start` in the new revision.\"] pub inserted : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::textarea::TextAreaEvent",
      "name": "TextAreaEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "What a text area reports to its owner.",
      "documentation": "What a text area reports to its owner.",
      "signature": "# [doc = \" What a text area reports to its owner.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum TextAreaEvent { # [doc = \" A revisioned edit suitable for caller-owned parsing, diagnostics, and\"] # [doc = \" syntax projections. This accompanies [`Self::Change`].\"] Edited (TextAreaEdit), # [doc = \" The text changed. This persistent snapshot is cheap to clone; call\"] # [doc = \" `text()` explicitly only when a contiguous compatibility value is needed.\"] Change (gpui::EditSnapshot), # [doc = \" The submit chord was pressed while the area had focus.\"] Submit, # [doc = \" Editing was abandoned with the cancel key.\"] Cancel, # [doc = \" A paste carried something the text cannot hold.\"] Pasted (Pasted), # [doc = \" Up, while the arrows belong to something else. The caret did not move.\"] MoveUp, # [doc = \" Down, on the same terms.\"] MoveDown, # [doc = \" Enter, while the owner has claimed completion keys. No text changed.\"] AcceptCompletion, # [doc = \" Escape, on the same terms. Ordinary cancellation was not emitted.\"] DismissCompletion, # [doc = \" Tab, while a source editor has claimed indentation.\"] IndentRequested, # [doc = \" Shift-tab, while a source editor has claimed indentation.\"] OutdentRequested, # [doc = \" The caret or selection moved, including as the result of an edit.\"] SelectionChanged (Range<usize>), # [doc = \" Painted text geometry changed and current-frame range bounds are ready.\"] GeometryChanged, Focus, Blur, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::textarea::TextAreaSnapshot",
      "name": "TextAreaSnapshot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "An immutable value tagged with the revision that produced it.",
      "documentation": "An immutable value tagged with the revision that produced it.",
      "signature": "# [doc = \" An immutable value tagged with the revision that produced it.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct TextAreaSnapshot { # [doc = \" The edit revision that produced `text`.\"] pub revision : u64, # [doc = \" The complete immutable value at `revision`.\"] pub text : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::textarea::TextAreaWrap",
      "name": "TextAreaWrap",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea",
      "path": "gpui_kit::controls::textarea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "How a text area lays out lines wider than its viewport.",
      "documentation": "How a text area lays out lines wider than its viewport.",
      "signature": "# [doc = \" How a text area lays out lines wider than its viewport.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum TextAreaWrap { # [doc = \" Break long hard lines into visual rows at the available width.\"] # [default] Soft, # [doc = \" Keep hard lines intact and scroll the viewport horizontally to reveal\"] # [doc = \" the caret. This is the source-editor mode; it does not create a second\"] # [doc = \" text or geometry model.\"] None, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::textarea::element::PrepaintState",
      "name": "PrepaintState",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea::element",
      "path": "gpui_kit::controls::textarea::element",
      "source": "crates/gpui-kit/src/controls/textarea/element.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct PrepaintState { layout : Option<EditableTextLayout>, document_layout : Option<EditableTextLayout>, source_text : gpui::SharedString, rows : std::sync::Arc<[std::ops::Range<usize>]>, indexed_rows : usize, cursors : Vec<PaintQuad>, selection : Vec<PaintQuad>, scroll_offset : Pixels, horizontal_scroll_offset : Pixels, visible_rows : usize, visual_transform : gpui::VisualTransform, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::textarea::element::TextAreaElement",
      "name": "TextAreaElement",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea::element",
      "path": "gpui_kit::controls::textarea::element",
      "source": "crates/gpui-kit/src/controls/textarea/element.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct TextAreaElement { area : Entity<TextArea>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::textarea::element::TextAreaElement::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::textarea::element",
      "path": "gpui_kit::controls::textarea::element",
      "source": "crates/gpui-kit/src/controls/textarea/element.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (area : Entity<TextArea>) -> Self",
      "cfg": [],
      "target": "TextAreaElement"
    },
    {
      "id": "gpui_kit::controls::toggle::Checkbox",
      "name": "Checkbox",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "A box that reports one of on, off, or partly on.",
      "documentation": "A box that reports one of on, off, or partly on.\n\nThe mixed state is for a parent whose children disagree; it is reported as\nmixed rather than guessed into on or off.",
      "signature": "# [doc = \" A box that reports one of on, off, or partly on.\"] # [doc = \"\"] # [doc = \" The mixed state is for a parent whose children disagree; it is reported as\"] # [doc = \" mixed rather than guessed into on or off.\"] # [derive (IntoElement)] pub struct Checkbox { ident : Ident, label : Option<SharedString>, description : Option<SharedString>, checked : Option<bool>, disabled : bool, size : ControlSize, on_change : Option<ToggleHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::toggle::Checkbox::bind",
      "name": "bind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "Draws what the caller's [`Binding`] currently holds, and writes back through it.",
      "documentation": "Draws what the caller's [`Binding`] currently holds, and writes back\nthrough it.\n\nThis is exactly [`Self::checked`] and [`Self::on_change`] against one\ncaller-owned value, and nothing else changes: the box still draws what\nthe caller says is true, so a caller that refuses a change still sees\nthe checkmark stay where it was.",
      "signature": "pub fn bind (self, binding : & Binding<bool>, cx : & App) -> Self",
      "cfg": [],
      "target": "Checkbox"
    },
    {
      "id": "gpui_kit::controls::toggle::Checkbox::checked",
      "name": "checked",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn checked (mut self, checked : bool) -> Self",
      "cfg": [],
      "target": "Checkbox"
    },
    {
      "id": "gpui_kit::controls::toggle::Checkbox::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "Secondary text under the label, for a consequence the typist should know before choosing.",
      "documentation": "Secondary text under the label, for a consequence the typist should\nknow before choosing.",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Checkbox"
    },
    {
      "id": "gpui_kit::controls::toggle::Checkbox::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Checkbox"
    },
    {
      "id": "gpui_kit::controls::toggle::Checkbox::mixed",
      "name": "mixed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "Neither on nor off, because the things this box stands for disagree.",
      "documentation": "Neither on nor off, because the things this box stands for disagree.",
      "signature": "pub fn mixed (mut self) -> Self",
      "cfg": [],
      "target": "Checkbox"
    },
    {
      "id": "gpui_kit::controls::toggle::Checkbox::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Checkbox"
    },
    {
      "id": "gpui_kit::controls::toggle::Checkbox::on_change",
      "name": "on_change",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_change (mut self, handler : impl Fn (bool, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Checkbox"
    },
    {
      "id": "gpui_kit::controls::toggle::Radio",
      "name": "Radio",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "One option in a set where exactly one can hold.",
      "documentation": "One option in a set where exactly one can hold.",
      "signature": "# [doc = \" One option in a set where exactly one can hold.\"] # [derive (IntoElement)] pub struct Radio { ident : Ident, label : Option<SharedString>, description : Option<SharedString>, selected : bool, disabled : bool, size : ControlSize, on_select : Option<ActionHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::toggle::Radio::bind_value",
      "name": "bind_value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "Draws selected while the caller's value equals `value`, and writes `value` when it is picked.",
      "documentation": "Draws selected while the caller's value equals `value`, and writes\n`value` when it is picked.\n\nA radio is one answer out of several, so it binds a value rather than\na flag: every button in the group binds the same [`Binding`] with its\nown value, and the exclusivity is the equality, not a rule this\ncomponent enforces.",
      "signature": "pub fn bind_value<T> (self, binding : & Binding<T>, value : T, cx : & App) -> Self where T : Clone + PartialEq + 'static,",
      "cfg": [],
      "target": "Radio"
    },
    {
      "id": "gpui_kit::controls::toggle::Radio::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Radio"
    },
    {
      "id": "gpui_kit::controls::toggle::Radio::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Radio"
    },
    {
      "id": "gpui_kit::controls::toggle::Radio::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Radio"
    },
    {
      "id": "gpui_kit::controls::toggle::Radio::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Radio"
    },
    {
      "id": "gpui_kit::controls::toggle::Switch",
      "name": "Switch",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "A control that takes effect the moment it is flipped.",
      "documentation": "A control that takes effect the moment it is flipped.\n\nUse a switch for something that applies immediately, and a checkbox for\nsomething that applies when a form is submitted.",
      "signature": "# [doc = \" A control that takes effect the moment it is flipped.\"] # [doc = \"\"] # [doc = \" Use a switch for something that applies immediately, and a checkbox for\"] # [doc = \" something that applies when a form is submitted.\"] # [derive (IntoElement)] pub struct Switch { ident : Ident, label : Option<SharedString>, # [doc = \" A name for a reader who has only the tree, when the words on screen\"] # [doc = \" belong to something else.\"] name : Option<SharedString>, description : Option<SharedString>, on : bool, disabled : bool, invalid : bool, size : ControlSize, on_change : Option<ToggleHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::toggle::Switch::bind",
      "name": "bind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "Draws what the caller's [`Binding`] currently holds, and writes back through it. Sugar for [`Self::on`] and [`Self::on_change`].",
      "documentation": "Draws what the caller's [`Binding`] currently holds, and writes back\nthrough it. Sugar for [`Self::on`] and [`Self::on_change`].",
      "signature": "pub fn bind (self, binding : & Binding<bool>, cx : & App) -> Self",
      "cfg": [],
      "target": "Switch"
    },
    {
      "id": "gpui_kit::controls::toggle::Switch::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Switch"
    },
    {
      "id": "gpui_kit::controls::toggle::Switch::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "Switch"
    },
    {
      "id": "gpui_kit::controls::toggle::Switch::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Switch"
    },
    {
      "id": "gpui_kit::controls::toggle::Switch::named",
      "name": "named",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "Names the switch without drawing the name.",
      "documentation": "Names the switch without drawing the name.\n\nA switch at the right edge of a settings row is named by the row, and\nrepeating those words beside the track would say everything twice. The\nname still has to reach the tree, because a control nobody can name is\na control nobody can operate without looking at it.",
      "signature": "pub fn named (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Switch"
    },
    {
      "id": "gpui_kit::controls::toggle::Switch::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Switch"
    },
    {
      "id": "gpui_kit::controls::toggle::Switch::on",
      "name": "on",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on (mut self, on : bool) -> Self",
      "cfg": [],
      "target": "Switch"
    },
    {
      "id": "gpui_kit::controls::toggle::Switch::on_change",
      "name": "on_change",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle",
      "path": "gpui_kit::controls::toggle",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_change (mut self, handler : impl Fn (bool, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Switch"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle",
      "name": "Toggle",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "A button that stays in.",
      "documentation": "A button that stays in.\n\nWhether it is in belongs to the caller: the toggle draws the state it was\nhanded and reports the state pressing it asks for. A host that refuses the\npress simply does not apply it, and the button keeps showing what is true.",
      "signature": "# [doc = \" A button that stays in.\"] # [doc = \"\"] # [doc = \" Whether it is in belongs to the caller: the toggle draws the state it was\"] # [doc = \" handed and reports the state pressing it asks for. A host that refuses the\"] # [doc = \" press simply does not apply it, and the button keeps showing what is true.\"] # [derive (IntoElement)] pub struct Toggle { ident : Ident, label : Option<SharedString>, name : Option<SharedString>, glyph : Option<Icon>, icon_only : bool, pressed : bool, disabled : bool, size : ControlSize, variant : ButtonVariant, ground : Surface, join : ButtonJoin, semantic_parent : Option<SharedString>, focus_handle : Option<FocusHandle>, on_press : Option<PressHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::accessible_name",
      "name": "accessible_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "What assistive technology and a test call this toggle, when the words on it are not what it is called.",
      "documentation": "What assistive technology and a test call this toggle, when the words\non it are not what it is called.",
      "signature": "pub fn accessible_name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::bind",
      "name": "bind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "Draws what the caller's [`Binding`] currently holds, and writes back through it. Sugar for [`Self::pressed`] and [`Self::on_press`].",
      "documentation": "Draws what the caller's [`Binding`] currently holds, and writes back\nthrough it. Sugar for [`Self::pressed`] and [`Self::on_press`].",
      "signature": "pub fn bind (self, binding : & Binding<bool>, cx : & App) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::ghost",
      "name": "ghost",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ghost (self) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::ground",
      "name": "ground",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "The surface this control stands on. See [`Button::ground`].",
      "documentation": "The surface this control stands on. See [`Button::ground`].",
      "signature": "pub fn ground (mut self, ground : Surface) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, glyph : Icon) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::icon_only",
      "name": "icon_only",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "Draws the toggle as a square carrying only its glyph, and names it.",
      "documentation": "Draws the toggle as a square carrying only its glyph, and names it.\n\nThe name is required for the same reason it is on\n[`IconButton`](crate::controls::button::IconButton): a glyph nobody can\nname is a control nobody can announce or address.",
      "signature": "pub fn icon_only (mut self, glyph : Icon, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::join",
      "name": "join",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "Where the toggle sits in a joined run of them.",
      "documentation": "Where the toggle sits in a joined run of them.",
      "signature": "pub fn join (mut self, join : ButtonJoin) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::on_press",
      "name": "on_press",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "Reports the state pressing asks for, which is the opposite of the one the toggle was handed.",
      "documentation": "Reports the state pressing asks for, which is the opposite of the one\nthe toggle was handed.",
      "signature": "pub fn on_press (mut self, handler : impl Fn (bool, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::pressed",
      "name": "pressed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "Whether the toggle is in. This is the caller's answer, not the toggle's.",
      "documentation": "Whether the toggle is in. This is the caller's answer, not the\ntoggle's.",
      "signature": "pub fn pressed (mut self, pressed : bool) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::secondary",
      "name": "secondary",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn secondary (self) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::semantic_parent",
      "name": "semantic_parent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn semantic_parent (mut self, parent : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::track_focus",
      "name": "track_focus",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn track_focus (mut self, handle : & FocusHandle) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::Toggle::variant",
      "name": "variant",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn variant (mut self, variant : ButtonVariant) -> Self",
      "cfg": [],
      "target": "Toggle"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleGroup",
      "name": "ToggleGroup",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "A run of toggles where none, one, or several may be in.",
      "documentation": "A run of toggles where none, one, or several may be in.\n\nThe set is the caller's. The group reports the set pressing one toggle asks\nfor, and draws whichever set the caller handed it, so a host that applies\nonly part of the report gets exactly what it applied.\n\nEvery toggle is its own tab stop, because every one of them is separately\nactionable — unlike a segmented control, where the whole strip is one stop\nand the arrows move the single answer around inside it.",
      "signature": "# [doc = \" A run of toggles where none, one, or several may be in.\"] # [doc = \"\"] # [doc = \" The set is the caller's. The group reports the set pressing one toggle asks\"] # [doc = \" for, and draws whichever set the caller handed it, so a host that applies\"] # [doc = \" only part of the report gets exactly what it applied.\"] # [doc = \"\"] # [doc = \" Every toggle is its own tab stop, because every one of them is separately\"] # [doc = \" actionable — unlike a segmented control, where the whole strip is one stop\"] # [doc = \" and the arrows move the single answer around inside it.\"] # [derive (IntoElement)] pub struct ToggleGroup { ident : Ident, label : Option<SharedString>, items : Vec<ToggleItem>, pressed : Vec<SharedString>, selection : ToggleSelection, size : ControlSize, variant : ButtonVariant, ground : Surface, disabled : bool, on_change : Option<ChangeHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleGroup::bind",
      "name": "bind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "Draws the set the caller's [`Binding`] holds, and writes the set a press asks for. Sugar for [`Self::pressed`] and [`Self::on_change`].",
      "documentation": "Draws the set the caller's [`Binding`] holds, and writes the set a\npress asks for. Sugar for [`Self::pressed`] and [`Self::on_change`].\n\nThe set is the whole answer, in both directions, so\n[`ToggleSelection`] keeps deciding what a press does to it.",
      "signature": "pub fn bind (self, binding : & Binding<Vec<SharedString>>, cx : & App) -> Self",
      "cfg": [],
      "target": "ToggleGroup"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleGroup::ground",
      "name": "ground",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "The surface every toggle in this group stands on. See [`Button::ground`].",
      "documentation": "The surface every toggle in this group stands on. See\n[`Button::ground`].",
      "signature": "pub fn ground (mut self, ground : Surface) -> Self",
      "cfg": [],
      "target": "ToggleGroup"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleGroup::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn items (mut self, items : impl IntoIterator<Item = ToggleItem>) -> Self",
      "cfg": [],
      "target": "ToggleGroup"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleGroup::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "What the whole group is asking, for a reader who has only the tree.",
      "documentation": "What the whole group is asking, for a reader who has only the tree.",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ToggleGroup"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleGroup::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "ToggleGroup"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleGroup::on_change",
      "name": "on_change",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_change (mut self, handler : impl Fn (Vec<SharedString>, SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "ToggleGroup"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleGroup::pressed",
      "name": "pressed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "The set that is in. Ids the group does not offer are ignored rather than invented into toggles.",
      "documentation": "The set that is in. Ids the group does not offer are ignored rather\nthan invented into toggles.",
      "signature": "pub fn pressed (mut self, ids : impl IntoIterator<Item = SharedString>) -> Self",
      "cfg": [],
      "target": "ToggleGroup"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleGroup::pressed_ids",
      "name": "pressed_ids",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn pressed_ids<S : AsRef<str>> (mut self, ids : & [S]) -> Self",
      "cfg": [],
      "target": "ToggleGroup"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleGroup::selection",
      "name": "selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selection (mut self, selection : ToggleSelection) -> Self",
      "cfg": [],
      "target": "ToggleGroup"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleGroup::variant",
      "name": "variant",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn variant (mut self, variant : ButtonVariant) -> Self",
      "cfg": [],
      "target": "ToggleGroup"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleItem",
      "name": "ToggleItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "One toggle in a group, identified by business identity.",
      "documentation": "One toggle in a group, identified by business identity.",
      "signature": "# [doc = \" One toggle in a group, identified by business identity.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct ToggleItem { id : SharedString, label : SharedString, name : Option<SharedString>, icon : Option<Icon>, icon_only : bool, disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleItem::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "Refuses this toggle. A refused toggle installs no handler.",
      "documentation": "Refuses this toggle. A refused toggle installs no handler.",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "ToggleItem"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleItem::glyph",
      "name": "glyph",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "A toggle carrying only a glyph. The name is what it is called.",
      "documentation": "A toggle carrying only a glyph. The name is what it is called.",
      "signature": "pub fn glyph (id : impl Into<SharedString>, glyph : Icon, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ToggleItem"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleItem::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, glyph : Icon) -> Self",
      "cfg": [],
      "target": "ToggleItem"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleItem::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "ToggleItem"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleItem::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "ToggleItem"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleItem::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "ToggleItem"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ToggleItem"
    },
    {
      "id": "gpui_kit::controls::toggle_button::ToggleSelection",
      "name": "ToggleSelection",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::toggle_button",
      "path": "gpui_kit::controls::toggle_button",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "How many of a group's toggles may be in at once.",
      "documentation": "How many of a group's toggles may be in at once.",
      "signature": "# [doc = \" How many of a group's toggles may be in at once.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum ToggleSelection { # [doc = \" One or none. Pressing the one that is in reports an empty set, which is\"] # [doc = \" exactly what a [`SegmentedControl`](crate::controls::segmented::SegmentedControl)\"] # [doc = \" cannot do.\"] AtMostOne, # [doc = \" Any number, including none and all.\"] # [default] Any, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferItem",
      "name": "TransferItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "An item in one side of a transfer list.",
      "documentation": "An item in one side of a transfer list.",
      "signature": "# [doc = \" An item in one side of a transfer list.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct TransferItem { pub id : SharedString, pub label : SharedString, pub disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferItem::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "TransferItem"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TransferItem"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList",
      "name": "TransferList",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "A controlled source/target assignment control.",
      "documentation": "A controlled source/target assignment control.",
      "signature": "# [doc = \" A controlled source/target assignment control.\"] pub struct TransferList { ident : Ident, source : Vec<TransferItem>, target : Vec<TransferItem>, source_selected : Vec<SharedString>, target_selected : Vec<SharedString>, query : Entity<TextInput>, source_label : SharedString, target_label : SharedString, size : ControlSize, disabled : bool, _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::set_items",
      "name": "set_items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "Replaces caller-owned panes without replacing the query editor.",
      "documentation": "Replaces caller-owned panes without replacing the query editor.",
      "signature": "pub fn set_items (& mut self, source : Vec<TransferItem>, target : Vec<TransferItem>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::set_labels",
      "name": "set_labels",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_labels (& mut self, source : SharedString, target : SharedString, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::set_query",
      "name": "set_query",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_query (& mut self, query : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::set_selection",
      "name": "set_selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_selection (& mut self, source : Vec<SharedString>, target : Vec<SharedString>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::source",
      "name": "source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn source (mut self, items : impl IntoIterator<Item = TransferItem>) -> Self",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::source_label",
      "name": "source_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn source_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::source_selected",
      "name": "source_selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn source_selected (mut self, ids : impl IntoIterator<Item = impl Into<SharedString>>,) -> Self",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::target",
      "name": "target",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn target (mut self, items : impl IntoIterator<Item = TransferItem>) -> Self",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::target_label",
      "name": "target_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn target_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferList::target_selected",
      "name": "target_selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn target_selected (mut self, ids : impl IntoIterator<Item = impl Into<SharedString>>,) -> Self",
      "cfg": [],
      "target": "TransferList"
    },
    {
      "id": "gpui_kit::controls::transfer_list::TransferListEvent",
      "name": "TransferListEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::transfer_list",
      "path": "gpui_kit::controls::transfer_list",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "What a transfer list reports. The caller performs the actual assignment.",
      "documentation": "What a transfer list reports. The caller performs the actual assignment.",
      "signature": "# [doc = \" What a transfer list reports. The caller performs the actual assignment.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum TransferListEvent { ToggleSource (SharedString), ToggleTarget (SharedString), MoveToTarget, MoveToSource, QueryChanged (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::upload_list::OverallProgress",
      "name": "OverallProgress",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "How much of the whole batch is done, if anybody knows.",
      "documentation": "How much of the whole batch is done, if anybody knows.",
      "signature": "# [doc = \" How much of the whole batch is done, if anybody knows.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub enum OverallProgress { # [doc = \" Every file in flight declared an extent, so the total has one.\"] Known (f32), # [doc = \" At least one file in flight has no extent, so neither has the total.\"] Indeterminate, # [doc = \" Nothing is in flight.\"] Settled, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::upload_list::Upload",
      "name": "Upload",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "One file on the list, identified by business identity.",
      "documentation": "One file on the list, identified by business identity.",
      "signature": "# [doc = \" One file on the list, identified by business identity.\"] # [derive (Debug, Clone, PartialEq)] pub struct Upload { pub id : SharedString, pub name : SharedString, # [doc = \" The size, already worded by the host. This crate formats no quantities.\"] pub size : Option<SharedString>, pub state : UploadState, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::upload_list::Upload::cancelled",
      "name": "cancelled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cancelled (self) -> Self",
      "cfg": [],
      "target": "Upload"
    },
    {
      "id": "gpui_kit::controls::upload_list::Upload::done",
      "name": "done",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn done (self) -> Self",
      "cfg": [],
      "target": "Upload"
    },
    {
      "id": "gpui_kit::controls::upload_list::Upload::failed",
      "name": "failed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn failed (self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Upload"
    },
    {
      "id": "gpui_kit::controls::upload_list::Upload::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Upload"
    },
    {
      "id": "gpui_kit::controls::upload_list::Upload::refused",
      "name": "refused",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn refused (self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Upload"
    },
    {
      "id": "gpui_kit::controls::upload_list::Upload::size",
      "name": "size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "The size as the host already worded it.",
      "documentation": "The size as the host already worded it.",
      "signature": "pub fn size (mut self, size : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Upload"
    },
    {
      "id": "gpui_kit::controls::upload_list::Upload::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : UploadState) -> Self",
      "cfg": [],
      "target": "Upload"
    },
    {
      "id": "gpui_kit::controls::upload_list::Upload::uploading",
      "name": "uploading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn uploading (self, fraction : impl Into<Option<f32>>) -> Self",
      "cfg": [],
      "target": "Upload"
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadList",
      "name": "UploadList",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "A list of files being uploaded, optionally over the zone that took them.",
      "documentation": "A list of files being uploaded, optionally over the zone that took them.",
      "signature": "# [doc = \" A list of files being uploaded, optionally over the zone that took them.\"] # [derive (IntoElement)] pub struct UploadList { ident : Ident, uploads : Vec<Upload>, zone : Option<EffectScoped<Dropzone>>, size : ControlSize, disabled : bool, show_overall : bool, on_retry : Option<FileHandler>, on_cancel : Option<FileHandler>, on_remove : Option<FileHandler>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadList::dropzone",
      "name": "dropzone",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "The zone the files arrive through, drawn above the list.",
      "documentation": "The zone the files arrive through, drawn above the list.\n\nSharing the surface is the point: a payload the zone refuses while it\nis being dragged and a file the host refused after it landed are the\nsame refusal, said in the same place.",
      "signature": "pub fn dropzone (mut self, zone : impl Into<EffectScoped<Dropzone>>) -> Self",
      "cfg": [],
      "target": "UploadList"
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadList::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "UploadList"
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadList::on_cancel",
      "name": "on_cancel",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "Reports a file that should be stopped. Offered only while one is still on its way or waiting to be.",
      "documentation": "Reports a file that should be stopped. Offered only while one is still\non its way or waiting to be.",
      "signature": "pub fn on_cancel (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "UploadList"
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadList::on_remove",
      "name": "on_remove",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "Reports a file that should leave the list. Offered only once nothing more is going to happen to it.",
      "documentation": "Reports a file that should leave the list. Offered only once nothing\nmore is going to happen to it.",
      "signature": "pub fn on_remove (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "UploadList"
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadList::on_retry",
      "name": "on_retry",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "Reports a file that should be tried again. The list retries nothing.",
      "documentation": "Reports a file that should be tried again. The list retries nothing.\n\nA refused file never gets this control, whatever the handler says.",
      "signature": "pub fn on_retry (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "UploadList"
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadList::overall",
      "name": "overall",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "How much of the batch is done.",
      "documentation": "How much of the batch is done.\n\nKnown only when every file still in flight declared an extent. A single\nfile uploading against an unknown length takes the whole batch to\nindeterminate, because a total assembled from a number nobody has is\nnot a total.",
      "signature": "pub fn overall (& self) -> OverallProgress",
      "cfg": [],
      "target": "UploadList"
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadList::show_overall",
      "name": "show_overall",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "Whether the batch progress bar is drawn at all.",
      "documentation": "Whether the batch progress bar is drawn at all.",
      "signature": "pub fn show_overall (mut self, show : bool) -> Self",
      "cfg": [],
      "target": "UploadList"
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadList::upload",
      "name": "upload",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn upload (mut self, upload : Upload) -> Self",
      "cfg": [],
      "target": "UploadList"
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadList::uploads",
      "name": "uploads",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn uploads (mut self, uploads : impl IntoIterator<Item = Upload>) -> Self",
      "cfg": [],
      "target": "UploadList"
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadState",
      "name": "UploadState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "Where one file has got to.",
      "documentation": "Where one file has got to.",
      "signature": "# [doc = \" Where one file has got to.\"] # [derive (Debug, Clone, PartialEq, Default)] pub enum UploadState { # [doc = \" Accepted and waiting its turn. Nothing has been sent.\"] # [default] Queued, # [doc = \" On its way. `fraction` is `None` when nobody knows how much there is\"] # [doc = \" to send, which is a state and not a zero.\"] Uploading { fraction : Option<f32>, }, Done, # [doc = \" It started and did not finish, in the host's own words.\"] Failed { reason : SharedString, }, # [doc = \" Somebody stopped it. Distinct from failed: nothing went wrong.\"] Cancelled, # [doc = \" The host would not take it at all, in its own words.\"] Refused { reason : SharedString, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadState::is_retryable",
      "name": "is_retryable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "Whether trying again could end differently. A refusal could not.",
      "documentation": "Whether trying again could end differently. A refusal could not.",
      "signature": "pub fn is_retryable (& self) -> bool",
      "cfg": [],
      "target": "UploadState"
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadState::is_settled",
      "name": "is_settled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "Whether anything more is going to happen to this file on its own.",
      "documentation": "Whether anything more is going to happen to this file on its own.",
      "signature": "pub fn is_settled (& self) -> bool",
      "cfg": [],
      "target": "UploadState"
    },
    {
      "id": "gpui_kit::controls::upload_list::UploadState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "controls::upload_list",
      "path": "gpui_kit::controls::upload_list",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "The name the semantic tree publishes, so a test tells the six apart without reading a colour.",
      "documentation": "The name the semantic tree publishes, so a test tells the six apart\nwithout reading a colour.",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "UploadState"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::Diagnostic",
      "name": "Diagnostic",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "One caller-owned diagnostic.",
      "documentation": "One caller-owned diagnostic.",
      "signature": "# [doc = \" One caller-owned diagnostic.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct Diagnostic { id : SharedString, severity : DiagnosticSeverity, location : DiagnosticLocation, message : SharedString, actions : Vec<DiagnosticAction>, disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::diagnostics_list::Diagnostic::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn action (mut self, action : DiagnosticAction) -> Self",
      "cfg": [],
      "target": "Diagnostic"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::Diagnostic::actions",
      "name": "actions",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn actions (mut self, actions : impl IntoIterator<Item = DiagnosticAction>) -> Self",
      "cfg": [],
      "target": "Diagnostic"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::Diagnostic::diagnostic_actions",
      "name": "diagnostic_actions",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn diagnostic_actions (& self) -> & [DiagnosticAction]",
      "cfg": [],
      "target": "Diagnostic"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::Diagnostic::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "Diagnostic"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::Diagnostic::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "Diagnostic"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::Diagnostic::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "Diagnostic"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::Diagnostic::location",
      "name": "location",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn location (& self) -> & DiagnosticLocation",
      "cfg": [],
      "target": "Diagnostic"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::Diagnostic::message",
      "name": "message",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn message (& self) -> & SharedString",
      "cfg": [],
      "target": "Diagnostic"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::Diagnostic::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, severity : DiagnosticSeverity, location : DiagnosticLocation, message : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "Diagnostic"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::Diagnostic::severity",
      "name": "severity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn severity (& self) -> DiagnosticSeverity",
      "cfg": [],
      "target": "Diagnostic"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticAction",
      "name": "DiagnosticAction",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "A caller-owned action that can be reported for a diagnostic.",
      "documentation": "A caller-owned action that can be reported for a diagnostic.",
      "signature": "# [doc = \" A caller-owned action that can be reported for a diagnostic.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct DiagnosticAction { id : SharedString, label : SharedString, disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticAction::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "DiagnosticAction"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticAction::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "DiagnosticAction"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticAction::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "DiagnosticAction"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticAction::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "DiagnosticAction"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticAction::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DiagnosticAction"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticFilter",
      "name": "DiagnosticFilter",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "Selected severities, stored as a compact bit set.",
      "documentation": "Selected severities, stored as a compact bit set.",
      "signature": "# [doc = \" Selected severities, stored as a compact bit set.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub struct DiagnosticFilter (u8);",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticFilter::all",
      "name": "all",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn all () -> Self",
      "cfg": [],
      "target": "DiagnosticFilter"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticFilter::clearing",
      "name": "clearing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn clearing (self) -> Self",
      "cfg": [],
      "target": "DiagnosticFilter"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticFilter::contains",
      "name": "contains",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn contains (self, severity : DiagnosticSeverity) -> bool",
      "cfg": [],
      "target": "DiagnosticFilter"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticFilter::from_severities",
      "name": "from_severities",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_severities (values : impl IntoIterator<Item = DiagnosticSeverity>) -> Self",
      "cfg": [],
      "target": "DiagnosticFilter"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticFilter::includes",
      "name": "includes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn includes (self, diagnostic : & Diagnostic) -> bool",
      "cfg": [],
      "target": "DiagnosticFilter"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticFilter::none",
      "name": "none",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn none () -> Self",
      "cfg": [],
      "target": "DiagnosticFilter"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticFilter::removing",
      "name": "removing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn removing (self, severity : DiagnosticSeverity) -> Self",
      "cfg": [],
      "target": "DiagnosticFilter"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticFilter::severities",
      "name": "severities",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn severities (self) -> impl Iterator<Item = DiagnosticSeverity>",
      "cfg": [],
      "target": "DiagnosticFilter"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticLocation",
      "name": "DiagnosticLocation",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "Caller-formatted location text. No path interpretation is performed.",
      "documentation": "Caller-formatted location text. No path interpretation is performed.",
      "signature": "# [doc = \" Caller-formatted location text. No path interpretation is performed.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct DiagnosticLocation (SharedString);",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticLocation::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "DiagnosticLocation"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticLocation::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DiagnosticLocation"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticSeverity",
      "name": "DiagnosticSeverity",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "Severity assigned by the caller.",
      "documentation": "Severity assigned by the caller.",
      "signature": "# [doc = \" Severity assigned by the caller.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum DiagnosticSeverity { Error, Warning, Information, Hint, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticSeverity::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "DiagnosticSeverity"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticSeverity::tone",
      "name": "tone",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tone (self) -> Tone",
      "cfg": [],
      "target": "DiagnosticSeverity"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticsList",
      "name": "DiagnosticsList",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "A diagnostic list whose data and state remain owned by its caller.",
      "documentation": "A diagnostic list whose data and state remain owned by its caller.",
      "signature": "# [doc = \" A diagnostic list whose data and state remain owned by its caller.\"] # [derive (IntoElement)] pub struct DiagnosticsList { ident : Ident, diagnostics : Loadable<Vec<Diagnostic>, SharedString>, filter : DiagnosticFilter, selected : Option<SharedString>, visible_rows : Option<usize>, size : ControlSize, disabled : bool, on_filter : Option<FilterHandler>, on_select : Option<SelectHandler>, on_action : Option<ActionHandler>, on_retry : Option<RetryHandler>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticsList::filter",
      "name": "filter",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn filter (mut self, filter : DiagnosticFilter) -> Self",
      "cfg": [],
      "target": "DiagnosticsList"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticsList::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, diagnostics : Loadable<Vec<Diagnostic>, SharedString>,) -> Self",
      "cfg": [],
      "target": "DiagnosticsList"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticsList::on_action",
      "name": "on_action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_action (mut self, handler : impl Fn (SharedString, SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DiagnosticsList"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticsList::on_filter",
      "name": "on_filter",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_filter (mut self, handler : impl Fn (DiagnosticFilter, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DiagnosticsList"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticsList::on_retry",
      "name": "on_retry",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_retry (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "DiagnosticsList"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticsList::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DiagnosticsList"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticsList::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DiagnosticsList"
    },
    {
      "id": "gpui_kit::data::diagnostics_list::DiagnosticsList::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::diagnostics_list",
      "path": "gpui_kit::data::diagnostics_list",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn visible_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "DiagnosticsList"
    },
    {
      "id": "gpui_kit::data::flow::Flow",
      "name": "Flow",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::flow",
      "path": "gpui_kit::data::flow",
      "source": "crates/gpui-kit/src/data/flow.rs",
      "summary": "Rows drawn by their caller, laid out only where the viewport reaches.",
      "documentation": "Rows drawn by their caller, laid out only where the viewport reaches.",
      "signature": "# [doc = \" Rows drawn by their caller, laid out only where the viewport reaches.\"] # [derive (IntoElement)] pub struct Flow { ident : Ident, count : usize, render_row : RenderRow, keys : Option<Vec<SharedString>>, revisions : Option<Vec<u64>>, estimate : Option<f32>, alignment : ListAlignment, extent : Extent, inset : Option<(f32, f32)>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::flow::Flow::anchored_to_end",
      "name": "anchored_to_end",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::flow",
      "path": "gpui_kit::data::flow",
      "source": "crates/gpui-kit/src/data/flow.rs",
      "summary": "Rests the rows against the end rather than the start, for a conversation or a log whose newest row is the one worth seeing.",
      "documentation": "Rests the rows against the end rather than the start, for a\nconversation or a log whose newest row is the one worth seeing.",
      "signature": "pub fn anchored_to_end (mut self) -> Self",
      "cfg": [],
      "target": "Flow"
    },
    {
      "id": "gpui_kit::data::flow::Flow::content_inset",
      "name": "content_inset",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::flow",
      "path": "gpui_kit::data::flow",
      "source": "crates/gpui-kit/src/data/flow.rs",
      "summary": "Pad the scroll content, not the viewport. Rows start below `top` and can travel through that band as the surface scrolls, which is how a conversation keeps its first turn readable under a floating titlebar without shrinking the list itself.",
      "documentation": "Pad the scroll content, not the viewport. Rows start below `top` and\ncan travel through that band as the surface scrolls, which is how a\nconversation keeps its first turn readable under a floating titlebar\nwithout shrinking the list itself.",
      "signature": "pub fn content_inset (mut self, top : f32, bottom : f32) -> Self",
      "cfg": [],
      "target": "Flow"
    },
    {
      "id": "gpui_kit::data::flow::Flow::estimate",
      "name": "estimate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::flow",
      "path": "gpui_kit::data::flow",
      "source": "crates/gpui-kit/src/data/flow.rs",
      "summary": "What a row nobody has laid out yet is assumed to be worth.",
      "documentation": "What a row nobody has laid out yet is assumed to be worth.\n\nIt decides how nearly right the scrollbar is on the first frame and how\nfar a scroll into unmeasured territory lands; it never constrains a row,\nwhich is as tall as what it holds.",
      "signature": "pub fn estimate (mut self, height : f32) -> Self",
      "cfg": [],
      "target": "Flow"
    },
    {
      "id": "gpui_kit::data::flow::Flow::fills",
      "name": "fills",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::flow",
      "path": "gpui_kit::data::flow",
      "source": "crates/gpui-kit/src/data/flow.rs",
      "summary": "Takes the height of whatever holds it, which is what a surface filling a pane does — and the only way a flow in a pane is bounded at all, since its rows are not a number of anything.",
      "documentation": "Takes the height of whatever holds it, which is what a surface filling\na pane does — and the only way a flow in a pane is bounded at all,\nsince its rows are not a number of anything.",
      "signature": "pub fn fills (mut self) -> Self",
      "cfg": [],
      "target": "Flow"
    },
    {
      "id": "gpui_kit::data::flow::Flow::keys",
      "name": "keys",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::flow",
      "path": "gpui_kit::data::flow",
      "source": "crates/gpui-kit/src/data/flow.rs",
      "summary": "Names the rows, in the order they are drawn, so the measurements either side of a change survive it.",
      "documentation": "Names the rows, in the order they are drawn, so the measurements either\nside of a change survive it.\n\nNames must be unique, stable identities, never content hashes. Use\n[`Self::revisions`] to invalidate geometry independently of identity.",
      "signature": "pub fn keys (mut self, keys : impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
      "cfg": [],
      "target": "Flow"
    },
    {
      "id": "gpui_kit::data::flow::Flow::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::flow",
      "path": "gpui_kit::data::flow",
      "source": "crates/gpui-kit/src/data/flow.rs",
      "summary": "A flow of `count` rows, each built on demand by `render_row`.",
      "documentation": "A flow of `count` rows, each built on demand by `render_row`.\n\nThe closure is called for the rows the viewport reaches, in any order,\nand may be called again for a row that scrolled away and came back — so\nit has to be able to build a row rather than hand over one it built\nearlier.",
      "signature": "pub fn new (ident : impl Into<Ident>, count : usize, render_row : impl Fn (usize, & mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "Flow"
    },
    {
      "id": "gpui_kit::data::flow::Flow::revisions",
      "name": "revisions",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::flow",
      "path": "gpui_kit::data::flow",
      "source": "crates/gpui-kit/src/data/flow.rs",
      "summary": "Geometry revisions, one per row in key order. A changed revision invalidates only that row's measurement, preserving its identity and the reader's pixel offset within the anchored row. Omission means zero for every row; revisions need not be monotonic. Requires unique keys and exactly `count` revisions.",
      "documentation": "Geometry revisions, one per row in key order. A changed revision\ninvalidates only that row's measurement, preserving its identity and\nthe reader's pixel offset within the anchored row. Omission means zero\nfor every row; revisions need not be monotonic. Requires unique keys\nand exactly `count` revisions.",
      "signature": "pub fn revisions (mut self, revisions : Vec<u64>) -> Self",
      "cfg": [],
      "target": "Flow"
    },
    {
      "id": "gpui_kit::data::flow::Flow::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::flow",
      "path": "gpui_kit::data::flow",
      "source": "crates/gpui-kit/src/data/flow.rs",
      "summary": "Bounds the viewport to `rows` rows at the row estimate.",
      "documentation": "Bounds the viewport to `rows` rows at the row estimate.",
      "signature": "pub fn visible_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "Flow"
    },
    {
      "id": "gpui_kit::data::grid::BulkBar",
      "name": "BulkBar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "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.",
      "documentation": "The bar that appears over a selection, says how large it is, and offers\nwhat can be done to it.\n\nThe count is the number of rows the caller says are selected, which is the\nnumber the bar states. When more rows exist than the host has loaded, the\nbar offers the wider intent as a separate, named action rather than\nquietly claiming the selection already covers them.",
      "signature": "# [doc = \" The bar that appears over a selection, says how large it is, and offers\"] # [doc = \" what can be done to it.\"] # [doc = \"\"] # [doc = \" The count is the number of rows the caller says are selected, which is the\"] # [doc = \" number the bar states. When more rows exist than the host has loaded, the\"] # [doc = \" bar offers the wider intent as a separate, named action rather than\"] # [doc = \" quietly claiming the selection already covers them.\"] # [derive (IntoElement)] pub struct BulkBar { ident : Ident, count : usize, total : Option<usize>, noun : Option<SharedString>, actions : Vec<AnyElement>, on_select_all : Option<BulkHandler>, on_dismiss : Option<BulkHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::grid::BulkBar::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn action (mut self, action : impl IntoElement) -> Self",
      "cfg": [],
      "target": "BulkBar"
    },
    {
      "id": "gpui_kit::data::grid::BulkBar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, count : usize) -> Self",
      "cfg": [],
      "target": "BulkBar"
    },
    {
      "id": "gpui_kit::data::grid::BulkBar::noun",
      "name": "noun",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "What the count is counting, for a surface whose rows are not \"rows\".",
      "documentation": "What the count is counting, for a surface whose rows are not \"rows\".",
      "signature": "pub fn noun (mut self, noun : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "BulkBar"
    },
    {
      "id": "gpui_kit::data::grid::BulkBar::on_dismiss",
      "name": "on_dismiss",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Dismissing a bulk bar clears the selection: there is nothing else it could mean, and a bar that hid while the selection stood would leave the typist operating rows they can no longer see.",
      "documentation": "Dismissing a bulk bar clears the selection: there is nothing else it\ncould mean, and a bar that hid while the selection stood would leave\nthe typist operating rows they can no longer see.",
      "signature": "pub fn on_dismiss (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "BulkBar"
    },
    {
      "id": "gpui_kit::data::grid::BulkBar::on_select_all",
      "name": "on_select_all",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select_all (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "BulkBar"
    },
    {
      "id": "gpui_kit::data::grid::BulkBar::total",
      "name": "total",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "How many rows exist. When it is larger than the count, the bar offers to widen the selection and says exactly how far.",
      "documentation": "How many rows exist. When it is larger than the count, the bar offers\nto widen the selection and says exactly how far.",
      "signature": "pub fn total (mut self, total : usize) -> Self",
      "cfg": [],
      "target": "BulkBar"
    },
    {
      "id": "gpui_kit::data::grid::CellRange",
      "name": "CellRange",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "A caller-owned rectangle of cells, named by row and column identity.",
      "documentation": "A caller-owned rectangle of cells, named by row and column identity.",
      "signature": "# [doc = \" A caller-owned rectangle of cells, named by row and column identity.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct CellRange { pub start_row : SharedString, pub start_column : SharedString, pub end_row : SharedString, pub end_column : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::grid::CellRange::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (start_row : impl Into<SharedString>, start_column : impl Into<SharedString>, end_row : impl Into<SharedString>, end_column : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "CellRange"
    },
    {
      "id": "gpui_kit::data::grid::ColumnGroup",
      "name": "ColumnGroup",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "A header that names several columns at once.",
      "documentation": "A header that names several columns at once.",
      "signature": "# [doc = \" A header that names several columns at once.\"] # [derive (Debug, Clone)] pub struct ColumnGroup { id : SharedString, label : SharedString, keys : Vec<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::grid::ColumnGroup::columns",
      "name": "columns",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn columns (mut self, keys : impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
      "cfg": [],
      "target": "ColumnGroup"
    },
    {
      "id": "gpui_kit::data::grid::ColumnGroup::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ColumnGroup"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid",
      "name": "DataGrid",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "A grid that virtualizes rows and columns over caller-owned data.",
      "documentation": "A grid that virtualizes rows and columns over caller-owned data.",
      "signature": "# [doc = \" A grid that virtualizes rows and columns over caller-owned data.\"] # [derive (IntoElement)] pub struct DataGrid { ident : Ident, count : usize, total : Option<usize>, render_row : RenderRow, render_detail : Option<RenderDetail>, columns : Vec<GridColumn>, groups : Vec<ColumnGroup>, footer : Vec<(SharedString, SharedString)>, lines : GridLines, sort : Option<(SharedString, SortDirection)>, selection_mode : SelectionMode, selected : BTreeSet<SharedString>, expanded : Vec<Expanded>, detail_rows : usize, editing : Option<EditingCell>, row_height : Option<f32>, reveal : Option<(usize, SharedString)>, visible_rows : Option<usize>, size : ControlSize, disabled : bool, loading : bool, failure : Option<SharedString>, empty : Option<EmptyState>, slots : Slots, on_sort : Option<SortHandler>, on_select : Option<SelectHandler>, on_resize : Option<ResizeHandler>, on_fit : Option<FitHandler>, on_reorder : Option<ReorderHandler>, on_expand : Option<ExpandHandler>, on_edit_request : Option<EditRequestHandler>, on_edit : Option<EditHandler>, range : Option<CellRange>, on_range_change : Option<RangeHandler>, on_copy : Option<CopyHandler>, hierarchy : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::column",
      "name": "column",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn column (mut self, column : GridColumn) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::columns",
      "name": "columns",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn columns (mut self, columns : impl IntoIterator<Item = GridColumn>) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Builds the detail region for an opened row. Called only for rows the caller has opened *and* the viewport is drawing.",
      "documentation": "Builds the detail region for an opened row. Called only for rows the\ncaller has opened *and* the viewport is drawing.",
      "signature": "pub fn detail (mut self, render : impl Fn (SharedString, & mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::detail_rows",
      "name": "detail_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "How many row heights an opened detail region occupies.",
      "documentation": "How many row heights an opened detail region occupies.",
      "signature": "pub fn detail_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::editing",
      "name": "editing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "The cell the caller has opened for editing, and the value it holds.",
      "documentation": "The cell the caller has opened for editing, and the value it holds.",
      "signature": "pub fn editing (mut self, cell : Option<EditingCell>) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::empty",
      "name": "empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "What to show when the query succeeded and returned nothing.",
      "documentation": "What to show when the query succeeded and returned nothing.\n\nThis is the typed form of the [`slot::EMPTY`] slot, kept because an\n[`EmptyState`] says which of empty, unstarted, unavailable and failed\nholds and an arbitrary element does not. A filled slot wins over it.",
      "signature": "pub fn empty (mut self, empty : EmptyState) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::expanded",
      "name": "expanded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "The rows the caller has opened, and where each one sits.",
      "documentation": "The rows the caller has opened, and where each one sits.",
      "signature": "pub fn expanded (mut self, rows : impl IntoIterator<Item = Expanded>) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::failure",
      "name": "failure",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "A refresh that failed. Rows the grid already has stay on screen with the failure stated above them; only a failure with nothing behind it takes the surface over.",
      "documentation": "A refresh that failed. Rows the grid already has stay on screen with\nthe failure stated above them; only a failure with nothing behind it\ntakes the surface over.",
      "signature": "pub fn failure (mut self, failure : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::footer_cell",
      "name": "footer_cell",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Caller-owned summary cells, keyed by column identity.",
      "documentation": "Caller-owned summary cells, keyed by column identity.",
      "signature": "pub fn footer_cell (mut self, key : impl Into<SharedString>, value : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::group",
      "name": "group",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "A second header row that names groups of columns.",
      "documentation": "A second header row that names groups of columns.",
      "signature": "pub fn group (mut self, group : ColumnGroup) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::groups",
      "name": "groups",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn groups (mut self, groups : impl IntoIterator<Item = ColumnGroup>) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::lines",
      "name": "lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Draws rules between rows, for a grid dense enough to need them.",
      "documentation": "Draws rules between rows, for a grid dense enough to need them.",
      "signature": "pub fn lines (mut self, lines : GridLines) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::loading",
      "name": "loading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "A first load with nothing to show yet. A refresh over rows that already exist is not this; see [`DataGrid::failure`].",
      "documentation": "A first load with nothing to show yet. A refresh over rows that already\nexist is not this; see [`DataGrid::failure`].",
      "signature": "pub fn loading (mut self, loading : bool) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "`count` is how many rows the caller has; `render_row` builds one of them, and is only ever called for a row that is about to be drawn or about to be reported.",
      "documentation": "`count` is how many rows the caller has; `render_row` builds one of\nthem, and is only ever called for a row that is about to be drawn or\nabout to be reported.",
      "signature": "pub fn new (ident : impl Into<Ident>, count : usize, render_row : impl Fn (usize, & mut Window, & mut App) -> GridRow + 'static,) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::on_copy",
      "name": "on_copy",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Reports the current range as TSV. The grid writes nothing; a host that wants the clipboard uses the same verified path [`CopyButton`](crate::controls::copy_button::CopyButton) does.",
      "documentation": "Reports the current range as TSV. The grid writes nothing; a host that\nwants the clipboard uses the same verified path [`CopyButton`](crate::controls::copy_button::CopyButton) does.",
      "signature": "pub fn on_copy (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::on_edit",
      "name": "on_edit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Reports how an edit ended, and what was in the field when it did.",
      "documentation": "Reports how an edit ended, and what was in the field when it did.",
      "signature": "pub fn on_edit (mut self, handler : impl Fn (& EditIntent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::on_edit_request",
      "name": "on_edit_request",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Reports that a cell was asked to become a field.",
      "documentation": "Reports that a cell was asked to become a field.",
      "signature": "pub fn on_edit_request (mut self, handler : impl Fn (SharedString, SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::on_expand",
      "name": "on_expand",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_expand (mut self, handler : impl Fn (SharedString, bool, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::on_fit",
      "name": "on_fit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Reports that a double click on a column edge asked for a width that fits the content. The grid measures nothing; see the module docs.",
      "documentation": "Reports that a double click on a column edge asked for a width that\nfits the content. The grid measures nothing; see the module docs.",
      "signature": "pub fn on_fit (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::on_range_change",
      "name": "on_range_change",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_range_change (mut self, handler : impl Fn (& CellRange, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::on_reorder",
      "name": "on_reorder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Reports where a dragged column should go. The grid does not move it.",
      "documentation": "Reports where a dragged column should go. The grid does not move it.",
      "signature": "pub fn on_reorder (mut self, handler : impl Fn (& DropIntent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::on_resize",
      "name": "on_resize",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Reports the width a drag on a column edge asked for.",
      "documentation": "Reports the width a drag on a column edge asked for.",
      "signature": "pub fn on_resize (mut self, handler : impl Fn (SharedString, f32, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (& SelectionChange, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::on_sort",
      "name": "on_sort",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_sort (mut self, handler : impl Fn (SharedString, SortDirection, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::range",
      "name": "range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Reports the disclosure state a row should take. The cell rectangle the caller says is selected. The grid highlights those cells and reports a new rectangle when the pointer names one.",
      "documentation": "Reports the disclosure state a row should take.\nThe cell rectangle the caller says is selected. The grid highlights\nthose cells and reports a new rectangle when the pointer names one.",
      "signature": "pub fn range (mut self, range : Option<CellRange>) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::row_height",
      "name": "row_height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn row_height (mut self, height : f32) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::scroll_to_cell",
      "name": "scroll_to_cell",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Reveals a caller-addressed row and column with nearest-edge scrolling. A changed request runs once; omitting it rearms the same target. This does not select, edit, or focus the cell. Invalid addresses do nothing.",
      "documentation": "Reveals a caller-addressed row and column with nearest-edge scrolling.\nA changed request runs once; omitting it rearms the same target. This\ndoes not select, edit, or focus the cell. Invalid addresses do nothing.",
      "signature": "pub fn scroll_to_cell (mut self, row : usize, column : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "The rows the caller says are selected. The grid renders these and nothing else, whatever a click reported a moment ago.",
      "documentation": "The rows the caller says are selected. The grid renders these and\nnothing else, whatever a click reported a moment ago.",
      "signature": "pub fn selected (mut self, ids : impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::selection_mode",
      "name": "selection_mode",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selection_mode (mut self, mode : SelectionMode) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::sort",
      "name": "sort",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "The sort the caller applied, which is the only sort the grid shows.",
      "documentation": "The sort the caller applied, which is the only sort the grid shows.",
      "signature": "pub fn sort (mut self, sort : Option<(SharedString, SortDirection)>) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::sorted_by",
      "name": "sorted_by",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sorted_by (self, key : impl Into<SharedString>, direction : SortDirection) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::total",
      "name": "total",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "How many rows exist on the host, when the grid has been given only some of them. Without it the grid assumes it has everything.",
      "documentation": "How many rows exist on the host, when the grid has been given only some\nof them. Without it the grid assumes it has everything.",
      "signature": "pub fn total (mut self, total : usize) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::DataGrid::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Bounds the viewport to `rows` rows, which is what lets the grid skip the rows it does not show.",
      "documentation": "Bounds the viewport to `rows` rows, which is what lets the grid skip\nthe rows it does not show.",
      "signature": "pub fn visible_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "DataGrid"
    },
    {
      "id": "gpui_kit::data::grid::EditIntent",
      "name": "EditIntent",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "One finished edit, as it is reported to the host.",
      "documentation": "One finished edit, as it is reported to the host.",
      "signature": "# [doc = \" One finished edit, as it is reported to the host.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct EditIntent { pub row : SharedString, pub column : SharedString, # [doc = \" What the field held. On a revert this is the value the grid was given,\"] # [doc = \" unchanged.\"] pub value : SharedString, pub outcome : EditOutcome, # [doc = \" The cell tab asked to open next, when tab is what ended the edit.\"] pub next : Option<(SharedString, SharedString)>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::grid::EditOutcome",
      "name": "EditOutcome",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "How an edit ended.",
      "documentation": "How an edit ended.",
      "signature": "# [doc = \" How an edit ended.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum EditOutcome { # [doc = \" Enter, or tab. The typed value is the caller's to apply.\"] Commit, # [doc = \" Escape. Nothing was typed as far as the host is concerned.\"] Revert, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::grid::EditOutcome::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (self) -> & 'static str",
      "cfg": [],
      "target": "EditOutcome"
    },
    {
      "id": "gpui_kit::data::grid::EditingCell",
      "name": "EditingCell",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "The cell the caller has opened for editing, and the value it holds.",
      "documentation": "The cell the caller has opened for editing, and the value it holds.",
      "signature": "# [doc = \" The cell the caller has opened for editing, and the value it holds.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct EditingCell { pub row : SharedString, pub column : SharedString, pub value : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::grid::EditingCell::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (row : impl Into<SharedString>, column : impl Into<SharedString>, value : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "EditingCell"
    },
    {
      "id": "gpui_kit::data::grid::Expanded",
      "name": "Expanded",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "One opened row: its identity, and where it sits.",
      "documentation": "One opened row: its identity, and where it sits.\n\nA virtualized body reserves room by counting fixed-height slots, so it has\nto know where an opened row is before it has drawn it. The caller owns the\norder and can answer at once; the grid would have to build every row to\nfind out. The index is layout arithmetic and never reaches an id.",
      "signature": "# [doc = \" One opened row: its identity, and where it sits.\"] # [doc = \"\"] # [doc = \" A virtualized body reserves room by counting fixed-height slots, so it has\"] # [doc = \" to know where an opened row is before it has drawn it. The caller owns the\"] # [doc = \" order and can answer at once; the grid would have to build every row to\"] # [doc = \" find out. The index is layout arithmetic and never reaches an id.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct Expanded { pub id : SharedString, pub index : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::grid::Expanded::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, index : usize) -> Self",
      "cfg": [],
      "target": "Expanded"
    },
    {
      "id": "gpui_kit::data::grid::GridColumn",
      "name": "GridColumn",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "One column of a grid.",
      "documentation": "One column of a grid.\n\n`key` addresses the cells that belong to it and appears in every id the\ncolumn publishes, so it is the column's business identity rather than its\nplace in the header.",
      "signature": "# [doc = \" One column of a grid.\"] # [doc = \"\"] # [doc = \" `key` addresses the cells that belong to it and appears in every id the\"] # [doc = \" column publishes, so it is the column's business identity rather than its\"] # [doc = \" place in the header.\"] # [derive (Debug, Clone)] pub struct GridColumn { key : SharedString, header : SharedString, width : ColumnWidth, min_width : f32, align : Align, sortable : bool, resizable : bool, reorderable : bool, pinned : bool, editable : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::grid::GridColumn::align",
      "name": "align",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn align (mut self, align : Align) -> Self",
      "cfg": [],
      "target": "GridColumn"
    },
    {
      "id": "gpui_kit::data::grid::GridColumn::editable",
      "name": "editable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Marks the column's cells as fields a double click or enter opens. The grid never writes the value; it reports the edit.",
      "documentation": "Marks the column's cells as fields a double click or enter opens. The\ngrid never writes the value; it reports the edit.",
      "signature": "pub fn editable (mut self, editable : bool) -> Self",
      "cfg": [],
      "target": "GridColumn"
    },
    {
      "id": "gpui_kit::data::grid::GridColumn::fixed",
      "name": "fixed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn fixed (self, width : f32) -> Self",
      "cfg": [],
      "target": "GridColumn"
    },
    {
      "id": "gpui_kit::data::grid::GridColumn::flex",
      "name": "flex",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn flex (self, share : f32) -> Self",
      "cfg": [],
      "target": "GridColumn"
    },
    {
      "id": "gpui_kit::data::grid::GridColumn::key",
      "name": "key",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn key (& self) -> & SharedString",
      "cfg": [],
      "target": "GridColumn"
    },
    {
      "id": "gpui_kit::data::grid::GridColumn::min_width",
      "name": "min_width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "The narrowest a resize may report, and the narrowest a flexible column is allowed to shrink to.",
      "documentation": "The narrowest a resize may report, and the narrowest a flexible column\nis allowed to shrink to.",
      "signature": "pub fn min_width (mut self, min_width : f32) -> Self",
      "cfg": [],
      "target": "GridColumn"
    },
    {
      "id": "gpui_kit::data::grid::GridColumn::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (key : impl Into<SharedString>, header : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GridColumn"
    },
    {
      "id": "gpui_kit::data::grid::GridColumn::pinned",
      "name": "pinned",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Keeps the column in the leading frozen group whatever order the caller declares, and takes it out of the reorder. The group remains at the reading edge while wide grids scroll horizontally beneath it.",
      "documentation": "Keeps the column in the leading frozen group whatever order the caller\ndeclares, and takes it out of the reorder. The group remains at the\nreading edge while wide grids scroll horizontally beneath it.",
      "signature": "pub fn pinned (mut self, pinned : bool) -> Self",
      "cfg": [],
      "target": "GridColumn"
    },
    {
      "id": "gpui_kit::data::grid::GridColumn::reorderable",
      "name": "reorderable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Lets the header be picked up and put down somewhere else. The order is the caller's state; a drop reports where the column should go.",
      "documentation": "Lets the header be picked up and put down somewhere else. The order is\nthe caller's state; a drop reports where the column should go.",
      "signature": "pub fn reorderable (mut self, reorderable : bool) -> Self",
      "cfg": [],
      "target": "GridColumn"
    },
    {
      "id": "gpui_kit::data::grid::GridColumn::resizable",
      "name": "resizable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Puts a grab handle on the column's trailing edge. The grid reports the width the pointer asks for and applies nothing.",
      "documentation": "Puts a grab handle on the column's trailing edge. The grid reports the\nwidth the pointer asks for and applies nothing.",
      "signature": "pub fn resizable (mut self, resizable : bool) -> Self",
      "cfg": [],
      "target": "GridColumn"
    },
    {
      "id": "gpui_kit::data::grid::GridColumn::sortable",
      "name": "sortable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sortable (mut self, sortable : bool) -> Self",
      "cfg": [],
      "target": "GridColumn"
    },
    {
      "id": "gpui_kit::data::grid::GridColumn::width",
      "name": "width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn width (mut self, width : ColumnWidth) -> Self",
      "cfg": [],
      "target": "GridColumn"
    },
    {
      "id": "gpui_kit::data::grid::GridLines",
      "name": "GridLines",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Whether a table or grid draws rules between its rows.",
      "documentation": "Whether a table or grid draws rules between its rows.\n\nBoth [`crate::data::Table`] and [`DataGrid`] default to\n[`GridLines::None`]. Row height, the hover wash and the selection fill\nalready say where one record ends and the next begins, and a rule per row\non top of that is what turns a six-row summary into a spreadsheet. A\ncaller with a dense log, where rows are short and the eye has to stay on\none, turns the rules on.",
      "signature": "# [doc = \" Whether a table or grid draws rules between its rows.\"] # [doc = \"\"] # [doc = \" Both [`crate::data::Table`] and [`DataGrid`] default to\"] # [doc = \" [`GridLines::None`]. Row height, the hover wash and the selection fill\"] # [doc = \" already say where one record ends and the next begins, and a rule per row\"] # [doc = \" on top of that is what turns a six-row summary into a spreadsheet. A\"] # [doc = \" caller with a dense log, where rows are short and the eye has to stay on\"] # [doc = \" one, turns the rules on.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum GridLines { # [default] None, Rows, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::grid::GridRow",
      "name": "GridRow",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "One row, built on demand, keyed by the identity the row already has.",
      "documentation": "One row, built on demand, keyed by the identity the row already has.",
      "signature": "# [doc = \" One row, built on demand, keyed by the identity the row already has.\"] pub struct GridRow { id : SharedString, text : Option<SharedString>, disabled : bool, cells : Vec<(SharedString, Cell)>, render_cell : Option<RenderCell>, hierarchy : Option<HierarchyRow>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::grid::GridRow::cell",
      "name": "cell",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cell (mut self, key : impl Into<SharedString>, cell : impl Into<Cell>) -> Self",
      "cfg": [],
      "target": "GridRow"
    },
    {
      "id": "gpui_kit::data::grid::GridRow::cells_with",
      "name": "cells_with",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "Builds a cell only when its column is mounted, or explicitly requested by range copy. Eager `.cell` entries override this provider. Use this for wide datasets: filtering cannot undo work done by eager callers.",
      "documentation": "Builds a cell only when its column is mounted, or explicitly requested\nby range copy. Eager `.cell` entries override this provider. Use this\nfor wide datasets: filtering cannot undo work done by eager callers.",
      "signature": "pub fn cells_with (mut self, render : impl Fn (& SharedString, & mut Window, & mut App) -> Cell + 'static,) -> Self",
      "cfg": [],
      "target": "GridRow"
    },
    {
      "id": "gpui_kit::data::grid::GridRow::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "GridRow"
    },
    {
      "id": "gpui_kit::data::grid::GridRow::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "GridRow"
    },
    {
      "id": "gpui_kit::data::grid::GridRow::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GridRow"
    },
    {
      "id": "gpui_kit::data::grid::GridRow::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "The name the row publishes, for a test or a reader that has only the tree to go on.",
      "documentation": "The name the row publishes, for a test or a reader that has only the\ntree to go on.",
      "signature": "pub fn text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GridRow"
    },
    {
      "id": "gpui_kit::data::grid::SelectionChange",
      "name": "SelectionChange",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "What a gesture asked the selection to become.",
      "documentation": "What a gesture asked the selection to become.\n\nThe grid applies none of it. Every variant names rows by identity, and the\ntwo \"all\" variants are kept apart on purpose: a header checkbox can only\nspeak for the rows the host has loaded, and claiming otherwise is the\noldest lie in this part of the interface.",
      "signature": "# [doc = \" What a gesture asked the selection to become.\"] # [doc = \"\"] # [doc = \" The grid applies none of it. Every variant names rows by identity, and the\"] # [doc = \" two \\\"all\\\" variants are kept apart on purpose: a header checkbox can only\"] # [doc = \" speak for the rows the host has loaded, and claiming otherwise is the\"] # [doc = \" oldest lie in this part of the interface.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum SelectionChange { # [doc = \" A plain click: this row and nothing else.\"] Replace (SharedString), # [doc = \" A cmd or ctrl click: add this row, or take it away.\"] Toggle (SharedString), # [doc = \" A shift click: everything between the row last operated and this one.\"] # [doc = \" The host owns the order, so the host resolves the span.\"] Range { anchor : SharedString, to : SharedString, }, # [doc = \" Every row the grid was given — which is every row the host has loaded,\"] # [doc = \" and may be fewer than exist.\"] Loaded, # [doc = \" Every row that exists, including the ones nobody has loaded. Only ever\"] # [doc = \" reported from a control that says that is what it does.\"] Everything, Clear, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::grid::SelectionChange::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "SelectionChange"
    },
    {
      "id": "gpui_kit::data::grid::SelectionMode",
      "name": "SelectionMode",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::grid",
      "path": "gpui_kit::data::grid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "How many rows may be selected at once.",
      "documentation": "How many rows may be selected at once.",
      "signature": "# [doc = \" How many rows may be selected at once.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum SelectionMode { # [default] None, Single, Multiple, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::image_list::ImageList",
      "name": "ImageList",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::image_list",
      "path": "gpui_kit::data::image_list",
      "source": "crates/gpui-kit/src/data/image_list.rs",
      "summary": "A token-spaced image tile collection.",
      "documentation": "A token-spaced image tile collection.",
      "signature": "# [doc = \" A token-spaced image tile collection.\"] # [derive (IntoElement)] pub struct ImageList { ident : Ident, items : Vec<ImageListItem>, columns : GridColumns, gap : Space, selected : Option<SharedString>, disabled : bool, on_select : Option<SelectHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::image_list::ImageList::columns",
      "name": "columns",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::image_list",
      "path": "gpui_kit::data::image_list",
      "source": "crates/gpui-kit/src/data/image_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn columns (mut self, columns : usize) -> Self",
      "cfg": [],
      "target": "ImageList"
    },
    {
      "id": "gpui_kit::data::image_list::ImageList::columns_at",
      "name": "columns_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::image_list",
      "path": "gpui_kit::data::image_list",
      "source": "crates/gpui-kit/src/data/image_list.rs",
      "summary": "Sets the tile count at a theme-defined measured-container breakpoint.",
      "documentation": "Sets the tile count at a theme-defined measured-container breakpoint.",
      "signature": "pub fn columns_at (mut self, breakpoint : Breakpoint, columns : usize) -> Self",
      "cfg": [],
      "target": "ImageList"
    },
    {
      "id": "gpui_kit::data::image_list::ImageList::gap",
      "name": "gap",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::image_list",
      "path": "gpui_kit::data::image_list",
      "source": "crates/gpui-kit/src/data/image_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn gap (mut self, gap : Space) -> Self",
      "cfg": [],
      "target": "ImageList"
    },
    {
      "id": "gpui_kit::data::image_list::ImageList::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::image_list",
      "path": "gpui_kit::data::image_list",
      "source": "crates/gpui-kit/src/data/image_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn items (mut self, items : impl IntoIterator<Item = ImageListItem>) -> Self",
      "cfg": [],
      "target": "ImageList"
    },
    {
      "id": "gpui_kit::data::image_list::ImageList::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::image_list",
      "path": "gpui_kit::data::image_list",
      "source": "crates/gpui-kit/src/data/image_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "ImageList"
    },
    {
      "id": "gpui_kit::data::image_list::ImageList::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::image_list",
      "path": "gpui_kit::data::image_list",
      "source": "crates/gpui-kit/src/data/image_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "ImageList"
    },
    {
      "id": "gpui_kit::data::image_list::ImageList::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::image_list",
      "path": "gpui_kit::data::image_list",
      "source": "crates/gpui-kit/src/data/image_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ImageList"
    },
    {
      "id": "gpui_kit::data::image_list::ImageListItem",
      "name": "ImageListItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::image_list",
      "path": "gpui_kit::data::image_list",
      "source": "crates/gpui-kit/src/data/image_list.rs",
      "summary": "One tile in an [`ImageList`].",
      "documentation": "One tile in an [`ImageList`].",
      "signature": "# [doc = \" One tile in an [`ImageList`].\"] pub struct ImageListItem { pub id : SharedString, pub label : SharedString, pub image : AnyElement, pub disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::image_list::ImageListItem::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::image_list",
      "path": "gpui_kit::data::image_list",
      "source": "crates/gpui-kit/src/data/image_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "ImageListItem"
    },
    {
      "id": "gpui_kit::data::image_list::ImageListItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::image_list",
      "path": "gpui_kit::data::image_list",
      "source": "crates/gpui-kit/src/data/image_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>, image : impl IntoElement,) -> Self",
      "cfg": [],
      "target": "ImageListItem"
    },
    {
      "id": "gpui_kit::data::kanban::KanbanBoard",
      "name": "KanbanBoard",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "A board of host-owned columns and cards.",
      "documentation": "A board of host-owned columns and cards.",
      "signature": "# [doc = \" A board of host-owned columns and cards.\"] # [derive (IntoElement)] pub struct KanbanBoard { ident : Ident, columns : Vec<KanbanColumn>, cards : Vec<KanbanCard>, state : KanbanState, held : Option<SharedString>, disabled : bool, on_card : Option<CardHandler>, on_move : Option<MoveHandler>, on_add : Option<AddHandler>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::kanban::KanbanBoard::cards",
      "name": "cards",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cards (mut self, cards : impl IntoIterator<Item = KanbanCard>) -> Self",
      "cfg": [],
      "target": "KanbanBoard"
    },
    {
      "id": "gpui_kit::data::kanban::KanbanBoard::columns",
      "name": "columns",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn columns (mut self, columns : impl IntoIterator<Item = KanbanColumn>) -> Self",
      "cfg": [],
      "target": "KanbanBoard"
    },
    {
      "id": "gpui_kit::data::kanban::KanbanBoard::held",
      "name": "held",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "The card the host is currently holding, so a column click can report a move.",
      "documentation": "The card the host is currently holding, so a column click can report a move.",
      "signature": "pub fn held (mut self, card : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "KanbanBoard"
    },
    {
      "id": "gpui_kit::data::kanban::KanbanBoard::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "KanbanBoard"
    },
    {
      "id": "gpui_kit::data::kanban::KanbanBoard::on_add",
      "name": "on_add",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "What starting a card in a column does. Without it no column offers to start one, because a control that cannot act is not drawn as one.",
      "documentation": "What starting a card in a column does. Without it no column offers to\nstart one, because a control that cannot act is not drawn as one.",
      "signature": "pub fn on_add (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "KanbanBoard"
    },
    {
      "id": "gpui_kit::data::kanban::KanbanBoard::on_card",
      "name": "on_card",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_card (mut self, handler : impl Fn (& KanbanCard, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "KanbanBoard"
    },
    {
      "id": "gpui_kit::data::kanban::KanbanBoard::on_move",
      "name": "on_move",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_move (mut self, handler : impl Fn (& KanbanCard, SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "KanbanBoard"
    },
    {
      "id": "gpui_kit::data::kanban::KanbanBoard::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : KanbanState) -> Self",
      "cfg": [],
      "target": "KanbanBoard"
    },
    {
      "id": "gpui_kit::data::kanban::KanbanCard",
      "name": "KanbanCard",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "One card on the board. Identity is the host's.",
      "documentation": "One card on the board. Identity is the host's.",
      "signature": "# [doc = \" One card on the board. Identity is the host's.\"] # [derive (Debug, Clone, PartialEq)] pub struct KanbanCard { pub id : SharedString, pub title : SharedString, pub detail : SharedString, pub column : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::kanban::KanbanCard::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "KanbanCard"
    },
    {
      "id": "gpui_kit::data::kanban::KanbanCard::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, title : impl Into<SharedString>, column : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "KanbanCard"
    },
    {
      "id": "gpui_kit::data::kanban::KanbanColumn",
      "name": "KanbanColumn",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "One named column. Identity is the host's.",
      "documentation": "One named column. Identity is the host's.",
      "signature": "# [doc = \" One named column. Identity is the host's.\"] # [derive (Debug, Clone, PartialEq)] pub struct KanbanColumn { pub id : SharedString, pub title : SharedString, # [doc = \" How many cards the host says belong here at once, when it says so.\"] pub limit : Option<usize>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::kanban::KanbanColumn::limit",
      "name": "limit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "The work-in-progress limit the host keeps for this column.",
      "documentation": "The work-in-progress limit the host keeps for this column.\n\nThe board enforces nothing: it states the count against the limit and\nsays when the column is over it, which is the whole point of a limit a\nreader can see.",
      "signature": "pub fn limit (mut self, limit : usize) -> Self",
      "cfg": [],
      "target": "KanbanColumn"
    },
    {
      "id": "gpui_kit::data::kanban::KanbanColumn::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "KanbanColumn"
    },
    {
      "id": "gpui_kit::data::kanban::KanbanEvent",
      "name": "KanbanEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "What the board reported.",
      "documentation": "What the board reported.",
      "signature": "# [doc = \" What the board reported.\"] # [derive (Debug, Clone, PartialEq)] pub enum KanbanEvent { CardActivated (SharedString), CardMoved { card : SharedString, column : SharedString, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::kanban::KanbanState",
      "name": "KanbanState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "How the board was asked for.",
      "documentation": "How the board was asked for.",
      "signature": "# [doc = \" How the board was asked for.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum KanbanState { Loading, Ready, Empty, Unavailable (SharedString), Error (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::kanban::KanbanState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::kanban",
      "path": "gpui_kit::data::kanban",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "KanbanState"
    },
    {
      "id": "gpui_kit::data::list::List",
      "name": "List",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "A list that renders only the rows its viewport holds.",
      "documentation": "A list that renders only the rows its viewport holds.",
      "signature": "# [doc = \" A list that renders only the rows its viewport holds.\"] # [derive (IntoElement)] pub struct List { ident : Ident, count : usize, render_row : RenderRow, selected : Option<SharedString>, row_height : Option<f32>, # [doc = \" Whether a row is as tall as its content rather than as tall as a slot.\"] flowing : bool, # [doc = \" The rows in order, when the caller named them. See [`List::keys`].\"] keys : Option<Vec<SharedString>>, revisions : Option<Vec<u64>>, # [doc = \" Where a flowing list rests when its content does not fill it.\"] alignment : ListAlignment, visible_rows : Option<usize>, # [doc = \" Whether the list takes the height of whatever holds it.\"] fills : bool, # [doc = \" Whether the rows fade in as one wave when the list itself arrives.\"] arriving : bool, size : ControlSize, disabled : bool, on_select : Option<SelectHandler>, reorderable : bool, accepts : Option<Accepts>, deferred_acceptance : Option<(dnd::DeferredDrop, u64)>, on_reorder : Option<ReorderHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::list::List::accepts",
      "name": "accepts",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "Whether this list takes a payload, and where.",
      "documentation": "Whether this list takes a payload, and where.\n\nWithout one, a reorderable list takes its own rows and nothing else.\nAnything wider than that is policy, and policy is the caller's.",
      "signature": "pub fn accepts (mut self, predicate : impl Fn (& DragItem, & DropPosition) -> bool + 'static,) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::anchored_to_end",
      "name": "anchored_to_end",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "Rests a flowing list against its end rather than its start, for a conversation or a log whose newest row is the one worth seeing.",
      "documentation": "Rests a flowing list against its end rather than its start, for a\nconversation or a log whose newest row is the one worth seeing.",
      "signature": "pub fn anchored_to_end (mut self) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::arriving",
      "name": "arriving",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "Fades the rows in as one short wave when the list itself arrives, the way a menu's rows arrive.",
      "documentation": "Fades the rows in as one short wave when the list itself arrives, the\nway a menu's rows arrive.\n\nOff by default, because a row scrolled into a viewport is the same row\nthat was always there — so a virtualized window ([`List::fills`],\n[`List::visible_rows`]) ignores this rather than claim rows are\narriving every time the viewport moves, and so does a reorderable\nlist, whose rows are already moving for a better reason. Opacity only,\nexactly as menu rows arrive: no published box moves.",
      "signature": "pub fn arriving (mut self) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::deferred_acceptance",
      "name": "deferred_acceptance",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "Defers release acceptance without holding the drag. Supply stable `keys` and advance `revision` whenever data or policy changes. The controller's live validator also checks caller-owned source state.",
      "documentation": "Defers release acceptance without holding the drag. Supply stable\n`keys` and advance `revision` whenever data or policy changes. The\ncontroller's live validator also checks caller-owned source state.",
      "signature": "pub fn deferred_acceptance (mut self, controller : dnd::DeferredDrop, revision : u64) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::fills",
      "name": "fills",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "Takes the height of whatever holds it, which is what a list filling a pane does.",
      "documentation": "Takes the height of whatever holds it, which is what a list filling a\npane does.\n\nA pane's height is the window's to decide and changes as the reader\ndrags a splitter, so a list in one cannot be bounded by a number of\nrows without being wrong at every other size. Like a row count and\nunlike sizing to content, it still bounds the list, which is what lets\nthe rows out of view be skipped.",
      "signature": "pub fn fills (mut self) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::flowing",
      "name": "flowing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "Lets each row be as tall as what it holds.",
      "documentation": "Lets each row be as tall as what it holds.\n\nA uniform list costs the same for ten thousand rows as for ten because\nit knows where every row starts without laying one out. That is also\nits price: a row is a slot, and content longer than the slot has to say\nhow much it left out. A flowing list measures a row when it first comes\ninto view and keeps that measurement, so the row grows to fit — and in\nexchange it can only estimate how far a set it has not seen reaches, so\na scrollbar over one settles as the reader moves through it.\n\n[`List::row_height`] stops being the height of a row and becomes the\nestimate used for rows nobody has laid out yet.",
      "signature": "pub fn flowing (mut self) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::keys",
      "name": "keys",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "Names the rows, in the order they are drawn.",
      "documentation": "Names the rows, in the order they are drawn.\n\nA flowing list only learns a row's height by laying it out, and what it\nhas learned is addressed by index. So when the set changes, the\nquestion is which indices still mean what they meant, and a count\ncannot answer it: a row inserted at the top moves every row below it,\nand a list told only that the count went up by one would keep every\nheight against the wrong row.\n\nNaming rows preserves measurements and the reader's within-row anchor\nacross insertion, removal and reorder. Names must be unique and stable.\nUse [`Self::revisions`] for geometry changes under the same identity.\n\nThe names are the rows' own identities, the same ones\n[`ListItem::new`] takes. Uniform lists also retain the identity anchor,\nusing their authored row height rather than measured geometry.",
      "signature": "pub fn keys (mut self, keys : impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, count : usize, render_row : impl Fn (usize, & mut Window, & mut App) -> ListItem + 'static,) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::on_reorder",
      "name": "on_reorder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "Reports where a dropped row should go. The list does not move it.",
      "documentation": "Reports where a dropped row should go. The list does not move it.",
      "signature": "pub fn on_reorder (mut self, handler : impl Fn (& DropIntent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::reorderable",
      "name": "reorderable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "Lets a row be picked up and put down somewhere else in the list.",
      "documentation": "Lets a row be picked up and put down somewhere else in the list.\n\nThe whole row is the handle. A list row's ordinary action is a click,\nand GPUI only calls a press a drag once it has travelled two pixels, so\nboth fit on the same row without a grip column the caller would have to\nrender into every row it owns.",
      "signature": "pub fn reorderable (mut self, reorderable : bool) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::revisions",
      "name": "revisions",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "Geometry revisions in stable key order, forwarded to [`Flow::revisions`]. Changes invalidate measurements without changing semantic identities. Ignored by uniform lists.",
      "documentation": "Geometry revisions in stable key order, forwarded to [`Flow::revisions`].\nChanges invalidate measurements without changing semantic identities.\nIgnored by uniform lists.",
      "signature": "pub fn revisions (mut self, revisions : Vec<u64>) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::row_height",
      "name": "row_height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "Every row is this tall. Uniform height is what makes the list cheap; the default comes from the control scale for the list's size.",
      "documentation": "Every row is this tall. Uniform height is what makes the list cheap;\nthe default comes from the control scale for the list's size.",
      "signature": "pub fn row_height (mut self, height : f32) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::List::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "Bounds the viewport to `rows` rows, which is what lets the list skip the rows it does not show.",
      "documentation": "Bounds the viewport to `rows` rows, which is what lets the list skip\nthe rows it does not show.",
      "signature": "pub fn visible_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "List"
    },
    {
      "id": "gpui_kit::data::list::ListItem",
      "name": "ListItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "One row, named by the caller.",
      "documentation": "One row, named by the caller.",
      "signature": "# [doc = \" One row, named by the caller.\"] pub struct ListItem { id : SharedString, text : Option<SharedString>, # [doc = \" What the row belongs to, when that is something other than the list.\"] within : Option<SharedString>, disabled : bool, content : AnyElement, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::list::ListItem::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "ListItem"
    },
    {
      "id": "gpui_kit::data::list::ListItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "`id` is the row's business identity, not its index.",
      "documentation": "`id` is the row's business identity, not its index.",
      "signature": "pub fn new (id : impl Into<SharedString>, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "ListItem"
    },
    {
      "id": "gpui_kit::data::list::ListItem::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "The name the row publishes, for a test or a screen reader that has only the tree to go on.",
      "documentation": "The name the row publishes, for a test or a screen reader that has only\nthe tree to go on.",
      "signature": "pub fn text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ListItem"
    },
    {
      "id": "gpui_kit::data::list::ListItem::within",
      "name": "within",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "The row this one belongs to.",
      "documentation": "The row this one belongs to.\n\nA flat list of rows is not always a flat structure: a diff's lines\nbelong to their hunk and the hunk to its file, and a list that reported\nthree thousand siblings would be describing an arrangement nobody has.\nWhoever reads the tree — a screen reader, a driver picking out the\nfiles — needs the structure that is actually on screen, and only the\ncaller knows it.\n\nThe row named must be one of this list's own, and the list itself stays\nthe parent of everything that names nothing.",
      "signature": "pub fn within (mut self, row : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ListItem"
    },
    {
      "id": "gpui_kit::data::list::reexport-1",
      "name": "crate :: data :: viewport :: { glide_to_row , reveal_row , scroll_to_row }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::list",
      "path": "gpui_kit::data::list",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use crate::data::viewport::{ glide_to_row, reveal_row, scroll_to_row };",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::masonry::Masonry",
      "name": "Masonry",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::masonry",
      "path": "gpui_kit::data::masonry",
      "source": "crates/gpui-kit/src/data/masonry.rs",
      "summary": "A measured masonry layout over caller-owned content.",
      "documentation": "A measured masonry layout over caller-owned content.",
      "signature": "# [doc = \" A measured masonry layout over caller-owned content.\"] # [derive (IntoElement)] pub struct Masonry { ident : Ident, items : Vec<MasonryItem>, columns : GridColumns, gap : Space, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::masonry::Masonry::columns",
      "name": "columns",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::masonry",
      "path": "gpui_kit::data::masonry",
      "source": "crates/gpui-kit/src/data/masonry.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn columns (mut self, columns : usize) -> Self",
      "cfg": [],
      "target": "Masonry"
    },
    {
      "id": "gpui_kit::data::masonry::Masonry::columns_at",
      "name": "columns_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::masonry",
      "path": "gpui_kit::data::masonry",
      "source": "crates/gpui-kit/src/data/masonry.rs",
      "summary": "Sets the column count at a theme-defined measured-container breakpoint.",
      "documentation": "Sets the column count at a theme-defined measured-container breakpoint.",
      "signature": "pub fn columns_at (mut self, breakpoint : Breakpoint, columns : usize) -> Self",
      "cfg": [],
      "target": "Masonry"
    },
    {
      "id": "gpui_kit::data::masonry::Masonry::gap",
      "name": "gap",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::masonry",
      "path": "gpui_kit::data::masonry",
      "source": "crates/gpui-kit/src/data/masonry.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn gap (mut self, gap : Space) -> Self",
      "cfg": [],
      "target": "Masonry"
    },
    {
      "id": "gpui_kit::data::masonry::Masonry::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::masonry",
      "path": "gpui_kit::data::masonry",
      "source": "crates/gpui-kit/src/data/masonry.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn items (mut self, items : impl IntoIterator<Item = MasonryItem>) -> Self",
      "cfg": [],
      "target": "Masonry"
    },
    {
      "id": "gpui_kit::data::masonry::Masonry::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::masonry",
      "path": "gpui_kit::data::masonry",
      "source": "crates/gpui-kit/src/data/masonry.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Masonry"
    },
    {
      "id": "gpui_kit::data::masonry::MasonryItem",
      "name": "MasonryItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::masonry",
      "path": "gpui_kit::data::masonry",
      "source": "crates/gpui-kit/src/data/masonry.rs",
      "summary": "A measured masonry item.",
      "documentation": "A measured masonry item.",
      "signature": "# [doc = \" A measured masonry item.\"] pub struct MasonryItem { pub id : SharedString, pub content : AnyElement, pub height : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::masonry::MasonryItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::masonry",
      "path": "gpui_kit::data::masonry",
      "source": "crates/gpui-kit/src/data/masonry.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, content : impl IntoElement, height : f32) -> Self",
      "cfg": [],
      "target": "MasonryItem"
    },
    {
      "id": "gpui_kit::data::reexport-1",
      "name": "diagnostics_list :: { Diagnostic , DiagnosticAction , DiagnosticFilter , DiagnosticLocation , DiagnosticSeverity , DiagnosticsList , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data",
      "path": "gpui_kit::data",
      "source": "crates/gpui-kit/src/data/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use diagnostics_list::{ Diagnostic, DiagnosticAction, DiagnosticFilter, DiagnosticLocation, DiagnosticSeverity, DiagnosticsList, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::reexport-10",
      "name": "tree_grid :: { TreeGrid , TreeGridRow }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data",
      "path": "gpui_kit::data",
      "source": "crates/gpui-kit/src/data/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use tree_grid::{ TreeGrid, TreeGridRow };",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::reexport-11",
      "name": "viewport :: { Viewed , glide_to_row , reveal_row , scroll_to_row , viewed_rows }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data",
      "path": "gpui_kit::data",
      "source": "crates/gpui-kit/src/data/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use viewport::{ Viewed, glide_to_row, reveal_row, scroll_to_row, viewed_rows };",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::reexport-2",
      "name": "flow :: Flow",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data",
      "path": "gpui_kit::data",
      "source": "crates/gpui-kit/src/data/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use flow::Flow;",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::reexport-3",
      "name": "grid :: { BulkBar , CellRange , ColumnGroup , DataGrid , EditIntent , EditOutcome , EditingCell , Expanded , GridColumn , GridLines , GridRow , SelectionChange , SelectionMode , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data",
      "path": "gpui_kit::data",
      "source": "crates/gpui-kit/src/data/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use grid::{ BulkBar, CellRange, ColumnGroup, DataGrid, EditIntent, EditOutcome, EditingCell, Expanded, GridColumn, GridLines, GridRow, SelectionChange, SelectionMode, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::reexport-4",
      "name": "image_list :: { ImageList , ImageListItem }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data",
      "path": "gpui_kit::data",
      "source": "crates/gpui-kit/src/data/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use image_list::{ ImageList, ImageListItem };",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::reexport-5",
      "name": "kanban :: { KanbanBoard , KanbanCard , KanbanColumn , KanbanEvent , KanbanState }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data",
      "path": "gpui_kit::data",
      "source": "crates/gpui-kit/src/data/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use kanban::{ KanbanBoard, KanbanCard, KanbanColumn, KanbanEvent, KanbanState };",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::reexport-6",
      "name": "list :: { List , ListItem }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data",
      "path": "gpui_kit::data",
      "source": "crates/gpui-kit/src/data/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use list::{ List, ListItem };",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::reexport-7",
      "name": "masonry :: { Masonry , MasonryItem }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data",
      "path": "gpui_kit::data",
      "source": "crates/gpui-kit/src/data/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use masonry::{ Masonry, MasonryItem };",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::reexport-8",
      "name": "table :: { Align , Cell , Column , ColumnWidth , Row , SortDirection , Table }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data",
      "path": "gpui_kit::data",
      "source": "crates/gpui-kit/src/data/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use table::{ Align, Cell, Column, ColumnWidth, Row, SortDirection, Table };",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::reexport-9",
      "name": "tree :: { BranchState , Tree , TreeNode }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data",
      "path": "gpui_kit::data",
      "source": "crates/gpui-kit/src/data/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use tree::{ BranchState, Tree, TreeNode };",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::table::Align",
      "name": "Align",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "Where a cell's content sits inside its column.",
      "documentation": "Where a cell's content sits inside its column.",
      "signature": "# [doc = \" Where a cell's content sits inside its column.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum Align { # [default] Start, Center, End, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::table::Cell",
      "name": "Cell",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "One cell's content, and whether it is an assertion target.",
      "documentation": "One cell's content, and whether it is an assertion target.",
      "signature": "# [doc = \" One cell's content, and whether it is an assertion target.\"] pub struct Cell { pub (crate) content : CellContent, pub (crate) text : Option<SharedString>, pub (crate) published : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::table::Cell::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "Cell"
    },
    {
      "id": "gpui_kit::data::table::Cell::published",
      "name": "published",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "Publishes a [`Role::Cell`] node at `<row id>.<column key>`.",
      "documentation": "Publishes a [`Role::Cell`] node at `<row id>.<column key>`.",
      "signature": "pub fn published (mut self, published : bool) -> Self",
      "cfg": [],
      "target": "Cell"
    },
    {
      "id": "gpui_kit::data::table::Cell::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "The name the cell publishes when it is published.",
      "documentation": "The name the cell publishes when it is published.",
      "signature": "pub fn text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Cell"
    },
    {
      "id": "gpui_kit::data::table::Column",
      "name": "Column",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "One column. `key` addresses the cells that belong to it and appears in every id the column publishes.",
      "documentation": "One column. `key` addresses the cells that belong to it and appears in\nevery id the column publishes.",
      "signature": "# [doc = \" One column. `key` addresses the cells that belong to it and appears in\"] # [doc = \" every id the column publishes.\"] # [derive (Debug, Clone)] pub struct Column { key : SharedString, header : SharedString, width : ColumnWidth, align : Align, sortable : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::table::Column::align",
      "name": "align",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn align (mut self, align : Align) -> Self",
      "cfg": [],
      "target": "Column"
    },
    {
      "id": "gpui_kit::data::table::Column::fixed",
      "name": "fixed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn fixed (self, width : f32) -> Self",
      "cfg": [],
      "target": "Column"
    },
    {
      "id": "gpui_kit::data::table::Column::flex",
      "name": "flex",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn flex (self, share : f32) -> Self",
      "cfg": [],
      "target": "Column"
    },
    {
      "id": "gpui_kit::data::table::Column::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (key : impl Into<SharedString>, header : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Column"
    },
    {
      "id": "gpui_kit::data::table::Column::sortable",
      "name": "sortable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sortable (mut self, sortable : bool) -> Self",
      "cfg": [],
      "target": "Column"
    },
    {
      "id": "gpui_kit::data::table::Column::width",
      "name": "width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn width (mut self, width : ColumnWidth) -> Self",
      "cfg": [],
      "target": "Column"
    },
    {
      "id": "gpui_kit::data::table::ColumnWidth",
      "name": "ColumnWidth",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "How wide a column is: a fixed measure, or a share of what is left over.",
      "documentation": "How wide a column is: a fixed measure, or a share of what is left over.",
      "signature": "# [doc = \" How wide a column is: a fixed measure, or a share of what is left over.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub enum ColumnWidth { Fixed (f32), Flex (f32), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::table::Row",
      "name": "Row",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "One row, keyed by the identity the row already has.",
      "documentation": "One row, keyed by the identity the row already has.",
      "signature": "# [doc = \" One row, keyed by the identity the row already has.\"] pub struct Row { id : SharedString, text : Option<SharedString>, disabled : bool, cells : Vec<(SharedString, Cell)>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::table::Row::cell",
      "name": "cell",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cell (mut self, key : impl Into<SharedString>, cell : impl Into<Cell>) -> Self",
      "cfg": [],
      "target": "Row"
    },
    {
      "id": "gpui_kit::data::table::Row::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "Row"
    },
    {
      "id": "gpui_kit::data::table::Row::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Row"
    },
    {
      "id": "gpui_kit::data::table::Row::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Row"
    },
    {
      "id": "gpui_kit::data::table::SortDirection",
      "name": "SortDirection",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "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.",
      "documentation": "Which way a sorted column runs. The table reports a direction and renders\nwhatever order it is handed; it never sorts the rows itself.",
      "signature": "# [doc = \" Which way a sorted column runs. The table reports a direction and renders\"] # [doc = \" whatever order it is handed; it never sorts the rows itself.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum SortDirection { Ascending, Descending, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::table::SortDirection::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (self) -> & 'static str",
      "cfg": [],
      "target": "SortDirection"
    },
    {
      "id": "gpui_kit::data::table::SortDirection::reversed",
      "name": "reversed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "The direction a second click on the same header implies.",
      "documentation": "The direction a second click on the same header implies.",
      "signature": "pub fn reversed (self) -> Self",
      "cfg": [],
      "target": "SortDirection"
    },
    {
      "id": "gpui_kit::data::table::Table",
      "name": "Table",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "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.",
      "documentation": "A table with a header that stays put while the body scrolls.",
      "signature": "# [doc = \" A table with a header that stays put while the body scrolls.\"] # [derive (IntoElement)] pub struct Table { ident : Ident, columns : Vec<Column>, rows : Vec<Row>, source : Option<RowSource>, sort : Option<(SharedString, SortDirection)>, selected : Option<SharedString>, row_height : Option<f32>, visible_rows : Option<usize>, size : ControlSize, disabled : bool, lines : GridLines, loading : bool, failure : Option<SharedString>, empty : Option<EmptyState>, slots : Slots, on_sort : Option<SortHandler>, on_select : Option<SelectHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::table::Table::column",
      "name": "column",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn column (mut self, column : Column) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::columns",
      "name": "columns",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn columns (mut self, columns : impl IntoIterator<Item = Column>) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::empty",
      "name": "empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "What to show when the query succeeded and returned nothing.",
      "documentation": "What to show when the query succeeded and returned nothing.\n\nThis is the typed form of the [`slot::EMPTY`] slot. A filled slot wins\nover it.",
      "signature": "pub fn empty (mut self, empty : EmptyState) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::failure",
      "name": "failure",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "A refresh that failed. Rows the table already has stay on screen with the failure stated above them; only a failure with nothing behind it takes the surface over.",
      "documentation": "A refresh that failed. Rows the table already has stay on screen with\nthe failure stated above them; only a failure with nothing behind it\ntakes the surface over.",
      "signature": "pub fn failure (mut self, failure : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::lines",
      "name": "lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "Row rules. The default is [`GridLines::None`].",
      "documentation": "Row rules. The default is [`GridLines::None`].",
      "signature": "pub fn lines (mut self, lines : GridLines) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::loading",
      "name": "loading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "A first load with nothing to show yet. A refresh over rows that already exist is not this; see [`Table::failure`].",
      "documentation": "A first load with nothing to show yet. A refresh over rows that already\nexist is not this; see [`Table::failure`].",
      "signature": "pub fn loading (mut self, loading : bool) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::on_sort",
      "name": "on_sort",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_sort (mut self, handler : impl Fn (SharedString, SortDirection, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::row_height",
      "name": "row_height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn row_height (mut self, height : f32) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::rows",
      "name": "rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rows (mut self, rows : impl IntoIterator<Item = Row>) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::rows_from",
      "name": "rows_from",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "Takes a count and a closure instead of a vector, so the table can build only the rows its viewport holds.",
      "documentation": "Takes a count and a closure instead of a vector, so the table can build\nonly the rows its viewport holds.\n\nPair it with [`Table::visible_rows`]: without a bounded viewport there\nis no window to skip rows outside of, and the table lays out the whole\ncollection just as a materialized one does. A source supersedes\nanything passed to [`Table::rows`].",
      "signature": "pub fn rows_from (mut self, count : usize, render_row : impl Fn (usize, & mut Window, & mut App) -> Row + 'static,) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::sort",
      "name": "sort",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "The sort the caller applied, which is the only sort the table shows.",
      "documentation": "The sort the caller applied, which is the only sort the table shows.",
      "signature": "pub fn sort (mut self, sort : Option<(SharedString, SortDirection)>) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::sorted_by",
      "name": "sorted_by",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sorted_by (self, key : impl Into<SharedString>, direction : SortDirection) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::table::Table::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::table",
      "path": "gpui_kit::data::table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "Caps the body at `rows` rows and scrolls past that, leaving the header in place.",
      "documentation": "Caps the body at `rows` rows and scrolls past that, leaving the header\nin place.",
      "signature": "pub fn visible_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "Table"
    },
    {
      "id": "gpui_kit::data::tree::BranchState",
      "name": "BranchState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "What is known about the children under a node.",
      "documentation": "What is known about the children under a node.",
      "signature": "# [doc = \" What is known about the children under a node.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum BranchState { # [doc = \" The children that were handed over are the complete set.\"] # [default] Ready, # [doc = \" The host is still listing this branch.\"] Loading, # [doc = \" The host could not list this branch, in its own words.\"] Unavailable (SharedString), # [doc = \" An attempt to list this branch failed, in its own words.\"] Failed (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::tree::BranchState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "BranchState"
    },
    {
      "id": "gpui_kit::data::tree::Tree",
      "name": "Tree",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "A disclosure hierarchy.",
      "documentation": "A disclosure hierarchy.",
      "signature": "# [doc = \" A disclosure hierarchy.\"] # [derive (IntoElement)] pub struct Tree { ident : Ident, nodes : Vec<TreeNode>, expanded : Vec<SharedString>, selected : Option<SharedString>, visible_rows : Option<usize>, size : ControlSize, disabled : bool, loading : bool, failure : Option<SharedString>, empty : Option<EmptyState>, slots : Slots, on_toggle : Option<ToggleHandler>, on_select : Option<SelectHandler>, reorderable : bool, accepts : Option<Accepts>, deferred_acceptance : Option<(dnd::DeferredDrop, u64)>, on_move : Option<MoveHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::tree::Tree::accepts",
      "name": "accepts",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "Whether this tree takes a payload, and where.",
      "documentation": "Whether this tree takes a payload, and where.\n\nStructural impossibilities are refused before this is consulted: a node\ncannot be moved inside itself or below one of its own descendants,\nbecause the descendant travels with it. Everything else — which kinds\nof node may hold which — is policy, and policy is the caller's.",
      "signature": "pub fn accepts (mut self, predicate : impl Fn (& DragItem, & DropPosition) -> bool + 'static,) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::deferred_acceptance",
      "name": "deferred_acceptance",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "Defers release acceptance through the shared bounded decision lifecycle. Advance revision when data or policy changes. Structural and live caller validation run again before a move is reported.",
      "documentation": "Defers release acceptance through the shared bounded decision lifecycle.\nAdvance revision when data or policy changes. Structural and live\ncaller validation run again before a move is reported.",
      "signature": "pub fn deferred_acceptance (mut self, controller : dnd::DeferredDrop, revision : u64) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::empty",
      "name": "empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "What to show when the query succeeded and returned nothing.",
      "documentation": "What to show when the query succeeded and returned nothing.",
      "signature": "pub fn empty (mut self, empty : EmptyState) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::expanded",
      "name": "expanded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn expanded (mut self, ids : impl IntoIterator<Item = SharedString>) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::expanded_ids",
      "name": "expanded_ids",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn expanded_ids<S : AsRef<str>> (mut self, ids : & [S]) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::failure",
      "name": "failure",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "A refresh that failed. Nodes that are still true stay on screen.",
      "documentation": "A refresh that failed. Nodes that are still true stay on screen.",
      "signature": "pub fn failure (mut self, failure : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::loading",
      "name": "loading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "A first load with nothing to show yet.",
      "documentation": "A first load with nothing to show yet.",
      "signature": "pub fn loading (mut self, loading : bool) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::node",
      "name": "node",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn node (mut self, node : TreeNode) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::nodes",
      "name": "nodes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn nodes (mut self, nodes : impl IntoIterator<Item = TreeNode>) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::on_move",
      "name": "on_move",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "Reports where a dropped node should go. The tree does not move it.",
      "documentation": "Reports where a dropped node should go. The tree does not move it.",
      "signature": "pub fn on_move (mut self, handler : impl Fn (& DropIntent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::on_toggle",
      "name": "on_toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_toggle (mut self, handler : impl Fn (SharedString, bool, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::reorderable",
      "name": "reorderable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "Lets a node be picked up and put somewhere else in the hierarchy.",
      "documentation": "Lets a node be picked up and put somewhere else in the hierarchy.",
      "signature": "pub fn reorderable (mut self, reorderable : bool) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::Tree::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "Bounds the viewport to `rows` rows, which is what lets the tree skip the disclosed rows it does not show.",
      "documentation": "Bounds the viewport to `rows` rows, which is what lets the tree skip\nthe disclosed rows it does not show.\n\nWithout it the tree sizes itself to its content, which is the right\nanswer for a hierarchy a reader takes in whole and the wrong one for a\nworkspace with ten thousand files open.",
      "signature": "pub fn visible_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "Tree"
    },
    {
      "id": "gpui_kit::data::tree::TreeNode",
      "name": "TreeNode",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "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.",
      "documentation": "One node, identified by business identity rather than by its place in the\nhierarchy, so moving a branch does not rename what hangs under it.",
      "signature": "# [doc = \" One node, identified by business identity rather than by its place in the\"] # [doc = \" hierarchy, so moving a branch does not rename what hangs under it.\"] # [derive (Debug, Clone)] pub struct TreeNode { id : SharedString, label : SharedString, icon : Option<Icon>, disabled : bool, children : Vec<TreeNode>, branch : BranchState, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::tree::TreeNode::branch",
      "name": "branch",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "What is known about this node's children.",
      "documentation": "What is known about this node's children.\n\n[`BranchState::Ready`] with no children is a leaf. Loading, unavailable,\nor failed still offers a disclosure, because the host has said there is\na branch even when it cannot list it yet.",
      "signature": "pub fn branch (mut self, branch : BranchState) -> Self",
      "cfg": [],
      "target": "TreeNode"
    },
    {
      "id": "gpui_kit::data::tree::TreeNode::child",
      "name": "child",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn child (mut self, child : TreeNode) -> Self",
      "cfg": [],
      "target": "TreeNode"
    },
    {
      "id": "gpui_kit::data::tree::TreeNode::children",
      "name": "children",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn children (mut self, children : impl IntoIterator<Item = TreeNode>) -> Self",
      "cfg": [],
      "target": "TreeNode"
    },
    {
      "id": "gpui_kit::data::tree::TreeNode::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "TreeNode"
    },
    {
      "id": "gpui_kit::data::tree::TreeNode::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, icon : Icon) -> Self",
      "cfg": [],
      "target": "TreeNode"
    },
    {
      "id": "gpui_kit::data::tree::TreeNode::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree",
      "path": "gpui_kit::data::tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TreeNode"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid",
      "name": "TreeGrid",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "A product-neutral, caller-owned virtualized treegrid adapter.",
      "documentation": "A product-neutral, caller-owned virtualized treegrid adapter.",
      "signature": "# [doc = \" A product-neutral, caller-owned virtualized treegrid adapter.\"] # [derive (IntoElement)] pub struct TreeGrid { ident : Ident, count : usize, render_row : RenderRow, columns : Vec<GridColumn>, selected : Option<SharedString>, visible_rows : Option<usize>, row_height : Option<f32>, lines : GridLines, loading : bool, failure : Option<SharedString>, vacancy : Option<EmptyState>, disabled : bool, on_select : Option<SelectHandler>, on_expand : Option<ExpandHandler>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid::column",
      "name": "column",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn column (mut self, column : GridColumn) -> Self",
      "cfg": [],
      "target": "TreeGrid"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid::columns",
      "name": "columns",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn columns (mut self, columns : impl IntoIterator<Item = GridColumn>) -> Self",
      "cfg": [],
      "target": "TreeGrid"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid::empty",
      "name": "empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn empty (mut self, state : EmptyState) -> Self",
      "cfg": [],
      "target": "TreeGrid"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid::failure",
      "name": "failure",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn failure (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TreeGrid"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid::lines",
      "name": "lines",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn lines (mut self, lines : GridLines) -> Self",
      "cfg": [],
      "target": "TreeGrid"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid::loading",
      "name": "loading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn loading (mut self, loading : bool) -> Self",
      "cfg": [],
      "target": "TreeGrid"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, visible_row_count : usize, render_row : impl Fn (usize, & mut Window, & mut App) -> TreeGridRow + 'static,) -> Self",
      "cfg": [],
      "target": "TreeGrid"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid::on_expand",
      "name": "on_expand",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_expand (mut self, handler : impl Fn (SharedString, bool, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "TreeGrid"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "TreeGrid"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid::row_height",
      "name": "row_height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn row_height (mut self, height : f32) -> Self",
      "cfg": [],
      "target": "TreeGrid"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TreeGrid"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid::unavailable",
      "name": "unavailable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn unavailable (mut self, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TreeGrid"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGrid::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn visible_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "TreeGrid"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGridRow",
      "name": "TreeGridRow",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "One already-visible hierarchy row, identified by stable business identity.",
      "documentation": "One already-visible hierarchy row, identified by stable business identity.",
      "signature": "# [doc = \" One already-visible hierarchy row, identified by stable business identity.\"] # [derive (Debug)] pub struct TreeGridRow { row : GridRow, level : u32, has_children : bool, expanded : bool, parent : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGridRow::branch",
      "name": "branch",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn branch (mut self, expanded : bool) -> Self",
      "cfg": [],
      "target": "TreeGridRow"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGridRow::cell",
      "name": "cell",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cell (mut self, key : impl Into<SharedString>, cell : impl Into<Cell>) -> Self",
      "cfg": [],
      "target": "TreeGridRow"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGridRow::cells_with",
      "name": "cells_with",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "Builds cells only when their columns are mounted or explicitly copied. Uses the same horizontal virtualization contract as [`GridRow::cells_with`]. Eager cells supplied with [`Self::cell`] take precedence.",
      "documentation": "Builds cells only when their columns are mounted or explicitly copied.\nUses the same horizontal virtualization contract as [`GridRow::cells_with`].\nEager cells supplied with [`Self::cell`] take precedence.",
      "signature": "pub fn cells_with (mut self, render : impl Fn (& SharedString, & mut Window, & mut App) -> Cell + 'static,) -> Self",
      "cfg": [],
      "target": "TreeGridRow"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGridRow::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "TreeGridRow"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGridRow::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, level : u32) -> Self",
      "cfg": [],
      "target": "TreeGridRow"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGridRow::parent",
      "name": "parent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "The caller-supplied visible parent used by logical-start navigation.",
      "documentation": "The caller-supplied visible parent used by logical-start navigation.",
      "signature": "pub fn parent (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TreeGridRow"
    },
    {
      "id": "gpui_kit::data::tree_grid::TreeGridRow::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::tree_grid",
      "path": "gpui_kit::data::tree_grid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TreeGridRow"
    },
    {
      "id": "gpui_kit::data::viewport::Viewed",
      "name": "Viewed",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::viewport",
      "path": "gpui_kit::data::viewport",
      "source": "crates/gpui-kit/src/data/viewport.rs",
      "summary": "What a surface drawn over a list can see of it.",
      "documentation": "What a surface drawn over a list can see of it.",
      "signature": "# [doc = \" What a surface drawn over a list can see of it.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Viewed { # [doc = \" The first row the reader can see.\"] pub first_row : usize, # [doc = \" How tall the frame showing it is.\"] pub height : Pixels, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::viewport::glide_to_row",
      "name": "glide_to_row",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::viewport",
      "path": "gpui_kit::data::viewport",
      "source": "crates/gpui-kit/src/data/viewport.rs",
      "summary": "Travels to row `index` rather than arriving there.",
      "documentation": "Travels to row `index` rather than arriving there.\n\nA jump across a long conversation destroys the reader's place: the screen\nthey were looking at is replaced by another one, and nothing on it says\nwhich direction they came from or how far they went. Moving there over half\na second says both, and costs nothing but the half second.\n\nThe distance is not known when the glide starts. Rows above the viewport\nhave never been laid out, so the pixels between here and there can only be\nestimated, and the estimate is corrected as rows are measured. [`Glide`] is\nwhat makes that survivable: each frame consumes the share of the *current*\nremaining distance that the curve says belongs to it, so a correction\nmid-flight continues the same timeline instead of restarting it.\n\nA reader who has asked for reduced motion is taken straight there, and so\nis a surface that is not a variable-height list: a uniform list knows every\nrow's height without laying it out, so it has no unmeasured distance for\nthis to solve and its own scroll already lands correctly.",
      "signature": "pub fn glide_to_row (ident : & Ident, index : usize, window : & Window, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::viewport::remeasure_rows",
      "name": "remeasure_rows",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::viewport",
      "path": "gpui_kit::data::viewport",
      "source": "crates/gpui-kit/src/data/viewport.rs",
      "summary": "Invalidates measured geometry after an asynchronous row update. Identity and the absolute pixel offset within the anchored row are retained. The range uses current row order; callers resolving async work must look up its stable key before calling. Missing surfaces are a no-op.",
      "documentation": "Invalidates measured geometry after an asynchronous row update. Identity\nand the absolute pixel offset within the anchored row are retained. The\nrange uses current row order; callers resolving async work must look up\nits stable key before calling. Missing surfaces are a no-op.",
      "signature": "pub fn remeasure_rows (ident : & Ident, rows : Range<usize>, window : & mut Window, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::viewport::reveal_row",
      "name": "reveal_row",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::viewport",
      "path": "gpui_kit::data::viewport",
      "source": "crates/gpui-kit/src/data/viewport.rs",
      "summary": "Brings row `index` into view by the shortest move that gets it there, and leaves the offset alone when the row is already on screen.",
      "documentation": "Brings row `index` into view by the shortest move that gets it there, and\nleaves the offset alone when the row is already on screen.",
      "signature": "pub fn reveal_row (ident : & Ident, index : usize, window : & Window, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::viewport::scroll_to_row",
      "name": "scroll_to_row",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::viewport",
      "path": "gpui_kit::data::viewport",
      "source": "crates/gpui-kit/src/data/viewport.rs",
      "summary": "Brings row `index` of the surface with this identity to the bottom edge.",
      "documentation": "Brings row `index` of the surface with this identity to the bottom edge.\n\nScroll position belongs to the surface, not to whoever draws over it, so a\nsurface built on a list — a conversation that follows its newest message —\nmoves it by naming the list rather than by owning a GPUI handle of its own.",
      "signature": "pub fn scroll_to_row (ident : & Ident, index : usize, window : & Window, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::data::viewport::viewed_rows",
      "name": "viewed_rows",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "data::viewport",
      "path": "gpui_kit::data::viewport",
      "source": "crates/gpui-kit/src/data/viewport.rs",
      "summary": "The first row of this surface that the reader can see, and how tall the frame showing it is.",
      "documentation": "The first row of this surface that the reader can see, and how tall the\nframe showing it is.\n\nA surface drawn *over* a list — an outline, a scrollbar, a position\nreadout — needs both and owns neither. It reads them by naming the list,\nthe same way it moves it by naming the list. `None` while the surface has\nnot been laid out as a variable-height list, which is one frame at most and\nis not the same answer as \"the top\", so a caller can tell \"not yet\" from\n\"row zero\".",
      "signature": "pub fn viewed_rows (ident : & Ident, window : & Window, cx : & App) -> Option<Viewed>",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::adapter::Clock",
      "name": "Clock",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "The clock the host keeps: how far its hours run, and what it calls the two halves of a twelve-hour day.",
      "documentation": "The clock the host keeps: how far its hours run, and what it calls the two\nhalves of a twelve-hour day.\n\nA crate that hard-coded `AM` and `PM` would be hard-coding a language, so\nthe labels arrive here or the clock has none.",
      "signature": "# [doc = \" The clock the host keeps: how far its hours run, and what it calls the two\"] # [doc = \" halves of a twelve-hour day.\"] # [doc = \"\"] # [doc = \" A crate that hard-coded `AM` and `PM` would be hard-coding a language, so\"] # [doc = \" the labels arrive here or the clock has none.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct Clock { pub hour_min : u32, pub hour_max : u32, pub minute_max : u32, pub second_max : u32, # [doc = \" The two meridiem labels in order, when the host's clock has them.\"] pub meridiem : Option<(SharedString, SharedString)>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::adapter::Clock::is_twelve_hour",
      "name": "is_twelve_hour",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_twelve_hour (& self) -> bool",
      "cfg": [],
      "target": "Clock"
    },
    {
      "id": "gpui_kit::datetime::adapter::Clock::meridiem_label",
      "name": "meridiem_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn meridiem_label (& self, index : usize) -> Option<SharedString>",
      "cfg": [],
      "target": "Clock"
    },
    {
      "id": "gpui_kit::datetime::adapter::DateAdapter",
      "name": "DateAdapter",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "Everything the date components are not allowed to know.",
      "documentation": "Everything the date components are not allowed to know.\n\nOne implementation of this is the whole seam. The components read facts\nfrom it, hand [`Day`] values back to it, and never derive a date fact\nthemselves — including which month a keystroke moved to, which is\n[`shift_month`](DateAdapter::shift_month) rather than an addition.",
      "signature": "# [doc = \" Everything the date components are not allowed to know.\"] # [doc = \"\"] # [doc = \" One implementation of this is the whole seam. The components read facts\"] # [doc = \" from it, hand [`Day`] values back to it, and never derive a date fact\"] # [doc = \" themselves — including which month a keystroke moved to, which is\"] # [doc = \" [`shift_month`](DateAdapter::shift_month) rather than an addition.\"] pub trait DateAdapter { # [doc = \" What day it is, or `None` when the host has not established one.\"] # [doc = \"\"] # [doc = \" `None` is a real answer and is rendered as one: no today ring is drawn\"] # [doc = \" and no month is guessed from it.\"] fn today (& self) -> Option<Day>; fn month_of (& self, day : Day) -> MonthKey; fn month_grid (& self, month : MonthKey) -> MonthGrid; # [doc = \" What the month is called, already in the host's language.\"] fn month_label (& self, month : MonthKey) -> SharedString; # [doc = \" The weekday headings, already in the host's first-day-of-week order.\"] fn weekday_labels (& self) -> Vec<SharedString>; # [doc = \" The whole day, as a field would show it.\"] fn format_day (& self, day : Day) -> SharedString; # [doc = \" What the grid draws in the day's own cell, usually its number.\"] fn day_label (& self, day : Day) -> SharedString; # [doc = \" Reads a typed date. The error is the message shown to the typist, word\"] # [doc = \" for word; the components never write one of their own.\"] fn parse_day (& self, text : & str) -> Result<Day, SharedString>; # [doc = \" The month `delta` months away, or `None` when the host will not go\"] # [doc = \" there.\"] fn shift_month (& self, month : MonthKey, delta : i32) -> Option<MonthKey>; fn is_selectable (& self, day : Day) -> Selectability; # [doc = \" Every day from `start` to `end` inclusive, or `None` when the host\"] # [doc = \" cannot enumerate them.\"] # [doc = \"\"] # [doc = \" A range picker uses this to name the blocked days inside a range. With\"] # [doc = \" `None` it says it could not check, rather than claiming a range is\"] # [doc = \" clear because it never looked.\"] fn days_in (& self, start : Day, end : Day) -> Option<Vec<Day>>; fn clock (& self) -> Clock; # [doc = \" The time as the host would write it.\"] fn format_time (& self, time : TimeOfDay) -> SharedString; }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::adapter::Day",
      "name": "Day",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "One day, meaningful only to the adapter that produced it.",
      "documentation": "One day, meaningful only to the adapter that produced it.\n\nThe ordering is part of the contract: an adapter must number days so that\nan earlier day compares less than a later one, because a range picker has\nto be able to say that an end comes before its start.",
      "signature": "# [doc = \" One day, meaningful only to the adapter that produced it.\"] # [doc = \"\"] # [doc = \" The ordering is part of the contract: an adapter must number days so that\"] # [doc = \" an earlier day compares less than a later one, because a range picker has\"] # [doc = \" to be able to say that an end comes before its start.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct Day (pub i64);",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::adapter::MonthCell",
      "name": "MonthCell",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "One slot in a month grid.",
      "documentation": "One slot in a month grid.",
      "signature": "# [doc = \" One slot in a month grid.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum MonthCell { # [doc = \" Nothing at all sits here. A grid that pads its first week with blanks\"] # [doc = \" rather than with the previous month's days uses this.\"] Empty, # [doc = \" A day of the month the grid was asked for.\"] Day (Day), # [doc = \" A day of the month before or after, drawn so the grid is rectangular.\"] Adjacent (Day), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::adapter::MonthCell::day",
      "name": "day",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn day (self) -> Option<Day>",
      "cfg": [],
      "target": "MonthCell"
    },
    {
      "id": "gpui_kit::datetime::adapter::MonthCell::is_adjacent",
      "name": "is_adjacent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_adjacent (self) -> bool",
      "cfg": [],
      "target": "MonthCell"
    },
    {
      "id": "gpui_kit::datetime::adapter::MonthGrid",
      "name": "MonthGrid",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "A month laid out in weeks.",
      "documentation": "A month laid out in weeks.\n\nEvery week must hold as many cells as [`DateAdapter::weekday_labels`]\nreturns, in the same order, because the header and the body are drawn as\none table.",
      "signature": "# [doc = \" A month laid out in weeks.\"] # [doc = \"\"] # [doc = \" Every week must hold as many cells as [`DateAdapter::weekday_labels`]\"] # [doc = \" returns, in the same order, because the header and the body are drawn as\"] # [doc = \" one table.\"] # [derive (Debug, Clone, Default, PartialEq, Eq)] pub struct MonthGrid { pub weeks : Vec<Vec<MonthCell>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::adapter::MonthGrid::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "MonthGrid"
    },
    {
      "id": "gpui_kit::datetime::adapter::MonthGrid::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (weeks : impl IntoIterator<Item = Vec<MonthCell>>) -> Self",
      "cfg": [],
      "target": "MonthGrid"
    },
    {
      "id": "gpui_kit::datetime::adapter::MonthGrid::position_of",
      "name": "position_of",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "Where `day` sits, as a week and a position inside it.",
      "documentation": "Where `day` sits, as a week and a position inside it.",
      "signature": "pub fn position_of (& self, day : Day) -> Option<(usize, usize)>",
      "cfg": [],
      "target": "MonthGrid"
    },
    {
      "id": "gpui_kit::datetime::adapter::MonthKey",
      "name": "MonthKey",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "One month, meaningful only to the adapter that produced it.",
      "documentation": "One month, meaningful only to the adapter that produced it.\n\nThe components never take it apart and never do arithmetic on it. Moving to\nthe next month is [`DateAdapter::shift_month`], because how many months a\nyear has, and whether the answer is the same every year, is calendar work.",
      "signature": "# [doc = \" One month, meaningful only to the adapter that produced it.\"] # [doc = \"\"] # [doc = \" The components never take it apart and never do arithmetic on it. Moving to\"] # [doc = \" the next month is [`DateAdapter::shift_month`], because how many months a\"] # [doc = \" year has, and whether the answer is the same every year, is calendar work.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct MonthKey (pub i64);",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::adapter::Selectability",
      "name": "Selectability",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "Whether a day may be picked, and if not, why not.",
      "documentation": "Whether a day may be picked, and if not, why not.\n\nThe reason is the host's own wording and is shown verbatim. The components\nnever author one.",
      "signature": "# [doc = \" Whether a day may be picked, and if not, why not.\"] # [doc = \"\"] # [doc = \" The reason is the host's own wording and is shown verbatim. The components\"] # [doc = \" never author one.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum Selectability { Selectable, Blocked { reason : SharedString }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::adapter::Selectability::blocked",
      "name": "blocked",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn blocked (reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Selectability"
    },
    {
      "id": "gpui_kit::datetime::adapter::Selectability::is_selectable",
      "name": "is_selectable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_selectable (& self) -> bool",
      "cfg": [],
      "target": "Selectability"
    },
    {
      "id": "gpui_kit::datetime::adapter::Selectability::reason",
      "name": "reason",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn reason (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "Selectability"
    },
    {
      "id": "gpui_kit::datetime::adapter::SharedDateAdapter",
      "name": "SharedDateAdapter",
      "kind": "type",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "The adapter as the components hold it.",
      "documentation": "The adapter as the components hold it.",
      "signature": "# [doc = \" The adapter as the components hold it.\"] pub type SharedDateAdapter = Rc<dyn DateAdapter>;",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::adapter::TimeOfDay",
      "name": "TimeOfDay",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "A time of day, in the host's own clock.",
      "documentation": "A time of day, in the host's own clock.\n\n`meridiem` indexes [`Clock::meridiem`] rather than naming a half of the\nday, because the naming belongs to the adapter.",
      "signature": "# [doc = \" A time of day, in the host's own clock.\"] # [doc = \"\"] # [doc = \" `meridiem` indexes [`Clock::meridiem`] rather than naming a half of the\"] # [doc = \" day, because the naming belongs to the adapter.\"] # [derive (Debug, Clone, Copy, Default, PartialEq, Eq)] pub struct TimeOfDay { pub hour : u32, pub minute : u32, pub second : Option<u32>, pub meridiem : Option<usize>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::adapter::TimeOfDay::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (hour : u32, minute : u32) -> Self",
      "cfg": [],
      "target": "TimeOfDay"
    },
    {
      "id": "gpui_kit::datetime::adapter::TimeOfDay::with_meridiem",
      "name": "with_meridiem",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_meridiem (mut self, index : usize) -> Self",
      "cfg": [],
      "target": "TimeOfDay"
    },
    {
      "id": "gpui_kit::datetime::adapter::TimeOfDay::with_second",
      "name": "with_second",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_second (mut self, second : u32) -> Self",
      "cfg": [],
      "target": "TimeOfDay"
    },
    {
      "id": "gpui_kit::datetime::adapter::installed_adapter",
      "name": "installed_adapter",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "Reads a host-installed date adapter, if one is present.",
      "documentation": "Reads a host-installed date adapter, if one is present.",
      "signature": "pub fn installed_adapter (cx : & gpui::App) -> Option<SharedDateAdapter>",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::adapter::reset_date_adapter",
      "name": "reset_date_adapter",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "Removes the installed adapter so date fields become unrenderable again.",
      "documentation": "Removes the installed adapter so date fields become unrenderable again.",
      "signature": "pub fn reset_date_adapter (cx : & mut gpui::App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::adapter::set_date_adapter",
      "name": "set_date_adapter",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::adapter",
      "path": "gpui_kit::datetime::adapter",
      "source": "crates/gpui-kit/src/datetime/adapter.rs",
      "summary": "Installs the adapter date fields read. Replaces any previous one.",
      "documentation": "Installs the adapter date fields read. Replaces any previous one.",
      "signature": "pub fn set_date_adapter (adapter : impl DateAdapter + 'static, cx : & mut gpui::App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar",
      "name": "Calendar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "A month of days.",
      "documentation": "A month of days.",
      "signature": "# [doc = \" A month of days.\"] pub struct Calendar { ident : Ident, focus_handle : FocusHandle, adapter : SharedDateAdapter, selection : Vec<Day>, multi : bool, # [doc = \" The month the caller asked to open on, if any.\"] requested_month : Option<MonthKey>, # [doc = \" The month navigation has moved to. Until something navigates, the\"] # [doc = \" month is resolved from the selection, then from today, and if neither\"] # [doc = \" is known the calendar says so instead of picking one.\"] month : Option<MonthKey>, cursor : Option<Day>, hovered : Option<Day>, range : Option<DayRange>, overlay : Option<Overlay>, disabled : bool, size : ControlSize, # [doc = \" Which way the last navigation travelled, and how many have happened.\"] # [doc = \" The count keys the arrival animation; zero means the first frame, which\"] # [doc = \" arrives without motion so a capture of a settled calendar is settled.\"] travel : i32, navigations : usize, # [doc = \" Stable day identities for the month currently on screen. The adapter\"] # [doc = \" rebuilds `MonthGrid` values, but the same day must not rebuild its id\"] # [doc = \" on every frame.\"] day_idents : RefCell<HashMap<Day, Ident>>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::adapter",
      "name": "adapter",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn adapter (& self) -> & SharedDateAdapter",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::cursor",
      "name": "cursor",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cursor (& self) -> Option<Day>",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::hovered_day",
      "name": "hovered_day",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn hovered_day (& self) -> Option<Day>",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::month",
      "name": "month",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "The month to open on, for a calendar whose host knows where it wants to start but has nothing selected and no today.",
      "documentation": "The month to open on, for a calendar whose host knows where it wants\nto start but has nothing selected and no today.",
      "signature": "pub fn month (mut self, month : MonthKey) -> Self",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::multi",
      "name": "multi",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "Whether more than one day may be chosen. The calendar reports either way; this only decides what it draws and publishes.",
      "documentation": "Whether more than one day may be chosen. The calendar reports either\nway; this only decides what it draws and publishes.",
      "signature": "pub fn multi (mut self, multi : bool) -> Self",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, adapter : SharedDateAdapter, _window : & mut Window, cx : & mut Context<Self>,) -> Self",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::overlay",
      "name": "overlay",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "Marks days with a dot the host supplies.",
      "documentation": "Marks days with a dot the host supplies.",
      "signature": "pub fn overlay (mut self, overlay : impl Fn (Day) -> Option<DayMark> + 'static) -> Self",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::range",
      "name": "range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "Draws a range across the grid, with its endpoints picked out.",
      "documentation": "Draws a range across the grid, with its endpoints picked out.",
      "signature": "pub fn range (mut self, range : DayRange) -> Self",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::reset_navigation",
      "name": "reset_navigation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "Clears transient navigation after the caller replaces its calendar data. Focus and caller-owned selection are preserved.",
      "documentation": "Clears transient navigation after the caller replaces its calendar data.\nFocus and caller-owned selection are preserved.",
      "signature": "pub fn reset_navigation (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "Seeds the days the caller says are chosen.",
      "documentation": "Seeds the days the caller says are chosen.",
      "signature": "pub fn selected (mut self, days : impl IntoIterator<Item = Day>) -> Self",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::selection",
      "name": "selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selection (& self) -> & [Day]",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "Changes day targets without resetting the visible month or selection. Touch uses shared target metrics for cells and month navigation. Its minimum width is seven targets plus horizontal card padding; hosts must provide that width or an explicit horizontal scrolling container.",
      "documentation": "Changes day targets without resetting the visible month or selection.\nTouch uses shared target metrics for cells and month navigation.\nIts minimum width is seven targets plus horizontal card padding; hosts\nmust provide that width or an explicit horizontal scrolling container.",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::set_hovered_day",
      "name": "set_hovered_day",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "Pins what the pointer is over, so a range preview can be staged for review without a pointer in the window.",
      "documentation": "Pins what the pointer is over, so a range preview can be staged for\nreview without a pointer in the window.",
      "signature": "pub fn set_hovered_day (& mut self, day : Option<Day>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::set_multi",
      "name": "set_multi",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "Changes selection presentation without replacing focus or navigation.",
      "documentation": "Changes selection presentation without replacing focus or navigation.",
      "signature": "pub fn set_multi (& mut self, multi : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::set_overlay",
      "name": "set_overlay",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_overlay (& mut self, overlay : impl Fn (Day) -> Option<DayMark> + 'static, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::set_range",
      "name": "set_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "A `RangePicker` pushes its caller's range down on every frame, so this has to be quiet when nothing moved or the two of them redraw each other forever.",
      "documentation": "A `RangePicker` pushes its caller's range down on every frame, so this\nhas to be quiet when nothing moved or the two of them redraw each other\nforever.",
      "signature": "pub fn set_range (& mut self, range : Option<DayRange>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::set_selection",
      "name": "set_selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_selection (& mut self, days : Vec<Day>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::shift",
      "name": "shift",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "Moves the month through the adapter. Nothing here adds or subtracts.",
      "documentation": "Moves the month through the adapter. Nothing here adds or subtracts.",
      "signature": "pub fn shift (& mut self, delta : i32, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::show_month",
      "name": "show_month",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn show_month (& mut self, month : MonthKey, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::Calendar::shown_month",
      "name": "shown_month",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "The month on screen, or `None` when nothing has established one.",
      "documentation": "The month on screen, or `None` when nothing has established one.\n\nNavigation, then the caller's month, then the first selected day, then\ntoday. A calendar with none of those does not invent one.",
      "signature": "pub fn shown_month (& self) -> Option<MonthKey>",
      "cfg": [],
      "target": "Calendar"
    },
    {
      "id": "gpui_kit::datetime::calendar::CalendarEvent",
      "name": "CalendarEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "What a calendar reports. The owner decides what any of it means.",
      "documentation": "What a calendar reports. The owner decides what any of it means.",
      "signature": "# [doc = \" What a calendar reports. The owner decides what any of it means.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum CalendarEvent { # [doc = \" A day was asked for. The selection stays the caller's.\"] Picked (Day), # [doc = \" The month on screen changed, always through\"] # [doc = \" [`DateAdapter::shift_month`](crate::datetime::DateAdapter::shift_month).\"] MonthShown (MonthKey), # [doc = \" The pointer moved onto or off a day, which is what a range preview\"] # [doc = \" follows.\"] Hovered (Option<Day>), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::calendar::DayMark",
      "name": "DayMark",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "A mark the host puts on a day, such as \"three runs finished here\".",
      "documentation": "A mark the host puts on a day, such as \"three runs finished here\".\n\nThe calendar draws the dot and publishes the wording; what it means is the\nhost's business.",
      "signature": "# [doc = \" A mark the host puts on a day, such as \\\"three runs finished here\\\".\"] # [doc = \"\"] # [doc = \" The calendar draws the dot and publishes the wording; what it means is the\"] # [doc = \" host's business.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct DayMark { pub label : SharedString, pub tone : Tone, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::calendar::DayMark::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DayMark"
    },
    {
      "id": "gpui_kit::datetime::calendar::DayMark::tone",
      "name": "tone",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::calendar",
      "path": "gpui_kit::datetime::calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tone (mut self, tone : Tone) -> Self",
      "cfg": [],
      "target": "DayMark"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput",
      "name": "DateInput",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "A text field over a host-owned calendar, with that calendar in a popover.",
      "documentation": "A text field over a host-owned calendar, with that calendar in a popover.",
      "signature": "# [doc = \" A text field over a host-owned calendar, with that calendar in a popover.\"] pub struct DateInput { ident : Ident, name : SharedString, focus_handle : FocusHandle, adapter : SharedDateAdapter, field : Entity<TextInput>, calendar : Entity<Calendar>, value : Option<Day>, # [doc = \" The adapter's refusal to read the current text, held verbatim.\"] message : Option<SharedString>, open : bool, size : ControlSize, disabled : bool, required : bool, # [doc = \" Validation owned by a surrounding form, separate from adapter refusal.\"] invalid : bool, # [doc = \" Whether the seeded day has been put on screen. The text belongs to the\"] # [doc = \" typist afterwards, so it is written once.\"] seeded : bool, presentation : popover::PickerPresentation, sheet : Option<popover::PickerSheet>, # [doc = \" Held so the field and calendar subscriptions live as long as this does.\"] _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::calendar",
      "name": "calendar",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn calendar (& self) -> & Entity<Calendar>",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn close (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (& self) -> Option<Day>",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::field",
      "name": "field",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn field (& self) -> & Entity<TextInput>",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::is_invalid",
      "name": "is_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_invalid (& self) -> bool",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self) -> bool",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::message",
      "name": "message",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "The adapter's reason for refusing the current text, or `None`.",
      "documentation": "The adapter's reason for refusing the current text, or `None`.",
      "signature": "pub fn message (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "Names this date field for assistive technology independently of its value.",
      "documentation": "Names this date field for assistive technology independently of its value.",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, adapter : SharedDateAdapter, window : & mut Window, cx : & mut Context<Self>,) -> Self",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn open (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::parsed_day",
      "name": "parsed_day",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "The day the adapter last accepted from the typed text, if any.",
      "documentation": "The day the adapter last accepted from the typed text, if any.",
      "signature": "pub fn parsed_day (& self, cx : & App) -> Option<Day>",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::presentation",
      "name": "presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "Uses the existing calendar in an anchored menu or retained bottom modal.",
      "documentation": "Uses the existing calendar in an anchored menu or retained bottom modal.",
      "signature": "pub fn presentation (mut self, presentation : popover::PickerPresentation) -> Self",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::required",
      "name": "required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn required (mut self, required : bool) -> Self",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "Reconfigures density without replacing the live editor or popover.",
      "documentation": "Reconfigures density without replacing the live editor or popover.",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::set_invalid",
      "name": "set_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_invalid (& mut self, invalid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::set_name",
      "name": "set_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "Updates the accessible name without replacing text or validation.",
      "documentation": "Updates the accessible name without replacing text or validation.",
      "signature": "pub fn set_name (& mut self, name : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::set_presentation",
      "name": "set_presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "Adapts the calendar surface without replacing typed text or validation.",
      "documentation": "Adapts the calendar surface without replacing typed text or validation.",
      "signature": "pub fn set_presentation (& mut self, presentation : popover::PickerPresentation, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::set_required",
      "name": "set_required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "Reconfigures validation without replacing the live editor or popover.",
      "documentation": "Reconfigures validation without replacing the live editor or popover.",
      "signature": "pub fn set_required (& mut self, required : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::set_value",
      "name": "set_value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "Replaces the day from the host side.",
      "documentation": "Replaces the day from the host side.\n\nThe host already knows the day it just set, so this reports nothing.",
      "signature": "pub fn set_value (& mut self, day : Option<Day>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::shown_text",
      "name": "shown_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "The text as the typist left it, which is not the host's value while an edit is in progress.",
      "documentation": "The text as the typist left it, which is not the host's value while an\nedit is in progress.",
      "signature": "pub fn shown_text (& self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::toggle",
      "name": "toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn toggle (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInput::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "Seeds the day the caller holds.",
      "documentation": "Seeds the day the caller holds.",
      "signature": "pub fn value (mut self, day : Day) -> Self",
      "cfg": [],
      "target": "DateInput"
    },
    {
      "id": "gpui_kit::datetime::date_input::DateInputEvent",
      "name": "DateInputEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::date_input",
      "path": "gpui_kit::datetime::date_input",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "What a date field reports. The owner decides what any of it means.",
      "documentation": "What a date field reports. The owner decides what any of it means.",
      "signature": "# [doc = \" What a date field reports. The owner decides what any of it means.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum DateInputEvent { # [doc = \" A day the adapter read, by typing or from the calendar.\"] Changed (Day), # [doc = \" The adapter would not read what is in the field. Both the text as it\"] # [doc = \" was typed and the adapter's message travel with it.\"] Unparsable { text : SharedString, message : SharedString, }, Opened, Closed, Submit, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::fixture::FixtureDateAdapter",
      "name": "FixtureDateAdapter",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::fixture",
      "path": "gpui_kit::datetime::fixture",
      "source": "crates/gpui-kit/src/datetime/fixture.rs",
      "summary": "A fixture calendar: proleptic Gregorian, English labels, weeks starting on Monday, and whatever \"today\" the test pinned.",
      "documentation": "A fixture calendar: proleptic Gregorian, English labels, weeks starting on\nMonday, and whatever \"today\" the test pinned.",
      "signature": "# [doc = \" A fixture calendar: proleptic Gregorian, English labels, weeks starting on\"] # [doc = \" Monday, and whatever \\\"today\\\" the test pinned.\"] # [derive (Debug, Clone)] pub struct FixtureDateAdapter { today : Option<Day>, blocked : Vec<(Day, SharedString)>, twelve_hour : bool, # [doc = \" The furthest the calendar will travel from January 1970, so a test can\"] # [doc = \" prove that a host may refuse a month.\"] month_bounds : Option<(MonthKey, MonthKey)>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::fixture::FixtureDateAdapter::blocking",
      "name": "blocking",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::fixture",
      "path": "gpui_kit::datetime::fixture",
      "source": "crates/gpui-kit/src/datetime/fixture.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn blocking (mut self, year : i32, month : u32, day : u32, reason : & 'static str) -> Self",
      "cfg": [],
      "target": "FixtureDateAdapter"
    },
    {
      "id": "gpui_kit::datetime::fixture::FixtureDateAdapter::day",
      "name": "day",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::fixture",
      "path": "gpui_kit::datetime::fixture",
      "source": "crates/gpui-kit/src/datetime/fixture.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn day (& self, year : i32, month : u32, day : u32) -> Day",
      "cfg": [],
      "target": "FixtureDateAdapter"
    },
    {
      "id": "gpui_kit::datetime::fixture::FixtureDateAdapter::month",
      "name": "month",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::fixture",
      "path": "gpui_kit::datetime::fixture",
      "source": "crates/gpui-kit/src/datetime/fixture.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn month (& self, year : i32, month : u32) -> MonthKey",
      "cfg": [],
      "target": "FixtureDateAdapter"
    },
    {
      "id": "gpui_kit::datetime::fixture::FixtureDateAdapter::month_bounds",
      "name": "month_bounds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::fixture",
      "path": "gpui_kit::datetime::fixture",
      "source": "crates/gpui-kit/src/datetime/fixture.rs",
      "summary": "Refuses any month outside these bounds, inclusive.",
      "documentation": "Refuses any month outside these bounds, inclusive.",
      "signature": "pub fn month_bounds (mut self, first : MonthKey, last : MonthKey) -> Self",
      "cfg": [],
      "target": "FixtureDateAdapter"
    },
    {
      "id": "gpui_kit::datetime::fixture::FixtureDateAdapter::pinned",
      "name": "pinned",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::fixture",
      "path": "gpui_kit::datetime::fixture",
      "source": "crates/gpui-kit/src/datetime/fixture.rs",
      "summary": "A calendar whose today is pinned, so nothing on screen depends on the machine's clock.",
      "documentation": "A calendar whose today is pinned, so nothing on screen depends on the\nmachine's clock.",
      "signature": "pub fn pinned (year : i32, month : u32, day : u32) -> Self",
      "cfg": [],
      "target": "FixtureDateAdapter"
    },
    {
      "id": "gpui_kit::datetime::fixture::FixtureDateAdapter::twelve_hour",
      "name": "twelve_hour",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::fixture",
      "path": "gpui_kit::datetime::fixture",
      "source": "crates/gpui-kit/src/datetime/fixture.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn twelve_hour (mut self, twelve_hour : bool) -> Self",
      "cfg": [],
      "target": "FixtureDateAdapter"
    },
    {
      "id": "gpui_kit::datetime::fixture::FixtureDateAdapter::without_today",
      "name": "without_today",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::fixture",
      "path": "gpui_kit::datetime::fixture",
      "source": "crates/gpui-kit/src/datetime/fixture.rs",
      "summary": "A calendar whose host has not established what day it is.",
      "documentation": "A calendar whose host has not established what day it is.",
      "signature": "pub fn without_today () -> Self",
      "cfg": [],
      "target": "FixtureDateAdapter"
    },
    {
      "id": "gpui_kit::datetime::range::BlockedDay",
      "name": "BlockedDay",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "One day inside a range the adapter refuses, in the host's own words.",
      "documentation": "One day inside a range the adapter refuses, in the host's own words.",
      "signature": "# [doc = \" One day inside a range the adapter refuses, in the host's own words.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct BlockedDay { pub day : Day, pub reason : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::range::BlockedReport",
      "name": "BlockedReport",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "What the picker can say about the days between the two ends.",
      "documentation": "What the picker can say about the days between the two ends.",
      "signature": "# [doc = \" What the picker can say about the days between the two ends.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum BlockedReport { # [doc = \" There is no complete range to look at yet.\"] NotApplicable, # [doc = \" The host cannot enumerate the days in the range, so nothing was\"] # [doc = \" checked. This is not the same as finding nothing.\"] Unchecked, Clear, Blocked (Vec<BlockedDay>), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::range::DayRange",
      "name": "DayRange",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "A range as the caller holds it: a start, and an end once there is one.",
      "documentation": "A range as the caller holds it: a start, and an end once there is one.",
      "signature": "# [doc = \" A range as the caller holds it: a start, and an end once there is one.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct DayRange { pub start : Day, pub end : Option<Day>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::range::DayRange::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (start : Day, end : Day) -> Self",
      "cfg": [],
      "target": "DayRange"
    },
    {
      "id": "gpui_kit::datetime::range::DayRange::starting",
      "name": "starting",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn starting (start : Day) -> Self",
      "cfg": [],
      "target": "DayRange"
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker",
      "name": "RangePicker",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "A calendar with two ends and a running account of what they add up to.",
      "documentation": "A calendar with two ends and a running account of what they add up to.",
      "signature": "# [doc = \" A calendar with two ends and a running account of what they add up to.\"] pub struct RangePicker { ident : Ident, focus_handle : FocusHandle, adapter : SharedDateAdapter, calendar : Entity<Calendar>, range : Option<DayRange>, disabled : bool, # [doc = \" Validation owned by a surrounding form.\"] invalid : bool, # [doc = \" Held so the calendar subscription lives as long as the picker does.\"] _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker::blocked",
      "name": "blocked",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "The days the adapter refuses inside the range, or the reason the question could not be answered.",
      "documentation": "The days the adapter refuses inside the range, or the reason the\nquestion could not be answered.",
      "signature": "pub fn blocked (& self) -> BlockedReport",
      "cfg": [],
      "target": "RangePicker"
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker::calendar",
      "name": "calendar",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn calendar (& self) -> & Entity<Calendar>",
      "cfg": [],
      "target": "RangePicker"
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker::current_range",
      "name": "current_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current_range (& self) -> Option<DayRange>",
      "cfg": [],
      "target": "RangePicker"
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "RangePicker"
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "RangePicker"
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, adapter : SharedDateAdapter, window : & mut Window, cx : & mut Context<Self>,) -> Self",
      "cfg": [],
      "target": "RangePicker"
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker::range",
      "name": "range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "Seeds the range the caller holds.",
      "documentation": "Seeds the range the caller holds.",
      "signature": "pub fn range (mut self, range : DayRange) -> Self",
      "cfg": [],
      "target": "RangePicker"
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "Changes calendar target metrics while preserving caller-owned endpoints and the adapter's blocked-day validation.",
      "documentation": "Changes calendar target metrics while preserving caller-owned endpoints\nand the adapter's blocked-day validation.",
      "signature": "pub fn set_control_size (& mut self, size : gpui_kit_theme::ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RangePicker"
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RangePicker"
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker::set_invalid",
      "name": "set_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_invalid (& mut self, invalid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RangePicker"
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker::set_overlay",
      "name": "set_overlay",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "Marks days with a dot the host supplies, on the calendar underneath.",
      "documentation": "Marks days with a dot the host supplies, on the calendar underneath.",
      "signature": "pub fn set_overlay (& mut self, overlay : impl Fn (Day) -> Option<DayMark> + 'static, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "RangePicker"
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker::set_range",
      "name": "set_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_range (& mut self, range : Option<DayRange>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "RangePicker"
    },
    {
      "id": "gpui_kit::datetime::range::RangePicker::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (& self) -> RangeState",
      "cfg": [],
      "target": "RangePicker"
    },
    {
      "id": "gpui_kit::datetime::range::RangePickerEvent",
      "name": "RangePickerEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "What a range picker reports. The owner decides what any of it means.",
      "documentation": "What a range picker reports. The owner decides what any of it means.",
      "signature": "# [doc = \" What a range picker reports. The owner decides what any of it means.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum RangePickerEvent { # [doc = \" A day was asked for as the start of a new range.\"] StartPicked (Day), # [doc = \" A day was asked for as the end of the range in progress.\"] EndPicked (Day), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::range::RangeState",
      "name": "RangeState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "What the picker currently holds.",
      "documentation": "What the picker currently holds.\n\nIncomplete and inverted are facts, not failures. Naming them separately is\nwhat stops a half-finished range being drawn as a broken one, and an end\nbefore a start being drawn as a range nobody asked for.",
      "signature": "# [doc = \" What the picker currently holds.\"] # [doc = \"\"] # [doc = \" Incomplete and inverted are facts, not failures. Naming them separately is\"] # [doc = \" what stops a half-finished range being drawn as a broken one, and an end\"] # [doc = \" before a start being drawn as a range nobody asked for.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum RangeState { # [default] Unset, Incomplete { start : Day, }, Complete { start : Day, end : Day, }, # [doc = \" The end sits before the start, exactly as it was given.\"] Inverted { start : Day, end : Day, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::range::RangeState::from_range",
      "name": "from_range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_range (range : Option<DayRange>) -> Self",
      "cfg": [],
      "target": "RangeState"
    },
    {
      "id": "gpui_kit::datetime::range::RangeState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::range",
      "path": "gpui_kit::datetime::range",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "The word the picker publishes for this state.",
      "documentation": "The word the picker publishes for this state.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "RangeState"
    },
    {
      "id": "gpui_kit::datetime::reexport-1",
      "name": "adapter :: { Clock , DateAdapter , Day , MonthCell , MonthGrid , MonthKey , Selectability , SharedDateAdapter , TimeOfDay , installed_adapter , reset_date_adapter , set_date_adapter , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime",
      "path": "gpui_kit::datetime",
      "source": "crates/gpui-kit/src/datetime/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use adapter::{ Clock, DateAdapter, Day, MonthCell, MonthGrid, MonthKey, Selectability, SharedDateAdapter, TimeOfDay, installed_adapter, reset_date_adapter, set_date_adapter, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::reexport-2",
      "name": "calendar :: { Calendar , CalendarEvent , DayMark }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime",
      "path": "gpui_kit::datetime",
      "source": "crates/gpui-kit/src/datetime/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use calendar::{ Calendar, CalendarEvent, DayMark };",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::reexport-3",
      "name": "date_input :: { DateInput , DateInputEvent }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime",
      "path": "gpui_kit::datetime",
      "source": "crates/gpui-kit/src/datetime/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use date_input::{ DateInput, DateInputEvent };",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::reexport-4",
      "name": "range :: { BlockedDay , BlockedReport , DayRange , RangePicker , RangePickerEvent , RangeState }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime",
      "path": "gpui_kit::datetime",
      "source": "crates/gpui-kit/src/datetime/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use range::{ BlockedDay, BlockedReport, DayRange, RangePicker, RangePickerEvent, RangeState };",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::reexport-5",
      "name": "time_input :: { Segment as TimeSegment , TimeInput , TimeInputEvent }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime",
      "path": "gpui_kit::datetime",
      "source": "crates/gpui-kit/src/datetime/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use time_input::{ Segment as TimeSegment, TimeInput, TimeInputEvent };",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::time_input::Segment",
      "name": "Segment",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "Which part of the time the keyboard is on.",
      "documentation": "Which part of the time the keyboard is on.",
      "signature": "# [doc = \" Which part of the time the keyboard is on.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum Segment { Hour, Minute, Second, Meridiem, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput",
      "name": "TimeInput",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "A segmented time field over the host's own clock.",
      "documentation": "A segmented time field over the host's own clock.",
      "signature": "# [doc = \" A segmented time field over the host's own clock.\"] pub struct TimeInput { ident : Ident, focus_handle : FocusHandle, adapter : SharedDateAdapter, value : TimeOfDay, # [doc = \" Whether a seconds segment is drawn at all.\"] seconds : bool, active : Segment, # [doc = \" The digits typed into the active segment since it was entered. Typing\"] # [doc = \" overwrites rather than inserts, so this restarts whenever the segment\"] # [doc = \" changes.\"] typed : String, size : ControlSize, disabled : bool, # [doc = \" Validation owned by a surrounding form.\"] invalid : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput::active_segment",
      "name": "active_segment",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn active_segment (& self) -> Segment",
      "cfg": [],
      "target": "TimeInput"
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput::clock",
      "name": "clock",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clock (& self) -> Clock",
      "cfg": [],
      "target": "TimeInput"
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (& self) -> TimeOfDay",
      "cfg": [],
      "target": "TimeInput"
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "TimeInput"
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "TimeInput"
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, adapter : SharedDateAdapter, _window : & mut Window, cx : & mut Context<Self>,) -> Self",
      "cfg": [],
      "target": "TimeInput"
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput::seconds",
      "name": "seconds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "Whether the seconds segment is drawn.",
      "documentation": "Whether the seconds segment is drawn.",
      "signature": "pub fn seconds (mut self, seconds : bool) -> Self",
      "cfg": [],
      "target": "TimeInput"
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "Changes density without resetting the active segment or typed digits.",
      "documentation": "Changes density without resetting the active segment or typed digits.",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TimeInput"
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TimeInput"
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput::set_invalid",
      "name": "set_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_invalid (& mut self, invalid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TimeInput"
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput::set_seconds",
      "name": "set_seconds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "Changes segment visibility while retaining the value and focus.",
      "documentation": "Changes segment visibility while retaining the value and focus.",
      "signature": "pub fn set_seconds (& mut self, seconds : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TimeInput"
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput::set_value",
      "name": "set_value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_value (& mut self, value : TimeOfDay, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "TimeInput"
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInput::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "Seeds the time the caller holds.",
      "documentation": "Seeds the time the caller holds.",
      "signature": "pub fn value (mut self, value : TimeOfDay) -> Self",
      "cfg": [],
      "target": "TimeInput"
    },
    {
      "id": "gpui_kit::datetime::time_input::TimeInputEvent",
      "name": "TimeInputEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "datetime::time_input",
      "path": "gpui_kit::datetime::time_input",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "What a time field reports. The owner decides what any of it means.",
      "documentation": "What a time field reports. The owner decides what any of it means.",
      "signature": "# [doc = \" What a time field reports. The owner decides what any of it means.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum TimeInputEvent { Changed (TimeOfDay), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::animated_number::AnimatedNumber",
      "name": "AnimatedNumber",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::animated_number",
      "path": "gpui_kit::display::animated_number",
      "source": "crates/gpui-kit/src/display/animated_number.rs",
      "summary": "A numeric readout that animates between values.",
      "documentation": "A numeric readout that animates between values.",
      "signature": "# [doc = \" A numeric readout that animates between values.\"] # [derive (IntoElement)] pub struct AnimatedNumber { ident : Ident, value : f64, format : Option<Format>, spec : Option<MotionSpec>, scale : TypeScale, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::animated_number::AnimatedNumber::format",
      "name": "format",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::animated_number",
      "path": "gpui_kit::display::animated_number",
      "source": "crates/gpui-kit/src/display/animated_number.rs",
      "summary": "Decides the text for a value.",
      "documentation": "Decides the text for a value.\n\nThe component never invents a grouping separator or a precision:\nhow many decimals a quantity carries, and whether thousands are\ngrouped, belong to whoever owns the quantity.",
      "signature": "pub fn format (mut self, format : impl Fn (f64) -> String + 'static) -> Self",
      "cfg": [],
      "target": "AnimatedNumber"
    },
    {
      "id": "gpui_kit::display::animated_number::AnimatedNumber::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::animated_number",
      "path": "gpui_kit::display::animated_number",
      "source": "crates/gpui-kit/src/display/animated_number.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, value : f64) -> Self",
      "cfg": [],
      "target": "AnimatedNumber"
    },
    {
      "id": "gpui_kit::display::animated_number::AnimatedNumber::spec",
      "name": "spec",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::animated_number",
      "path": "gpui_kit::display::animated_number",
      "source": "crates/gpui-kit/src/display/animated_number.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn spec (mut self, spec : MotionSpec) -> Self",
      "cfg": [],
      "target": "AnimatedNumber"
    },
    {
      "id": "gpui_kit::display::animated_number::AnimatedNumber::type_scale",
      "name": "type_scale",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::animated_number",
      "path": "gpui_kit::display::animated_number",
      "source": "crates/gpui-kit/src/display/animated_number.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn type_scale (mut self, scale : TypeScale) -> Self",
      "cfg": [],
      "target": "AnimatedNumber"
    },
    {
      "id": "gpui_kit::display::animated_number::grouped",
      "name": "grouped",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::animated_number",
      "path": "gpui_kit::display::animated_number",
      "source": "crates/gpui-kit/src/display/animated_number.rs",
      "summary": "Groups whole thousands with a separator, the format a count usually wants.",
      "documentation": "Groups whole thousands with a separator, the format a count usually wants.",
      "signature": "pub fn grouped (value : f64) -> String",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::attachment::AttachmentState",
      "name": "AttachmentState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::attachment",
      "path": "gpui_kit::display::attachment",
      "source": "crates/gpui-kit/src/display/attachment.rs",
      "summary": "Facts reported by the caller. Finishing a transfer does not imply that processing finished; only `Ready` makes that claim. Unknown totals stay indeterminate, including a supplied zero total.",
      "documentation": "Facts reported by the caller. Finishing a transfer does not imply that\nprocessing finished; only `Ready` makes that claim. Unknown totals stay\nindeterminate, including a supplied zero total.",
      "signature": "# [doc = \" Facts reported by the caller. Finishing a transfer does not imply that\"] # [doc = \" processing finished; only `Ready` makes that claim. Unknown totals stay\"] # [doc = \" indeterminate, including a supplied zero total.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum AttachmentState { # [default] Ready, Queued, Transferring { completed : usize, total : Option<usize>, }, Paused { completed : usize, total : Option<usize>, }, Processing, Unavailable (SharedString), Failed (SharedString), Cancelled, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::attachment::AttachmentState::is_busy",
      "name": "is_busy",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::attachment",
      "path": "gpui_kit::display::attachment",
      "source": "crates/gpui-kit/src/display/attachment.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_busy (& self) -> bool",
      "cfg": [],
      "target": "AttachmentState"
    },
    {
      "id": "gpui_kit::display::attachment::AttachmentState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::attachment",
      "path": "gpui_kit::display::attachment",
      "source": "crates/gpui-kit/src/display/attachment.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "AttachmentState"
    },
    {
      "id": "gpui_kit::display::attachment::AttachmentTile",
      "name": "AttachmentTile",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::attachment",
      "path": "gpui_kit::display::attachment",
      "source": "crates/gpui-kit/src/display/attachment.rs",
      "summary": "A standalone attachment tile, separate from message-list attachment metadata. All four slots compose native elements: `media`, `title`, `description`, and `actions`. A supplied preview remains visible on failure because already-known media is not erased by a failed transfer or refresh.",
      "documentation": "A standalone attachment tile, separate from message-list attachment\nmetadata. All four slots compose native elements: `media`, `title`,\n`description`, and `actions`. A supplied preview remains visible on failure\nbecause already-known media is not erased by a failed transfer or refresh.",
      "signature": "# [doc = \" A standalone attachment tile, separate from message-list attachment\"] # [doc = \" metadata. All four slots compose native elements: `media`, `title`,\"] # [doc = \" `description`, and `actions`. A supplied preview remains visible on failure\"] # [doc = \" because already-known media is not erased by a failed transfer or refresh.\"] # [derive (Debug, IntoElement)] pub struct AttachmentTile { ident : Ident, title : SharedString, description : Option<SharedString>, state : AttachmentState, disabled : bool, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::attachment::AttachmentTile::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::attachment",
      "path": "gpui_kit::display::attachment",
      "source": "crates/gpui-kit/src/display/attachment.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AttachmentTile"
    },
    {
      "id": "gpui_kit::display::attachment::AttachmentTile::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::attachment",
      "path": "gpui_kit::display::attachment",
      "source": "crates/gpui-kit/src/display/attachment.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AttachmentTile"
    },
    {
      "id": "gpui_kit::display::attachment::AttachmentTile::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::attachment",
      "path": "gpui_kit::display::attachment",
      "source": "crates/gpui-kit/src/display/attachment.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : AttachmentState) -> Self",
      "cfg": [],
      "target": "AttachmentTile"
    },
    {
      "id": "gpui_kit::display::avatar::Avatar",
      "name": "Avatar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "A circular mark for a person or a workspace.",
      "documentation": "A circular mark for a person or a workspace.\n\nWith no image it falls back to initials, and with nothing to take initials\nfrom it stays an empty circle rather than inventing a letter.",
      "signature": "# [doc = \" A circular mark for a person or a workspace.\"] # [doc = \"\"] # [doc = \" With no image it falls back to initials, and with nothing to take initials\"] # [doc = \" from it stays an empty circle rather than inventing a letter.\"] # [derive (IntoElement)] pub struct Avatar { ident : Option<Ident>, name : SharedString, image : Option<gpui::ImageSource>, size : f32, tint : Option<Hsla>, presence : AvatarPresence, # [doc = \" The colour the mark is cut out of when it overlaps another one. Only a\"] # [doc = \" stack sets this; a mark standing on its own has nothing to cut.\"] stacked_on : Option<Hsla>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::avatar::Avatar::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "Gives the avatar a semantic identity, for a test that has to find it.",
      "documentation": "Gives the avatar a semantic identity, for a test that has to find it.",
      "signature": "pub fn id (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Avatar"
    },
    {
      "id": "gpui_kit::display::avatar::Avatar::image",
      "name": "image",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "A resource path or URI the asset source can resolve.",
      "documentation": "A resource path or URI the asset source can resolve.",
      "signature": "pub fn image (mut self, image : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Avatar"
    },
    {
      "id": "gpui_kit::display::avatar::Avatar::image_source",
      "name": "image_source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "A caller-resolved image, including a custom loader whose authorization remains with the host. The avatar does not turn it into a resource path.",
      "documentation": "A caller-resolved image, including a custom loader whose authorization\nremains with the host. The avatar does not turn it into a resource path.",
      "signature": "pub fn image_source (mut self, image : gpui::ImageSource) -> Self",
      "cfg": [],
      "target": "Avatar"
    },
    {
      "id": "gpui_kit::display::avatar::Avatar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Avatar"
    },
    {
      "id": "gpui_kit::display::avatar::Avatar::presence",
      "name": "presence",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "Whether the identity is reachable, when the host knows.",
      "documentation": "Whether the identity is reachable, when the host knows.",
      "signature": "pub fn presence (mut self, presence : AvatarPresence) -> Self",
      "cfg": [],
      "target": "Avatar"
    },
    {
      "id": "gpui_kit::display::avatar::Avatar::size",
      "name": "size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn size (mut self, size : f32) -> Self",
      "cfg": [],
      "target": "Avatar"
    },
    {
      "id": "gpui_kit::display::avatar::Avatar::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "The colour this identity is known by.",
      "documentation": "The colour this identity is known by.\n\nAn application that gives people or workspaces a colour needs the mark\nto wear it; without this the disc is the same neutral for everyone and\nthe colour has to be redrawn beside it. The treatment is the tone\nlanguage's — a carried wash behind the letters rather than a filled\ndisc — so a roster of tinted avatars stays as quiet as the rest of the\nsurface. A caller that has already spent a colour on this identity\npasses it here. A tint is never derived from the name: an application\nthat wants a stable colour per identity derives it and passes it,\nbecause this component cannot know which colours that application has\nalready spent.",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "Avatar"
    },
    {
      "id": "gpui_kit::display::avatar::AvatarGroup",
      "name": "AvatarGroup",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "Several identities in one place, overlapping, with the rest counted.",
      "documentation": "Several identities in one place, overlapping, with the rest counted.\n\nThe stack exists because a row of separate discs takes the width of the\nlist and a roster does not have it. What it must not do is let one mark\neat the edge or the presence dot of the one beside it, which is what the\ncut-out ring on every member is for.",
      "signature": "# [doc = \" Several identities in one place, overlapping, with the rest counted.\"] # [doc = \"\"] # [doc = \" The stack exists because a row of separate discs takes the width of the\"] # [doc = \" list and a roster does not have it. What it must not do is let one mark\"] # [doc = \" eat the edge or the presence dot of the one beside it, which is what the\"] # [doc = \" cut-out ring on every member is for.\"] # [derive (IntoElement)] pub struct AvatarGroup { ident : Option<Ident>, members : Vec<Avatar>, size : f32, # [doc = \" How many identities are in the group beyond the ones drawn. The host\"] # [doc = \" counts them; the component never infers a remainder it was not told.\"] overflow : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::avatar::AvatarGroup::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "AvatarGroup"
    },
    {
      "id": "gpui_kit::display::avatar::AvatarGroup::members",
      "name": "members",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn members (mut self, members : impl IntoIterator<Item = Avatar>) -> Self",
      "cfg": [],
      "target": "AvatarGroup"
    },
    {
      "id": "gpui_kit::display::avatar::AvatarGroup::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "AvatarGroup"
    },
    {
      "id": "gpui_kit::display::avatar::AvatarGroup::overflow",
      "name": "overflow",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "The host's own wording for what is not shown, such as \"+4\".",
      "documentation": "The host's own wording for what is not shown, such as \"+4\".",
      "signature": "pub fn overflow (mut self, overflow : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AvatarGroup"
    },
    {
      "id": "gpui_kit::display::avatar::AvatarGroup::size",
      "name": "size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "The diameter every member is drawn at. A stack of two sizes is two stacks.",
      "documentation": "The diameter every member is drawn at. A stack of two sizes is two\nstacks.",
      "signature": "pub fn size (mut self, size : f32) -> Self",
      "cfg": [],
      "target": "AvatarGroup"
    },
    {
      "id": "gpui_kit::display::avatar::AvatarPresence",
      "name": "AvatarPresence",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "Whether the identity behind the mark is reachable, in the host's terms.",
      "documentation": "Whether the identity behind the mark is reachable, in the host's terms.\n\nPresence is a fact the host holds, so the component neither derives it nor\ntimes it out. `Unknown` is the default and draws nothing: a mark with no\ndot says nothing about presence, which is different from saying offline.",
      "signature": "# [doc = \" Whether the identity behind the mark is reachable, in the host's terms.\"] # [doc = \"\"] # [doc = \" Presence is a fact the host holds, so the component neither derives it nor\"] # [doc = \" times it out. `Unknown` is the default and draws nothing: a mark with no\"] # [doc = \" dot says nothing about presence, which is different from saying offline.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum AvatarPresence { # [default] Unknown, Online, Away, Busy, Offline, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::avatar::AvatarPresence::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::avatar",
      "path": "gpui_kit::display::avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "AvatarPresence"
    },
    {
      "id": "gpui_kit::display::badge::Badge",
      "name": "Badge",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "A compact status label.",
      "documentation": "A compact status label.\n\nA badge only carries a semantic node when the caller gives it an id, so\ndecorative badges do not add noise to assertion snapshots.",
      "signature": "# [doc = \" A compact status label.\"] # [doc = \"\"] # [doc = \" A badge only carries a semantic node when the caller gives it an id, so\"] # [doc = \" decorative badges do not add noise to assertion snapshots.\"] # [derive (Debug, IntoElement)] pub struct Badge { ident : Option<Ident>, label : SharedString, tone : Tone, tint : Option<Hsla>, variant : Option<Variant>, color : Option<ColorChoice>, size : ControlSize, glyph : Option<Glyph>, dot : bool, count : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::badge::Badge::accent",
      "name": "accent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn accent (self) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "The colour the shared tiers resolve against, when the badge is on them. Without one, the tone's own colour (or the tint) is used.",
      "documentation": "The colour the shared tiers resolve against, when the badge is on\nthem. Without one, the tone's own colour (or the tint) is used.",
      "signature": "pub fn color (mut self, color : impl Into<ColorChoice>) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::count",
      "name": "count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "A quiet count rather than a status wash: Caption text with tabular digits and a hairline. The caller supplies the formatted value.",
      "documentation": "A quiet count rather than a status wash: Caption text with tabular\ndigits and a hairline. The caller supplies the formatted value.",
      "signature": "pub fn count (mut self) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::danger",
      "name": "danger",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn danger (self) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::dot",
      "name": "dot",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "A mark before the word, for a badge that reports a live state rather than a fixed label. Ignored when the badge already carries a glyph: two marks for one claim is one mark too many.",
      "documentation": "A mark before the word, for a badge that reports a live state rather\nthan a fixed label. Ignored when the badge already carries a glyph:\ntwo marks for one claim is one mark too many.",
      "signature": "pub fn dot (mut self, dot : bool) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "A glyph before the word, for a badge whose meaning has a picture.",
      "documentation": "A glyph before the word, for a badge whose meaning has a picture.",
      "signature": "pub fn icon (mut self, glyph : Glyph) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::info",
      "name": "info",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn info (self) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::neutral",
      "name": "neutral",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn neutral (self) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::success",
      "name": "success",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn success (self) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "Paints the badge in a caller-owned colour, leaving the severity it reports alone.",
      "documentation": "Paints the badge in a caller-owned colour, leaving the severity it\nreports alone.\n\nFor a badge that belongs to a colour-identified thing — a person, a\nbranch, a label. The tinted badge keeps the tone language's own\ntreatment, so a colour cannot turn one badge into a second badge\nshape, and [`Tone::name`] is still what the node publishes.",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::tone",
      "name": "tone",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tone (mut self, tone : Tone) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::variant",
      "name": "variant",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "Puts the badge on the shared presentation tiers.",
      "documentation": "Puts the badge on the shared presentation tiers.\n\nThe tone still answers *how it is going* and is still what the node\npublishes; the tier only decides how loudly the colour is worn. See\n[`Theme::variant_colors`].",
      "signature": "pub fn variant (mut self, variant : Variant) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Badge::warning",
      "name": "warning",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn warning (self) -> Self",
      "cfg": [],
      "target": "Badge"
    },
    {
      "id": "gpui_kit::display::badge::Tone",
      "name": "Tone",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "The severity a status surface claims.",
      "documentation": "The severity a status surface claims.\n\nA tone is a statement about the state, not a decoration: Success on an idle\nthing says the thing succeeded, which is a different and untrue sentence.\n\nThe mark surfaces built on a tone — [`Badge`], [`crate::prelude::StatusDot`]\nand [`crate::prelude::StatusLine`] — additionally take a caller-owned\n`tint`. A tint answers *whose* the mark is, the tone still answers *how it\nis going*, and the two are independent: tinting never edits the reported\nseverity, which is why those surfaces publish the tone by name once they\ncan be painted a colour that is not derived from it.",
      "signature": "# [doc = \" The severity a status surface claims.\"] # [doc = \"\"] # [doc = \" A tone is a statement about the state, not a decoration: Success on an idle\"] # [doc = \" thing says the thing succeeded, which is a different and untrue sentence.\"] # [doc = \"\"] # [doc = \" The mark surfaces built on a tone — [`Badge`], [`crate::prelude::StatusDot`]\"] # [doc = \" and [`crate::prelude::StatusLine`] — additionally take a caller-owned\"] # [doc = \" `tint`. A tint answers *whose* the mark is, the tone still answers *how it\"] # [doc = \" is going*, and the two are independent: tinting never edits the reported\"] # [doc = \" severity, which is why those surfaces publish the tone by name once they\"] # [doc = \" can be painted a colour that is not derived from it.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum Tone { # [default] Neutral, Accent, Success, Warning, Danger, Info, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::badge::Tone::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::badge",
      "path": "gpui_kit::display::badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "The name a semantic node publishes, so a test can assert the severity a surface reported rather than the color it painted.",
      "documentation": "The name a semantic node publishes, so a test can assert the severity\na surface reported rather than the color it painted.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "Tone"
    },
    {
      "id": "gpui_kit::display::bubble::Bubble",
      "name": "Bubble",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::bubble",
      "path": "gpui_kit::display::bubble",
      "source": "crates/gpui-kit/src/display/bubble.rs",
      "summary": "A token-backed message surface with caller-owned content.",
      "documentation": "A token-backed message surface with caller-owned content.",
      "signature": "# [doc = \" A token-backed message surface with caller-owned content.\"] # [derive (IntoElement)] pub struct Bubble { ident : Ident, label : SharedString, content : Option<AnyElement>, actions : Vec<AnyElement>, placement : BubblePlacement, grouped : bool, max_width : Option<f32>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::bubble::Bubble::actions",
      "name": "actions",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::bubble",
      "path": "gpui_kit::display::bubble",
      "source": "crates/gpui-kit/src/display/bubble.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn actions (mut self, actions : impl IntoIterator<Item = impl IntoElement>) -> Self",
      "cfg": [],
      "target": "Bubble"
    },
    {
      "id": "gpui_kit::display::bubble::Bubble::content",
      "name": "content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::bubble",
      "path": "gpui_kit::display::bubble",
      "source": "crates/gpui-kit/src/display/bubble.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn content (mut self, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "Bubble"
    },
    {
      "id": "gpui_kit::display::bubble::Bubble::grouped",
      "name": "grouped",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::bubble",
      "path": "gpui_kit::display::bubble",
      "source": "crates/gpui-kit/src/display/bubble.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn grouped (mut self, grouped : bool) -> Self",
      "cfg": [],
      "target": "Bubble"
    },
    {
      "id": "gpui_kit::display::bubble::Bubble::max_width",
      "name": "max_width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::bubble",
      "path": "gpui_kit::display::bubble",
      "source": "crates/gpui-kit/src/display/bubble.rs",
      "summary": "Overrides the maximum width when the caller has a measured layout constraint. The regular page width remains the token-backed default.",
      "documentation": "Overrides the maximum width when the caller has a measured layout\nconstraint. The regular page width remains the token-backed default.",
      "signature": "pub fn max_width (mut self, width : f32) -> Self",
      "cfg": [],
      "target": "Bubble"
    },
    {
      "id": "gpui_kit::display::bubble::Bubble::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::bubble",
      "path": "gpui_kit::display::bubble",
      "source": "crates/gpui-kit/src/display/bubble.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Bubble"
    },
    {
      "id": "gpui_kit::display::bubble::Bubble::placement",
      "name": "placement",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::bubble",
      "path": "gpui_kit::display::bubble",
      "source": "crates/gpui-kit/src/display/bubble.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placement (mut self, placement : BubblePlacement) -> Self",
      "cfg": [],
      "target": "Bubble"
    },
    {
      "id": "gpui_kit::display::bubble::BubblePlacement",
      "name": "BubblePlacement",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::bubble",
      "path": "gpui_kit::display::bubble",
      "source": "crates/gpui-kit/src/display/bubble.rs",
      "summary": "Which reading edge a bubble is placed against.",
      "documentation": "Which reading edge a bubble is placed against.",
      "signature": "# [doc = \" Which reading edge a bubble is placed against.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum BubblePlacement { # [default] Start, End, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::card::Card",
      "name": "Card",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "A raised panel that groups related rows or content.",
      "documentation": "A raised panel that groups related rows or content.",
      "signature": "# [doc = \" A raised panel that groups related rows or content.\"] # [derive (IntoElement)] pub struct Card { ident : Option<Ident>, name : Option<SharedString>, variant : CardVariant, ground : Surface, header : Option<CardHeader>, media : Option<SlotRender>, footer : Option<SlotRender>, children : Vec<AnyElement>, padding : Option<Space>, selected : bool, disabled : bool, on_click : Option<ClickHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::card::Card::footer",
      "name": "footer",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "A closing region, usually the actions that apply to the card.",
      "documentation": "A closing region, usually the actions that apply to the card.",
      "signature": "pub fn footer (mut self, footer : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "Card"
    },
    {
      "id": "gpui_kit::display::card::Card::ground",
      "name": "ground",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "The plane this card stands on, when it is not the page's canvas.",
      "documentation": "The plane this card stands on, when it is not the page's canvas.\n\nA card separates itself by the colour step above its ground, so the\nground decides the fill: on the canvas a card takes the panel step,\nand inside a region that is already the panel plane it takes the\nraised one. See [`StyledExt::card_surface_on`].",
      "signature": "pub fn ground (mut self, ground : Surface) -> Self",
      "cfg": [],
      "target": "Card"
    },
    {
      "id": "gpui_kit::display::card::Card::header",
      "name": "header",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn header (mut self, header : CardHeader) -> Self",
      "cfg": [],
      "target": "Card"
    },
    {
      "id": "gpui_kit::display::card::Card::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Card"
    },
    {
      "id": "gpui_kit::display::card::Card::media",
      "name": "media",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "An image, chart, or preview across the top, flush to the card's edges.",
      "documentation": "An image, chart, or preview across the top, flush to the card's edges.\n\nThe card clips it to its own radius and neither fetches nor decodes\nwhatever it is: the caller renders it.",
      "signature": "pub fn media (mut self, media : impl Fn (& mut Window, & mut App) -> AnyElement + 'static) -> Self",
      "cfg": [],
      "target": "Card"
    },
    {
      "id": "gpui_kit::display::card::Card::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "What a card that is one action is called.",
      "documentation": "What a card that is one action is called.\n\nA card holding a [`CardHeader`] is already named by its title, so this\nis for the card that is a picture, a chart or a set of rows and would\notherwise be an action with nothing to announce.",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Card"
    },
    {
      "id": "gpui_kit::display::card::Card::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "Card"
    },
    {
      "id": "gpui_kit::display::card::Card::on_click",
      "name": "on_click",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "Makes the whole card one action.",
      "documentation": "Makes the whole card one action.\n\nOnly a card that carries an identity can be one: an action nothing can\naddress is an action no test and no reader can reach, so the handler is\nignored without [`Card::id`].",
      "signature": "pub fn on_click (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Card"
    },
    {
      "id": "gpui_kit::display::card::Card::padded",
      "name": "padded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "Adds interior padding. Row-based cards leave this off so a row's own hover wash can reach the card edge.",
      "documentation": "Adds interior padding. Row-based cards leave this off so a row's own\nhover wash can reach the card edge.\n\nA header, a footer and a caller's media are laid out by the card\nrather than by its children, so they carry their own padding either\nway and this setting does not reach them.",
      "signature": "pub fn padded (self, padded : bool) -> Self",
      "cfg": [],
      "target": "Card"
    },
    {
      "id": "gpui_kit::display::card::Card::padding",
      "name": "padding",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "The interior padding, when the default step is the wrong one.",
      "documentation": "The interior padding, when the default step is the wrong one.",
      "signature": "pub fn padding (mut self, padding : impl Into<Option<Space>>) -> Self",
      "cfg": [],
      "target": "Card"
    },
    {
      "id": "gpui_kit::display::card::Card::variant",
      "name": "variant",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn variant (mut self, variant : CardVariant) -> Self",
      "cfg": [],
      "target": "Card"
    },
    {
      "id": "gpui_kit::display::card::CardHeader",
      "name": "CardHeader",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "The titled top of a card.",
      "documentation": "The titled top of a card.\n\nThe words are the caller's. A card is a container and has no opinion about\nwhat is being contained, so it never authors a heading of its own.",
      "signature": "# [doc = \" The titled top of a card.\"] # [doc = \"\"] # [doc = \" The words are the caller's. A card is a container and has no opinion about\"] # [doc = \" what is being contained, so it never authors a heading of its own.\"] pub struct CardHeader { title : SharedString, subtitle : Option<SharedString>, action : Option<SlotRender>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::card::CardHeader::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "A control in the heading, such as a menu or a refresh button.",
      "documentation": "A control in the heading, such as a menu or a refresh button.\n\nA card whose whole surface is one action does not render this: two\ntargets in one target is a click whose outcome depends on a pixel.",
      "signature": "pub fn action (mut self, action : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "CardHeader"
    },
    {
      "id": "gpui_kit::display::card::CardHeader::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CardHeader"
    },
    {
      "id": "gpui_kit::display::card::CardHeader::subtitle",
      "name": "subtitle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn subtitle (mut self, subtitle : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CardHeader"
    },
    {
      "id": "gpui_kit::display::card::ListRow",
      "name": "ListRow",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "One row inside a [`Card`].",
      "documentation": "One row inside a [`Card`].",
      "signature": "# [doc = \" One row inside a [`Card`].\"] # [derive (IntoElement)] pub struct ListRow { ident : Option<Ident>, selected : bool, disabled : bool, leading : Option<AnyElement>, trailing : Option<AnyElement>, children : Vec<AnyElement>, on_click : Option<ClickHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::card::ListRow::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "ListRow"
    },
    {
      "id": "gpui_kit::display::card::ListRow::leading",
      "name": "leading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "The slot at the reading start: an icon, an avatar, a status dot.",
      "documentation": "The slot at the reading start: an icon, an avatar, a status dot.\n\nIt is a slot rather than a first child so that rows with and without\none still line their text up, which a list of them needs and a bare\nchild order cannot promise.",
      "signature": "pub fn leading (mut self, leading : impl IntoElement) -> Self",
      "cfg": [],
      "target": "ListRow"
    },
    {
      "id": "gpui_kit::display::card::ListRow::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "ListRow"
    },
    {
      "id": "gpui_kit::display::card::ListRow::on_click",
      "name": "on_click",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "Makes the row one action, which it can only be once it has an identity.",
      "documentation": "Makes the row one action, which it can only be once it has an identity.",
      "signature": "pub fn on_click (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "ListRow"
    },
    {
      "id": "gpui_kit::display::card::ListRow::trailing",
      "name": "trailing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "The slot at the reading end: a badge, a value, a disclosure.",
      "documentation": "The slot at the reading end: a badge, a value, a disclosure.",
      "signature": "pub fn trailing (mut self, trailing : impl IntoElement) -> Self",
      "cfg": [],
      "target": "ListRow"
    },
    {
      "id": "gpui_kit::display::card::reexport-1",
      "name": "crate :: foundation :: CardVariant",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::card",
      "path": "gpui_kit::display::card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use crate::foundation::CardVariant;",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::AreaChart",
      "name": "AreaChart",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A filled area chart over one or more host-owned series.",
      "documentation": "A filled area chart over one or more host-owned series.\n\nGeometry is the same unit interval [`LineChart`] uses. The fill and the\noptional Catmull-Rom stroke are presentation; they invent no domain.",
      "signature": "# [doc = \" A filled area chart over one or more host-owned series.\"] # [doc = \"\"] # [doc = \" Geometry is the same unit interval [`LineChart`] uses. The fill and the\"] # [doc = \" optional Catmull-Rom stroke are presentation; they invent no domain.\"] # [derive (IntoElement)] pub struct AreaChart { ident : Ident, label : SharedString, axes : ChartAxes, state : ChartState, smooth : bool, crosshair : bool, current : Option<ChartSelection>, on_current : Option<CurrentHandler>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::AreaChart::axes",
      "name": "axes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn axes (mut self, axes : ChartAxes) -> Self",
      "cfg": [],
      "target": "AreaChart"
    },
    {
      "id": "gpui_kit::display::chart::AreaChart::crosshair",
      "name": "crosshair",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn crosshair (mut self) -> Self",
      "cfg": [],
      "target": "AreaChart"
    },
    {
      "id": "gpui_kit::display::chart::AreaChart::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (mut self, series_id : impl Into<SharedString>, point_id : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "AreaChart"
    },
    {
      "id": "gpui_kit::display::chart::AreaChart::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : ChartState) -> Self",
      "cfg": [],
      "target": "AreaChart"
    },
    {
      "id": "gpui_kit::display::chart::AreaChart::on_current",
      "name": "on_current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_current (mut self, handler : impl Fn (ChartSelection, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "AreaChart"
    },
    {
      "id": "gpui_kit::display::chart::AreaChart::polyline",
      "name": "polyline",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn polyline (mut self) -> Self",
      "cfg": [],
      "target": "AreaChart"
    },
    {
      "id": "gpui_kit::display::chart::BarChart",
      "name": "BarChart",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A bar chart over one host-owned series of categorized values.",
      "documentation": "A bar chart over one host-owned series of categorized values.",
      "signature": "# [doc = \" A bar chart over one host-owned series of categorized values.\"] # [derive (Debug, IntoElement)] pub struct BarChart { ident : Ident, label : SharedString, axes : ChartAxes, state : ChartState, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::BarChart::axes",
      "name": "axes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn axes (mut self, axes : ChartAxes) -> Self",
      "cfg": [],
      "target": "BarChart"
    },
    {
      "id": "gpui_kit::display::chart::BarChart::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : ChartState) -> Self",
      "cfg": [],
      "target": "BarChart"
    },
    {
      "id": "gpui_kit::display::chart::ChartAxes",
      "name": "ChartAxes",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Host-supplied wording for the two axes. Empty labels are omitted, not replaced with a guessed scale.",
      "documentation": "Host-supplied wording for the two axes. Empty labels are omitted, not\nreplaced with a guessed scale.",
      "signature": "# [doc = \" Host-supplied wording for the two axes. Empty labels are omitted, not\"] # [doc = \" replaced with a guessed scale.\"] # [derive (Debug, Clone, Default, PartialEq)] pub struct ChartAxes { pub x_label : Option<SharedString>, pub y_label : Option<SharedString>, pub x_start : Option<SharedString>, pub x_end : Option<SharedString>, pub y_start : Option<SharedString>, pub y_end : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::ChartAxes::x_ends",
      "name": "x_ends",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn x_ends (mut self, start : impl Into<SharedString>, end : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ChartAxes"
    },
    {
      "id": "gpui_kit::display::chart::ChartAxes::x_label",
      "name": "x_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn x_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ChartAxes"
    },
    {
      "id": "gpui_kit::display::chart::ChartAxes::y_ends",
      "name": "y_ends",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn y_ends (mut self, start : impl Into<SharedString>, end : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ChartAxes"
    },
    {
      "id": "gpui_kit::display::chart::ChartAxes::y_label",
      "name": "y_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn y_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ChartAxes"
    },
    {
      "id": "gpui_kit::display::chart::ChartLegend",
      "name": "ChartLegend",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A standalone legend that reports series hide and show.",
      "documentation": "A standalone legend that reports series hide and show.",
      "signature": "# [doc = \" A standalone legend that reports series hide and show.\"] # [derive (IntoElement)] pub struct ChartLegend { ident : Ident, series : Vec<ChartSeries>, hidden : Vec<SharedString>, on_toggle : Option<LegendToggle>, on_emphasis : Option<LegendEmphasis>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::ChartLegend::hidden",
      "name": "hidden",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn hidden (mut self, ids : impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
      "cfg": [],
      "target": "ChartLegend"
    },
    {
      "id": "gpui_kit::display::chart::ChartLegend::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, series : impl IntoIterator<Item = ChartSeries>) -> Self",
      "cfg": [],
      "target": "ChartLegend"
    },
    {
      "id": "gpui_kit::display::chart::ChartLegend::on_emphasis",
      "name": "on_emphasis",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Report pointer entry/exit by source series identity. The caller decides whether to emphasize a series; this does not toggle visibility.",
      "documentation": "Report pointer entry/exit by source series identity. The caller decides\nwhether to emphasize a series; this does not toggle visibility.",
      "signature": "pub fn on_emphasis (mut self, handler : impl Fn (Option<SharedString>, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "ChartLegend"
    },
    {
      "id": "gpui_kit::display::chart::ChartLegend::on_toggle",
      "name": "on_toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_toggle (mut self, handler : impl Fn (SharedString, bool, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "ChartLegend"
    },
    {
      "id": "gpui_kit::display::chart::ChartPoint",
      "name": "ChartPoint",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "One host-owned point in a chart series.",
      "documentation": "One host-owned point in a chart series.\n\n`id` is business identity and remains stable when the point moves or its\ntext changes. `label` and `value` are exact host-formatted strings: the\ncrosshair swaps them atomically and never interpolates between strings.",
      "signature": "# [doc = \" One host-owned point in a chart series.\"] # [doc = \"\"] # [doc = \" `id` is business identity and remains stable when the point moves or its\"] # [doc = \" text changes. `label` and `value` are exact host-formatted strings: the\"] # [doc = \" crosshair swaps them atomically and never interpolates between strings.\"] # [derive (Debug, Clone, PartialEq)] pub struct ChartPoint { pub id : SharedString, pub position : SparklinePoint, pub label : SharedString, pub value : SharedString, pub weight : Option<f32>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::ChartPoint::is_bounded",
      "name": "is_bounded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_bounded (& self) -> bool",
      "cfg": [],
      "target": "ChartPoint"
    },
    {
      "id": "gpui_kit::display::chart::ChartPoint::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, x : f32, y : f32, label : impl Into<SharedString>, value : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "ChartPoint"
    },
    {
      "id": "gpui_kit::display::chart::ChartPoint::weight",
      "name": "weight",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Normalized bubble radius for a scatter reading. The host already decided the mapping; this is only how large the mark is drawn.",
      "documentation": "Normalized bubble radius for a scatter reading. The host already\ndecided the mapping; this is only how large the mark is drawn.",
      "signature": "pub fn weight (mut self, weight : f32) -> Self",
      "cfg": [],
      "target": "ChartPoint"
    },
    {
      "id": "gpui_kit::display::chart::ChartSelection",
      "name": "ChartSelection",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "The business identity of the point under the crosshair.",
      "documentation": "The business identity of the point under the crosshair.",
      "signature": "# [doc = \" The business identity of the point under the crosshair.\"] # [derive (Debug, Clone, PartialEq, Eq, Hash)] pub struct ChartSelection { pub series_id : SharedString, pub point_id : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::ChartSelection::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (series_id : impl Into<SharedString>, point_id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ChartSelection"
    },
    {
      "id": "gpui_kit::display::chart::ChartSeries",
      "name": "ChartSeries",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "One named series. Identity is the caller's, never the draw order.",
      "documentation": "One named series. Identity is the caller's, never the draw order.",
      "signature": "# [doc = \" One named series. Identity is the caller's, never the draw order.\"] # [derive (Debug, Clone, PartialEq)] pub struct ChartSeries { pub id : SharedString, pub label : SharedString, pub points : Vec<ChartPoint>, pub color : Option<Hsla>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::ChartSeries::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ChartSeries"
    },
    {
      "id": "gpui_kit::display::chart::ChartSeries::points",
      "name": "points",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn points (mut self, points : impl IntoIterator<Item = ChartPoint>) -> Self",
      "cfg": [],
      "target": "ChartSeries"
    },
    {
      "id": "gpui_kit::display::chart::ChartSeries::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A caller-owned colour. Without one the series takes the theme accent.",
      "documentation": "A caller-owned colour. Without one the series takes the theme accent.",
      "signature": "pub fn tint (mut self, color : Hsla) -> Self",
      "cfg": [],
      "target": "ChartSeries"
    },
    {
      "id": "gpui_kit::display::chart::ChartState",
      "name": "ChartState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "The complete state of one cartesian reading.",
      "documentation": "The complete state of one cartesian reading.",
      "signature": "# [doc = \" The complete state of one cartesian reading.\"] # [derive (Debug, Clone, PartialEq)] pub enum ChartState { Loading, Ready (Vec<ChartSeries>), Empty, Unavailable (SharedString), Error (SharedString), # [doc = \" A refresh failed, so the last verified series remain visible with the\"] # [doc = \" host's exact explanation instead of being replaced by an empty chart.\"] Stale { series : Vec<ChartSeries>, reason : SharedString, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::ChartState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "ChartState"
    },
    {
      "id": "gpui_kit::display::chart::GaugeChart",
      "name": "GaugeChart",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A single already-normalized reading on a semicircle.",
      "documentation": "A single already-normalized reading on a semicircle.\n\n`value` is a host-formatted string. `amount` is the needle, already in\n`0..=1`. An unknown amount draws the scale and no needle.",
      "signature": "# [doc = \" A single already-normalized reading on a semicircle.\"] # [doc = \"\"] # [doc = \" `value` is a host-formatted string. `amount` is the needle, already in\"] # [doc = \" `0..=1`. An unknown amount draws the scale and no needle.\"] # [derive (IntoElement)] pub struct GaugeChart { ident : Ident, label : SharedString, state : ChartState, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::GaugeChart::from_raw",
      "name": "from_raw",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A raw reading with an explicit domain. Outside-domain and nonfinite values are errors rather than clamped needles. None draws no needle.",
      "documentation": "A raw reading with an explicit domain. Outside-domain and nonfinite\nvalues are errors rather than clamped needles. None draws no needle.",
      "signature": "pub fn from_raw (ident : impl Into<Ident>, label : impl Into<SharedString>, reading : data::RawPoint, domain : scale::NumericScale,) -> Result<Self, data::DataError>",
      "cfg": [],
      "target": "GaugeChart"
    },
    {
      "id": "gpui_kit::display::chart::GaugeChart::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : ChartState) -> Self",
      "cfg": [],
      "target": "GaugeChart"
    },
    {
      "id": "gpui_kit::display::chart::LineChart",
      "name": "LineChart",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A line chart over one or more host-owned series.",
      "documentation": "A line chart over one or more host-owned series.",
      "signature": "# [doc = \" A line chart over one or more host-owned series.\"] # [derive (IntoElement)] pub struct LineChart { ident : Ident, label : SharedString, axes : ChartAxes, state : ChartState, area : bool, smooth : bool, crosshair : bool, current : Option<ChartSelection>, on_current : Option<CurrentHandler>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::LineChart::area",
      "name": "area",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Fills every series down to the normalized baseline with a three-stop gradient derived from that series' caller-owned colour.",
      "documentation": "Fills every series down to the normalized baseline with a three-stop\ngradient derived from that series' caller-owned colour.",
      "signature": "pub fn area (mut self) -> Self",
      "cfg": [],
      "target": "LineChart"
    },
    {
      "id": "gpui_kit::display::chart::LineChart::axes",
      "name": "axes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn axes (mut self, axes : ChartAxes) -> Self",
      "cfg": [],
      "target": "LineChart"
    },
    {
      "id": "gpui_kit::display::chart::LineChart::crosshair",
      "name": "crosshair",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Enables pointer and keyboard crosshair navigation.",
      "documentation": "Enables pointer and keyboard crosshair navigation.",
      "signature": "pub fn crosshair (mut self) -> Self",
      "cfg": [],
      "target": "LineChart"
    },
    {
      "id": "gpui_kit::display::chart::LineChart::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Seeds or controls the current crosshair by business identity.",
      "documentation": "Seeds or controls the current crosshair by business identity.",
      "signature": "pub fn current (mut self, series_id : impl Into<SharedString>, point_id : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "LineChart"
    },
    {
      "id": "gpui_kit::display::chart::LineChart::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : ChartState) -> Self",
      "cfg": [],
      "target": "LineChart"
    },
    {
      "id": "gpui_kit::display::chart::LineChart::on_current",
      "name": "on_current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Reports the nearest point immediately when pointer or keyboard input changes the crosshair. The component keeps only this transient visual current; the host decides whether the reported point changes anything.",
      "documentation": "Reports the nearest point immediately when pointer or keyboard input\nchanges the crosshair. The component keeps only this transient visual\ncurrent; the host decides whether the reported point changes anything.",
      "signature": "pub fn on_current (mut self, handler : impl Fn (ChartSelection, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "LineChart"
    },
    {
      "id": "gpui_kit::display::chart::LineChart::smooth",
      "name": "smooth",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Interpolates each series with a Catmull-Rom spline instead of polyline segments.",
      "documentation": "Interpolates each series with a Catmull-Rom spline instead of\npolyline segments.",
      "signature": "pub fn smooth (mut self) -> Self",
      "cfg": [],
      "target": "LineChart"
    },
    {
      "id": "gpui_kit::display::chart::PieChart",
      "name": "PieChart",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A pie or donut over one host-owned series of shares.",
      "documentation": "A pie or donut over one host-owned series of shares.\n\nEach point's `y` is the share of the circle the host already computed.\nShares are not renormalised here.",
      "signature": "# [doc = \" A pie or donut over one host-owned series of shares.\"] # [doc = \"\"] # [doc = \" Each point's `y` is the share of the circle the host already computed.\"] # [doc = \" Shares are not renormalised here.\"] # [derive (Debug, IntoElement)] pub struct PieChart { ident : Ident, label : SharedString, state : ChartState, donut : bool, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::PieChart::donut",
      "name": "donut",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn donut (mut self) -> Self",
      "cfg": [],
      "target": "PieChart"
    },
    {
      "id": "gpui_kit::display::chart::PieChart::from_raw",
      "name": "from_raw",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Normalize finite nonnegative raw shares. Missing/negative readings are rejected; an all-zero series remains a valid zero-share observation.",
      "documentation": "Normalize finite nonnegative raw shares. Missing/negative readings are\nrejected; an all-zero series remains a valid zero-share observation.",
      "signature": "pub fn from_raw (ident : impl Into<Ident>, label : impl Into<SharedString>, series : data::RawSeries,) -> Result<Self, data::DataError>",
      "cfg": [],
      "target": "PieChart"
    },
    {
      "id": "gpui_kit::display::chart::PieChart::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : ChartState) -> Self",
      "cfg": [],
      "target": "PieChart"
    },
    {
      "id": "gpui_kit::display::chart::RadarChart",
      "name": "RadarChart",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A polar reading over host-owned axes.",
      "documentation": "A polar reading over host-owned axes.\n\nEach point is an axis: `id` is the axis, `y` is the already-normalized\nradius, and `label` is the host's wording. Angular order is the host's\npoint order. `x` is ignored.",
      "signature": "# [doc = \" A polar reading over host-owned axes.\"] # [doc = \"\"] # [doc = \" Each point is an axis: `id` is the axis, `y` is the already-normalized\"] # [doc = \" radius, and `label` is the host's wording. Angular order is the host's\"] # [doc = \" point order. `x` is ignored.\"] # [derive (IntoElement)] pub struct RadarChart { ident : Ident, label : SharedString, state : ChartState, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::RadarChart::from_raw",
      "name": "from_raw",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Raw axis values, ordered by the supplied axes rather than sample order. Every series must contain exactly one in-domain reading per axis ID.",
      "documentation": "Raw axis values, ordered by the supplied axes rather than sample order.\nEvery series must contain exactly one in-domain reading per axis ID.",
      "signature": "pub fn from_raw (ident : impl Into<Ident>, label : impl Into<SharedString>, series : impl IntoIterator<Item = data::RawSeries>, axes : & [data::ValueAxis],) -> Result<Self, data::DataError>",
      "cfg": [],
      "target": "RadarChart"
    },
    {
      "id": "gpui_kit::display::chart::RadarChart::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : ChartState) -> Self",
      "cfg": [],
      "target": "RadarChart"
    },
    {
      "id": "gpui_kit::display::chart::ScatterChart",
      "name": "ScatterChart",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Scatter or bubble marks over one or more host-owned series.",
      "documentation": "Scatter or bubble marks over one or more host-owned series.\n\nEach point's optional [`ChartPoint::weight`] is a normalized radius. The\nhost already mapped the quantity; this only sizes the mark.",
      "signature": "# [doc = \" Scatter or bubble marks over one or more host-owned series.\"] # [doc = \"\"] # [doc = \" Each point's optional [`ChartPoint::weight`] is a normalized radius. The\"] # [doc = \" host already mapped the quantity; this only sizes the mark.\"] # [derive (IntoElement)] pub struct ScatterChart { ident : Ident, label : SharedString, axes : ChartAxes, state : ChartState, crosshair : bool, current : Option<ChartSelection>, on_current : Option<CurrentHandler>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::ScatterChart::axes",
      "name": "axes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn axes (mut self, axes : ChartAxes) -> Self",
      "cfg": [],
      "target": "ScatterChart"
    },
    {
      "id": "gpui_kit::display::chart::ScatterChart::crosshair",
      "name": "crosshair",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn crosshair (mut self) -> Self",
      "cfg": [],
      "target": "ScatterChart"
    },
    {
      "id": "gpui_kit::display::chart::ScatterChart::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (mut self, series_id : impl Into<SharedString>, point_id : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "ScatterChart"
    },
    {
      "id": "gpui_kit::display::chart::ScatterChart::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : ChartState) -> Self",
      "cfg": [],
      "target": "ScatterChart"
    },
    {
      "id": "gpui_kit::display::chart::ScatterChart::on_current",
      "name": "on_current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_current (mut self, handler : impl Fn (ChartSelection, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "ScatterChart"
    },
    {
      "id": "gpui_kit::display::chart::StackedBarChart",
      "name": "StackedBarChart",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Bars stacked from the same category identity across series.",
      "documentation": "Bars stacked from the same category identity across series.",
      "signature": "# [doc = \" Bars stacked from the same category identity across series.\"] # [derive (Debug, IntoElement)] pub struct StackedBarChart { ident : Ident, label : SharedString, axes : ChartAxes, state : ChartState, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::StackedBarChart::axes",
      "name": "axes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn axes (mut self, axes : ChartAxes) -> Self",
      "cfg": [],
      "target": "StackedBarChart"
    },
    {
      "id": "gpui_kit::display::chart::StackedBarChart::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart",
      "path": "gpui_kit::display::chart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : ChartState) -> Self",
      "cfg": [],
      "target": "StackedBarChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::AxisSide",
      "name": "AxisSide",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Leading means left for a vertical lane, top for a horizontal lane. Trailing means right or bottom respectively.",
      "documentation": "Leading means left for a vertical lane, top for a horizontal lane.\nTrailing means right or bottom respectively.",
      "signature": "# [doc = \" Leading means left for a vertical lane, top for a horizontal lane.\"] # [doc = \" Trailing means right or bottom respectively.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum AxisSide { Leading, Trailing, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart",
      "name": "CartesianChart",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Shared-coordinate line/area/bar/scatter layers over raw f64 observations. Missing samples break paths. All-zero data is ready, not empty. An invalid dataset is an explicit error. Stale data remains visible with its reason.",
      "documentation": "Shared-coordinate line/area/bar/scatter layers over raw f64 observations.\nMissing samples break paths. All-zero data is ready, not empty. An invalid\ndataset is an explicit error. Stale data remains visible with its reason.",
      "signature": "# [doc = \" Shared-coordinate line/area/bar/scatter layers over raw f64 observations.\"] # [doc = \" Missing samples break paths. All-zero data is ready, not empty. An invalid\"] # [doc = \" dataset is an explicit error. Stale data remains visible with its reason.\"] # [derive (IntoElement)] pub struct CartesianChart { ident : Ident, label : SharedString, x : ChartScale, axes : Vec<ValueAxis>, series : Rc<Vec<RawSeries>>, hidden : Vec<SharedString>, hovered : Option<ChartSelection>, selected : Option<ChartSelection>, emphasized : Option<SharedString>, tooltip : TooltipMode, tooltip_content : Option<TooltipBuilder>, floating_tooltip : bool, range : Option<CartesianRange>, references : Vec<ChartReference>, stale : Option<SharedString>, status : ChartStatus, height : f32, animate : bool, motion : Option<CartesianMotion>, sampling : PathSampling, format : Formatter, x_ticks : Option<Vec<(f64, SharedString)>>, axis_ticks : std::collections::HashMap<SharedString, Vec<(f64, SharedString)>>, orientation : ChartOrientation, x_side : Option<AxisSide>, axis_sides : std::collections::HashMap<SharedString, AxisSide>, custom_marks : Option<MarkBuilder>, on_event : Option<EventHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::animate",
      "name": "animate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Animate updates by series/point identity. Values and readouts always reflect current raw input; only geometry moves. Reduced motion settles immediately. Axis/topology changes snap to preserve direct manipulation.",
      "documentation": "Animate updates by series/point identity. Values and readouts always\nreflect current raw input; only geometry moves. Reduced motion settles\nimmediately. Axis/topology changes snap to preserve direct manipulation.",
      "signature": "pub fn animate (mut self, enabled : bool) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::axis_side",
      "name": "axis_side",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Place a value axis on either plot edge. Default is left for vertical charts, bottom for horizontal charts. Multiple lanes reserve real space.",
      "documentation": "Place a value axis on either plot edge. Default is left for vertical\ncharts, bottom for horizontal charts. Multiple lanes reserve real space.",
      "signature": "pub fn axis_side (mut self, axis : impl Into<SharedString>, side : AxisSide,) -> Result<Self, DataError>",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::axis_ticks",
      "name": "axis_ticks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Replace ticks/grid positions for one named value axis, without changing its domain. Unknown axes and invalid/duplicate/out-of-domain values fail.",
      "documentation": "Replace ticks/grid positions for one named value axis, without changing\nits domain. Unknown axes and invalid/duplicate/out-of-domain values fail.",
      "signature": "pub fn axis_ticks (mut self, axis : impl Into<SharedString>, ticks : impl IntoIterator<Item = ChartTick>,) -> Result<Self, TickError>",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::custom_marks",
      "name": "custom_marks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Extend scatter rendering without creating another coordinate system. Return None for the standard glyph. Missing points never invoke this builder. Compose a scatter series over other marks for custom annotations.",
      "documentation": "Extend scatter rendering without creating another coordinate system.\nReturn None for the standard glyph. Missing points never invoke this\nbuilder. Compose a scatter series over other marks for custom annotations.",
      "signature": "pub fn custom_marks (mut self, build : impl Fn (& RawSeries, & RawPoint) -> Option<CustomMark> + 'static,) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::emphasized",
      "name": "emphasized",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Dim other series visually without removing hit or semantic targets. Unknown/hidden identities produce no emphasis. Legend hover only proposes.",
      "documentation": "Dim other series visually without removing hit or semantic targets.\nUnknown/hidden identities produce no emphasis. Legend hover only proposes.",
      "signature": "pub fn emphasized (mut self, series : Option<impl Into<SharedString>>) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::floating_tooltip",
      "name": "floating_tooltip",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Hide only the floating surface; the persistent accessible readout stays.",
      "documentation": "Hide only the floating surface; the persistent accessible readout stays.",
      "signature": "pub fn floating_tooltip (mut self, visible : bool) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::format_ticks",
      "name": "format_ticks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Format numeric ticks by axis ID; the x axis is identified by \"x\".",
      "documentation": "Format numeric ticks by axis ID; the x axis is identified by \"x\".",
      "signature": "pub fn format_ticks (mut self, format : impl Fn (& str, f64) -> SharedString + 'static) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::height",
      "name": "height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn height (mut self, height : f32) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::hidden",
      "name": "hidden",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn hidden (mut self, ids : impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::hovered",
      "name": "hovered",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn hovered (mut self, point : Option<ChartSelection>) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::motion",
      "name": "motion",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Configure keyed arrival, geometry/color updates and paint-only departure. This does not override `.animate(false)` or reduced-motion policy.",
      "documentation": "Configure keyed arrival, geometry/color updates and paint-only departure.\nThis does not override `.animate(false)` or reduced-motion policy.",
      "signature": "pub fn motion (mut self, motion : CartesianMotion) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, x : ChartScale, axes : impl IntoIterator<Item = ValueAxis>,) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (CartesianEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::orientation",
      "name": "orientation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Orient every layer, axis, semantic bound and gesture together.",
      "documentation": "Orient every layer, axis, semantic bound and gesture together.",
      "signature": "pub fn orientation (mut self, orientation : ChartOrientation) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::range",
      "name": "range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Add a controlled persistent numeric selection and overview strip.",
      "documentation": "Add a controlled persistent numeric selection and overview strip.",
      "signature": "pub fn range (mut self, range : CartesianRange) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::references",
      "name": "references",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn references (mut self, references : impl IntoIterator<Item = ChartReference>) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::sampling",
      "name": "sampling",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Opt into pixel-column path reduction; the default preserves every segment. Point glyphs, hit bounds and exact raw values remain intact.",
      "documentation": "Opt into pixel-column path reduction; the default preserves every\nsegment. Point glyphs, hit bounds and exact raw values remain intact.",
      "signature": "pub fn sampling (mut self, sampling : PathSampling) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, point : Option<ChartSelection>) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::series",
      "name": "series",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn series (mut self, series : impl IntoIterator<Item = RawSeries>) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::shared_series",
      "name": "shared_series",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Reuse immutable caller data across redraws without cloning every point. Replace the Rc (or use Rc::make_mut) on a data update. Projection is reused only while data, domains, axes and hidden series are unchanged.",
      "documentation": "Reuse immutable caller data across redraws without cloning every point.\nReplace the Rc (or use Rc::make_mut) on a data update. Projection is\nreused only while data, domains, axes and hidden series are unchanged.",
      "signature": "pub fn shared_series (mut self, series : Rc<Vec<RawSeries>>) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::stale",
      "name": "stale",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn stale (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Use the shared Phase/AsyncValue state contract. Non-ready states install no data handlers; stale errors retain the last supplied series.",
      "documentation": "Use the shared Phase/AsyncValue state contract. Non-ready states install\nno data handlers; stale errors retain the last supplied series.",
      "signature": "pub fn state (mut self, state : impl HasPhase) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::tooltip",
      "name": "tooltip",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tooltip (mut self, mode : TooltipMode) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::tooltip_content",
      "name": "tooltip_content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Customize the read-only floating surface using current raw observations. Window-bounded placement and a retained accessible readout remain owned by the chart. Interactive controls belong outside this hover surface.",
      "documentation": "Customize the read-only floating surface using current raw observations.\nWindow-bounded placement and a retained accessible readout remain owned\nby the chart. Interactive controls belong outside this hover surface.",
      "signature": "pub fn tooltip_content (mut self, build : impl Fn (& ChartTooltipData, & mut Window, & mut App) -> gpui::AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::x_axis_side",
      "name": "x_axis_side",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Place the independent axis. Default is bottom (vertical charts) or left (horizontal charts); Leading means top/left, Trailing bottom/right.",
      "documentation": "Place the independent axis. Default is bottom (vertical charts) or left\n(horizontal charts); Leading means top/left, Trailing bottom/right.",
      "signature": "pub fn x_axis_side (mut self, side : AxisSide) -> Self",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianChart::x_ticks",
      "name": "x_ticks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Replace automatic x ticks. An empty list hides ticks. Positions must be unique raw values in the domain; measured label collision suppression still applies. Tick labels are caller text, not formatted a second time.",
      "documentation": "Replace automatic x ticks. An empty list hides ticks. Positions must be\nunique raw values in the domain; measured label collision suppression\nstill applies. Tick labels are caller text, not formatted a second time.",
      "signature": "pub fn x_ticks (mut self, ticks : impl IntoIterator<Item = ChartTick>,) -> Result<Self, TickError>",
      "cfg": [],
      "target": "CartesianChart"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianEvent",
      "name": "CartesianEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq)] pub enum CartesianEvent { Hover (Option<ChartSelection>), Select (Option<ChartSelection>), Visibility { series : SharedString, visible : bool }, Emphasis (Option<SharedString>), Viewport (NumericScale), Brush ([ChartValue; 2]), Range (crate::interaction::range::RangeEvent), Reset, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianMotion",
      "name": "CartesianMotion",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Visualization lifecycle timing resolved through the existing motion engine. Domain/orientation changes remain direct; reduced motion settles immediately.",
      "documentation": "Visualization lifecycle timing resolved through the existing motion engine.\nDomain/orientation changes remain direct; reduced motion settles immediately.",
      "signature": "# [doc = \" Visualization lifecycle timing resolved through the existing motion engine.\"] # [doc = \" Domain/orientation changes remain direct; reduced motion settles immediately.\"] # [derive (Clone, Copy, Debug, PartialEq)] pub struct CartesianMotion { pub enter : crate::motion::MotionSpec, pub update : crate::motion::MotionSpec, pub exit : crate::motion::MotionSpec, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CartesianMotion::themed",
      "name": "themed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn themed (theme : & gpui_kit_theme::Theme) -> Self",
      "cfg": [],
      "target": "CartesianMotion"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::ChartOrientation",
      "name": "ChartOrientation",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub enum ChartOrientation { # [default] Vertical, # [doc = \" Independent x increases downward; value-axis readings increase rightward.\"] Horizontal, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::ChartReference",
      "name": "ChartReference",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "A line or shaded interval on an identified value axis. Its screen direction follows the chart orientation.",
      "documentation": "A line or shaded interval on an identified value axis. Its screen direction\nfollows the chart orientation.",
      "signature": "# [doc = \" A line or shaded interval on an identified value axis. Its screen direction\"] # [doc = \" follows the chart orientation.\"] # [derive (Clone, Debug, PartialEq)] pub struct ChartReference { pub id : SharedString, pub axis : SharedString, pub range : [f64; 2], pub label : SharedString, pub color : Option<Hsla>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::ChartTick",
      "name": "ChartTick",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "A caller-owned tick, including calendar/locale policy where required.",
      "documentation": "A caller-owned tick, including calendar/locale policy where required.",
      "signature": "# [doc = \" A caller-owned tick, including calendar/locale policy where required.\"] # [derive (Clone, Debug, PartialEq)] pub struct ChartTick { pub value : ChartValue, pub label : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::ChartTooltipData",
      "name": "ChartTooltipData",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq)] pub struct ChartTooltipData { pub anchor : ChartSelection, pub x : ChartValue, pub rows : Vec<ChartTooltipRow>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::ChartTooltipRow",
      "name": "ChartTooltipRow",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Current caller data for one rich tooltip row. Values are never interpolated.",
      "documentation": "Current caller data for one rich tooltip row. Values are never interpolated.",
      "signature": "# [doc = \" Current caller data for one rich tooltip row. Values are never interpolated.\"] # [derive (Clone, Debug, PartialEq)] pub struct ChartTooltipRow { pub series_id : SharedString, pub series_label : SharedString, pub point : RawPoint, pub color : Hsla, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CustomMark",
      "name": "CustomMark",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "A caller-painted scatter glyph, centered at the shared projected point. Painting is clipped to this physical-pixel rectangle and the plot. Its exact visible rectangle also owns hit testing and semantics, including during motion.",
      "documentation": "A caller-painted scatter glyph, centered at the shared projected point.\nPainting is clipped to this physical-pixel rectangle and the plot. Its exact\nvisible rectangle also owns hit testing and semantics, including during motion.",
      "signature": "# [doc = \" A caller-painted scatter glyph, centered at the shared projected point.\"] # [doc = \" Painting is clipped to this physical-pixel rectangle and the plot. Its exact\"] # [doc = \" visible rectangle also owns hit testing and semantics, including during motion.\"] # [derive (Clone)] pub struct CustomMark { size : [f32; 2], paint : MarkPainter, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::CustomMark::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (width : f32, height : f32, paint : impl Fn (Bounds<Pixels>, Hsla, & mut Window, & mut App) + 'static,) -> Result<Self, InvalidMarkSize>",
      "cfg": [],
      "target": "CustomMark"
    },
    {
      "id": "gpui_kit::display::chart::cartesian::InvalidMarkSize",
      "name": "InvalidMarkSize",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq, Eq)] pub struct InvalidMarkSize;",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::PathSampling",
      "name": "PathSampling",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Sampling changes paths, never source marks, identities or readouts.",
      "documentation": "Sampling changes paths, never source marks, identities or readouts.",
      "signature": "# [doc = \" Sampling changes paths, never source marks, identities or readouts.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub enum PathSampling { # [default] Exact, # [doc = \" For ordered linear paths, retain per-pixel endpoints and extrema of\"] # [doc = \" both value and area baseline. Missing runs never join. Curves and\"] # [doc = \" unordered paths remain exact; semantic publication remains O(n).\"] MinMax, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::TickError",
      "name": "TickError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq, Eq)] pub enum TickError { UnknownAxis, InvalidValue, OutsideDomain, DuplicateValue, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::TooltipMode",
      "name": "TooltipMode",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub enum TooltipMode { # [default] Point, SharedAxis, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian::reexport-1",
      "name": "range :: CartesianRange",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian",
      "path": "gpui_kit::display::chart::cartesian",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use range::CartesianRange;",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian_lifecycle::Lifecycle::animate",
      "name": "animate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian_lifecycle",
      "path": "gpui_kit::display::chart::cartesian_lifecycle",
      "source": "crates/gpui-kit/src/display/chart/cartesian_lifecycle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn animate (& mut self, raw : Rc<Vec<RawSeries>>, projections : (Rc<Vec<ProjectedSeries>>, Rc<Vec<ProjectedSeries>>), coordinates : (ChartScale, Vec<ValueAxis>, ChartOrientation), spec : CartesianMotion, window : & mut Window, cx : & mut App,) -> Rc<PaintStyles>",
      "cfg": [],
      "target": "Lifecycle"
    },
    {
      "id": "gpui_kit::display::chart::cartesian_lifecycle::Lifecycle::custom",
      "name": "custom",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian_lifecycle",
      "path": "gpui_kit::display::chart::cartesian_lifecycle",
      "source": "crates/gpui-kit/src/display/chart/cartesian_lifecycle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn custom (& mut self, custom : Rc<HashMap<(usize, usize), CustomMark>>, band : f64)",
      "cfg": [],
      "target": "Lifecycle"
    },
    {
      "id": "gpui_kit::display::chart::cartesian_lifecycle::PaintStyles::point",
      "name": "point",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian_lifecycle",
      "path": "gpui_kit::display::chart::cartesian_lifecycle",
      "source": "crates/gpui-kit/src/display/chart/cartesian_lifecycle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn point (& self, raw : & RawSeries, point : & RawPoint, fallback : Hsla) -> Hsla",
      "cfg": [],
      "target": "PaintStyles"
    },
    {
      "id": "gpui_kit::display::chart::cartesian_lifecycle::PaintStyles::series",
      "name": "series",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian_lifecycle",
      "path": "gpui_kit::display::chart::cartesian_lifecycle",
      "source": "crates/gpui-kit/src/display/chart/cartesian_lifecycle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn series (& self, raw : & RawSeries, fallback : Hsla) -> Hsla",
      "cfg": [],
      "target": "PaintStyles"
    },
    {
      "id": "gpui_kit::display::chart::cartesian_motion::GeometryMotion::prune",
      "name": "prune",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian_motion",
      "path": "gpui_kit::display::chart::cartesian_motion",
      "source": "crates/gpui-kit/src/display/chart/cartesian_motion.rs",
      "summary": "Retain geometry while an exit can reverse, then reclaim it once no retired layer needs it. Settled redraws do not rescan the identity map.",
      "documentation": "Retain geometry while an exit can reverse, then reclaim it once no\nretired layer needs it. Settled redraws do not rescan the identity map.",
      "signature": "pub fn prune (& mut self, retiring : bool)",
      "cfg": [],
      "target": "GeometryMotion"
    },
    {
      "id": "gpui_kit::display::chart::cartesian_range::CartesianRange",
      "name": "CartesianRange",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian_range",
      "path": "gpui_kit::display::chart::cartesian_range",
      "source": "crates/gpui-kit/src/display/chart/cartesian_range.rs",
      "summary": "Caller-owned persistent selection over a numeric overview domain. The range uses ascending raw Start/End identity even when the overview domain descends. No selection is installed by the chart. Accept `CartesianEvent::Range` in caller state and optionally derive a linked viewport from its exact values.",
      "documentation": "Caller-owned persistent selection over a numeric overview domain. The range\nuses ascending raw Start/End identity even when the overview domain descends.\nNo selection is installed by the chart. Accept `CartesianEvent::Range` in\ncaller state and optionally derive a linked viewport from its exact values.",
      "signature": "# [doc = \" Caller-owned persistent selection over a numeric overview domain. The range\"] # [doc = \" uses ascending raw Start/End identity even when the overview domain descends.\"] # [doc = \" No selection is installed by the chart. Accept `CartesianEvent::Range` in\"] # [doc = \" caller state and optionally derive a linked viewport from its exact values.\"] # [derive (Clone, Debug)] pub struct CartesianRange { pub domain : NumericScale, pub value : Option<[f64; 2]>, pub label : SharedString, pub enabled : bool, # [doc = \" Decorative overview of the same caller series and value axes.\"] pub overview : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::cartesian_range::CartesianRange::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::cartesian_range",
      "path": "gpui_kit::display::chart::cartesian_range",
      "source": "crates/gpui-kit/src/display/chart/cartesian_range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (domain : NumericScale, value : Option<[f64; 2]>, label : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "CartesianRange"
    },
    {
      "id": "gpui_kit::display::chart::data::ChartScale",
      "name": "ChartScale",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq)] pub enum ChartScale { Numeric (NumericScale), Category (CategoryScale), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::ChartScale::invert",
      "name": "invert",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invert (& self, fraction : f64) -> Option<ChartValue>",
      "cfg": [],
      "target": "ChartScale"
    },
    {
      "id": "gpui_kit::display::chart::data::ChartScale::map",
      "name": "map",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn map (& self, value : & ChartValue) -> Option<f64>",
      "cfg": [],
      "target": "ChartScale"
    },
    {
      "id": "gpui_kit::display::chart::data::ChartValue",
      "name": "ChartValue",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq)] pub enum ChartValue { Number (f64), Category (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::Curve",
      "name": "Curve",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, Default, PartialEq, Eq)] pub enum Curve { # [default] Linear, StepBefore, StepAfter, Monotone, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::DataError",
      "name": "DataError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq)] pub enum DataError { DuplicateIdentity (SharedString), UnknownAxis (SharedString), InvalidPoint (SharedString), InvalidStack (SharedString), Scale (ScaleError), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::ProjectedPoint",
      "name": "ProjectedPoint",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "Geometry references the original series/point indexes; never synthetic IDs.",
      "documentation": "Geometry references the original series/point indexes; never synthetic IDs.",
      "signature": "# [doc = \" Geometry references the original series/point indexes; never synthetic IDs.\"] # [derive (Clone, Debug, PartialEq)] pub struct ProjectedPoint { pub source : usize, pub x : f64, pub y : f64, pub baseline : f64, pub error : Option<[f64; 2]>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::ProjectedSeries",
      "name": "ProjectedSeries",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq)] pub struct ProjectedSeries { pub source : usize, pub points : Vec<Option<ProjectedPoint>>, # [doc = \" Offset and width in fractions of the category band.\"] pub bar_offset : f64, pub bar_width : f64, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::RawPoint",
      "name": "RawPoint",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq)] pub struct RawPoint { pub id : SharedString, pub x : ChartValue, # [doc = \" None breaks a path and omits a mark; it is never coerced to zero.\"] pub y : Option<f64>, pub label : SharedString, # [doc = \" Exact caller wording; used verbatim by semantics and tooltips.\"] pub formatted : SharedString, # [doc = \" Absolute lower/upper readings, not normalized offsets.\"] pub error : Option<[f64; 2]>, # [doc = \" Required start endpoint for Range marks; y is the end endpoint.\"] # [doc = \" Either ordering is valid. Equal endpoints draw a one-pixel body.\"] pub baseline : Option<f64>, # [doc = \" Per-mark color for bars/ranges/scatter; line strokes use series color.\"] pub color : Option<Hsla>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::RawPoint::baseline",
      "name": "baseline",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn baseline (mut self, value : f64) -> Self",
      "cfg": [],
      "target": "RawPoint"
    },
    {
      "id": "gpui_kit::display::chart::data::RawPoint::error",
      "name": "error",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn error (mut self, interval : [f64; 2]) -> Self",
      "cfg": [],
      "target": "RawPoint"
    },
    {
      "id": "gpui_kit::display::chart::data::RawPoint::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, x : ChartValue, y : Option<f64>) -> Self",
      "cfg": [],
      "target": "RawPoint"
    },
    {
      "id": "gpui_kit::display::chart::data::RawPoint::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text (mut self, label : impl Into<SharedString>, value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RawPoint"
    },
    {
      "id": "gpui_kit::display::chart::data::RawPoint::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tint (mut self, color : Hsla) -> Self",
      "cfg": [],
      "target": "RawPoint"
    },
    {
      "id": "gpui_kit::display::chart::data::RawPoint::values",
      "name": "values",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "All absolute endpoints for automatic domain inference, including error whiskers. Missing y excludes the entire mark, including its interval.",
      "documentation": "All absolute endpoints for automatic domain inference, including error\nwhiskers. Missing y excludes the entire mark, including its interval.",
      "signature": "pub fn values (& self) -> impl Iterator<Item = Option<f64>>",
      "cfg": [],
      "target": "RawPoint"
    },
    {
      "id": "gpui_kit::display::chart::data::RawSeries",
      "name": "RawSeries",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq)] pub struct RawSeries { pub id : SharedString, pub label : SharedString, pub axis : SharedString, pub points : Vec<RawPoint>, pub mark : SeriesMark, pub curve : Curve, pub stack : Stack, pub color : Option<Hsla>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::RawSeries::curve",
      "name": "curve",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn curve (mut self, curve : Curve) -> Self",
      "cfg": [],
      "target": "RawSeries"
    },
    {
      "id": "gpui_kit::display::chart::data::RawSeries::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, axis : impl Into<SharedString>, mark : SeriesMark,) -> Self",
      "cfg": [],
      "target": "RawSeries"
    },
    {
      "id": "gpui_kit::display::chart::data::RawSeries::points",
      "name": "points",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn points (mut self, points : impl IntoIterator<Item = RawPoint>) -> Self",
      "cfg": [],
      "target": "RawSeries"
    },
    {
      "id": "gpui_kit::display::chart::data::RawSeries::stack",
      "name": "stack",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn stack (mut self, stack : Stack) -> Self",
      "cfg": [],
      "target": "RawSeries"
    },
    {
      "id": "gpui_kit::display::chart::data::RawSeries::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tint (mut self, color : Hsla) -> Self",
      "cfg": [],
      "target": "RawSeries"
    },
    {
      "id": "gpui_kit::display::chart::data::SeriesMark",
      "name": "SeriesMark",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum SeriesMark { Line, Area, Bar, Range, Scatter, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::Stack",
      "name": "Stack",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq)] pub enum Stack { None, Absolute (SharedString), Percent (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::ValueAxis",
      "name": "ValueAxis",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "Axis identity is shared by series, references and linked caller state.",
      "documentation": "Axis identity is shared by series, references and linked caller state.",
      "signature": "# [doc = \" Axis identity is shared by series, references and linked caller state.\"] # [derive (Clone, Debug, PartialEq)] pub struct ValueAxis { pub id : SharedString, pub label : SharedString, pub scale : NumericScale, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::monotone_tangents",
      "name": "monotone_tangents",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "Hermite tangents with sign rejection and the radius-three monotonicity limiter. Independently implemented from the mathematical constraint; repeated or unordered x is rendered linearly by the renderer.",
      "documentation": "Hermite tangents with sign rejection and the radius-three monotonicity\nlimiter. Independently implemented from the mathematical constraint;\nrepeated or unordered x is rendered linearly by the renderer.",
      "signature": "pub fn monotone_tangents (points : & [[f64; 2]]) -> Option<Vec<f64>>",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::pie_series",
      "name": "pie_series",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "Validate and normalize raw pie shares without overflowing their total. The formatted value and business ID survive normalization unchanged.",
      "documentation": "Validate and normalize raw pie shares without overflowing their total.\nThe formatted value and business ID survive normalization unchanged.",
      "signature": "pub fn pie_series (series : & RawSeries) -> Result<super::ChartSeries, DataError>",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::project",
      "name": "project",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "Validate all input, including hidden series; hide/show cannot reveal a latent malformed dataset. Stacks match x coordinates, not array positions. Positive and negative percentages each normalize to their own 100% total.",
      "documentation": "Validate all input, including hidden series; hide/show cannot reveal a\nlatent malformed dataset. Stacks match x coordinates, not array positions.\nPositive and negative percentages each normalize to their own 100% total.",
      "signature": "pub fn project (series : & [RawSeries], x : & ChartScale, axes : & [ValueAxis], hidden : & [SharedString],) -> Result<Vec<ProjectedSeries>, DataError>",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::radial_series",
      "name": "radial_series",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data",
      "path": "gpui_kit::display::chart::data",
      "source": "crates/gpui-kit/src/display/chart/data.rs",
      "summary": "Explicit radial axes, rejecting missing, extra and out-of-domain readings.",
      "documentation": "Explicit radial axes, rejecting missing, extra and out-of-domain readings.",
      "signature": "pub fn radial_series (series : & RawSeries, axes : & [ValueAxis],) -> Result<super::ChartSeries, DataError>",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::transform::Aggregate",
      "name": "Aggregate",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data::transform",
      "path": "gpui_kit::display::chart::data::transform",
      "source": "crates/gpui-kit/src/display/chart/data/transform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq)] pub enum Aggregate { Count, Sum, Mean, Min, Max, # [doc = \" R-7 linear interpolation of sorted observations; probability in [0, 1].\"] Quantile (f64), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::transform::DerivedPoint",
      "name": "DerivedPoint",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data::transform",
      "path": "gpui_kit::display::chart::data::transform",
      "source": "crates/gpui-kit/src/display/chart/data/transform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq)] pub struct DerivedPoint { pub point : RawPoint, pub sources : SourceRows, pub observed : usize, pub missing : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::transform::MissingPolicy",
      "name": "MissingPolicy",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data::transform",
      "path": "gpui_kit::display::chart::data::transform",
      "source": "crates/gpui-kit/src/display/chart/data/transform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum MissingPolicy { # [doc = \" Ignore missing readings; an all-missing group stays missing except Count.\"] Skip, # [doc = \" Any missing source makes the result missing, including Count.\"] Propagate, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::transform::SourceRows",
      "name": "SourceRows",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data::transform",
      "path": "gpui_kit::display::chart::data::transform",
      "source": "crates/gpui-kit/src/display/chart/data/transform.rs",
      "summary": "Membership refers only to the retained immutable `TransformedData::source`. Contiguous rolling windows use ranges, avoiding O(rows × window) lineage.",
      "documentation": "Membership refers only to the retained immutable `TransformedData::source`.\nContiguous rolling windows use ranges, avoiding O(rows × window) lineage.",
      "signature": "# [doc = \" Membership refers only to the retained immutable `TransformedData::source`.\"] # [doc = \" Contiguous rolling windows use ranges, avoiding O(rows × window) lineage.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub enum SourceRows { Range (Range<usize>), Indices (Vec<usize>), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::transform::SourceRows::indices",
      "name": "indices",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data::transform",
      "path": "gpui_kit::display::chart::data::transform",
      "source": "crates/gpui-kit/src/display/chart/data/transform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn indices (& self) -> impl Iterator<Item = usize> + '_",
      "cfg": [],
      "target": "SourceRows"
    },
    {
      "id": "gpui_kit::display::chart::data::transform::TransformError",
      "name": "TransformError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data::transform",
      "path": "gpui_kit::display::chart::data::transform",
      "source": "crates/gpui-kit/src/display/chart/data/transform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq, Eq)] pub enum TransformError { DuplicateIdentity (SharedString), InvalidPoint (SharedString), InconsistentGroup (SharedString), InvalidAggregate, InvalidBins, InvalidWindow, Overflow, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::transform::TransformedData",
      "name": "TransformedData",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data::transform",
      "path": "gpui_kit::display::chart::data::transform",
      "source": "crates/gpui-kit/src/display/chart/data/transform.rs",
      "summary": "Exact original IDs, values and wording remain available through membership even if a downstream source collection is replaced or reordered.",
      "documentation": "Exact original IDs, values and wording remain available through membership\neven if a downstream source collection is replaced or reordered.",
      "signature": "# [doc = \" Exact original IDs, values and wording remain available through membership\"] # [doc = \" even if a downstream source collection is replaced or reordered.\"] # [derive (Clone, Debug)] pub struct TransformedData { pub source : Rc<Vec<RawPoint>>, pub points : Vec<DerivedPoint>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::transform::aggregate_by",
      "name": "aggregate_by",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data::transform",
      "path": "gpui_kit::display::chart::data::transform",
      "source": "crates/gpui-kit/src/display/chart/data/transform.rs",
      "summary": "Group in first-encounter order using caller-owned group identity/coordinate. The same ID must always name the same coordinate. Apply standard iterator filtering/sorting to source points before this call; source identity is never replaced by array position. Caller formatting can be applied to output points.",
      "documentation": "Group in first-encounter order using caller-owned group identity/coordinate.\nThe same ID must always name the same coordinate. Apply standard iterator\nfiltering/sorting to source points before this call; source identity is never\nreplaced by array position. Caller formatting can be applied to output points.",
      "signature": "pub fn aggregate_by (source : Rc<Vec<RawPoint>>, aggregate : Aggregate, policy : MissingPolicy, mut group : impl FnMut (& RawPoint) -> (SharedString, ChartValue),) -> Result<TransformedData, TransformError>",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::transform::bin_points",
      "name": "bin_points",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data::transform",
      "path": "gpui_kit::display::chart::data::transform",
      "source": "crates/gpui-kit/src/display/chart/data/transform.rs",
      "summary": "Aggregate y readings into explicit numeric-x bins. Bins are half-open except the inclusive final edge; out-of-domain/category x is an error, not discarded. Empty bins are emitted and have missing values except Count = 0. IDs derive from exact edge bits (signed zero canonicalized), not bin position. Histogram counts use Count; source values need not be manufactured to compute a sum.",
      "documentation": "Aggregate y readings into explicit numeric-x bins. Bins are half-open except\nthe inclusive final edge; out-of-domain/category x is an error, not discarded.\nEmpty bins are emitted and have missing values except Count = 0. IDs derive\nfrom exact edge bits (signed zero canonicalized), not bin position. Histogram\ncounts use Count; source values need not be manufactured to compute a sum.",
      "signature": "pub fn bin_points (source : Rc<Vec<RawPoint>>, edges : & [f64], aggregate : Aggregate, policy : MissingPolicy,) -> Result<TransformedData, TransformError>",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::data::transform::rolling_points",
      "name": "rolling_points",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::data::transform",
      "path": "gpui_kit::display::chart::data::transform",
      "source": "crates/gpui-kit/src/display/chart/data/transform.rs",
      "summary": "Trailing observation-count windows in caller order, not elapsed-time windows. Output retains each current source ID/x; a missing current point remains a path gap. `min_observed` controls warm-up; an undersized window is missing. Membership storage is O(n). Reduction is O(n × width), and quantiles also sort each window; prepare once per data revision, never inside a paint loop.",
      "documentation": "Trailing observation-count windows in caller order, not elapsed-time windows.\nOutput retains each current source ID/x; a missing current point remains a\npath gap. `min_observed` controls warm-up; an undersized window is missing.\nMembership storage is O(n). Reduction is O(n × width), and quantiles also\nsort each window; prepare once per data revision, never inside a paint loop.",
      "signature": "pub fn rolling_points (source : Rc<Vec<RawPoint>>, width : usize, min_observed : usize, aggregate : Aggregate, policy : MissingPolicy,) -> Result<TransformedData, TransformError>",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::scale::CategoryScale",
      "name": "CategoryScale",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "Equal-width category bands. Order and identity are caller-owned.",
      "documentation": "Equal-width category bands. Order and identity are caller-owned.",
      "signature": "# [doc = \" Equal-width category bands. Order and identity are caller-owned.\"] # [derive (Clone, Debug, PartialEq)] pub struct CategoryScale { categories : Vec<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::scale::CategoryScale::bandwidth",
      "name": "bandwidth",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bandwidth (& self) -> f64",
      "cfg": [],
      "target": "CategoryScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::CategoryScale::categories",
      "name": "categories",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn categories (& self) -> & [SharedString]",
      "cfg": [],
      "target": "CategoryScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::CategoryScale::invert",
      "name": "invert",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "Bands are half-open, except the final band includes the right edge.",
      "documentation": "Bands are half-open, except the final band includes the right edge.",
      "signature": "pub fn invert (& self, fraction : f64) -> Option<& SharedString>",
      "cfg": [],
      "target": "CategoryScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::CategoryScale::map",
      "name": "map",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn map (& self, id : & str) -> Option<f64>",
      "cfg": [],
      "target": "CategoryScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::CategoryScale::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (categories : impl IntoIterator<Item = impl Into<SharedString>>,) -> Result<Self, ScaleError>",
      "cfg": [],
      "target": "CategoryScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::NumericScale",
      "name": "NumericScale",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "An invertible f64 scale. Constant input expands by 5% (one unit at zero).",
      "documentation": "An invertible f64 scale. Constant input expands by 5% (one unit at zero).",
      "signature": "# [doc = \" An invertible f64 scale. Constant input expands by 5% (one unit at zero).\"] # [derive (Clone, Copy, Debug, PartialEq)] pub struct NumericScale { kind : ScaleKind, domain : [f64; 2], transformed : [f64; 2], }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::scale::NumericScale::domain",
      "name": "domain",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn domain (self) -> [f64; 2]",
      "cfg": [],
      "target": "NumericScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::NumericScale::extent",
      "name": "extent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "Infer from present values. Non-finite values are errors, not missing data.",
      "documentation": "Infer from present values. Non-finite values are errors, not missing data.",
      "signature": "pub fn extent (kind : ScaleKind, values : impl IntoIterator<Item = Option<f64>>, include_zero : bool,) -> Result<Self, ScaleError>",
      "cfg": [],
      "target": "NumericScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::NumericScale::invert",
      "name": "invert",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invert (self, fraction : f64) -> Option<f64>",
      "cfg": [],
      "target": "NumericScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::NumericScale::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn kind (self) -> ScaleKind",
      "cfg": [],
      "target": "NumericScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::NumericScale::map",
      "name": "map",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn map (self, value : f64) -> Option<f64>",
      "cfg": [],
      "target": "NumericScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::NumericScale::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (kind : ScaleKind, mut domain : [f64; 2]) -> Result<Self, ScaleError>",
      "cfg": [],
      "target": "NumericScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::NumericScale::pan",
      "name": "pan",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "Pan in screen fractions. Positive motion moves the data to the right.",
      "documentation": "Pan in screen fractions. Positive motion moves the data to the right.",
      "signature": "pub fn pan (self, fraction : f64) -> Result<Self, ScaleError>",
      "cfg": [],
      "target": "NumericScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::NumericScale::ticks",
      "name": "ticks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "Bounded, in-domain ticks in display order; count is a density hint.",
      "documentation": "Bounded, in-domain ticks in display order; count is a density hint.",
      "signature": "pub fn ticks (self, count : usize) -> Vec<f64>",
      "cfg": [],
      "target": "NumericScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::NumericScale::window",
      "name": "window",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "Apply a brush selection in screen fractions, retaining its direction.",
      "documentation": "Apply a brush selection in screen fractions, retaining its direction.",
      "signature": "pub fn window (self, fractions : [f64; 2]) -> Result<Self, ScaleError>",
      "cfg": [],
      "target": "NumericScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::NumericScale::zoom",
      "name": "zoom",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "Zoom around a pointer fraction; factors above one zoom in.",
      "documentation": "Zoom around a pointer fraction; factors above one zoom in.",
      "signature": "pub fn zoom (self, anchor : f64, factor : f64) -> Result<Self, ScaleError>",
      "cfg": [],
      "target": "NumericScale"
    },
    {
      "id": "gpui_kit::display::chart::scale::ScaleError",
      "name": "ScaleError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "A rejected coordinate contract, never silently replaced by an empty chart.",
      "documentation": "A rejected coordinate contract, never silently replaced by an empty chart.",
      "signature": "# [doc = \" A rejected coordinate contract, never silently replaced by an empty chart.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum ScaleError { Empty, NonFinite, InvalidLogDomain, DuplicateCategory, UnrepresentableDomain, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::scale::ScaleKind",
      "name": "ScaleKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale",
      "path": "gpui_kit::display::chart::scale",
      "source": "crates/gpui-kit/src/display/chart/scale.rs",
      "summary": "Continuous coordinate interpretation.",
      "documentation": "Continuous coordinate interpretation.",
      "signature": "# [doc = \" Continuous coordinate interpretation.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum ScaleKind { Linear, # [doc = \" UTC Unix milliseconds, with fixed-duration ticks (not calendar months).\"] Time, Log, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::scale::calendar::CalendarInterval",
      "name": "CalendarInterval",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale::calendar",
      "path": "gpui_kit::display::chart::scale::calendar",
      "source": "crates/gpui-kit/src/display/chart/scale/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq, Eq)] pub struct CalendarInterval { pub unit : CalendarUnit, pub step : u32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::scale::calendar::CalendarTick",
      "name": "CalendarTick",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale::calendar",
      "path": "gpui_kit::display::chart::scale::calendar",
      "source": "crates/gpui-kit/src/display/chart/scale/calendar.rs",
      "summary": "A unique instant. Repeated wall-clock labels during a fall-back retain both instants with different offsets. Nonexistent local boundaries are omitted.",
      "documentation": "A unique instant. Repeated wall-clock labels during a fall-back retain both\ninstants with different offsets. Nonexistent local boundaries are omitted.",
      "signature": "# [doc = \" A unique instant. Repeated wall-clock labels during a fall-back retain both\"] # [doc = \" instants with different offsets. Nonexistent local boundaries are omitted.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct CalendarTick { pub timestamp_ms : i64, pub local : NaiveDateTime, pub offset_seconds : i32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::scale::calendar::CalendarTickError",
      "name": "CalendarTickError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale::calendar",
      "path": "gpui_kit::display::chart::scale::calendar",
      "source": "crates/gpui-kit/src/display/chart/scale/calendar.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum CalendarTickError { NotTimeScale, InvalidInterval, OutOfRange, LimitExceeded, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::scale::calendar::CalendarUnit",
      "name": "CalendarUnit",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale::calendar",
      "path": "gpui_kit::display::chart::scale::calendar",
      "source": "crates/gpui-kit/src/display/chart/scale/calendar.rs",
      "summary": "Wall-clock boundary unit. Weeks start on Monday; months/quarters/years start on their first day. Multiples align to 1970 (weeks to 1969-12-29).",
      "documentation": "Wall-clock boundary unit. Weeks start on Monday; months/quarters/years start\non their first day. Multiples align to 1970 (weeks to 1969-12-29).",
      "signature": "# [doc = \" Wall-clock boundary unit. Weeks start on Monday; months/quarters/years start\"] # [doc = \" on their first day. Multiples align to 1970 (weeks to 1969-12-29).\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum CalendarUnit { Second, Minute, Hour, Day, Week, Month, Quarter, Year, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::scale::calendar::calendar_interval",
      "name": "calendar_interval",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale::calendar",
      "path": "gpui_kit::display::chart::scale::calendar",
      "source": "crates/gpui-kit/src/display/chart/scale/calendar.rs",
      "summary": "Select a nominal interval near the requested density. Actual ticks must be generated in the chosen timezone with `calendar_ticks`; month lengths and DST are never computed from these nominal durations.",
      "documentation": "Select a nominal interval near the requested density. Actual ticks must be\ngenerated in the chosen timezone with `calendar_ticks`; month lengths and\nDST are never computed from these nominal durations.",
      "signature": "pub fn calendar_interval (scale : NumericScale, target : usize,) -> Result<CalendarInterval, CalendarTickError>",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::chart::scale::calendar::calendar_ticks",
      "name": "calendar_ticks",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::chart::scale::calendar",
      "path": "gpui_kit::display::chart::scale::calendar",
      "source": "crates/gpui-kit/src/display/chart/scale/calendar.rs",
      "summary": "Generate in-domain ticks in display order, including both repeated local boundaries and skipping nonexistent ones. Fractional-ms endpoints are not rounded into the domain. `limit` rejects excess output rather than truncating. Work is also capped at one million candidate boundaries. The UTC envelope includes all possible Chrono offsets (strictly less than 24h), so historical date-line changes and domains contained inside a repeated hour are covered.",
      "documentation": "Generate in-domain ticks in display order, including both repeated local\nboundaries and skipping nonexistent ones. Fractional-ms endpoints are not\nrounded into the domain. `limit` rejects excess output rather than truncating.\nWork is also capped at one million candidate boundaries. The UTC envelope\nincludes all possible Chrono offsets (strictly less than 24h), so historical\ndate-line changes and domains contained inside a repeated hour are covered.",
      "signature": "pub fn calendar_ticks<Tz : TimeZone> (scale : NumericScale, zone : & Tz, interval : CalendarInterval, limit : usize,) -> Result<Vec<CalendarTick>, CalendarTickError>",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionItem",
      "name": "DescriptionItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "One term and what it describes.",
      "documentation": "One term and what it describes.",
      "signature": "# [doc = \" One term and what it describes.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct DescriptionItem { id : SharedString, term : SharedString, value : DescriptionValue, copyable : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionItem::copyable",
      "name": "copyable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "Offers a copy action, which reports the item and copies nothing itself.",
      "documentation": "Offers a copy action, which reports the item and copies nothing itself.",
      "signature": "pub fn copyable (mut self, copyable : bool) -> Self",
      "cfg": [],
      "target": "DescriptionItem"
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionItem::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "DescriptionItem"
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, term : impl Into<SharedString>, value : impl Into<DescriptionValue>,) -> Self",
      "cfg": [],
      "target": "DescriptionItem"
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionItem::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn value (& self) -> & DescriptionValue",
      "cfg": [],
      "target": "DescriptionItem"
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionList",
      "name": "DescriptionList",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "A list of term and description pairs, in one or two columns.",
      "documentation": "A list of term and description pairs, in one or two columns.",
      "signature": "# [doc = \" A list of term and description pairs, in one or two columns.\"] # [derive (IntoElement)] pub struct DescriptionList { ident : Ident, items : Vec<DescriptionItem>, columns : usize, on_copy : Option<CopyHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionList::columns",
      "name": "columns",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "One column or two. Anything else is one, because a detail page that needs three columns needs a table.",
      "documentation": "One column or two. Anything else is one, because a detail page that\nneeds three columns needs a table.",
      "signature": "pub fn columns (mut self, columns : usize) -> Self",
      "cfg": [],
      "target": "DescriptionList"
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionList::item",
      "name": "item",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn item (mut self, item : DescriptionItem) -> Self",
      "cfg": [],
      "target": "DescriptionList"
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionList::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn items (mut self, items : impl IntoIterator<Item = DescriptionItem>) -> Self",
      "cfg": [],
      "target": "DescriptionList"
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionList::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "DescriptionList"
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionList::on_copy",
      "name": "on_copy",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "Reports the item whose value the typist asked for. The list holds no clipboard of its own, and a redacted value's text never reaches it.",
      "documentation": "Reports the item whose value the typist asked for. The list holds no\nclipboard of its own, and a redacted value's text never reaches it.",
      "signature": "pub fn on_copy (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DescriptionList"
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionValue",
      "name": "DescriptionValue",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "What a detail row holds.",
      "documentation": "What a detail row holds.",
      "signature": "# [doc = \" What a detail row holds.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum DescriptionValue { Text (SharedString), # [doc = \" Nobody knows what this is. Not the same as empty.\"] Unknown, # [doc = \" The question does not arise for this record.\"] NotApplicable, # [doc = \" The value exists and may not be shown. Only its shape is carried, so\"] # [doc = \" there is no text here for a snapshot or an export to leak.\"] Redacted (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionValue::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "The name a semantic node publishes for the kind of value this is.",
      "documentation": "The name a semantic node publishes for the kind of value this is.",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "DescriptionValue"
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionValue::redacted",
      "name": "redacted",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "A redacted value described by its shape, such as `\"51 characters\"`.",
      "documentation": "A redacted value described by its shape, such as `\"51 characters\"`.\n\nThe shape is all the component ever sees. Callers that hold the secret\nitself want [`DescriptionValue::redacted_from`], which measures the\ntext and drops it.",
      "signature": "pub fn redacted (shape : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DescriptionValue"
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionValue::redacted_from",
      "name": "redacted_from",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "Measures a secret and keeps only the measurement.",
      "documentation": "Measures a secret and keeps only the measurement.\n\nThe measurement is a sentence a reader reads, so it comes from the\ninstalled catalogue rather than from this file.",
      "signature": "pub fn redacted_from (secret : & str, cx : & App) -> Self",
      "cfg": [],
      "target": "DescriptionValue"
    },
    {
      "id": "gpui_kit::display::description_list::DescriptionValue::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::description_list",
      "path": "gpui_kit::display::description_list",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text (value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DescriptionValue"
    },
    {
      "id": "gpui_kit::display::empty::Divider",
      "name": "Divider",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "A soft rule between groups.",
      "documentation": "A soft rule between groups.\n\nA divider is an explicit author request for separation, so it remains a\nline. It uses the low-alpha divider paint, rounded ends, and an inset by\ndefault rather than cutting a hard rule from edge to edge.",
      "signature": "# [doc = \" A soft rule between groups.\"] # [doc = \"\"] # [doc = \" A divider is an explicit author request for separation, so it remains a\"] # [doc = \" line. It uses the low-alpha divider paint, rounded ends, and an inset by\"] # [doc = \" default rather than cutting a hard rule from edge to edge.\"] # [derive (Debug, IntoElement)] pub struct Divider { ident : Option<Ident>, label : Option<SharedString>, axis : DividerAxis, # [doc = \" How far the rule stops short of the edges of what holds it.\"] inset : Option<Space>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::empty::Divider::axis",
      "name": "axis",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn axis (mut self, axis : DividerAxis) -> Self",
      "cfg": [],
      "target": "Divider"
    },
    {
      "id": "gpui_kit::display::empty::Divider::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Divider"
    },
    {
      "id": "gpui_kit::display::empty::Divider::inset",
      "name": "inset",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "Stops the rule short of both ends by one spacing step, for a rule inside a padded container that should not touch its corners.",
      "documentation": "Stops the rule short of both ends by one spacing step, for a rule\ninside a padded container that should not touch its corners.",
      "signature": "pub fn inset (mut self, inset : Space) -> Self",
      "cfg": [],
      "target": "Divider"
    },
    {
      "id": "gpui_kit::display::empty::Divider::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "A caption sitting in the rule, naming what follows. A vertical rule takes no label: a caption turned on its side is not read, it is deciphered.",
      "documentation": "A caption sitting in the rule, naming what follows. A vertical rule\ntakes no label: a caption turned on its side is not read, it is\ndeciphered.",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Divider"
    },
    {
      "id": "gpui_kit::display::empty::Divider::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "Divider"
    },
    {
      "id": "gpui_kit::display::empty::Divider::vertical",
      "name": "vertical",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "The rule standing up, for two columns rather than two groups of rows.",
      "documentation": "The rule standing up, for two columns rather than two groups of rows.",
      "signature": "pub fn vertical (self) -> Self",
      "cfg": [],
      "target": "Divider"
    },
    {
      "id": "gpui_kit::display::empty::DividerAxis",
      "name": "DividerAxis",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "Which way a rule runs.",
      "documentation": "Which way a rule runs.",
      "signature": "# [doc = \" Which way a rule runs.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum DividerAxis { # [doc = \" Between one group of rows and the next.\"] # [default] Horizontal, # [doc = \" Between two columns standing side by side.\"] Vertical, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::empty::EmptyKind",
      "name": "EmptyKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "Which fact the surface is reporting.",
      "documentation": "Which fact the surface is reporting.",
      "signature": "# [doc = \" Which fact the surface is reporting.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum EmptyKind { # [doc = \" The query succeeded and returned nothing.\"] # [default] Empty, # [doc = \" Nothing has been asked for yet.\"] Unstarted, # [doc = \" Asked for, and waiting its turn.\"] Queued, # [doc = \" Started, and waiting on something outside the surface.\"] Blocked, # [doc = \" Started, and withdrawn before it finished.\"] Cancelled, # [doc = \" The host refused, or could not be reached.\"] Unavailable, # [doc = \" The attempt failed.\"] Failed, # [doc = \" The host refused because the reader is not allowed.\"] Unauthorized, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::empty::EmptyKind::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "The name the node publishes, so a test asserts the fact rather than the picture drawn for it.",
      "documentation": "The name the node publishes, so a test asserts the fact rather than\nthe picture drawn for it.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "EmptyKind"
    },
    {
      "id": "gpui_kit::display::empty::EmptyState",
      "name": "EmptyState",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "A centred explanation with an optional action.",
      "documentation": "A centred explanation with an optional action.",
      "signature": "# [doc = \" A centred explanation with an optional action.\"] # [derive (IntoElement)] pub struct EmptyState { ident : Ident, kind : EmptyKind, glyph : Option<Icon>, title : SharedString, detail : Option<SharedString>, action : Option<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::empty::EmptyState::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "What the typist can do about it, usually a retry or a first step.",
      "documentation": "What the typist can do about it, usually a retry or a first step.",
      "signature": "pub fn action (mut self, action : impl IntoElement) -> Self",
      "cfg": [],
      "target": "EmptyState"
    },
    {
      "id": "gpui_kit::display::empty::EmptyState::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "Why the surface is empty, in the host's own words. A refusal is shown as the refusal it is rather than rewritten as an absence of data.",
      "documentation": "Why the surface is empty, in the host's own words. A refusal is shown\nas the refusal it is rather than rewritten as an absence of data.",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "EmptyState"
    },
    {
      "id": "gpui_kit::display::empty::EmptyState::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "Replaces the generic state mark when the empty surface has a concrete product-neutral subject, such as a document, image, or folder.",
      "documentation": "Replaces the generic state mark when the empty surface has a concrete\nproduct-neutral subject, such as a document, image, or folder.\n\nThe state still decides its semantic value and tone; this changes only\nthe noun the picture names.",
      "signature": "pub fn icon (mut self, glyph : Icon) -> Self",
      "cfg": [],
      "target": "EmptyState"
    },
    {
      "id": "gpui_kit::display::empty::EmptyState::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn kind (mut self, kind : EmptyKind) -> Self",
      "cfg": [],
      "target": "EmptyState"
    },
    {
      "id": "gpui_kit::display::empty::EmptyState::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::empty",
      "path": "gpui_kit::display::empty",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "EmptyState"
    },
    {
      "id": "gpui_kit::display::failure_panel::FailurePanel",
      "name": "FailurePanel",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::failure_panel",
      "path": "gpui_kit::display::failure_panel",
      "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.",
      "documentation": "A panel that states what went wrong instead of what it was going to show.",
      "signature": "# [doc = \" A panel that states what went wrong instead of what it was going to show.\"] # [derive (IntoElement)] pub struct FailurePanel { ident : Ident, title : Option<SharedString>, # [doc = \" The host's own words. Never authored here, and never rewritten.\"] reason : SharedString, detail : Option<SharedString>, attempts : Option<usize>, retrying : bool, on_retry : Option<RetryHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::failure_panel::FailurePanel::attempts",
      "name": "attempts",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::failure_panel",
      "path": "gpui_kit::display::failure_panel",
      "source": "crates/gpui-kit/src/display/failure_panel.rs",
      "summary": "How many times this has been tried. A retry that keeps failing is a different fact from a first failure, and hiding the count would let a reader keep pressing a control that has never once worked.",
      "documentation": "How many times this has been tried. A retry that keeps failing is a\ndifferent fact from a first failure, and hiding the count would let a\nreader keep pressing a control that has never once worked.",
      "signature": "pub fn attempts (mut self, attempts : usize) -> Self",
      "cfg": [],
      "target": "FailurePanel"
    },
    {
      "id": "gpui_kit::display::failure_panel::FailurePanel::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::failure_panel",
      "path": "gpui_kit::display::failure_panel",
      "source": "crates/gpui-kit/src/display/failure_panel.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FailurePanel"
    },
    {
      "id": "gpui_kit::display::failure_panel::FailurePanel::from_result",
      "name": "from_result",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::failure_panel",
      "path": "gpui_kit::display::failure_panel",
      "source": "crates/gpui-kit/src/display/failure_panel.rs",
      "summary": "The panel for a failure the host is already holding, or `None` when it is holding a value instead.",
      "documentation": "The panel for a failure the host is already holding, or `None` when it\nis holding a value instead.\n\nThis is the seam the whole component exists for: the caller renders its\ncontent in the `Ok` arm and this in the `Err` arm, and the failure it\nshows is the one the host actually has rather than one this crate\ncaught.",
      "signature": "pub fn from_result<T, E : std::fmt::Display> (ident : impl Into<Ident>, result : & Result<T, E>,) -> Option<Self>",
      "cfg": [],
      "target": "FailurePanel"
    },
    {
      "id": "gpui_kit::display::failure_panel::FailurePanel::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::failure_panel",
      "path": "gpui_kit::display::failure_panel",
      "source": "crates/gpui-kit/src/display/failure_panel.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FailurePanel"
    },
    {
      "id": "gpui_kit::display::failure_panel::FailurePanel::on_retry",
      "name": "on_retry",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::failure_panel",
      "path": "gpui_kit::display::failure_panel",
      "source": "crates/gpui-kit/src/display/failure_panel.rs",
      "summary": "Reports that the typist asked for another attempt.",
      "documentation": "Reports that the typist asked for another attempt.\n\nRetrying belongs to the host — this panel has no idea what produced the\nfailure — so it reports and does nothing. A panel with no handler shows\nno retry control at all rather than a dead one.",
      "signature": "pub fn on_retry (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "FailurePanel"
    },
    {
      "id": "gpui_kit::display::failure_panel::FailurePanel::retrying",
      "name": "retrying",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::failure_panel",
      "path": "gpui_kit::display::failure_panel",
      "source": "crates/gpui-kit/src/display/failure_panel.rs",
      "summary": "Whether a retry is in flight. While it is, the failure stays on screen: nothing has replaced it yet.",
      "documentation": "Whether a retry is in flight. While it is, the failure stays on screen:\nnothing has replaced it yet.",
      "signature": "pub fn retrying (mut self, retrying : bool) -> Self",
      "cfg": [],
      "target": "FailurePanel"
    },
    {
      "id": "gpui_kit::display::failure_panel::FailurePanel::title",
      "name": "title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::failure_panel",
      "path": "gpui_kit::display::failure_panel",
      "source": "crates/gpui-kit/src/display/failure_panel.rs",
      "summary": "What the panel was going to be, so the reader knows which part of the window is missing rather than only that something is.",
      "documentation": "What the panel was going to be, so the reader knows which part of the\nwindow is missing rather than only that something is.",
      "signature": "pub fn title (mut self, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FailurePanel"
    },
    {
      "id": "gpui_kit::display::geography::GeoColorDomain",
      "name": "GeoColorDomain",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "Finite, strictly increasing choropleth domain with caller-owned endpoint text.",
      "documentation": "Finite, strictly increasing choropleth domain with caller-owned endpoint text.",
      "signature": "# [doc = \" Finite, strictly increasing choropleth domain with caller-owned endpoint text.\"] # [derive (Clone, Debug)] pub struct GeoColorDomain { pub minimum : f64, pub maximum : f64, pub minimum_label : SharedString, pub maximum_label : SharedString, pub missing_label : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::GeoData",
      "name": "GeoData",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "Validated immutable data. Validation failures must be presented as refusal.",
      "documentation": "Validated immutable data. Validation failures must be presented as refusal.",
      "signature": "# [doc = \" Validated immutable data. Validation failures must be presented as refusal.\"] # [derive (Clone, Debug)] pub struct GeoData { projection : GeoProjection, features : Vec<GeoFeature>, points : Vec<GeoPoint>, polygons : Vec<Vec<ProjectedPolygon>>, projected_points : Vec<GeoProjected>, domain : GeoColorDomain, central_longitude : f64, spatial : SpatialIndex, point_readings : std::collections::HashMap<SharedString, GeoProperties>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::GeoData::color_domain",
      "name": "color_domain",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn color_domain (& self) -> & GeoColorDomain",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::GeoData::features",
      "name": "features",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn features (& self) -> & [GeoFeature]",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::GeoData::hit_test",
      "name": "hit_test",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "Screen-local hit in pixels. Same transform and five-pixel point radius as painting. Outside-frame hits return None. Points win over polygons; overlapping polygons resolve to the last caller-supplied feature.",
      "documentation": "Screen-local hit in pixels. Same transform and five-pixel point radius as\npainting. Outside-frame hits return None. Points win over polygons;\noverlapping polygons resolve to the last caller-supplied feature.",
      "signature": "pub fn hit_test (& self, viewport : GeoViewport, size : [f64; 2], position : [f64; 2],) -> Option<SharedString>",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::GeoData::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (projection : GeoProjection, features : Vec<GeoFeature>, points : Vec<GeoPoint>, domain : GeoColorDomain,) -> Result<Self, GeoRefusal>",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::GeoData::point_reading",
      "name": "point_reading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "Exact metadata supplied for a GeoJSON point. None means no reading was supplied (as with native GeoPoint literals); Some with value None is an explicitly unobserved reading. Point values need not fit the polygon color domain, but must be finite.",
      "documentation": "Exact metadata supplied for a GeoJSON point. None means no reading was\nsupplied (as with native GeoPoint literals); Some with value None is an\nexplicitly unobserved reading. Point values need not fit the polygon\ncolor domain, but must be finite.",
      "signature": "pub fn point_reading (& self, id : & str) -> Option<& GeoProperties>",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::GeoData::points",
      "name": "points",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn points (& self) -> & [GeoPoint]",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::GeoData::projection",
      "name": "projection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn projection (& self) -> GeoProjection",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::GeoFeature",
      "name": "GeoFeature",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "Multiple polygons allow caller-cut antimeridian features and islands. Polygon overlaps are allowed and painted as a union under one identity.",
      "documentation": "Multiple polygons allow caller-cut antimeridian features and islands.\nPolygon overlaps are allowed and painted as a union under one identity.",
      "signature": "# [doc = \" Multiple polygons allow caller-cut antimeridian features and islands.\"] # [doc = \" Polygon overlaps are allowed and painted as a union under one identity.\"] # [derive (Clone, Debug)] pub struct GeoFeature { pub id : SharedString, pub label : SharedString, pub polygons : Vec<GeoPolygon>, # [doc = \" None means no observation, not zero. Formatting belongs to the caller.\"] pub value : Option<f64>, pub formatted_value : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::GeoPoint",
      "name": "GeoPoint",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "Caller-owned point overlay. Painted above all polygons; last point wins ties.",
      "documentation": "Caller-owned point overlay. Painted above all polygons; last point wins ties.",
      "signature": "# [doc = \" Caller-owned point overlay. Painted above all polygons; last point wins ties.\"] # [derive (Clone, Debug)] pub struct GeoPoint { pub id : SharedString, pub label : SharedString, pub position : GeoPosition, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::GeoPolygon",
      "name": "GeoPolygon",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "One polygon, with explicit closed rings. Winding direction does not matter.",
      "documentation": "One polygon, with explicit closed rings. Winding direction does not matter.",
      "signature": "# [doc = \" One polygon, with explicit closed rings. Winding direction does not matter.\"] # [derive (Clone, Debug)] pub struct GeoPolygon { pub exterior : Vec<GeoPosition>, pub holes : Vec<Vec<GeoPosition>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::GeoPosition",
      "name": "GeoPosition",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "A position in degrees, east and north positive. No altitude is implied.",
      "documentation": "A position in degrees, east and north positive. No altitude is implied.",
      "signature": "# [doc = \" A position in degrees, east and north positive. No altitude is implied.\"] # [derive (Clone, Copy, Debug, PartialEq)] pub struct GeoPosition { pub longitude : f64, pub latitude : f64, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::GeoProjected",
      "name": "GeoProjected",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "Projected unit-world position; x increases east, y south.",
      "documentation": "Projected unit-world position; x increases east, y south.",
      "signature": "# [doc = \" Projected unit-world position; x increases east, y south.\"] # [derive (Clone, Copy, Debug, PartialEq)] pub struct GeoProjected { pub x : f64, pub y : f64, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::GeoProjection",
      "name": "GeoProjection",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "Supported spherical projections with zero central meridian.",
      "documentation": "Supported spherical projections with zero central meridian.",
      "signature": "# [doc = \" Supported spherical projections with zero central meridian.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum GeoProjection { # [doc = \" x = longitude / 360 + 1/2; y = 1/2 - latitude / 360.\"] # [doc = \" Domain ±180° longitude and ±90° latitude. World height is 1/2.\"] Equirectangular, # [doc = \" x = longitude / 360 + 1/2; y = 1/2 - ln(tan(π/4+φ/2))/(2π).\"] # [doc = \" Domain ±180° longitude and ±atan(sinh(π)) latitude. World height is 1.\"] WebMercator, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::GeoProjection::latitude_limit",
      "name": "latitude_limit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn latitude_limit (self) -> f64",
      "cfg": [],
      "target": "GeoProjection"
    },
    {
      "id": "gpui_kit::display::geography::GeoProjection::project",
      "name": "project",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn project (self, position : GeoPosition) -> Result<GeoProjected, GeoRefusal>",
      "cfg": [],
      "target": "GeoProjection"
    },
    {
      "id": "gpui_kit::display::geography::GeoProjection::unproject",
      "name": "unproject",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn unproject (self, position : GeoProjected) -> Result<GeoPosition, GeoRefusal>",
      "cfg": [],
      "target": "GeoProjection"
    },
    {
      "id": "gpui_kit::display::geography::GeoRefusal",
      "name": "GeoRefusal",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "Explicit input refusal. The whole data set is refused, never partly shown.",
      "documentation": "Explicit input refusal. The whole data set is refused, never partly shown.",
      "signature": "# [doc = \" Explicit input refusal. The whole data set is refused, never partly shown.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub enum GeoRefusal { CoordinateBounds, AntimeridianEdge, InvalidRing, InvalidHoles, DuplicateIdentity, InvalidValue, InvalidViewport, InvalidGeoJson, DocumentLimit, InvalidSimplification, Unsupported (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::GeoViewport",
      "name": "GeoViewport",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "Controlled unit-world camera. Uniform scale preserves projection aspect. The full unit square fits initially; equirectangular has unused polar bands.",
      "documentation": "Controlled unit-world camera. Uniform scale preserves projection aspect.\nThe full unit square fits initially; equirectangular has unused polar bands.",
      "signature": "# [doc = \" Controlled unit-world camera. Uniform scale preserves projection aspect.\"] # [doc = \" The full unit square fits initially; equirectangular has unused polar bands.\"] # [derive (Clone, Copy, Debug, PartialEq)] pub struct GeoViewport { pub center : GeoProjected, pub zoom : f64, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::GeoViewport::pan",
      "name": "pan",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "Pan camera in unit-world coordinates; clamps center at the world edge.",
      "documentation": "Pan camera in unit-world coordinates; clamps center at the world edge.",
      "signature": "pub fn pan (self, dx : f64, dy : f64) -> Self",
      "cfg": [],
      "target": "GeoViewport"
    },
    {
      "id": "gpui_kit::display::geography::GeoViewport::screen",
      "name": "screen",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn screen (self, position : GeoProjected, size : [f64; 2]) -> [f64; 2]",
      "cfg": [],
      "target": "GeoViewport"
    },
    {
      "id": "gpui_kit::display::geography::GeoViewport::validate",
      "name": "validate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn validate (self) -> Result<(), GeoRefusal>",
      "cfg": [],
      "target": "GeoViewport"
    },
    {
      "id": "gpui_kit::display::geography::GeoViewport::world",
      "name": "world",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn world (self, position : [f64; 2], size : [f64; 2]) -> GeoProjected",
      "cfg": [],
      "target": "GeoViewport"
    },
    {
      "id": "gpui_kit::display::geography::GeoViewport::zoom_at",
      "name": "zoom_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "Zoom about a projected anchor. At center limits the anchor may move.",
      "documentation": "Zoom about a projected anchor. At center limits the anchor may move.",
      "signature": "pub fn zoom_at (self, factor : f64, anchor : GeoProjected) -> Self",
      "cfg": [],
      "target": "GeoViewport"
    },
    {
      "id": "gpui_kit::display::geography::ingest::GeoData::central_longitude",
      "name": "central_longitude",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::ingest",
      "path": "gpui_kit::display::geography::ingest",
      "source": "crates/gpui-kit/src/display/geography/ingest.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn central_longitude (& self) -> f64",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::ingest::GeoData::from_geojson",
      "name": "from_geojson",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::ingest",
      "path": "gpui_kit::display::geography::ingest",
      "source": "crates/gpui-kit/src/display/geography/ingest.rs",
      "summary": "RFC 7946 Feature or FeatureCollection with explicit string/integer IDs; Polygon, MultiPolygon and Point only. Two-dimensional WGS84 degrees. Null geometry, foreign CRS, nonfinite coordinates, unsupported geometry types and additional dimensions refuse the entire document. Foreign properties are passed unchanged to the caller; bbox is not trusted for geometry. Maximum document size is 32 MiB; no network or URI resolution.",
      "documentation": "RFC 7946 Feature or FeatureCollection with explicit string/integer IDs;\nPolygon, MultiPolygon and Point only. Two-dimensional WGS84 degrees.\nNull geometry, foreign CRS, nonfinite coordinates, unsupported geometry\ntypes and additional dimensions refuse the entire document. Foreign\nproperties are passed unchanged to the caller; bbox is not trusted for\ngeometry. Maximum document size is 32 MiB; no network or URI resolution.",
      "signature": "pub fn from_geojson (json : & str, projection : GeoProjection, world : GeoWorldPolicy, domain : GeoColorDomain, mut properties : impl FnMut (& str, & Value) -> Result<GeoProperties, GeoRefusal>,) -> Result<Self, GeoRefusal>",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::ingest::GeoData::project_position",
      "name": "project_position",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::ingest",
      "path": "gpui_kit::display::geography::ingest",
      "source": "crates/gpui-kit/src/display/geography/ingest.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn project_position (& self, position : GeoPosition) -> Result<GeoProjected, GeoRefusal>",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::ingest::GeoData::unproject_position",
      "name": "unproject_position",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::ingest",
      "path": "gpui_kit::display::geography::ingest",
      "source": "crates/gpui-kit/src/display/geography/ingest.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn unproject_position (& self, position : GeoProjected) -> Result<GeoPosition, GeoRefusal>",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::ingest::GeoData::with_world",
      "name": "with_world",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::ingest",
      "path": "gpui_kit::display::geography::ingest",
      "source": "crates/gpui-kit/src/display/geography/ingest.rs",
      "summary": "Prepare caller geometry in a fixed, centered or automatically chosen single world. Sources remain in original degrees in features()/points(). Use project_position/unproject_position for camera and overlay work in that world, never the zero-meridian projection directly.",
      "documentation": "Prepare caller geometry in a fixed, centered or automatically chosen\nsingle world. Sources remain in original degrees in features()/points().\nUse project_position/unproject_position for camera and overlay work in\nthat world, never the zero-meridian projection directly.",
      "signature": "pub fn with_world (projection : GeoProjection, features : Vec<GeoFeature>, points : Vec<GeoPoint>, domain : GeoColorDomain, world : GeoWorldPolicy,) -> Result<Self, GeoRefusal>",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::ingest::GeoProperties",
      "name": "GeoProperties",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::ingest",
      "path": "gpui_kit::display::geography::ingest",
      "source": "crates/gpui-kit/src/display/geography/ingest.rs",
      "summary": "Caller interpretation of a GeoJSON feature's properties. No application property names, numeric formatting, or fallback IDs are invented by Kit.",
      "documentation": "Caller interpretation of a GeoJSON feature's properties. No application\nproperty names, numeric formatting, or fallback IDs are invented by Kit.",
      "signature": "# [doc = \" Caller interpretation of a GeoJSON feature's properties. No application\"] # [doc = \" property names, numeric formatting, or fallback IDs are invented by Kit.\"] # [derive (Clone, Debug)] pub struct GeoProperties { pub label : SharedString, pub value : Option<f64>, pub formatted_value : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::ingest::GeoWorldPolicy",
      "name": "GeoWorldPolicy",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::ingest",
      "path": "gpui_kit::display::geography::ingest",
      "source": "crates/gpui-kit/src/display/geography/ingest.rs",
      "summary": "One finite, non-repeating world. Auto chooses a longitude cut in the largest empty vertex gap, putting seam-crossing local regions together. It does not infer spherical interiors: if any edge still crosses the chosen cut or spans more than a hemisphere the collection is refused.",
      "documentation": "One finite, non-repeating world. Auto chooses a longitude cut in the\nlargest empty vertex gap, putting seam-crossing local regions together.\nIt does not infer spherical interiors: if any edge still crosses the\nchosen cut or spans more than a hemisphere the collection is refused.",
      "signature": "# [doc = \" One finite, non-repeating world. Auto chooses a longitude cut in the\"] # [doc = \" largest empty vertex gap, putting seam-crossing local regions together.\"] # [doc = \" It does not infer spherical interiors: if any edge still crosses the\"] # [doc = \" chosen cut or spans more than a hemisphere the collection is refused.\"] # [derive (Clone, Copy, Debug, Default, PartialEq)] pub enum GeoWorldPolicy { # [default] Fixed, Auto, # [doc = \" Central longitude in [-180,180]. Useful for stable camera coordinates\"] # [doc = \" across data refreshes; Auto may choose a different world on each load.\"] Centered (f64), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::painting::Paint::draw",
      "name": "draw",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::painting",
      "path": "gpui_kit::display::geography::painting",
      "source": "crates/gpui-kit/src/display/geography/painting.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn draw (& self, data : & GeoData, index : usize, fill : Option<Hsla>, alpha : f32, window : & mut Window,)",
      "cfg": [],
      "target": "Paint<'_>"
    },
    {
      "id": "gpui_kit::display::geography::presentation::Frame::hit_test",
      "name": "hit_test",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::presentation",
      "path": "gpui_kit::display::geography::presentation",
      "source": "crates/gpui-kit/src/display/geography/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn hit_test (& self, viewport : GeoViewport, size : [f64; 2], at : [f64; 2],) -> Option<SharedString>",
      "cfg": [],
      "target": "Frame"
    },
    {
      "id": "gpui_kit::display::geography::presentation::Frame::opacity",
      "name": "opacity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::presentation",
      "path": "gpui_kit::display::geography::presentation",
      "source": "crates/gpui-kit/src/display/geography/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn opacity (& self, index : usize) -> f32",
      "cfg": [],
      "target": "Frame"
    },
    {
      "id": "gpui_kit::display::geography::presentation::Presentation::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::presentation",
      "path": "gpui_kit::display::geography::presentation",
      "source": "crates/gpui-kit/src/display/geography/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "Presentation"
    },
    {
      "id": "gpui_kit::display::geography::presentation::Presentation::sample",
      "name": "sample",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::presentation",
      "path": "gpui_kit::display::geography::presentation",
      "source": "crates/gpui-kit/src/display/geography/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sample (& mut self, data : Rc<GeoData>, spec : MotionSpec, snap : bool, window : & mut Window, cx : & mut App,) -> Rc<Frame>",
      "cfg": [],
      "target": "Presentation"
    },
    {
      "id": "gpui_kit::display::geography::reexport-1",
      "name": "view :: { GeoEvent , GeoMap , GeoState }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use view::{ GeoEvent, GeoMap, GeoState };",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::reexport-2",
      "name": "ingest :: { GeoProperties , GeoWorldPolicy }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography",
      "path": "gpui_kit::display::geography",
      "source": "crates/gpui-kit/src/display/geography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use ingest::{ GeoProperties, GeoWorldPolicy };",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::spatial::GeoData::fit_viewport",
      "name": "fit_viewport",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::spatial",
      "path": "gpui_kit::display::geography::spatial",
      "source": "crates/gpui-kit/src/display/geography/spatial.rs",
      "summary": "Fit the prepared geometry to a measured frame, with explicit pixel padding. Empty data, unusable frame or nonfinite padding returns None. Zoom and center respect the same camera limits as every other input.",
      "documentation": "Fit the prepared geometry to a measured frame, with explicit pixel\npadding. Empty data, unusable frame or nonfinite padding returns None.\nZoom and center respect the same camera limits as every other input.",
      "signature": "pub fn fit_viewport (& self, size : [f64; 2], padding : f64) -> Option<GeoViewport>",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::spatial::GeoData::simplified",
      "name": "simplified",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::spatial",
      "path": "gpui_kit::display::geography::spatial",
      "source": "crates/gpui-kit/src/display/geography/spatial.rs",
      "summary": "A separate immutable display level with the same source features, values and IDs. Tolerance is in projected unit-world distance, not degrees. Hit testing, clipping and painting all use the returned level. Each polygon is simplified only when its full topology remains valid; otherwise that polygon is retained exactly. No promise of shared-edge preservation between independent features is made.",
      "documentation": "A separate immutable display level with the same source features,\nvalues and IDs. Tolerance is in projected unit-world distance, not\ndegrees. Hit testing, clipping and painting all use the returned level.\nEach polygon is simplified only when its full topology remains valid;\notherwise that polygon is retained exactly. No promise of shared-edge\npreservation between independent features is made.",
      "signature": "pub fn simplified (& self, tolerance : f64) -> Result<Self, GeoRefusal>",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::spatial::GeoData::vertex_count",
      "name": "vertex_count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::spatial",
      "path": "gpui_kit::display::geography::spatial",
      "source": "crates/gpui-kit/src/display/geography/spatial.rs",
      "summary": "Prepared vertex count, including closing vertices. Useful for reporting actual simplification rather than promising a fixed reduction ratio.",
      "documentation": "Prepared vertex count, including closing vertices. Useful for reporting\nactual simplification rather than promising a fixed reduction ratio.",
      "signature": "pub fn vertex_count (& self) -> usize",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::spatial::GeoData::visible_indices",
      "name": "visible_indices",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::spatial",
      "path": "gpui_kit::display::geography::spatial",
      "source": "crates/gpui-kit/src/display/geography/spatial.rs",
      "summary": "Candidate source identities in original paint order. Exact geometry clipping can discard additional candidates. Includes the five-pixel point radius, but never changes which source identity a hit returns.",
      "documentation": "Candidate source identities in original paint order. Exact geometry\nclipping can discard additional candidates. Includes the five-pixel\npoint radius, but never changes which source identity a hit returns.",
      "signature": "pub fn visible_indices (& self, viewport : GeoViewport, size : [f64; 2]) -> Vec<usize>",
      "cfg": [],
      "target": "GeoData"
    },
    {
      "id": "gpui_kit::display::geography::view::GeoEvent",
      "name": "GeoEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::view",
      "path": "gpui_kit::display::geography::view",
      "source": "crates/gpui-kit/src/display/geography/view.rs",
      "summary": "Proposals only. The caller must apply an event and rerender to accept it.",
      "documentation": "Proposals only. The caller must apply an event and rerender to accept it.",
      "signature": "# [doc = \" Proposals only. The caller must apply an event and rerender to accept it.\"] # [derive (Clone, Debug, PartialEq)] pub enum GeoEvent { Select (Option<SharedString>), Viewport (GeoViewport), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::view::GeoMap",
      "name": "GeoMap",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::view",
      "path": "gpui_kit::display::geography::view",
      "source": "crates/gpui-kit/src/display/geography/view.rs",
      "summary": "A controlled local map with choropleth legend, selectable feature readout, and point overlays. Click selects projected geometry; captured drag/touch pans and pinch/Ctrl-wheel zooms about the pointer. Arrow keys pan, +/- zoom, Home resets, F fits, [/] cycle selection. Escape cancels a drag or clears selection. No handler means a read-only map.",
      "documentation": "A controlled local map with choropleth legend, selectable feature readout,\nand point overlays. Click selects projected geometry; captured drag/touch\npans and pinch/Ctrl-wheel zooms about the pointer. Arrow keys pan, +/- zoom,\nHome resets, F fits, [/] cycle selection. Escape cancels a drag or clears\nselection. No handler means a read-only map.",
      "signature": "# [doc = \" A controlled local map with choropleth legend, selectable feature readout,\"] # [doc = \" and point overlays. Click selects projected geometry; captured drag/touch\"] # [doc = \" pans and pinch/Ctrl-wheel zooms about the pointer. Arrow keys pan, +/- zoom,\"] # [doc = \" Home resets, F fits, [/] cycle selection. Escape cancels a drag or clears\"] # [doc = \" selection. No handler means a read-only map.\"] # [derive (IntoElement)] pub struct GeoMap { ident : Ident, label : SharedString, state : GeoState, viewport : GeoViewport, selected : Option<SharedString>, status_text : Option<SharedString>, animate : bool, on_event : Option<Handler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::geography::view::GeoMap::animate",
      "name": "animate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::view",
      "path": "gpui_kit::display::geography::view",
      "source": "crates/gpui-kit/src/display/geography/view.rs",
      "summary": "Animate accepted camera, style, and keyed geometry opacity targets. Direct input and reduced motion snap. Retired shapes are decorative; vertices never interpolate through invalid topology. Readouts use target values.",
      "documentation": "Animate accepted camera, style, and keyed geometry opacity targets.\nDirect input and reduced motion snap. Retired shapes are decorative;\nvertices never interpolate through invalid topology. Readouts use target values.",
      "signature": "pub fn animate (mut self, animate : bool) -> Self",
      "cfg": [],
      "target": "GeoMap"
    },
    {
      "id": "gpui_kit::display::geography::view::GeoMap::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::view",
      "path": "gpui_kit::display::geography::view",
      "source": "crates/gpui-kit/src/display/geography/view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GeoMap"
    },
    {
      "id": "gpui_kit::display::geography::view::GeoMap::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::view",
      "path": "gpui_kit::display::geography::view",
      "source": "crates/gpui-kit/src/display/geography/view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (GeoEvent, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "GeoMap"
    },
    {
      "id": "gpui_kit::display::geography::view::GeoMap::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::view",
      "path": "gpui_kit::display::geography::view",
      "source": "crates/gpui-kit/src/display/geography/view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : Option<SharedString>) -> Self",
      "cfg": [],
      "target": "GeoMap"
    },
    {
      "id": "gpui_kit::display::geography::view::GeoMap::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::view",
      "path": "gpui_kit::display::geography::view",
      "source": "crates/gpui-kit/src/display/geography/view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : GeoState) -> Self",
      "cfg": [],
      "target": "GeoMap"
    },
    {
      "id": "gpui_kit::display::geography::view::GeoMap::status_text",
      "name": "status_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::view",
      "path": "gpui_kit::display::geography::view",
      "source": "crates/gpui-kit/src/display/geography/view.rs",
      "summary": "Caller-owned complete status/reason wording, including localized input refusal messages. Does not change machine-readable status or phase.",
      "documentation": "Caller-owned complete status/reason wording, including localized input\nrefusal messages. Does not change machine-readable status or phase.",
      "signature": "pub fn status_text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "GeoMap"
    },
    {
      "id": "gpui_kit::display::geography::view::GeoMap::viewport",
      "name": "viewport",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::view",
      "path": "gpui_kit::display::geography::view",
      "source": "crates/gpui-kit/src/display/geography/view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn viewport (mut self, viewport : GeoViewport) -> Self",
      "cfg": [],
      "target": "GeoMap"
    },
    {
      "id": "gpui_kit::display::geography::view::GeoState",
      "name": "GeoState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::geography::view",
      "path": "gpui_kit::display::geography::view",
      "source": "crates/gpui-kit/src/display/geography/view.rs",
      "summary": "Caller-owned loading and verified-data states. Stale retains the last data.",
      "documentation": "Caller-owned loading and verified-data states. Stale retains the last data.",
      "signature": "# [doc = \" Caller-owned loading and verified-data states. Stale retains the last data.\"] # [derive (Clone, Debug)] pub enum GeoState { Loading, Empty, Ready (Rc<GeoData>), Stale { data : Rc<GeoData>, reason : SharedString, }, Unavailable (SharedString), Error (SharedString), Refused (GeoRefusal), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::heatmap::ContinuousHeatCell",
      "name": "ContinuousHeatCell",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "A raw observation; `None` is missing, not zero. The existing five-level [`HeatCell`] contract remains unchanged and is not used as a numeric bin.",
      "documentation": "A raw observation; `None` is missing, not zero. The existing five-level\n[`HeatCell`] contract remains unchanged and is not used as a numeric bin.",
      "signature": "# [doc = \" A raw observation; `None` is missing, not zero. The existing five-level\"] # [doc = \" [`HeatCell`] contract remains unchanged and is not used as a numeric bin.\"] # [derive (Debug, Clone, PartialEq)] pub struct ContinuousHeatCell { pub id : SharedString, pub row : SharedString, pub column : SharedString, pub label : SharedString, pub reading : Option<f64>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::heatmap::ContinuousHeatCell::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, row : impl Into<SharedString>, column : impl Into<SharedString>, label : impl Into<SharedString>, reading : Option<f64>,) -> Self",
      "cfg": [],
      "target": "ContinuousHeatCell"
    },
    {
      "id": "gpui_kit::display::heatmap::ContinuousHeatmap",
      "name": "ContinuousHeatmap",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "A raw-valued matrix with visible cell values and a numeric color legend. Selection is caller controlled. Invalid coordinates, identities, and readings produce an explicit error; a stale refresh retains verified cells and reason.",
      "documentation": "A raw-valued matrix with visible cell values and a numeric color legend.\nSelection is caller controlled. Invalid coordinates, identities, and readings\nproduce an explicit error; a stale refresh retains verified cells and reason.",
      "signature": "# [doc = \" A raw-valued matrix with visible cell values and a numeric color legend.\"] # [doc = \" Selection is caller controlled. Invalid coordinates, identities, and readings\"] # [doc = \" produce an explicit error; a stale refresh retains verified cells and reason.\"] # [derive (IntoElement)] pub struct ContinuousHeatmap { ident : Ident, label : SharedString, rows : Vec<HeatAxis>, columns : Vec<HeatAxis>, state : super::plot::PlotState<Vec<ContinuousHeatCell>>, scale : HeatColorScale, current : Option<SharedString>, on_current : Option<HeatSelection>, motion : bool, animation : Option<crate::motion::MotionSpec>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::heatmap::ContinuousHeatmap::animate",
      "name": "animate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "Default-enabled visual color, value-opacity and keyed layout motion. Disabling snaps the displayed data without disabling input.",
      "documentation": "Default-enabled visual color, value-opacity and keyed layout motion.\nDisabling snaps the displayed data without disabling input.",
      "signature": "pub fn animate (self, enabled : bool) -> Self",
      "cfg": [],
      "target": "ContinuousHeatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::ContinuousHeatmap::animation",
      "name": "animation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "Override theme timing; application reduced motion always takes precedence.",
      "documentation": "Override theme timing; application reduced motion always takes precedence.",
      "signature": "pub fn animation (mut self, spec : crate::motion::MotionSpec) -> Self",
      "cfg": [],
      "target": "ContinuousHeatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::ContinuousHeatmap::columns",
      "name": "columns",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn columns (mut self, columns : impl IntoIterator<Item = impl Into<HeatAxis>>) -> Self",
      "cfg": [],
      "target": "ContinuousHeatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::ContinuousHeatmap::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ContinuousHeatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::ContinuousHeatmap::motion",
      "name": "motion",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "Animate color changes and fade in changed value text. Semantic values and tooltips remain exact latest readings; numbers are never tweened.",
      "documentation": "Animate color changes and fade in changed value text. Semantic values\nand tooltips remain exact latest readings; numbers are never tweened.",
      "signature": "pub fn motion (mut self, enabled : bool) -> Self",
      "cfg": [],
      "target": "ContinuousHeatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::ContinuousHeatmap::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, scale : HeatColorScale, state : super::plot::PlotState<Vec<ContinuousHeatCell>>,) -> Self",
      "cfg": [],
      "target": "ContinuousHeatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::ContinuousHeatmap::on_current",
      "name": "on_current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_current (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "ContinuousHeatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::ContinuousHeatmap::rows",
      "name": "rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rows (mut self, rows : impl IntoIterator<Item = impl Into<HeatAxis>>) -> Self",
      "cfg": [],
      "target": "ContinuousHeatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::HeatAxis",
      "name": "HeatAxis",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "One row or column of the grid: what a cell joins on, and what is printed.",
      "documentation": "One row or column of the grid: what a cell joins on, and what is printed.\n\nThese are two different things and were one string. A column is joined on\nby identity and printed in the width of a cell, so a period a reader would\nrecognise — a week starting date, a build id — cannot be both without\neither colliding with the next column or truncating to nothing. Passing a\nbare string still works and names the axis entry after itself.",
      "signature": "# [doc = \" One row or column of the grid: what a cell joins on, and what is printed.\"] # [doc = \"\"] # [doc = \" These are two different things and were one string. A column is joined on\"] # [doc = \" by identity and printed in the width of a cell, so a period a reader would\"] # [doc = \" recognise — a week starting date, a build id — cannot be both without\"] # [doc = \" either colliding with the next column or truncating to nothing. Passing a\"] # [doc = \" bare string still works and names the axis entry after itself.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct HeatAxis { pub id : SharedString, pub label : SharedString, # [doc = \" The larger period this entry belongs to, if the host names one.\"] pub group : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::heatmap::HeatAxis::group",
      "name": "group",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "The period this column belongs to, printed once over the run of columns that share it.",
      "documentation": "The period this column belongs to, printed once over the run of\ncolumns that share it.\n\nA column prints what fits over a cell, which for a calendar is a day\nand not a date. Repeated across a quarter that is four columns headed\n`3`, `10`, `17`, `24` three times over, and a reader has no way to\ntell the second run from the third. The host already knows which\nperiod each column came from; it says so here rather than being made\nto fit the whole date into sixteen pixels.",
      "signature": "pub fn group (mut self, group : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "HeatAxis"
    },
    {
      "id": "gpui_kit::display::heatmap::HeatAxis::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "HeatAxis"
    },
    {
      "id": "gpui_kit::display::heatmap::HeatCell",
      "name": "HeatCell",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "One observation in the matrix, or the absence of one.",
      "documentation": "One observation in the matrix, or the absence of one.",
      "signature": "# [doc = \" One observation in the matrix, or the absence of one.\"] # [derive (Debug, Clone, PartialEq)] pub struct HeatCell { pub id : SharedString, pub row : SharedString, pub column : SharedString, # [doc = \" `None` is no observation. `Some(0)` is a measured empty. `Some(1..=4)`\"] # [doc = \" is increasing density. Values above 4 clamp to the top step.\"] pub level : Option<u8>, pub label : SharedString, pub value : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::heatmap::HeatCell::empty",
      "name": "empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn empty (mut self) -> Self",
      "cfg": [],
      "target": "HeatCell"
    },
    {
      "id": "gpui_kit::display::heatmap::HeatCell::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "HeatCell"
    },
    {
      "id": "gpui_kit::display::heatmap::HeatCell::level",
      "name": "level",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn level (mut self, level : u8) -> Self",
      "cfg": [],
      "target": "HeatCell"
    },
    {
      "id": "gpui_kit::display::heatmap::HeatCell::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, row : impl Into<SharedString>, column : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "HeatCell"
    },
    {
      "id": "gpui_kit::display::heatmap::HeatCell::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn value (mut self, value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "HeatCell"
    },
    {
      "id": "gpui_kit::display::heatmap::HeatColorScale",
      "name": "HeatColorScale",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "A continuous color encoding with a required finite, strictly increasing domain. Diverging maps interpolate each side independently: the neutral color corresponds to the explicit center, not the arithmetic midpoint. Errors are stable [`StringKey::name`] values, not display text; resolve them through the active strings when presenting them outside [`ContinuousHeatmap`].",
      "documentation": "A continuous color encoding with a required finite, strictly increasing\ndomain. Diverging maps interpolate each side independently: the neutral\ncolor corresponds to the explicit center, not the arithmetic midpoint.\nErrors are stable [`StringKey::name`] values, not display text; resolve them\nthrough the active strings when presenting them outside [`ContinuousHeatmap`].",
      "signature": "# [doc = \" A continuous color encoding with a required finite, strictly increasing\"] # [doc = \" domain. Diverging maps interpolate each side independently: the neutral\"] # [doc = \" color corresponds to the explicit center, not the arithmetic midpoint.\"] # [doc = \" Errors are stable [`StringKey::name`] values, not display text; resolve them\"] # [doc = \" through the active strings when presenting them outside [`ContinuousHeatmap`].\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct HeatColorScale { domain : [f64; 3], colors : [gpui::Hsla; 3], }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::heatmap::HeatColorScale::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "Out-of-domain and nonfinite readings are invalid, never silently clamped.",
      "documentation": "Out-of-domain and nonfinite readings are invalid, never silently clamped.",
      "signature": "pub fn color (self, value : f64) -> Result<gpui::Hsla, & 'static str>",
      "cfg": [],
      "target": "HeatColorScale"
    },
    {
      "id": "gpui_kit::display::heatmap::HeatColorScale::diverging",
      "name": "diverging",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn diverging (domain : [f64; 3], low : gpui::Hsla, center : gpui::Hsla, high : gpui::Hsla,) -> Result<Self, & 'static str>",
      "cfg": [],
      "target": "HeatColorScale"
    },
    {
      "id": "gpui_kit::display::heatmap::HeatColorScale::domain",
      "name": "domain",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn domain (self) -> [f64; 3]",
      "cfg": [],
      "target": "HeatColorScale"
    },
    {
      "id": "gpui_kit::display::heatmap::HeatColorScale::sequential",
      "name": "sequential",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sequential (domain : [f64; 2], low : gpui::Hsla, high : gpui::Hsla,) -> Result<Self, & 'static str>",
      "cfg": [],
      "target": "HeatColorScale"
    },
    {
      "id": "gpui_kit::display::heatmap::Heatmap",
      "name": "Heatmap",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "A labelled grid of intensity cells.",
      "documentation": "A labelled grid of intensity cells.",
      "signature": "# [doc = \" A labelled grid of intensity cells.\"] # [derive (Debug, IntoElement)] pub struct Heatmap { ident : Ident, label : SharedString, rows : Vec<HeatAxis>, columns : Vec<HeatAxis>, cells : Vec<HeatCell>, state : HeatmapState, tint : Option<gpui::Hsla>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::heatmap::Heatmap::cells",
      "name": "cells",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cells (mut self, cells : impl IntoIterator<Item = HeatCell>) -> Self",
      "cfg": [],
      "target": "Heatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::Heatmap::columns",
      "name": "columns",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn columns (mut self, columns : impl IntoIterator<Item = impl Into<HeatAxis>>) -> Self",
      "cfg": [],
      "target": "Heatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::Heatmap::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Heatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::Heatmap::rows",
      "name": "rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rows (mut self, rows : impl IntoIterator<Item = impl Into<HeatAxis>>) -> Self",
      "cfg": [],
      "target": "Heatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::Heatmap::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : HeatmapState) -> Self",
      "cfg": [],
      "target": "Heatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::Heatmap::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "The colour the density ramp is built from.",
      "documentation": "The colour the density ramp is built from.\n\nNeutral by default: the ramp is one quantity, and one quantity needs\na scale rather than a hue. A caller whose matrix already belongs to a\ncolour — a series in a chart beside it, a person, a repository — hands\nthat colour over here so the two agree.",
      "signature": "pub fn tint (mut self, tint : gpui::Hsla) -> Self",
      "cfg": [],
      "target": "Heatmap"
    },
    {
      "id": "gpui_kit::display::heatmap::HeatmapState",
      "name": "HeatmapState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "How the matrix was asked for.",
      "documentation": "How the matrix was asked for.",
      "signature": "# [doc = \" How the matrix was asked for.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum HeatmapState { Loading, Ready, Empty, Unavailable (SharedString), Error (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::heatmap::HeatmapState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::heatmap",
      "path": "gpui_kit::display::heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "HeatmapState"
    },
    {
      "id": "gpui_kit::display::highlight::HighlightedText",
      "name": "HighlightedText",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::highlight",
      "path": "gpui_kit::display::highlight",
      "source": "crates/gpui-kit/src/display/highlight.rs",
      "summary": "A run of text with some of it marked.",
      "documentation": "A run of text with some of it marked.\n\nThe current mark is a different treatment from the rest, not a stronger\none: \"which hit am I on\" and \"where are the other hits\" are two questions,\nand one shade of the same colour answers neither clearly.",
      "signature": "# [doc = \" A run of text with some of it marked.\"] # [doc = \"\"] # [doc = \" The current mark is a different treatment from the rest, not a stronger\"] # [doc = \" one: \\\"which hit am I on\\\" and \\\"where are the other hits\\\" are two questions,\"] # [doc = \" and one shade of the same colour answers neither clearly.\"] # [derive (Debug, IntoElement)] pub struct HighlightedText { ident : Option<Ident>, selection_ident : Option<Ident>, document_order : Option<u64>, virtualized : bool, text : SharedString, hits : Vec<Range<usize>>, current : Option<usize>, monospace : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::highlight::HighlightedText::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::highlight",
      "path": "gpui_kit::display::highlight",
      "source": "crates/gpui-kit/src/display/highlight.rs",
      "summary": "Which hit, by index into [`HighlightedText::hits`], is the current one.",
      "documentation": "Which hit, by index into [`HighlightedText::hits`], is the current one.",
      "signature": "pub fn current (mut self, index : usize) -> Self",
      "cfg": [],
      "target": "HighlightedText"
    },
    {
      "id": "gpui_kit::display::highlight::HighlightedText::hits",
      "name": "hits",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::highlight",
      "path": "gpui_kit::display::highlight",
      "source": "crates/gpui-kit/src/display/highlight.rs",
      "summary": "The ranges to mark, in byte offsets into the text this was given.",
      "documentation": "The ranges to mark, in byte offsets into the text this was given.",
      "signature": "pub fn hits (mut self, hits : impl IntoIterator<Item = Range<usize>>) -> Self",
      "cfg": [],
      "target": "HighlightedText"
    },
    {
      "id": "gpui_kit::display::highlight::HighlightedText::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::highlight",
      "path": "gpui_kit::display::highlight",
      "source": "crates/gpui-kit/src/display/highlight.rs",
      "summary": "Publishes a node under this id. Without one nothing is published, the way a decorative `Badge` publishes nothing.",
      "documentation": "Publishes a node under this id. Without one nothing is published, the\nway a decorative `Badge` publishes nothing.",
      "signature": "pub fn id (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "HighlightedText"
    },
    {
      "id": "gpui_kit::display::highlight::HighlightedText::in_document",
      "name": "in_document",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::highlight",
      "path": "gpui_kit::display::highlight",
      "source": "crates/gpui-kit/src/display/highlight.rs",
      "summary": "Joins this text to its window's document selection at `order`, so one drag reaches the entries above and below it rather than stopping at this row's edge.",
      "documentation": "Joins this text to its window's document selection at `order`, so one\ndrag reaches the entries above and below it rather than stopping at\nthis row's edge.\n\nA caller that virtualizes its rows passes `virtualized`, which makes a\ncopy crossing the rows that were never mounted report itself\nincomplete instead of quietly omitting them.",
      "signature": "pub fn in_document (mut self, order : u64, virtualized : bool) -> Self",
      "cfg": [],
      "target": "HighlightedText"
    },
    {
      "id": "gpui_kit::display::highlight::HighlightedText::monospace",
      "name": "monospace",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::highlight",
      "path": "gpui_kit::display::highlight",
      "source": "crates/gpui-kit/src/display/highlight.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn monospace (mut self, monospace : bool) -> Self",
      "cfg": [],
      "target": "HighlightedText"
    },
    {
      "id": "gpui_kit::display::highlight::HighlightedText::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::highlight",
      "path": "gpui_kit::display::highlight",
      "source": "crates/gpui-kit/src/display/highlight.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "HighlightedText"
    },
    {
      "id": "gpui_kit::display::highlight::HighlightedText::published_hits",
      "name": "published_hits",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::highlight",
      "path": "gpui_kit::display::highlight",
      "source": "crates/gpui-kit/src/display/highlight.rs",
      "summary": "How many of the given ranges name text this string actually holds.",
      "documentation": "How many of the given ranges name text this string actually holds.\n\nA caller whose offsets are wrong gets a smaller number than it handed\nin, which is how a broken boundary is noticed rather than guessed at.",
      "signature": "pub fn published_hits (& self) -> usize",
      "cfg": [],
      "target": "HighlightedText"
    },
    {
      "id": "gpui_kit::display::highlight::HighlightedText::selectable",
      "name": "selectable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::highlight",
      "path": "gpui_kit::display::highlight",
      "source": "crates/gpui-kit/src/display/highlight.rs",
      "summary": "Enables native text selection without publishing the text in a semantic snapshot. This is appropriate for redacted logs and other caller-owned content whose bounds still need stable transient state.",
      "documentation": "Enables native text selection without publishing the text in a\nsemantic snapshot. This is appropriate for redacted logs and other\ncaller-owned content whose bounds still need stable transient state.",
      "signature": "pub fn selectable (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "HighlightedText"
    },
    {
      "id": "gpui_kit::display::icon::Icon",
      "name": "Icon",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "A glyph from the bundled catalog.",
      "documentation": "A glyph from the bundled catalog.",
      "signature": "# [doc = \" A glyph from the bundled catalog.\"] # [derive (Debug, Clone, IntoElement)] pub struct Icon { glyph : Glyph, size : ControlSize, tone : IconTone, announcement : Announcement, follow_direction : bool, # [doc = \" How this glyph reports work in progress, and the identity that\"] # [doc = \" animation runs under. `None` is a glyph reporting a settled state.\"] activity : Option<(motion::Activity, Ident)>, # [doc = \" A bounded response to a state change, distinct from ongoing activity.\"] reaction : Option<(motion::Micro, Ident)>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::icon::Icon::accent",
      "name": "accent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn accent (self) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::breathing",
      "name": "breathing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "Breathes the glyph, for a state that is deliberating rather than getting through work. The quieter of the two claims.",
      "documentation": "Breathes the glyph, for a state that is deliberating rather than\ngetting through work. The quieter of the two claims.",
      "signature": "pub fn breathing (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::danger",
      "name": "danger",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn danger (self) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::faint",
      "name": "faint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn faint (self) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::flips_in",
      "name": "flips_in",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "Whether this glyph would be drawn flipped in `direction`.",
      "documentation": "Whether this glyph would be drawn flipped in `direction`.",
      "signature": "pub fn flips_in (& self, direction : LayoutDirection) -> bool",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::follow_direction",
      "name": "follow_direction",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "Whether the active reading direction may flip this glyph.",
      "documentation": "Whether the active reading direction may flip this glyph.\n\nOn by default, and the glyph still decides: only a\n[`Directional`](gpui_kit_assets::Mirroring::Directional) drawing ever\nflips. Turning it off is for a caller that has already rotated the\nglyph into another meaning, where a horizontal flip would land it\nsomewhere neither reading direction points.",
      "signature": "pub fn follow_direction (mut self, follow : bool) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::info",
      "name": "info",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn info (self) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::muted",
      "name": "muted",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn muted (self) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::named",
      "name": "named",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "A glyph that is the only thing saying what it means.",
      "documentation": "A glyph that is the only thing saying what it means.\n\nThe name is a constructor argument rather than an option for the same\nreason [`IconButton`](crate::controls::button::IconButton)'s is: a\npicture nobody can name is a picture nobody can address.",
      "signature": "pub fn named (ident : impl Into<Ident>, glyph : Glyph, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "A glyph that repeats an adjacent label, and is not announced.",
      "documentation": "A glyph that repeats an adjacent label, and is not announced.",
      "signature": "pub fn new (glyph : Glyph) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::on_accent",
      "name": "on_accent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_accent (self) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::reacting",
      "name": "reacting",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "Reacts once to a settled state change with a named micro-motion.",
      "documentation": "Reacts once to a settled state change with a named micro-motion.\n\nTypical pairings are [`motion::Micro::Pop`] for success,\n[`motion::Micro::Wobble`] for refusal or error, and\n[`motion::Micro::Sparkle`] for a newly available result. Reduced-motion\npolicy is resolved by the shared motion authority, not by the caller.",
      "signature": "pub fn reacting (mut self, ident : impl Into<Ident>, reaction : motion::Micro) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::resolved_color",
      "name": "resolved_color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn resolved_color (& self, theme : & Theme) -> Hsla",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::resolved_size",
      "name": "resolved_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "The painted edge length, in pixels, at the active theme and size.",
      "documentation": "The painted edge length, in pixels, at the active theme and size.",
      "signature": "pub fn resolved_size (& self, theme : & Theme) -> f32",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::spinning",
      "name": "spinning",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "Turns the glyph, for a state that is still running.",
      "documentation": "Turns the glyph, for a state that is still running.\n\nThis exists because the alternative kept being chosen by accident: a\nrotation glyph is the obvious drawing for \"working\", and a rotation\nglyph that does not rotate reads as one that has jammed. Whichever\ncomponent reports running work, it reports it the same way through\nhere.\n\nThe identity is asked for rather than derived because a decorative\nglyph has none, and an animation needs something stable to run under.",
      "signature": "pub fn spinning (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::success",
      "name": "success",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn success (self) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::tone",
      "name": "tone",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tone (mut self, tone : IconTone) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::Icon::warning",
      "name": "warning",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn warning (self) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit::display::icon::IconTone",
      "name": "IconTone",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "The semantic colour role a glyph paints in.",
      "documentation": "The semantic colour role a glyph paints in.\n\nEvery variant names a role the theme already carries, so a glyph never\nintroduces a colour the token document has not authorised.",
      "signature": "# [doc = \" The semantic colour role a glyph paints in.\"] # [doc = \"\"] # [doc = \" Every variant names a role the theme already carries, so a glyph never\"] # [doc = \" introduces a colour the token document has not authorised.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum IconTone { # [default] Primary, Muted, Faint, OnAccent, Accent, AccentStrong, Danger, Warning, Success, Info, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::icon::IconTone::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn color (self, theme : & Theme) -> Hsla",
      "cfg": [],
      "target": "IconTone"
    },
    {
      "id": "gpui_kit::display::icon::flips",
      "name": "flips",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "Whether `glyph` should be drawn flipped when the interface reads `direction`.",
      "documentation": "Whether `glyph` should be drawn flipped when the interface reads\n`direction`.",
      "signature": "pub fn flips (glyph : Glyph, direction : LayoutDirection) -> bool",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::icon::paint",
      "name": "paint",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::icon",
      "path": "gpui_kit::display::icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "One glyph, sized, coloured, and flipped or not.",
      "documentation": "One glyph, sized, coloured, and flipped or not.\n\nExposed so a component that draws a glyph inside a frame it already owns —\na disclosure triangle inside a hit target, a marker inside a step dot —\ngets the same reading-direction behaviour without wrapping another\nelement around it.",
      "signature": "pub fn paint (glyph : Glyph, edge : f32, color : Hsla, flipped : bool) -> Svg",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::loading::BarLoader",
      "name": "BarLoader",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "A thin working strip for the edge of a region that is filling in.",
      "documentation": "A thin working strip for the edge of a region that is filling in.\n\nThe bar form of [`Spinner`]: same claim — running, extent unknown — for a\nplace that has a width rather than a corner. It never shows a position,\nwhich is what separates it from an indeterminate\n[`crate::display::progress::ProgressBar`]: that one is for work that will\ngain a position, this one is for a surface that is simply not ready.",
      "signature": "# [doc = \" A thin working strip for the edge of a region that is filling in.\"] # [doc = \"\"] # [doc = \" The bar form of [`Spinner`]: same claim — running, extent unknown — for a\"] # [doc = \" place that has a width rather than a corner. It never shows a position,\"] # [doc = \" which is what separates it from an indeterminate\"] # [doc = \" [`crate::display::progress::ProgressBar`]: that one is for work that will\"] # [doc = \" gain a position, this one is for a surface that is simply not ready.\"] # [derive (Debug, IntoElement)] pub struct BarLoader { ident : Ident, tint : Option<Hsla>, label : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::loading::BarLoader::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "BarLoader"
    },
    {
      "id": "gpui_kit::display::loading::BarLoader::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "BarLoader"
    },
    {
      "id": "gpui_kit::display::loading::BarLoader::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "A caller-meant colour in place of the neutral mark.",
      "documentation": "A caller-meant colour in place of the neutral mark.",
      "signature": "pub fn tint (mut self, tint : impl Into<Hsla>) -> Self",
      "cfg": [],
      "target": "BarLoader"
    },
    {
      "id": "gpui_kit::display::loading::LoadMore",
      "name": "LoadMore",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "The tail row of an incrementally loaded list.",
      "documentation": "The tail row of an incrementally loaded list.\n\nThree states, three different pictures: an affordance to fetch, a wait,\nand an end. A list whose tail looks the same while it fetches and once it\nis done has stopped saying which of the two holds.",
      "signature": "# [doc = \" The tail row of an incrementally loaded list.\"] # [doc = \"\"] # [doc = \" Three states, three different pictures: an affordance to fetch, a wait,\"] # [doc = \" and an end. A list whose tail looks the same while it fetches and once it\"] # [doc = \" is done has stopped saying which of the two holds.\"] # [derive (IntoElement)] pub struct LoadMore { ident : Ident, state : LoadMoreState, on_more : Option<MoreHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::loading::LoadMore::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "LoadMore"
    },
    {
      "id": "gpui_kit::display::loading::LoadMore::on_more",
      "name": "on_more",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "What fetching the next page does. Without it the idle tail shows the fact and installs nothing, because a control that cannot act is not drawn as one.",
      "documentation": "What fetching the next page does. Without it the idle tail shows the\nfact and installs nothing, because a control that cannot act is not\ndrawn as one.",
      "signature": "pub fn on_more (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "LoadMore"
    },
    {
      "id": "gpui_kit::display::loading::LoadMore::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : LoadMoreState) -> Self",
      "cfg": [],
      "target": "LoadMore"
    },
    {
      "id": "gpui_kit::display::loading::LoadMoreState",
      "name": "LoadMoreState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "What the tail of a list is doing.",
      "documentation": "What the tail of a list is doing.",
      "signature": "# [doc = \" What the tail of a list is doing.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum LoadMoreState { # [doc = \" More exists and fetching it is the reader's call.\"] # [default] Idle, # [doc = \" The next page is in flight.\"] Loading, # [doc = \" The list has said it has no more.\"] Exhausted, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::loading::PulseLoader",
      "name": "PulseLoader",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "A row of breathing dots, used while a request is in flight.",
      "documentation": "A row of breathing dots, used while a request is in flight.\n\nThe quietest of the family: it claims only that something is being\nwaited on, so it breathes rather than turns.",
      "signature": "# [doc = \" A row of breathing dots, used while a request is in flight.\"] # [doc = \"\"] # [doc = \" The quietest of the family: it claims only that something is being\"] # [doc = \" waited on, so it breathes rather than turns.\"] # [derive (Debug, IntoElement)] pub struct PulseLoader { ident : Ident, size : ControlSize, tint : Option<Hsla>, label : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::loading::PulseLoader::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "What the wait is for. Announced with the busy state.",
      "documentation": "What the wait is for. Announced with the busy state.",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PulseLoader"
    },
    {
      "id": "gpui_kit::display::loading::PulseLoader::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "PulseLoader"
    },
    {
      "id": "gpui_kit::display::loading::PulseLoader::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "A caller-meant colour in place of the neutral mark. The caller owns the meaning; the loader never picks a hue itself.",
      "documentation": "A caller-meant colour in place of the neutral mark. The caller owns\nthe meaning; the loader never picks a hue itself.",
      "signature": "pub fn tint (mut self, tint : impl Into<Hsla>) -> Self",
      "cfg": [],
      "target": "PulseLoader"
    },
    {
      "id": "gpui_kit::display::loading::RefreshVeil",
      "name": "RefreshVeil",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "A veil over content that is still the last verified value.",
      "documentation": "A veil over content that is still the last verified value.\n\nThe content stays. The veil says a refresh is in flight. Erasing the\ncontent would be the lie [`crate::state::AsyncValue`] exists to prevent.",
      "signature": "# [doc = \" A veil over content that is still the last verified value.\"] # [doc = \"\"] # [doc = \" The content stays. The veil says a refresh is in flight. Erasing the\"] # [doc = \" content would be the lie [`crate::state::AsyncValue`] exists to prevent.\"] # [derive (IntoElement)] pub struct RefreshVeil { ident : Ident, content : AnyElement, label : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::loading::RefreshVeil::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RefreshVeil"
    },
    {
      "id": "gpui_kit::display::loading::RefreshVeil::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "RefreshVeil"
    },
    {
      "id": "gpui_kit::display::loading::Skeleton",
      "name": "Skeleton",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "Placeholder rows shown while a list's real shape is unknown.",
      "documentation": "Placeholder rows shown while a list's real shape is unknown.\n\nFilled with `color.loader.placeholder`, which the token gate holds inside\na loudness band: quieter than content by contract, because a skeleton that\noutshouts the page is announcing the absence of content as if it were the\ncontent.",
      "signature": "# [doc = \" Placeholder rows shown while a list's real shape is unknown.\"] # [doc = \"\"] # [doc = \" Filled with `color.loader.placeholder`, which the token gate holds inside\"] # [doc = \" a loudness band: quieter than content by contract, because a skeleton that\"] # [doc = \" outshouts the page is announcing the absence of content as if it were the\"] # [doc = \" content.\"] # [derive (Debug, IntoElement)] pub struct Skeleton { ident : Ident, rows : usize, row_height : f32, # [doc = \" How wide each row is, as a fraction of the frame. A list that is\"] # [doc = \" still loading rarely has every row the same length; the pattern is\"] # [doc = \" the claim, not a measurement of content that does not exist yet.\"] widths : Vec<f32>, shapes : Vec<SkeletonShape>, label : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::loading::Skeleton::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Skeleton"
    },
    {
      "id": "gpui_kit::display::loading::Skeleton::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Skeleton"
    },
    {
      "id": "gpui_kit::display::loading::Skeleton::row_height",
      "name": "row_height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn row_height (mut self, row_height : f32) -> Self",
      "cfg": [],
      "target": "Skeleton"
    },
    {
      "id": "gpui_kit::display::loading::Skeleton::rows",
      "name": "rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "Skeleton"
    },
    {
      "id": "gpui_kit::display::loading::Skeleton::shapes",
      "name": "shapes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "Replaces the row list with an explicit sequence of shapes.",
      "documentation": "Replaces the row list with an explicit sequence of shapes.\n\n[`Skeleton::rows`] and [`Skeleton::widths`] stay as the list case.",
      "signature": "pub fn shapes (mut self, shapes : impl IntoIterator<Item = SkeletonShape>) -> Self",
      "cfg": [],
      "target": "Skeleton"
    },
    {
      "id": "gpui_kit::display::loading::Skeleton::widths",
      "name": "widths",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "The width of each placeholder row, as a fraction of the frame.",
      "documentation": "The width of each placeholder row, as a fraction of the frame.\n\nMissing entries reuse the last supplied width; an empty list leaves\nevery row full-width. Values are clamped to `(0, 1]`.",
      "signature": "pub fn widths (mut self, widths : impl IntoIterator<Item = f32>) -> Self",
      "cfg": [],
      "target": "Skeleton"
    },
    {
      "id": "gpui_kit::display::loading::SkeletonShape",
      "name": "SkeletonShape",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "One placeholder a skeleton can draw.",
      "documentation": "One placeholder a skeleton can draw.\n\nA row is the list case. The others exist so a card, an avatar, or a\nparagraph can wait as themselves rather than as three identical bars.",
      "signature": "# [doc = \" One placeholder a skeleton can draw.\"] # [doc = \"\"] # [doc = \" A row is the list case. The others exist so a card, an avatar, or a\"] # [doc = \" paragraph can wait as themselves rather than as three identical bars.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub enum SkeletonShape { Row { width : f32, height : f32 }, Paragraph { lines : usize }, Circle { size : f32 }, Rect { width : f32, height : f32 }, Card, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::loading::Spinner",
      "name": "Spinner",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "An inline turn, for a wait that sits next to a label.",
      "documentation": "An inline turn, for a wait that sits next to a label.\n\nAn open arc travelling a quiet ring: the gap is what says the ring is not\na position. Under reduced motion the arc stands still and longer, which is\nthe resting spinner shape rather than a stalled sweep.",
      "signature": "# [doc = \" An inline turn, for a wait that sits next to a label.\"] # [doc = \"\"] # [doc = \" An open arc travelling a quiet ring: the gap is what says the ring is not\"] # [doc = \" a position. Under reduced motion the arc stands still and longer, which is\"] # [doc = \" the resting spinner shape rather than a stalled sweep.\"] # [derive (Debug, IntoElement)] pub struct Spinner { ident : Ident, size : ControlSize, tint : Option<Hsla>, label : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::loading::Spinner::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Spinner"
    },
    {
      "id": "gpui_kit::display::loading::Spinner::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Spinner"
    },
    {
      "id": "gpui_kit::display::loading::Spinner::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::loading",
      "path": "gpui_kit::display::loading",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "A caller-meant colour in place of the neutral mark.",
      "documentation": "A caller-meant colour in place of the neutral mark.",
      "signature": "pub fn tint (mut self, tint : impl Into<Hsla>) -> Self",
      "cfg": [],
      "target": "Spinner"
    },
    {
      "id": "gpui_kit::display::metric::DeltaDirection",
      "name": "DeltaDirection",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::metric",
      "path": "gpui_kit::display::metric",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "Which way a delta points.",
      "documentation": "Which way a delta points.\n\nThis is direction, never judgement. Whether moving that way is good is the\ncaller's [`Tone`], because only the caller knows the polarity of its own\nmetric — a rising error rate and a rising revenue both point up.",
      "signature": "# [doc = \" Which way a delta points.\"] # [doc = \"\"] # [doc = \" This is direction, never judgement. Whether moving that way is good is the\"] # [doc = \" caller's [`Tone`], because only the caller knows the polarity of its own\"] # [doc = \" metric — a rising error rate and a rising revenue both point up.\"] # [derive (Debug, Clone, Copy, Default, PartialEq, Eq)] pub enum DeltaDirection { Up, Down, # [default] Flat, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::metric::DeltaDirection::from_text",
      "name": "from_text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::metric",
      "path": "gpui_kit::display::metric",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "The direction the host's own delta text already states.",
      "documentation": "The direction the host's own delta text already states.\n\nOnly the leading sign is read, and only the characters a formatter\nwrites for one: nothing is inferred from the magnitude, and text\ncarrying no sign points nowhere rather than being guessed at.",
      "signature": "pub fn from_text (delta : & str) -> Self",
      "cfg": [],
      "target": "DeltaDirection"
    },
    {
      "id": "gpui_kit::display::metric::MetricCard",
      "name": "MetricCard",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::metric",
      "path": "gpui_kit::display::metric",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "A compact KPI card.",
      "documentation": "A compact KPI card.",
      "signature": "# [doc = \" A compact KPI card.\"] # [derive (IntoElement)] pub struct MetricCard { ident : Ident, label : SharedString, state : MetricState, tint : Option<Hsla>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::metric::MetricCard::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::metric",
      "path": "gpui_kit::display::metric",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : MetricState,) -> Self",
      "cfg": [],
      "target": "MetricCard"
    },
    {
      "id": "gpui_kit::display::metric::MetricCard::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::metric",
      "path": "gpui_kit::display::metric",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "The colour this metric is known by, which its trend is drawn in.",
      "documentation": "The colour this metric is known by, which its trend is drawn in.\n\nWithout one the trend takes the theme accent. A caller that has\nalready spent a colour on this series elsewhere — a legend, a chart\nthe card sits beside — passes it here so the two agree.",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "MetricCard"
    },
    {
      "id": "gpui_kit::display::metric::MetricReading",
      "name": "MetricReading",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::metric",
      "path": "gpui_kit::display::metric",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "One verified KPI the host already formatted.",
      "documentation": "One verified KPI the host already formatted.",
      "signature": "# [doc = \" One verified KPI the host already formatted.\"] # [derive (Debug, Clone, PartialEq)] pub struct MetricReading { pub value : SharedString, pub delta : Option<SharedString>, pub tone : Tone, pub direction : Option<DeltaDirection>, pub trend : Vec<SparklinePoint>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::metric::MetricReading::delta",
      "name": "delta",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::metric",
      "path": "gpui_kit::display::metric",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn delta (mut self, delta : impl Into<SharedString>, tone : Tone) -> Self",
      "cfg": [],
      "target": "MetricReading"
    },
    {
      "id": "gpui_kit::display::metric::MetricReading::direction",
      "name": "direction",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::metric",
      "path": "gpui_kit::display::metric",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "The way the delta points, for text whose sign the card cannot read — a word, a ratio, a locale that writes the sign last.",
      "documentation": "The way the delta points, for text whose sign the card cannot read —\na word, a ratio, a locale that writes the sign last.",
      "signature": "pub fn direction (mut self, direction : DeltaDirection) -> Self",
      "cfg": [],
      "target": "MetricReading"
    },
    {
      "id": "gpui_kit::display::metric::MetricReading::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::metric",
      "path": "gpui_kit::display::metric",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MetricReading"
    },
    {
      "id": "gpui_kit::display::metric::MetricReading::resolved_direction",
      "name": "resolved_direction",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::metric",
      "path": "gpui_kit::display::metric",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "The direction shown: the caller's when it stated one, otherwise the one its own delta text already states.",
      "documentation": "The direction shown: the caller's when it stated one, otherwise the\none its own delta text already states.",
      "signature": "pub fn resolved_direction (& self) -> DeltaDirection",
      "cfg": [],
      "target": "MetricReading"
    },
    {
      "id": "gpui_kit::display::metric::MetricReading::trend",
      "name": "trend",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::metric",
      "path": "gpui_kit::display::metric",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn trend (mut self, points : impl IntoIterator<Item = SparklinePoint>) -> Self",
      "cfg": [],
      "target": "MetricReading"
    },
    {
      "id": "gpui_kit::display::metric::MetricState",
      "name": "MetricState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::metric",
      "path": "gpui_kit::display::metric",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "How the reading was asked for.",
      "documentation": "How the reading was asked for.",
      "signature": "# [doc = \" How the reading was asked for.\"] # [derive (Debug, Clone, PartialEq)] pub enum MetricState { Loading, Ready (MetricReading), Empty, Unavailable (SharedString), Error (SharedString), Stale { reading : MetricReading, reason : SharedString, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::metric::MetricState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::metric",
      "path": "gpui_kit::display::metric",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "MetricState"
    },
    {
      "id": "gpui_kit::display::outcome::OutcomeKind",
      "name": "OutcomeKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::outcome",
      "path": "gpui_kit::display::outcome",
      "source": "crates/gpui-kit/src/display/outcome.rs",
      "summary": "Which of the three outcomes the host is reporting.",
      "documentation": "Which of the three outcomes the host is reporting.",
      "signature": "# [doc = \" Which of the three outcomes the host is reporting.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum OutcomeKind { Success, # [doc = \" Some work finished and some did not. The counts stay the host's words.\"] Partial, Failed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::outcome::OutcomeKind::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::outcome",
      "path": "gpui_kit::display::outcome",
      "source": "crates/gpui-kit/src/display/outcome.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "OutcomeKind"
    },
    {
      "id": "gpui_kit::display::outcome::OutcomePanel",
      "name": "OutcomePanel",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::outcome",
      "path": "gpui_kit::display::outcome",
      "source": "crates/gpui-kit/src/display/outcome.rs",
      "summary": "A panel that states what finished, including a partial success.",
      "documentation": "A panel that states what finished, including a partial success.",
      "signature": "# [doc = \" A panel that states what finished, including a partial success.\"] # [derive (IntoElement)] pub struct OutcomePanel { ident : Ident, kind : OutcomeKind, title : Option<SharedString>, detail : Option<SharedString>, # [doc = \" A count the host already worded, such as \\\"47 succeeded, 3 failed\\\".\"] count : Option<SharedString>, action : Option<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::outcome::OutcomePanel::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::outcome",
      "path": "gpui_kit::display::outcome",
      "source": "crates/gpui-kit/src/display/outcome.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn action (mut self, action : impl IntoElement) -> Self",
      "cfg": [],
      "target": "OutcomePanel"
    },
    {
      "id": "gpui_kit::display::outcome::OutcomePanel::count",
      "name": "count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::outcome",
      "path": "gpui_kit::display::outcome",
      "source": "crates/gpui-kit/src/display/outcome.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn count (mut self, count : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "OutcomePanel"
    },
    {
      "id": "gpui_kit::display::outcome::OutcomePanel::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::outcome",
      "path": "gpui_kit::display::outcome",
      "source": "crates/gpui-kit/src/display/outcome.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "OutcomePanel"
    },
    {
      "id": "gpui_kit::display::outcome::OutcomePanel::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::outcome",
      "path": "gpui_kit::display::outcome",
      "source": "crates/gpui-kit/src/display/outcome.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, kind : OutcomeKind) -> Self",
      "cfg": [],
      "target": "OutcomePanel"
    },
    {
      "id": "gpui_kit::display::outcome::OutcomePanel::title",
      "name": "title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::outcome",
      "path": "gpui_kit::display::outcome",
      "source": "crates/gpui-kit/src/display/outcome.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn title (mut self, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "OutcomePanel"
    },
    {
      "id": "gpui_kit::display::performance_hud::PerformanceHud",
      "name": "PerformanceHud",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::performance_hud",
      "path": "gpui_kit::display::performance_hud",
      "source": "crates/gpui-kit/src/display/performance_hud.rs",
      "summary": "A compact or expanded frame diagnostics surface.",
      "documentation": "A compact or expanded frame diagnostics surface.\n\n`expanded` is controlled. Activating its button only reports the next\nvalue through `on_expanded`; it never mutates caller state.",
      "signature": "# [doc = \" A compact or expanded frame diagnostics surface.\"] # [doc = \"\"] # [doc = \" `expanded` is controlled. Activating its button only reports the next\"] # [doc = \" value through `on_expanded`; it never mutates caller state.\"] # [derive (IntoElement)] pub struct PerformanceHud { ident : Ident, state : PerformanceHudState, expanded : bool, on_expanded : Option<ExpandedHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::performance_hud::PerformanceHud::expanded",
      "name": "expanded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::performance_hud",
      "path": "gpui_kit::display::performance_hud",
      "source": "crates/gpui-kit/src/display/performance_hud.rs",
      "summary": "The detail state the caller currently owns.",
      "documentation": "The detail state the caller currently owns.",
      "signature": "pub fn expanded (mut self, expanded : bool) -> Self",
      "cfg": [],
      "target": "PerformanceHud"
    },
    {
      "id": "gpui_kit::display::performance_hud::PerformanceHud::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::performance_hud",
      "path": "gpui_kit::display::performance_hud",
      "source": "crates/gpui-kit/src/display/performance_hud.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, state : PerformanceHudState) -> Self",
      "cfg": [],
      "target": "PerformanceHud"
    },
    {
      "id": "gpui_kit::display::performance_hud::PerformanceHud::on_expanded",
      "name": "on_expanded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::performance_hud",
      "path": "gpui_kit::display::performance_hud",
      "source": "crates/gpui-kit/src/display/performance_hud.rs",
      "summary": "Reports the detail state requested by the expand/collapse action.",
      "documentation": "Reports the detail state requested by the expand/collapse action.",
      "signature": "pub fn on_expanded (mut self, handler : impl Fn (bool, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "PerformanceHud"
    },
    {
      "id": "gpui_kit::display::performance_hud::PerformanceHudState",
      "name": "PerformanceHudState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::performance_hud",
      "path": "gpui_kit::display::performance_hud",
      "source": "crates/gpui-kit/src/display/performance_hud.rs",
      "summary": "The diagnostics fact a host currently has.",
      "documentation": "The diagnostics fact a host currently has.",
      "signature": "# [doc = \" The diagnostics fact a host currently has.\"] # [derive (Debug, Clone, PartialEq)] pub enum PerformanceHudState { # [doc = \" Tracing is available but fewer than two target-window draws exist.\"] Waiting, # [doc = \" A framework-produced summary over the caller's chosen window/history.\"] Ready (FrameTimingSummary), # [doc = \" The host cannot provide frame timings, with its exact reason.\"] Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::performance_hud::PerformanceHudState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::performance_hud",
      "path": "gpui_kit::display::performance_hud",
      "source": "crates/gpui-kit/src/display/performance_hud.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "PerformanceHudState"
    },
    {
      "id": "gpui_kit::display::plot::Candlestick",
      "name": "Candlestick",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "One caller-normalized OHLC reading.",
      "documentation": "One caller-normalized OHLC reading.",
      "signature": "# [doc = \" One caller-normalized OHLC reading.\"] # [derive (Debug, Clone, PartialEq)] pub struct Candlestick { pub id : SharedString, pub x : f32, pub open : f32, pub high : f32, pub low : f32, pub close : f32, pub label : SharedString, pub value : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::Candlestick::is_bounded",
      "name": "is_bounded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_bounded (& self) -> bool",
      "cfg": [],
      "target": "Candlestick"
    },
    {
      "id": "gpui_kit::display::plot::Candlestick::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, x : f32, open : f32, high : f32, low : f32, close : f32, label : impl Into<SharedString>, value : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "Candlestick"
    },
    {
      "id": "gpui_kit::display::plot::CandlestickChart",
      "name": "CandlestickChart",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Candlesticks over caller-owned normalized OHLC readings.",
      "documentation": "Candlesticks over caller-owned normalized OHLC readings.",
      "signature": "# [doc = \" Candlesticks over caller-owned normalized OHLC readings.\"] # [derive (IntoElement)] pub struct CandlestickChart { ident : Ident, label : SharedString, state : PlotState<Vec<Candlestick>>, body_width : f32, rising : Option<Hsla>, falling : Option<Hsla>, current : Option<SharedString>, on_current : Option<CurrentHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::CandlestickChart::body_width",
      "name": "body_width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn body_width (mut self, normalized : f32) -> Self",
      "cfg": [],
      "target": "CandlestickChart"
    },
    {
      "id": "gpui_kit::display::plot::CandlestickChart::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "CandlestickChart"
    },
    {
      "id": "gpui_kit::display::plot::CandlestickChart::falling_tint",
      "name": "falling_tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn falling_tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "CandlestickChart"
    },
    {
      "id": "gpui_kit::display::plot::CandlestickChart::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : PlotState<Vec<Candlestick>>,) -> Self",
      "cfg": [],
      "target": "CandlestickChart"
    },
    {
      "id": "gpui_kit::display::plot::CandlestickChart::on_current",
      "name": "on_current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_current (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "CandlestickChart"
    },
    {
      "id": "gpui_kit::display::plot::CandlestickChart::rising_tint",
      "name": "rising_tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rising_tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "CandlestickChart"
    },
    {
      "id": "gpui_kit::display::plot::OhlcError",
      "name": "OhlcError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "An invalid observation or repeated business identity rejects the series.",
      "documentation": "An invalid observation or repeated business identity rejects the series.",
      "signature": "# [doc = \" An invalid observation or repeated business identity rejects the series.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum OhlcError { InvalidReading (SharedString), DuplicateIdentity (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::Plot",
      "name": "Plot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "A measured plot with caller-painted content and semantic marks.",
      "documentation": "A measured plot with caller-painted content and semantic marks.",
      "signature": "# [doc = \" A measured plot with caller-painted content and semantic marks.\"] # [derive (IntoElement)] pub struct Plot { ident : Ident, label : SharedString, state : PlotState<Vec<PlotMark>>, painter : Option<PlotPainter>, current : Option<SharedString>, on_current : Option<CurrentHandler>, exploration : PlotExploration, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::Plot::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (mut self, mark_id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Plot"
    },
    {
      "id": "gpui_kit::display::plot::Plot::hit_test",
      "name": "hit_test",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Exact picking in normalized plot coordinates and the current measured pixel frame. Only identities present in the current semantic marks may be returned; decorative exiting geometry cannot become interactive.",
      "documentation": "Exact picking in normalized plot coordinates and the current measured\npixel frame. Only identities present in the current semantic marks may\nbe returned; decorative exiting geometry cannot become interactive.",
      "signature": "pub fn hit_test (mut self, picker : impl Fn (Point<f32>, Bounds<Pixels>) -> Option<SharedString> + 'static,) -> Self",
      "cfg": [],
      "target": "Plot"
    },
    {
      "id": "gpui_kit::display::plot::Plot::labels",
      "name": "labels",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Measured nonoverlapping labels with leader lines. Crowded labels are suppressed, never used as substitute hit regions; exact readouts remain.",
      "documentation": "Measured nonoverlapping labels with leader lines. Crowded labels are\nsuppressed, never used as substitute hit regions; exact readouts remain.",
      "signature": "pub fn labels (mut self, enabled : bool) -> Self",
      "cfg": [],
      "target": "Plot"
    },
    {
      "id": "gpui_kit::display::plot::Plot::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : PlotState<Vec<PlotMark>>,) -> Self",
      "cfg": [],
      "target": "Plot"
    },
    {
      "id": "gpui_kit::display::plot::Plot::on_current",
      "name": "on_current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_current (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Plot"
    },
    {
      "id": "gpui_kit::display::plot::Plot::on_hover",
      "name": "on_hover",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Reports geometric hover separately from selection, including departure.",
      "documentation": "Reports geometric hover separately from selection, including departure.",
      "signature": "pub fn on_hover (mut self, handler : impl Fn (Option<SharedString>, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Plot"
    },
    {
      "id": "gpui_kit::display::plot::Plot::paint",
      "name": "paint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn paint (mut self, painter : impl Fn (PlotFrame, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Plot"
    },
    {
      "id": "gpui_kit::display::plot::Plot::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Caller-controlled selection, including an explicitly empty selection. Keyboard and pointer gestures emit proposals without accepting them.",
      "documentation": "Caller-controlled selection, including an explicitly empty selection.\nKeyboard and pointer gestures emit proposals without accepting them.",
      "signature": "pub fn selected (mut self, id : Option<SharedString>) -> Self",
      "cfg": [],
      "target": "Plot"
    },
    {
      "id": "gpui_kit::display::plot::PlotFrame",
      "name": "PlotFrame",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "The measured pixel frame handed to a plot painter.",
      "documentation": "The measured pixel frame handed to a plot painter.",
      "signature": "# [doc = \" The measured pixel frame handed to a plot painter.\"] # [derive (Debug, Clone, Copy)] pub struct PlotFrame { bounds : Bounds<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::PlotFrame::bounds",
      "name": "bounds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bounds (self) -> Bounds<Pixels>",
      "cfg": [],
      "target": "PlotFrame"
    },
    {
      "id": "gpui_kit::display::plot::PlotFrame::mark_bounds",
      "name": "mark_bounds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn mark_bounds (self, normalized : Bounds<f32>) -> Bounds<Pixels>",
      "cfg": [],
      "target": "PlotFrame"
    },
    {
      "id": "gpui_kit::display::plot::PlotFrame::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (bounds : Bounds<Pixels>) -> Self",
      "cfg": [],
      "target": "PlotFrame"
    },
    {
      "id": "gpui_kit::display::plot::PlotFrame::point",
      "name": "point",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Maps a normalized top-left point into the measured frame.",
      "documentation": "Maps a normalized top-left point into the measured frame.",
      "signature": "pub fn point (self, normalized : Point<f32>) -> Point<Pixels>",
      "cfg": [],
      "target": "PlotFrame"
    },
    {
      "id": "gpui_kit::display::plot::PlotMark",
      "name": "PlotMark",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "One semantic target inside a plot.",
      "documentation": "One semantic target inside a plot.",
      "signature": "# [doc = \" One semantic target inside a plot.\"] # [derive (Debug, Clone, PartialEq)] pub struct PlotMark { pub id : SharedString, pub label : SharedString, pub value : SharedString, # [doc = \" Normalized top-left bounds in the plot's `0..=1` square.\"] pub bounds : Bounds<f32>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::PlotMark::is_bounded",
      "name": "is_bounded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_bounded (& self) -> bool",
      "cfg": [],
      "target": "PlotMark"
    },
    {
      "id": "gpui_kit::display::plot::PlotMark::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>, value : impl Into<SharedString>, bounds : Bounds<f32>,) -> Self",
      "cfg": [],
      "target": "PlotMark"
    },
    {
      "id": "gpui_kit::display::plot::PlotState",
      "name": "PlotState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Loading and refresh truth for arbitrary caller-owned plot data.",
      "documentation": "Loading and refresh truth for arbitrary caller-owned plot data.",
      "signature": "# [doc = \" Loading and refresh truth for arbitrary caller-owned plot data.\"] # [derive (Debug, Clone, PartialEq)] pub enum PlotState<T> { Loading, Ready (T), Empty, Unavailable (SharedString), Error (SharedString), # [doc = \" A refresh failed while the last verified data remains drawable.\"] Stale { data : T, reason : SharedString, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::PlotState::map",
      "name": "map",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn map<U> (self, map : impl FnOnce (T) -> U) -> PlotState<U>",
      "cfg": [],
      "target": "PlotState<T>"
    },
    {
      "id": "gpui_kit::display::plot::PlotState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "PlotState<T>"
    },
    {
      "id": "gpui_kit::display::plot::RawOhlc",
      "name": "RawOhlc",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "One raw OHLC reading. The x coordinate may be Unix milliseconds on a shared Time scale or any caller-defined numeric coordinate. Negative readings are accepted; financial/calendar/domain policy is not inferred.",
      "documentation": "One raw OHLC reading. The x coordinate may be Unix milliseconds on a\nshared Time scale or any caller-defined numeric coordinate. Negative\nreadings are accepted; financial/calendar/domain policy is not inferred.",
      "signature": "# [doc = \" One raw OHLC reading. The x coordinate may be Unix milliseconds on a\"] # [doc = \" shared Time scale or any caller-defined numeric coordinate. Negative\"] # [doc = \" readings are accepted; financial/calendar/domain policy is not inferred.\"] # [derive (Debug, Clone, PartialEq)] pub struct RawOhlc { pub id : SharedString, pub x : f64, pub open : f64, pub high : f64, pub low : f64, pub close : f64, pub label : SharedString, pub formatted : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::RawOhlc::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Values are ordered `[open, high, low, close]`; equality is valid (doji).",
      "documentation": "Values are ordered `[open, high, low, close]`; equality is valid (doji).",
      "signature": "pub fn new (id : impl Into<SharedString>, x : f64, ohlc : [f64; 4], label : impl Into<SharedString>, formatted : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "RawOhlc"
    },
    {
      "id": "gpui_kit::display::plot::RawOhlc::series",
      "name": "series",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Adapt validated readings to the shared Cartesian Range mark. Its body runs open→close and its whisker runs low→high. Direction colors and all visible wording remain caller-owned. Compose volume/overlays as ordinary RawSeries on the same x scale, with independent value axes as needed.",
      "documentation": "Adapt validated readings to the shared Cartesian Range mark. Its body\nruns open→close and its whisker runs low→high. Direction colors and all\nvisible wording remain caller-owned. Compose volume/overlays as ordinary\nRawSeries on the same x scale, with independent value axes as needed.",
      "signature": "pub fn series (id : impl Into<SharedString>, axis : impl Into<SharedString>, readings : impl IntoIterator<Item = Self>, rising : Hsla, falling : Hsla,) -> Result<super::chart::data::RawSeries, OhlcError>",
      "cfg": [],
      "target": "RawOhlc"
    },
    {
      "id": "gpui_kit::display::plot::SankeyAlignment",
      "name": "SankeyAlignment",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Horizontal alignment of an acyclic flow graph. Vertical order follows the caller's node order, making repeated layouts stable and reviewable.",
      "documentation": "Horizontal alignment of an acyclic flow graph. Vertical order follows the\ncaller's node order, making repeated layouts stable and reviewable.",
      "signature": "# [doc = \" Horizontal alignment of an acyclic flow graph. Vertical order follows the\"] # [doc = \" caller's node order, making repeated layouts stable and reviewable.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum SankeyAlignment { # [default] Left, Right, # [doc = \" Longest-path columns, with terminal nodes at the right edge.\"] Justify, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::SankeyChart",
      "name": "SankeyChart",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Sankey ribbons over caller-owned normalized layout.",
      "documentation": "Sankey ribbons over caller-owned normalized layout.",
      "signature": "# [doc = \" Sankey ribbons over caller-owned normalized layout.\"] # [derive (IntoElement)] pub struct SankeyChart { ident : Ident, label : SharedString, state : PlotState<SankeyData>, show_labels : bool, current : Option<SharedString>, on_current : Option<CurrentHandler>, animate : bool, animation : Option<crate::motion::MotionSpec>, controlled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::SankeyChart::animate",
      "name": "animate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Opt into keyed node/ribbon motion on this legacy normalized renderer. Endpoints stay attached to displayed nodes; raw readouts never tween.",
      "documentation": "Opt into keyed node/ribbon motion on this legacy normalized renderer.\nEndpoints stay attached to displayed nodes; raw readouts never tween.",
      "signature": "pub fn animate (mut self, enabled : bool) -> Self",
      "cfg": [],
      "target": "SankeyChart"
    },
    {
      "id": "gpui_kit::display::plot::SankeyChart::animation",
      "name": "animation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Override theme timing. Reduced motion and animate(false) still settle.",
      "documentation": "Override theme timing. Reduced motion and animate(false) still settle.",
      "signature": "pub fn animation (mut self, spec : crate::motion::MotionSpec) -> Self",
      "cfg": [],
      "target": "SankeyChart"
    },
    {
      "id": "gpui_kit::display::plot::SankeyChart::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SankeyChart"
    },
    {
      "id": "gpui_kit::display::plot::SankeyChart::labels",
      "name": "labels",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Show a persistent node/link key with caller-provided labels and values.",
      "documentation": "Show a persistent node/link key with caller-provided labels and values.",
      "signature": "pub fn labels (mut self, show : bool) -> Self",
      "cfg": [],
      "target": "SankeyChart"
    },
    {
      "id": "gpui_kit::display::plot::SankeyChart::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : PlotState<SankeyData>,) -> Self",
      "cfg": [],
      "target": "SankeyChart"
    },
    {
      "id": "gpui_kit::display::plot::SankeyChart::on_current",
      "name": "on_current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_current (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "SankeyChart"
    },
    {
      "id": "gpui_kit::display::plot::SankeyChart::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Controlled selection; refusing proposals preserves the accepted value.",
      "documentation": "Controlled selection; refusing proposals preserves the accepted value.",
      "signature": "pub fn selected (mut self, id : Option<SharedString>) -> Self",
      "cfg": [],
      "target": "SankeyChart"
    },
    {
      "id": "gpui_kit::display::plot::SankeyData",
      "name": "SankeyData",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Caller-owned node and ribbon geometry for a Sankey presentation.",
      "documentation": "Caller-owned node and ribbon geometry for a Sankey presentation.",
      "signature": "# [doc = \" Caller-owned node and ribbon geometry for a Sankey presentation.\"] # [derive (Debug, Clone, Default, PartialEq)] pub struct SankeyData { pub nodes : Vec<SankeyNode>, pub links : Vec<SankeyLink>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::SankeyData::hit_test",
      "name": "hit_test",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Exact normalized ribbon/node picking. Nodes are above ribbons, later paint wins, and Bézier edges use the same control points as the painter. Returned identities match `node.<id>` / `link.<id>` semantic marks.",
      "documentation": "Exact normalized ribbon/node picking. Nodes are above ribbons, later\npaint wins, and Bézier edges use the same control points as the painter.\nReturned identities match `node.<id>` / `link.<id>` semantic marks.",
      "signature": "pub fn hit_test (& self, p : Point<f32>) -> Option<SharedString>",
      "cfg": [],
      "target": "SankeyData"
    },
    {
      "id": "gpui_kit::display::plot::SankeyData::layout",
      "name": "layout",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Lay out a directed acyclic graph in normalized chart coordinates. `weights` follows link order; labels and formatted values remain caller owned. All columns use one linear weight-to-height scale, so equal quantities have equal ribbon widths, including at merges and splits. Node height is max(total incoming, total outgoing). Zero-flow nodes remain zero-height; cycles, missing endpoints, and invalid constraints are errors rather than approximations. Returns geometry and the scale.",
      "documentation": "Lay out a directed acyclic graph in normalized chart coordinates.\n`weights` follows link order; labels and formatted values remain caller\nowned. All columns use one linear weight-to-height scale, so equal\nquantities have equal ribbon widths, including at merges and splits.\nNode height is max(total incoming, total outgoing). Zero-flow nodes\nremain zero-height; cycles, missing endpoints, and invalid constraints\nare errors rather than approximations. Returns geometry and the scale.",
      "signature": "pub fn layout (self, weights : & [f64], node_width : f32, gap : f32, alignment : SankeyAlignment,) -> Result<(Self, f64), SankeyLayoutError>",
      "cfg": [],
      "target": "SankeyData"
    },
    {
      "id": "gpui_kit::display::plot::SankeyData::layout_ordered",
      "name": "layout_ordered",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "The same conserved layout with optional deterministic crossing reduction. Link storage order is preserved; source and target ribbon stacks follow opposite-node order independently, without changing any flow width.",
      "documentation": "The same conserved layout with optional deterministic crossing reduction.\nLink storage order is preserved; source and target ribbon stacks follow\nopposite-node order independently, without changing any flow width.",
      "signature": "pub fn layout_ordered (mut self, weights : & [f64], node_width : f32, gap : f32, alignment : SankeyAlignment, ordering : SankeyOrder,) -> Result<(Self, f64), SankeyLayoutError>",
      "cfg": [],
      "target": "SankeyData"
    },
    {
      "id": "gpui_kit::display::plot::SankeyData::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (nodes : impl IntoIterator<Item = SankeyNode>, links : impl IntoIterator<Item = SankeyLink>,) -> Self",
      "cfg": [],
      "target": "SankeyData"
    },
    {
      "id": "gpui_kit::display::plot::SankeyLayoutError",
      "name": "SankeyLayoutError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Invalid graph or normalized layout constraints. Layout never silently drops a flow or fabricates a value for an invalid input.",
      "documentation": "Invalid graph or normalized layout constraints. Layout never silently\ndrops a flow or fabricates a value for an invalid input.",
      "signature": "# [doc = \" Invalid graph or normalized layout constraints. Layout never silently\"] # [doc = \" drops a flow or fabricates a value for an invalid input.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum SankeyLayoutError { InvalidDimensions, DuplicateNode (SharedString), DuplicateLink (SharedString), MissingEndpoint (SharedString), InvalidWeight (SharedString), WeightCount, Cycle, InsufficientHeight, # [doc = \" Positive flow would require a scale larger than finite f64 can hold.\"] UnrepresentableScale, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::SankeyLink",
      "name": "SankeyLink",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "One caller-laid-out flow ribbon.",
      "documentation": "One caller-laid-out flow ribbon.",
      "signature": "# [doc = \" One caller-laid-out flow ribbon.\"] # [derive (Debug, Clone, PartialEq)] pub struct SankeyLink { pub id : SharedString, pub source : SharedString, pub target : SharedString, pub label : SharedString, pub value : SharedString, pub start : Point<f32>, pub end : Point<f32>, pub start_width : f32, pub end_width : f32, pub color : Option<Hsla>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::SankeyLink::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, source : impl Into<SharedString>, target : impl Into<SharedString>, label : impl Into<SharedString>, value : impl Into<SharedString>, start : Point<f32>, end : Point<f32>, width : f32,) -> Self",
      "cfg": [],
      "target": "SankeyLink"
    },
    {
      "id": "gpui_kit::display::plot::SankeyLink::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tint (mut self, color : Hsla) -> Self",
      "cfg": [],
      "target": "SankeyLink"
    },
    {
      "id": "gpui_kit::display::plot::SankeyLink::widths",
      "name": "widths",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn widths (mut self, start : f32, end : f32) -> Self",
      "cfg": [],
      "target": "SankeyLink"
    },
    {
      "id": "gpui_kit::display::plot::SankeyNode",
      "name": "SankeyNode",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "One caller-laid-out Sankey node.",
      "documentation": "One caller-laid-out Sankey node.",
      "signature": "# [doc = \" One caller-laid-out Sankey node.\"] # [derive (Debug, Clone, PartialEq)] pub struct SankeyNode { pub id : SharedString, pub label : SharedString, pub value : SharedString, pub bounds : Bounds<f32>, pub color : Option<Hsla>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::plot::SankeyNode::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>, value : impl Into<SharedString>, bounds : Bounds<f32>,) -> Self",
      "cfg": [],
      "target": "SankeyNode"
    },
    {
      "id": "gpui_kit::display::plot::SankeyNode::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tint (mut self, color : Hsla) -> Self",
      "cfg": [],
      "target": "SankeyNode"
    },
    {
      "id": "gpui_kit::display::plot::SankeyOrder",
      "name": "SankeyOrder",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::plot",
      "path": "gpui_kit::display::plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Vertical ordering policy. Weighted barycenter sweeps and bounded adjacent transpositions retain the best weighted crossing score, including skip-layer links. Stable identity breaks ties. This heuristic is not a global optimum; refinement costs O(V E²), intended for overview-sized flows, not huge DAGs.",
      "documentation": "Vertical ordering policy. Weighted barycenter sweeps and bounded adjacent\ntranspositions retain the best weighted crossing score, including skip-layer\nlinks. Stable identity breaks ties. This heuristic is not a global optimum;\nrefinement costs O(V E²), intended for overview-sized flows, not huge DAGs.",
      "signature": "# [doc = \" Vertical ordering policy. Weighted barycenter sweeps and bounded adjacent\"] # [doc = \" transpositions retain the best weighted crossing score, including skip-layer\"] # [doc = \" links. Stable identity breaks ties. This heuristic is not a global optimum;\"] # [doc = \" refinement costs O(V E²), intended for overview-sized flows, not huge DAGs.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum SankeyOrder { # [default] Input, Barycenter, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::progress::ProgressBar",
      "name": "ProgressBar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress",
      "path": "gpui_kit::display::progress",
      "source": "crates/gpui-kit/src/display/progress.rs",
      "summary": "A horizontal bar for work whose extent is known.",
      "documentation": "A horizontal bar for work whose extent is known.\n\nA bar without a value is indeterminate and says so, rather than crawling\nto ninety percent and waiting there.",
      "signature": "# [doc = \" A horizontal bar for work whose extent is known.\"] # [doc = \"\"] # [doc = \" A bar without a value is indeterminate and says so, rather than crawling\"] # [doc = \" to ninety percent and waiting there.\"] # [derive (IntoElement)] pub struct ProgressBar { ident : Ident, label : Option<SharedString>, value : ProgressValue, on_cancel : Option<CancelHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::progress::ProgressBar::count",
      "name": "count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress",
      "path": "gpui_kit::display::progress",
      "source": "crates/gpui-kit/src/display/progress.rs",
      "summary": "Reports `done` out of `total`, and stays indeterminate when the total is zero, because no fraction exists to report.",
      "documentation": "Reports `done` out of `total`, and stays indeterminate when the total\nis zero, because no fraction exists to report.",
      "signature": "pub fn count (mut self, done : usize, total : usize) -> Self",
      "cfg": [],
      "target": "ProgressBar"
    },
    {
      "id": "gpui_kit::display::progress::ProgressBar::display",
      "name": "display",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress",
      "path": "gpui_kit::display::progress",
      "source": "crates/gpui-kit/src/display/progress.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn display (mut self, display : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ProgressBar"
    },
    {
      "id": "gpui_kit::display::progress::ProgressBar::fraction",
      "name": "fraction",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress",
      "path": "gpui_kit::display::progress",
      "source": "crates/gpui-kit/src/display/progress.rs",
      "summary": "How much of the work is done, between zero and one.",
      "documentation": "How much of the work is done, between zero and one.",
      "signature": "pub fn fraction (mut self, fraction : f32) -> Self",
      "cfg": [],
      "target": "ProgressBar"
    },
    {
      "id": "gpui_kit::display::progress::ProgressBar::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress",
      "path": "gpui_kit::display::progress",
      "source": "crates/gpui-kit/src/display/progress.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ProgressBar"
    },
    {
      "id": "gpui_kit::display::progress::ProgressBar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress",
      "path": "gpui_kit::display::progress",
      "source": "crates/gpui-kit/src/display/progress.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "ProgressBar"
    },
    {
      "id": "gpui_kit::display::progress::ProgressBar::on_cancel",
      "name": "on_cancel",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress",
      "path": "gpui_kit::display::progress",
      "source": "crates/gpui-kit/src/display/progress.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_cancel (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "ProgressBar"
    },
    {
      "id": "gpui_kit::display::progress::ProgressBar::paused",
      "name": "paused",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress",
      "path": "gpui_kit::display::progress",
      "source": "crates/gpui-kit/src/display/progress.rs",
      "summary": "The work was paused. Distinct from stalled: somebody asked it to stop.",
      "documentation": "The work was paused. Distinct from stalled: somebody asked it to stop.",
      "signature": "pub fn paused (mut self, paused : bool) -> Self",
      "cfg": [],
      "target": "ProgressBar"
    },
    {
      "id": "gpui_kit::display::progress::ProgressBar::stalled",
      "name": "stalled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress",
      "path": "gpui_kit::display::progress",
      "source": "crates/gpui-kit/src/display/progress.rs",
      "summary": "The work has a known position but is no longer advancing.",
      "documentation": "The work has a known position but is no longer advancing.",
      "signature": "pub fn stalled (mut self, stalled : bool) -> Self",
      "cfg": [],
      "target": "ProgressBar"
    },
    {
      "id": "gpui_kit::display::progress_circle::ProgressCircle",
      "name": "ProgressCircle",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress_circle",
      "path": "gpui_kit::display::progress_circle",
      "source": "crates/gpui-kit/src/display/progress_circle.rs",
      "summary": "A ring for work in a place too tight for a bar.",
      "documentation": "A ring for work in a place too tight for a bar.",
      "signature": "# [doc = \" A ring for work in a place too tight for a bar.\"] # [derive (IntoElement)] pub struct ProgressCircle { ident : Ident, label : Option<SharedString>, # [doc = \" What to show in the middle of the ring, when anything belongs there.\"] centre : Option<SharedString>, value : ProgressValue, size : ControlSize, on_cancel : Option<CancelHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::progress_circle::ProgressCircle::centre",
      "name": "centre",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress_circle",
      "path": "gpui_kit::display::progress_circle",
      "source": "crates/gpui-kit/src/display/progress_circle.rs",
      "summary": "A short reading inside the ring. It is the caller's words: the circle invents no percentage of its own.",
      "documentation": "A short reading inside the ring. It is the caller's words: the circle\ninvents no percentage of its own.",
      "signature": "pub fn centre (mut self, centre : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ProgressCircle"
    },
    {
      "id": "gpui_kit::display::progress_circle::ProgressCircle::count",
      "name": "count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress_circle",
      "path": "gpui_kit::display::progress_circle",
      "source": "crates/gpui-kit/src/display/progress_circle.rs",
      "summary": "Reports `done` out of `total`, and stays indeterminate when the total is zero, because no fraction exists to report.",
      "documentation": "Reports `done` out of `total`, and stays indeterminate when the total\nis zero, because no fraction exists to report.",
      "signature": "pub fn count (mut self, done : usize, total : usize) -> Self",
      "cfg": [],
      "target": "ProgressCircle"
    },
    {
      "id": "gpui_kit::display::progress_circle::ProgressCircle::display",
      "name": "display",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress_circle",
      "path": "gpui_kit::display::progress_circle",
      "source": "crates/gpui-kit/src/display/progress_circle.rs",
      "summary": "What the node publishes as its value, such as `\"3 of 12\"`.",
      "documentation": "What the node publishes as its value, such as `\"3 of 12\"`.",
      "signature": "pub fn display (mut self, display : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ProgressCircle"
    },
    {
      "id": "gpui_kit::display::progress_circle::ProgressCircle::fraction",
      "name": "fraction",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress_circle",
      "path": "gpui_kit::display::progress_circle",
      "source": "crates/gpui-kit/src/display/progress_circle.rs",
      "summary": "How much of the work is done, between zero and one.",
      "documentation": "How much of the work is done, between zero and one.",
      "signature": "pub fn fraction (mut self, fraction : f32) -> Self",
      "cfg": [],
      "target": "ProgressCircle"
    },
    {
      "id": "gpui_kit::display::progress_circle::ProgressCircle::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress_circle",
      "path": "gpui_kit::display::progress_circle",
      "source": "crates/gpui-kit/src/display/progress_circle.rs",
      "summary": "What the work is, for a reader who has only the tree to go on.",
      "documentation": "What the work is, for a reader who has only the tree to go on.",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ProgressCircle"
    },
    {
      "id": "gpui_kit::display::progress_circle::ProgressCircle::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress_circle",
      "path": "gpui_kit::display::progress_circle",
      "source": "crates/gpui-kit/src/display/progress_circle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "ProgressCircle"
    },
    {
      "id": "gpui_kit::display::progress_circle::ProgressCircle::on_cancel",
      "name": "on_cancel",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress_circle",
      "path": "gpui_kit::display::progress_circle",
      "source": "crates/gpui-kit/src/display/progress_circle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_cancel (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "ProgressCircle"
    },
    {
      "id": "gpui_kit::display::progress_circle::ProgressCircle::paused",
      "name": "paused",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress_circle",
      "path": "gpui_kit::display::progress_circle",
      "source": "crates/gpui-kit/src/display/progress_circle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn paused (mut self, paused : bool) -> Self",
      "cfg": [],
      "target": "ProgressCircle"
    },
    {
      "id": "gpui_kit::display::progress_circle::ProgressCircle::stalled",
      "name": "stalled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::progress_circle",
      "path": "gpui_kit::display::progress_circle",
      "source": "crates/gpui-kit/src/display/progress_circle.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn stalled (mut self, stalled : bool) -> Self",
      "cfg": [],
      "target": "ProgressCircle"
    },
    {
      "id": "gpui_kit::display::rating::Rating",
      "name": "Rating",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::rating",
      "path": "gpui_kit::display::rating",
      "source": "crates/gpui-kit/src/display/rating.rs",
      "summary": "A controlled scalar rating rendered as token-sized stars.",
      "documentation": "A controlled scalar rating rendered as token-sized stars.",
      "signature": "# [doc = \" A controlled scalar rating rendered as token-sized stars.\"] # [derive (IntoElement)] pub struct Rating { ident : Ident, label : Option<SharedString>, value : Option<f32>, maximum : usize, precision : RatingPrecision, size : ControlSize, disabled : bool, clearable : bool, on_change : Option<ChangeHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::rating::Rating::clearable",
      "name": "clearable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::rating",
      "path": "gpui_kit::display::rating",
      "source": "crates/gpui-kit/src/display/rating.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clearable (mut self, clearable : bool) -> Self",
      "cfg": [],
      "target": "Rating"
    },
    {
      "id": "gpui_kit::display::rating::Rating::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::rating",
      "path": "gpui_kit::display::rating",
      "source": "crates/gpui-kit/src/display/rating.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Rating"
    },
    {
      "id": "gpui_kit::display::rating::Rating::maximum",
      "name": "maximum",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::rating",
      "path": "gpui_kit::display::rating",
      "source": "crates/gpui-kit/src/display/rating.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn maximum (mut self, maximum : usize) -> Self",
      "cfg": [],
      "target": "Rating"
    },
    {
      "id": "gpui_kit::display::rating::Rating::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::rating",
      "path": "gpui_kit::display::rating",
      "source": "crates/gpui-kit/src/display/rating.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Rating"
    },
    {
      "id": "gpui_kit::display::rating::Rating::on_change",
      "name": "on_change",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::rating",
      "path": "gpui_kit::display::rating",
      "source": "crates/gpui-kit/src/display/rating.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_change (mut self, handler : impl Fn (Option<f32>, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Rating"
    },
    {
      "id": "gpui_kit::display::rating::Rating::precision",
      "name": "precision",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::rating",
      "path": "gpui_kit::display::rating",
      "source": "crates/gpui-kit/src/display/rating.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn precision (mut self, precision : RatingPrecision) -> Self",
      "cfg": [],
      "target": "Rating"
    },
    {
      "id": "gpui_kit::display::rating::Rating::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::rating",
      "path": "gpui_kit::display::rating",
      "source": "crates/gpui-kit/src/display/rating.rs",
      "summary": "Sets the current value. `None` is an unrated value.",
      "documentation": "Sets the current value. `None` is an unrated value.",
      "signature": "pub fn value (mut self, value : Option<f32>) -> Self",
      "cfg": [],
      "target": "Rating"
    },
    {
      "id": "gpui_kit::display::rating::RatingPrecision",
      "name": "RatingPrecision",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::rating",
      "path": "gpui_kit::display::rating",
      "source": "crates/gpui-kit/src/display/rating.rs",
      "summary": "The smallest step a rating can report.",
      "documentation": "The smallest step a rating can report.",
      "signature": "# [doc = \" The smallest step a rating can report.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum RatingPrecision { # [default] Whole, Half, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::reexport-1",
      "name": "geography :: { GeoColorDomain , GeoData , GeoEvent , GeoFeature , GeoMap , GeoPoint , GeoPolygon , GeoPosition , GeoProjected , GeoProjection , GeoProperties , GeoRefusal , GeoState , GeoViewport , GeoWorldPolicy , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display",
      "path": "gpui_kit::display",
      "source": "crates/gpui-kit/src/display/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use geography::{ GeoColorDomain, GeoData, GeoEvent, GeoFeature, GeoMap, GeoPoint, GeoPolygon, GeoPosition, GeoProjected, GeoProjection, GeoProperties, GeoRefusal, GeoState, GeoViewport, GeoWorldPolicy, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::sparkline::Sparkline",
      "name": "Sparkline",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::sparkline",
      "path": "gpui_kit::display::sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "A compact, accessible trend reading.",
      "documentation": "A compact, accessible trend reading.",
      "signature": "# [doc = \" A compact, accessible trend reading.\"] # [derive (Debug, IntoElement)] pub struct Sparkline { ident : Ident, label : SharedString, state : SparklineState, tint : Option<Hsla>, embedded : bool, embedded_stale : bool, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::sparkline::Sparkline::embedded",
      "name": "embedded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::sparkline",
      "path": "gpui_kit::display::sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "The plot alone, for a surface that already has a frame and a label.",
      "documentation": "The plot alone, for a surface that already has a frame and a label.\n\nAn embedded sparkline publishes no node: the card it is inside already\nannounces the reading, and a plot that repeats it says the value\ntwice. It draws no minimum or maximum either, which is what stops a\nhost that only had a current value from being made to state a range it\nnever supplied.",
      "signature": "pub fn embedded (mut self) -> Self",
      "cfg": [],
      "target": "Sparkline"
    },
    {
      "id": "gpui_kit::display::sparkline::Sparkline::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::sparkline",
      "path": "gpui_kit::display::sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : SparklineState,) -> Self",
      "cfg": [],
      "target": "Sparkline"
    },
    {
      "id": "gpui_kit::display::sparkline::Sparkline::stale",
      "name": "stale",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::sparkline",
      "path": "gpui_kit::display::sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "Whether an embedded plot is drawing a reading that is no longer verified. The framed form takes this from its own state instead.",
      "documentation": "Whether an embedded plot is drawing a reading that is no longer\nverified. The framed form takes this from its own state instead.",
      "signature": "pub fn stale (mut self, stale : bool) -> Self",
      "cfg": [],
      "target": "Sparkline"
    },
    {
      "id": "gpui_kit::display::sparkline::Sparkline::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::sparkline",
      "path": "gpui_kit::display::sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "The colour this series is known by.",
      "documentation": "The colour this series is known by.\n\nA trend is neutral by default, because one line in a box does not need\na colour to be told apart from the lines that are not there. A caller\nthat has already spent a colour on this series — a legend, a chart it\nsits beside — passes it here so the two agree.",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "Sparkline"
    },
    {
      "id": "gpui_kit::display::sparkline::SparklinePoint",
      "name": "SparklinePoint",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::sparkline",
      "path": "gpui_kit::display::sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "One point already normalized by the caller.",
      "documentation": "One point already normalized by the caller.",
      "signature": "# [doc = \" One point already normalized by the caller.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct SparklinePoint { pub x : f32, pub y : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::sparkline::SparklinePoint::is_bounded",
      "name": "is_bounded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::sparkline",
      "path": "gpui_kit::display::sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_bounded (self) -> bool",
      "cfg": [],
      "target": "SparklinePoint"
    },
    {
      "id": "gpui_kit::display::sparkline::SparklinePoint::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::sparkline",
      "path": "gpui_kit::display::sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (x : f32, y : f32) -> Self",
      "cfg": [],
      "target": "SparklinePoint"
    },
    {
      "id": "gpui_kit::display::sparkline::SparklineReading",
      "name": "SparklineReading",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::sparkline",
      "path": "gpui_kit::display::sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "The plotted points and the exact text that makes them accessible.",
      "documentation": "The plotted points and the exact text that makes them accessible.",
      "signature": "# [doc = \" The plotted points and the exact text that makes them accessible.\"] # [derive (Debug, Clone, PartialEq)] pub struct SparklineReading { pub points : Vec<SparklinePoint>, pub current : SharedString, pub minimum : SharedString, pub maximum : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::sparkline::SparklineReading::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::sparkline",
      "path": "gpui_kit::display::sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (points : impl IntoIterator<Item = SparklinePoint>, current : impl Into<SharedString>, minimum : impl Into<SharedString>, maximum : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "SparklineReading"
    },
    {
      "id": "gpui_kit::display::sparkline::SparklineReading::published_points",
      "name": "published_points",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::sparkline",
      "path": "gpui_kit::display::sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "How many supplied points are inside the documented normalized bounds.",
      "documentation": "How many supplied points are inside the documented normalized bounds.",
      "signature": "pub fn published_points (& self) -> usize",
      "cfg": [],
      "target": "SparklineReading"
    },
    {
      "id": "gpui_kit::display::sparkline::SparklineState",
      "name": "SparklineState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::sparkline",
      "path": "gpui_kit::display::sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "The complete state of one trend reading.",
      "documentation": "The complete state of one trend reading.",
      "signature": "# [doc = \" The complete state of one trend reading.\"] # [derive (Debug, Clone, PartialEq)] pub enum SparklineState { Loading, Ready (SparklineReading), Empty, Unavailable (SharedString), Error (SharedString), # [doc = \" The reading is the last verified value; the text says why it is stale.\"] Stale { reading : SparklineReading, reason : SharedString, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::sparkline::SparklineState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::sparkline",
      "path": "gpui_kit::display::sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "SparklineState"
    },
    {
      "id": "gpui_kit::display::specialized::BoxSummary",
      "name": "BoxSummary",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "R-7 quantiles (linear interpolation at `(n - 1) p`), Tukey 1.5-IQR fences, and whiskers at the outermost samples within those fences.",
      "documentation": "R-7 quantiles (linear interpolation at `(n - 1) p`), Tukey 1.5-IQR\nfences, and whiskers at the outermost samples within those fences.",
      "signature": "# [doc = \" R-7 quantiles (linear interpolation at `(n - 1) p`), Tukey 1.5-IQR\"] # [doc = \" fences, and whiskers at the outermost samples within those fences.\"] # [derive (Debug, Clone, PartialEq)] pub struct BoxSummary { pub low : f64, pub q1 : f64, pub median : f64, pub q3 : f64, pub high : f64, pub outliers : Vec<f64>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::specialized::BoxSummary::from_samples",
      "name": "from_samples",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_samples (samples : & [f64]) -> Result<Self, SpecializedError>",
      "cfg": [],
      "target": "BoxSummary"
    },
    {
      "id": "gpui_kit::display::specialized::HierarchyNode",
      "name": "HierarchyNode",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Internal nodes contain children only; their quantity is the sum of leaves. A leaf's weight is nonnegative. Zero leaves are retained in the textual key.",
      "documentation": "Internal nodes contain children only; their quantity is the sum of leaves.\nA leaf's weight is nonnegative. Zero leaves are retained in the textual key.",
      "signature": "# [doc = \" Internal nodes contain children only; their quantity is the sum of leaves.\"] # [doc = \" A leaf's weight is nonnegative. Zero leaves are retained in the textual key.\"] # [derive (Debug, Clone, PartialEq)] pub struct HierarchyNode { pub item : WeightedValue, pub children : Vec<HierarchyNode>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::specialized::HierarchyNode::branch",
      "name": "branch",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn branch (id : impl Into<SharedString>, label : impl Into<SharedString>, children : Vec<Self>,) -> Self",
      "cfg": [],
      "target": "HierarchyNode"
    },
    {
      "id": "gpui_kit::display::specialized::HierarchyNode::leaf",
      "name": "leaf",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn leaf (item : WeightedValue) -> Self",
      "cfg": [],
      "target": "HierarchyNode"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedChart",
      "name": "SpecializedChart",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Specialized raw-value presentations with a persistent labeled value key, keyboard selection, semantic marks, and retained-data refresh failures.",
      "documentation": "Specialized raw-value presentations with a persistent labeled value key,\nkeyboard selection, semantic marks, and retained-data refresh failures.",
      "signature": "# [doc = \" Specialized raw-value presentations with a persistent labeled value key,\"] # [doc = \" keyboard selection, semantic marks, and retained-data refresh failures.\"] # [derive (IntoElement)] pub struct SpecializedChart { ident : Ident, label : SharedString, state : PlotState<SpecializedData>, current : Option<SharedString>, on_current : Option<Selection>, controlled : bool, on_hover : Option<Hover>, on_navigate : Option<Selection>, motion : bool, animation : Option<crate::motion::MotionSpec>, labels : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedChart::animate",
      "name": "animate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Enables visual transitions (the default). Disabling settles immediately; input and exact readings remain available. Reduced motion always wins.",
      "documentation": "Enables visual transitions (the default). Disabling settles immediately;\ninput and exact readings remain available. Reduced motion always wins.",
      "signature": "pub fn animate (self, enabled : bool) -> Self",
      "cfg": [],
      "target": "SpecializedChart"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedChart::animation",
      "name": "animation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Override theme timing without bypassing reduced motion.",
      "documentation": "Override theme timing without bypassing reduced motion.",
      "signature": "pub fn animation (mut self, spec : crate::motion::MotionSpec) -> Self",
      "cfg": [],
      "target": "SpecializedChart"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedChart::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SpecializedChart"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedChart::labels",
      "name": "labels",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Measured on-plot labels and leader lines, with crowded labels omitted. The persistent exact-value key remains available at every density.",
      "documentation": "Measured on-plot labels and leader lines, with crowded labels omitted.\nThe persistent exact-value key remains available at every density.",
      "signature": "pub fn labels (mut self, enabled : bool) -> Self",
      "cfg": [],
      "target": "SpecializedChart"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedChart::motion",
      "name": "motion",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Keyed enter/update/exit transitions. Exact labels/values update at once; only geometry and opacity interpolate. Removed shapes are decorative.",
      "documentation": "Keyed enter/update/exit transitions. Exact labels/values update at once;\nonly geometry and opacity interpolate. Removed shapes are decorative.",
      "signature": "pub fn motion (mut self, enabled : bool) -> Self",
      "cfg": [],
      "target": "SpecializedChart"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedChart::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>, state : PlotState<SpecializedData>,) -> Self",
      "cfg": [],
      "target": "SpecializedChart"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedChart::on_current",
      "name": "on_current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_current (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "SpecializedChart"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedChart::on_hover",
      "name": "on_hover",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_hover (mut self, handler : impl Fn (Option<SharedString>, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "SpecializedChart"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedChart::on_navigate",
      "name": "on_navigate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Proposes a hierarchy focus identity (ancestors go back, children drill down). Rebuild data with `treemap_at`/`sunburst_at` to accept the proposal.",
      "documentation": "Proposes a hierarchy focus identity (ancestors go back, children drill\ndown). Rebuild data with `treemap_at`/`sunburst_at` to accept the proposal.",
      "signature": "pub fn on_navigate (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "SpecializedChart"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedChart::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Controlled selection. A refused proposal never changes the painted or semantic selection; `None` deliberately selects no shape.",
      "documentation": "Controlled selection. A refused proposal never changes the painted or\nsemantic selection; `None` deliberately selects no shape.",
      "signature": "pub fn selected (mut self, id : Option<SharedString>) -> Self",
      "cfg": [],
      "target": "SpecializedChart"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedData",
      "name": "SpecializedData",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Validated, reproducible geometry plus an always-visible exact-value key.",
      "documentation": "Validated, reproducible geometry plus an always-visible exact-value key.",
      "signature": "# [doc = \" Validated, reproducible geometry plus an always-visible exact-value key.\"] # [derive (Debug, Clone, PartialEq, Default)] pub struct SpecializedData { shapes : Vec<Shape>, key : Vec<WeightedValue>, labels : HashMap<SharedString, (StringKey, Vec<SharedString>)>, navigation : Vec<(WeightedValue, bool)>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedData::box_plot",
      "name": "box_plot",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "A sample box plot with an explicit shared linear domain. Each summary statistic remains labeled; outlier identities derive from value bits.",
      "documentation": "A sample box plot with an explicit shared linear domain. Each summary\nstatistic remains labeled; outlier identities derive from value bits.",
      "signature": "pub fn box_plot (id : impl Into<SharedString>, label : impl Into<SharedString>, samples : & [f64], domain : [f64; 2],) -> Result<Self, SpecializedError>",
      "cfg": [],
      "target": "SpecializedData"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedData::funnel",
      "name": "funnel",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Centered stage bars: width, not trapezoid area, encodes raw quantity. Increasing stages are allowed and shown honestly rather than sorted.",
      "documentation": "Centered stage bars: width, not trapezoid area, encodes raw quantity.\nIncreasing stages are allowed and shown honestly rather than sorted.",
      "signature": "pub fn funnel (items : Vec<WeightedValue>) -> Result<Self, SpecializedError>",
      "cfg": [],
      "target": "SpecializedData"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedData::geometry",
      "name": "geometry",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Paint vertices for a business identity. These are normalized displayed polygons/segments, not label boxes or an accessibility-region promise.",
      "documentation": "Paint vertices for a business identity. These are normalized displayed\npolygons/segments, not label boxes or an accessibility-region promise.",
      "signature": "pub fn geometry (& self, id : & str) -> Option<& [Point<f32>]>",
      "cfg": [],
      "target": "SpecializedData"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedData::histogram",
      "name": "histogram",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Explicit finite increasing edges; bins are [left, right), except the final bin includes its right edge. Out-of-domain samples are errors. Bin identities derive from their edge values, not their list position.",
      "documentation": "Explicit finite increasing edges; bins are [left, right), except the\nfinal bin includes its right edge. Out-of-domain samples are errors.\nBin identities derive from their edge values, not their list position.",
      "signature": "pub fn histogram (samples : & [f64], edges : & [f64]) -> Result<Self, SpecializedError>",
      "cfg": [],
      "target": "SpecializedData"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedData::hit_test",
      "name": "hit_test",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Exact picking against painted polygons, in reverse paint order. `frame` is the pixel size of the plot; `stroke` is the painted line width in pixels. Semantic rectangles remain envelopes, never polygon hit regions.",
      "documentation": "Exact picking against painted polygons, in reverse paint order. `frame`\nis the pixel size of the plot; `stroke` is the painted line width in\npixels. Semantic rectangles remain envelopes, never polygon hit regions.",
      "signature": "pub fn hit_test (& self, p : Point<f32>, frame : gpui::Size<f32>, stroke : f32,) -> Option<SharedString>",
      "cfg": [],
      "target": "SpecializedData"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedData::range",
      "name": "range",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "One exact interval on an explicit shared linear domain. Reversed endpoints and out-of-domain values are errors, not clipped intervals.",
      "documentation": "One exact interval on an explicit shared linear domain. Reversed\nendpoints and out-of-domain values are errors, not clipped intervals.",
      "signature": "pub fn range (id : impl Into<SharedString>, label : impl Into<SharedString>, low : f64, high : f64, domain : [f64; 2],) -> Result<Self, SpecializedError>",
      "cfg": [],
      "target": "SpecializedData"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedData::sunburst",
      "name": "sunburst",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Equal radial depth bands, with angular span proportional to leaf totals. The root occupies the central disk; every child partitions its parent's angle.",
      "documentation": "Equal radial depth bands, with angular span proportional to leaf totals.\nThe root occupies the central disk; every child partitions its parent's angle.",
      "signature": "pub fn sunburst (root : & HierarchyNode) -> Result<Self, SpecializedError>",
      "cfg": [],
      "target": "SpecializedData"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedData::sunburst_at",
      "name": "sunburst_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Controlled sunburst drilldown with the same raw totals and navigation contract as [`Self::treemap_at`]. The focused node becomes the center.",
      "documentation": "Controlled sunburst drilldown with the same raw totals and navigation\ncontract as [`Self::treemap_at`]. The focused node becomes the center.",
      "signature": "pub fn sunburst_at (root : & HierarchyNode, focus : & str) -> Result<Self, SpecializedError>",
      "cfg": [],
      "target": "SpecializedData"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedData::treemap",
      "name": "treemap",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Alternating slice-and-dice treemap. Sibling order is caller order, each leaf area equals its fraction of the root, and children tile their parent.",
      "documentation": "Alternating slice-and-dice treemap. Sibling order is caller order, each\nleaf area equals its fraction of the root, and children tile their parent.",
      "signature": "pub fn treemap (root : & HierarchyNode) -> Result<Self, SpecializedError>",
      "cfg": [],
      "target": "SpecializedData"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedData::treemap_at",
      "name": "treemap_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Controlled treemap drilldown. Ancestor and child controls retain caller identities/wording; choosing one only proposes a new `focus` to the host. The complete hierarchy is validated before selecting a subtree.",
      "documentation": "Controlled treemap drilldown. Ancestor and child controls retain caller\nidentities/wording; choosing one only proposes a new `focus` to the host.\nThe complete hierarchy is validated before selecting a subtree.",
      "signature": "pub fn treemap_at (root : & HierarchyNode, focus : & str) -> Result<Self, SpecializedError>",
      "cfg": [],
      "target": "SpecializedData"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedData::waterfall",
      "name": "waterfall",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Signed changes accumulate in input order, with a domain including zero and every cumulative endpoint. Overflow is rejected before rendering.",
      "documentation": "Signed changes accumulate in input order, with a domain including zero\nand every cumulative endpoint. Overflow is rejected before rendering.",
      "signature": "pub fn waterfall (items : Vec<WeightedValue>) -> Result<Self, SpecializedError>",
      "cfg": [],
      "target": "SpecializedData"
    },
    {
      "id": "gpui_kit::display::specialized::SpecializedError",
      "name": "SpecializedError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Invalid raw input never becomes a plausible but incomplete picture.",
      "documentation": "Invalid raw input never becomes a plausible but incomplete picture.",
      "signature": "# [doc = \" Invalid raw input never becomes a plausible but incomplete picture.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum SpecializedError { DuplicateIdentity (SharedString), InvalidValue (SharedString), InvalidEdges, OutsideBins, EmptySample, InvalidRange, Overflow, UnknownFocus (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::specialized::WeightedValue",
      "name": "WeightedValue",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "A stable identity, human label, and finite raw quantity.",
      "documentation": "A stable identity, human label, and finite raw quantity.",
      "signature": "# [doc = \" A stable identity, human label, and finite raw quantity.\"] # [derive (Debug, Clone, PartialEq)] pub struct WeightedValue { pub id : SharedString, pub label : SharedString, pub value : f64, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::specialized::WeightedValue::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::specialized",
      "path": "gpui_kit::display::specialized",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>, value : f64) -> Self",
      "cfg": [],
      "target": "WeightedValue"
    },
    {
      "id": "gpui_kit::display::stage_progress::ProgressStage",
      "name": "ProgressStage",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::stage_progress",
      "path": "gpui_kit::display::stage_progress",
      "source": "crates/gpui-kit/src/display/stage_progress.rs",
      "summary": "One host-owned stage of a longer piece of work.",
      "documentation": "One host-owned stage of a longer piece of work.",
      "signature": "# [doc = \" One host-owned stage of a longer piece of work.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct ProgressStage { pub id : SharedString, pub label : SharedString, pub status : StageStatus, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::stage_progress::ProgressStage::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::stage_progress",
      "path": "gpui_kit::display::stage_progress",
      "source": "crates/gpui-kit/src/display/stage_progress.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>, status : StageStatus,) -> Self",
      "cfg": [],
      "target": "ProgressStage"
    },
    {
      "id": "gpui_kit::display::stage_progress::StageProgress",
      "name": "StageProgress",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::stage_progress",
      "path": "gpui_kit::display::stage_progress",
      "source": "crates/gpui-kit/src/display/stage_progress.rs",
      "summary": "A run of named stages, all of them supplied by the caller.",
      "documentation": "A run of named stages, all of them supplied by the caller.",
      "signature": "# [doc = \" A run of named stages, all of them supplied by the caller.\"] # [derive (Debug, IntoElement)] pub struct StageProgress { ident : Ident, stages : Vec<ProgressStage>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::stage_progress::StageProgress::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::stage_progress",
      "path": "gpui_kit::display::stage_progress",
      "source": "crates/gpui-kit/src/display/stage_progress.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "StageProgress"
    },
    {
      "id": "gpui_kit::display::stage_progress::StageProgress::stages",
      "name": "stages",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::stage_progress",
      "path": "gpui_kit::display::stage_progress",
      "source": "crates/gpui-kit/src/display/stage_progress.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn stages (mut self, stages : impl IntoIterator<Item = ProgressStage>) -> Self",
      "cfg": [],
      "target": "StageProgress"
    },
    {
      "id": "gpui_kit::display::stage_progress::StageStatus",
      "name": "StageStatus",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::stage_progress",
      "path": "gpui_kit::display::stage_progress",
      "source": "crates/gpui-kit/src/display/stage_progress.rs",
      "summary": "Where one stage stands.",
      "documentation": "Where one stage stands.",
      "signature": "# [doc = \" Where one stage stands.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum StageStatus { Pending, Active, Done, Failed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::stage_progress::StageStatus::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::stage_progress",
      "path": "gpui_kit::display::stage_progress",
      "source": "crates/gpui-kit/src/display/stage_progress.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "StageStatus"
    },
    {
      "id": "gpui_kit::display::state_view::StateView",
      "name": "StateView",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::state_view",
      "path": "gpui_kit::display::state_view",
      "source": "crates/gpui-kit/src/display/state_view.rs",
      "summary": "A region that picks the truthful waiting, empty, failed, or ready surface.",
      "documentation": "A region that picks the truthful waiting, empty, failed, or ready surface.",
      "signature": "# [doc = \" A region that picks the truthful waiting, empty, failed, or ready surface.\"] # [derive (IntoElement)] pub struct StateView { ident : Ident, phase : Phase, reason : Option<SharedString>, stale : bool, content : Option<AnyElement>, elapsed : Option<Duration>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::state_view::StateView::content",
      "name": "content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::state_view",
      "path": "gpui_kit::display::state_view",
      "source": "crates/gpui-kit/src/display/state_view.rs",
      "summary": "The last verified content, for Ready, Refreshing, and a stale Error.",
      "documentation": "The last verified content, for Ready, Refreshing, and a stale Error.",
      "signature": "pub fn content (mut self, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "StateView"
    },
    {
      "id": "gpui_kit::display::state_view::StateView::elapsed",
      "name": "elapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::state_view",
      "path": "gpui_kit::display::state_view",
      "source": "crates/gpui-kit/src/display/state_view.rs",
      "summary": "How long the host says this wait has already run.",
      "documentation": "How long the host says this wait has already run.\n\nThe clock stays with the host. Past eight seconds the semantic\ndescription reports that the wait is longer than usual; it does not\ninvent a duration.",
      "signature": "pub fn elapsed (mut self, elapsed : Duration) -> Self",
      "cfg": [],
      "target": "StateView"
    },
    {
      "id": "gpui_kit::display::state_view::StateView::from_async",
      "name": "from_async",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::state_view",
      "path": "gpui_kit::display::state_view",
      "source": "crates/gpui-kit/src/display/state_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_async<T, E : AsRef<str>> (ident : impl Into<Ident>, value : & AsyncValue<T, E>, ready : impl FnOnce (& T) -> AnyElement,) -> Self",
      "cfg": [],
      "target": "StateView"
    },
    {
      "id": "gpui_kit::display::state_view::StateView::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::state_view",
      "path": "gpui_kit::display::state_view",
      "source": "crates/gpui-kit/src/display/state_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, phase : impl HasPhase) -> Self",
      "cfg": [],
      "target": "StateView"
    },
    {
      "id": "gpui_kit::display::status::Banner",
      "name": "Banner",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "A page-level tinted report: title, action, and a way to close it.",
      "documentation": "A page-level tinted report: title, action, and a way to close it.\n\n[`Callout`] stays the inline form. This one is for a strip that sits\nabove a page and can be dismissed.",
      "signature": "# [doc = \" A page-level tinted report: title, action, and a way to close it.\"] # [doc = \"\"] # [doc = \" [`Callout`] stays the inline form. This one is for a strip that sits\"] # [doc = \" above a page and can be dismissed.\"] # [derive (IntoElement)] pub struct Banner { ident : Ident, message : SharedString, title : Option<SharedString>, tone : Tone, action : Option<AnyElement>, on_dismiss : Option<DismissHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::status::Banner::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn action (mut self, action : impl IntoElement) -> Self",
      "cfg": [],
      "target": "Banner"
    },
    {
      "id": "gpui_kit::display::status::Banner::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, message : impl Into<SharedString>, tone : Tone) -> Self",
      "cfg": [],
      "target": "Banner"
    },
    {
      "id": "gpui_kit::display::status::Banner::on_dismiss",
      "name": "on_dismiss",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_dismiss (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Banner"
    },
    {
      "id": "gpui_kit::display::status::Banner::title",
      "name": "title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn title (mut self, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Banner"
    },
    {
      "id": "gpui_kit::display::status::Callout",
      "name": "Callout",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "A tinted message block.",
      "documentation": "A tinted message block.\n\nCallouts carry host refusals and stale-data warnings verbatim; they never\nsummarize an error into a friendlier but less true sentence. They take a\n[`Tone`] and no tint: a refusal is a severity, not an identity, and\npainting one in a person's colour would make the report look like it\nbelonged to them.",
      "signature": "# [doc = \" A tinted message block.\"] # [doc = \"\"] # [doc = \" Callouts carry host refusals and stale-data warnings verbatim; they never\"] # [doc = \" summarize an error into a friendlier but less true sentence. They take a\"] # [doc = \" [`Tone`] and no tint: a refusal is a severity, not an identity, and\"] # [doc = \" painting one in a person's colour would make the report look like it\"] # [doc = \" belonged to them.\"] # [derive (Debug, IntoElement)] pub struct Callout { ident : Option<Ident>, message : SharedString, tone : Tone, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::status::Callout::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Callout"
    },
    {
      "id": "gpui_kit::display::status::Callout::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (message : impl Into<SharedString>, tone : Tone) -> Self",
      "cfg": [],
      "target": "Callout"
    },
    {
      "id": "gpui_kit::display::status::StaleMark",
      "name": "StaleMark",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "The mark that a verified value is still on screen after a failed refresh.",
      "documentation": "The mark that a verified value is still on screen after a failed refresh.",
      "signature": "# [doc = \" The mark that a verified value is still on screen after a failed refresh.\"] # [derive (Debug, IntoElement)] pub struct StaleMark { ident : Ident, reason : SharedString, updated : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::status::StaleMark::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "StaleMark"
    },
    {
      "id": "gpui_kit::display::status::StaleMark::updated",
      "name": "updated",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "The host's own wording for when the value was last verified.",
      "documentation": "The host's own wording for when the value was last verified.",
      "signature": "pub fn updated (mut self, updated : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "StaleMark"
    },
    {
      "id": "gpui_kit::display::status::StatusDot",
      "name": "StatusDot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "A tone-colored dot, the smallest state indicator in the system.",
      "documentation": "A tone-colored dot, the smallest state indicator in the system.",
      "signature": "# [doc = \" A tone-colored dot, the smallest state indicator in the system.\"] # [derive (Debug, IntoElement)] pub struct StatusDot { tone : Tone, tint : Option<Hsla>, # [doc = \" The identity a busy dot animates under, when it is reporting\"] # [doc = \" work that is still going.\"] busy : Option<Ident>, # [doc = \" Which claim the motion makes. A circle cannot turn, so working and\"] # [doc = \" deliberating both breathe; advancing sweeps a band across the mark.\"] activity : motion::Activity, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::status::StatusDot::activity",
      "name": "activity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "Which of the three busy claims the motion makes.",
      "documentation": "Which of the three busy claims the motion makes.\n\nWithout [`StatusDot::busy`] this is ignored: a settled dot does not\nmove, whatever activity was named.",
      "signature": "pub fn activity (mut self, activity : motion::Activity) -> Self",
      "cfg": [],
      "target": "StatusDot"
    },
    {
      "id": "gpui_kit::display::status::StatusDot::busy",
      "name": "busy",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "Breathes the dot, for a state that is still running.",
      "documentation": "Breathes the dot, for a state that is still running.\n\nA dot breathes where a glyph would turn, because there is nothing in a\ncircle for a rotation to be visible against. It is the same claim made\nwith the only motion this shape can carry.",
      "signature": "pub fn busy (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "StatusDot"
    },
    {
      "id": "gpui_kit::display::status::StatusDot::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (tone : Tone) -> Self",
      "cfg": [],
      "target": "StatusDot"
    },
    {
      "id": "gpui_kit::display::status::StatusDot::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "Paints the dot in a caller-owned colour without changing the severity the surface around it reports.",
      "documentation": "Paints the dot in a caller-owned colour without changing the severity\nthe surface around it reports.\n\nA dot is the smallest identity mark the library has, and an\napplication that colours people or workspaces needs one that is not\nlimited to the six severities. See [`Tone`] for what stays true.",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "StatusDot"
    },
    {
      "id": "gpui_kit::display::status::StatusLine",
      "name": "StatusLine",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "A dot plus a short label, for inline state.",
      "documentation": "A dot plus a short label, for inline state.",
      "signature": "# [doc = \" A dot plus a short label, for inline state.\"] # [derive (Debug, IntoElement)] pub struct StatusLine { ident : Option<Ident>, label : SharedString, tone : Tone, tint : Option<Hsla>, busy : Option<Ident>, activity : motion::Activity, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::status::StatusLine::activity",
      "name": "activity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "Which of the three busy claims the motion makes. See [`StatusDot::activity`].",
      "documentation": "Which of the three busy claims the motion makes. See [`StatusDot::activity`].",
      "signature": "pub fn activity (mut self, activity : motion::Activity) -> Self",
      "cfg": [],
      "target": "StatusLine"
    },
    {
      "id": "gpui_kit::display::status::StatusLine::busy",
      "name": "busy",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "Breathes the dot, for state that is still running.",
      "documentation": "Breathes the dot, for state that is still running.\n\nThe same claim [`StatusDot::busy`] makes, reachable from the labelled\nform, so a running row does not have to be rebuilt out of parts to\nmove.",
      "signature": "pub fn busy (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "StatusLine"
    },
    {
      "id": "gpui_kit::display::status::StatusLine::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "StatusLine"
    },
    {
      "id": "gpui_kit::display::status::StatusLine::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (label : impl Into<SharedString>, tone : Tone) -> Self",
      "cfg": [],
      "target": "StatusLine"
    },
    {
      "id": "gpui_kit::display::status::StatusLine::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::status",
      "path": "gpui_kit::display::status",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "Paints the dot in a caller-owned colour, leaving the reported severity alone. See [`Tone`].",
      "documentation": "Paints the dot in a caller-owned colour, leaving the reported severity\nalone. See [`Tone`].",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "StatusLine"
    },
    {
      "id": "gpui_kit::display::tag::Tag",
      "name": "Tag",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::tag",
      "path": "gpui_kit::display::tag",
      "source": "crates/gpui-kit/src/display/tag.rs",
      "summary": "A label with an optional remove action.",
      "documentation": "A label with an optional remove action.\n\nThe remove handler is only installed when the tag is removable and enabled,\nso a tag the host will not let go of shows no way to let go of it.",
      "signature": "# [doc = \" A label with an optional remove action.\"] # [doc = \"\"] # [doc = \" The remove handler is only installed when the tag is removable and enabled,\"] # [doc = \" so a tag the host will not let go of shows no way to let go of it.\"] # [derive (IntoElement)] pub struct Tag { ident : Ident, label : SharedString, tone : Tone, tint : Option<Hsla>, variant : Option<Variant>, color : Option<ColorChoice>, disabled : bool, selected : bool, on_remove : Option<RemoveHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::tag::Tag::color",
      "name": "color",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::tag",
      "path": "gpui_kit::display::tag",
      "source": "crates/gpui-kit/src/display/tag.rs",
      "summary": "The colour the shared tiers resolve against, when the tag is on them.",
      "documentation": "The colour the shared tiers resolve against, when the tag is on them.",
      "signature": "pub fn color (mut self, color : impl Into<ColorChoice>) -> Self",
      "cfg": [],
      "target": "Tag"
    },
    {
      "id": "gpui_kit::display::tag::Tag::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::tag",
      "path": "gpui_kit::display::tag",
      "source": "crates/gpui-kit/src/display/tag.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Tag"
    },
    {
      "id": "gpui_kit::display::tag::Tag::on_remove",
      "name": "on_remove",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::tag",
      "path": "gpui_kit::display::tag",
      "source": "crates/gpui-kit/src/display/tag.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_remove (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Tag"
    },
    {
      "id": "gpui_kit::display::tag::Tag::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::tag",
      "path": "gpui_kit::display::tag",
      "source": "crates/gpui-kit/src/display/tag.rs",
      "summary": "Paints the tag in a caller-owned colour, leaving the severity it reports alone. See [`Tone`].",
      "documentation": "Paints the tag in a caller-owned colour, leaving the severity it\nreports alone. See [`Tone`].",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "Tag"
    },
    {
      "id": "gpui_kit::display::tag::Tag::tone",
      "name": "tone",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::tag",
      "path": "gpui_kit::display::tag",
      "source": "crates/gpui-kit/src/display/tag.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tone (mut self, tone : Tone) -> Self",
      "cfg": [],
      "target": "Tag"
    },
    {
      "id": "gpui_kit::display::tag::Tag::variant",
      "name": "variant",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::tag",
      "path": "gpui_kit::display::tag",
      "source": "crates/gpui-kit/src/display/tag.rs",
      "summary": "Puts the tag on the shared presentation tiers. The tone stays what the node publishes; the tier only decides how loudly the colour is worn. See [`gpui_kit_theme::Theme::variant_colors`].",
      "documentation": "Puts the tag on the shared presentation tiers. The tone stays what\nthe node publishes; the tier only decides how loudly the colour is\nworn. See [`gpui_kit_theme::Theme::variant_colors`].",
      "signature": "pub fn variant (mut self, variant : Variant) -> Self",
      "cfg": [],
      "target": "Tag"
    },
    {
      "id": "gpui_kit::display::timeline::EntryTime",
      "name": "EntryTime",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "When an entry happened, as far as anyone knows.",
      "documentation": "When an entry happened, as far as anyone knows.",
      "signature": "# [doc = \" When an entry happened, as far as anyone knows.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum EntryTime { # [doc = \" A time the caller has already put into words.\"] At (SharedString), # [doc = \" Nobody knows when this happened, and the entry says so.\"] # [default] Unknown, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::timeline::EntryTime::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "EntryTime"
    },
    {
      "id": "gpui_kit::display::timeline::Timeline",
      "name": "Timeline",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "A chronological feed, optionally divided into days.",
      "documentation": "A chronological feed, optionally divided into days.",
      "signature": "# [doc = \" A chronological feed, optionally divided into days.\"] # [derive (IntoElement)] pub struct Timeline { ident : Ident, groups : Vec<TimelineGroup>, loose : Vec<TimelineEntry>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::timeline::Timeline::entries",
      "name": "entries",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "Entries with no heading over them, kept in the order they arrived.",
      "documentation": "Entries with no heading over them, kept in the order they arrived.",
      "signature": "pub fn entries (mut self, entries : impl IntoIterator<Item = TimelineEntry>) -> Self",
      "cfg": [],
      "target": "Timeline"
    },
    {
      "id": "gpui_kit::display::timeline::Timeline::group",
      "name": "group",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn group (mut self, group : TimelineGroup) -> Self",
      "cfg": [],
      "target": "Timeline"
    },
    {
      "id": "gpui_kit::display::timeline::Timeline::groups",
      "name": "groups",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn groups (mut self, groups : impl IntoIterator<Item = TimelineGroup>) -> Self",
      "cfg": [],
      "target": "Timeline"
    },
    {
      "id": "gpui_kit::display::timeline::Timeline::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Timeline"
    },
    {
      "id": "gpui_kit::display::timeline::TimelineEntry",
      "name": "TimelineEntry",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "One thing that happened.",
      "documentation": "One thing that happened.",
      "signature": "# [doc = \" One thing that happened.\"] pub struct TimelineEntry { id : SharedString, time : EntryTime, actor : Option<SharedString>, description : SharedString, tone : Tone, detail : Option<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::timeline::TimelineEntry::actor",
      "name": "actor",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn actor (mut self, actor : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TimelineEntry"
    },
    {
      "id": "gpui_kit::display::timeline::TimelineEntry::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "Anything the entry carries beyond one line, such as a diff or a reason.",
      "documentation": "Anything the entry carries beyond one line, such as a diff or a reason.",
      "signature": "pub fn detail (mut self, detail : impl IntoElement) -> Self",
      "cfg": [],
      "target": "TimelineEntry"
    },
    {
      "id": "gpui_kit::display::timeline::TimelineEntry::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "TimelineEntry"
    },
    {
      "id": "gpui_kit::display::timeline::TimelineEntry::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TimelineEntry"
    },
    {
      "id": "gpui_kit::display::timeline::TimelineEntry::time",
      "name": "time",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "The time, already in the words the host chose.",
      "documentation": "The time, already in the words the host chose.",
      "signature": "pub fn time (mut self, time : impl Into<EntryTime>) -> Self",
      "cfg": [],
      "target": "TimelineEntry"
    },
    {
      "id": "gpui_kit::display::timeline::TimelineEntry::time_unknown",
      "name": "time_unknown",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn time_unknown (mut self) -> Self",
      "cfg": [],
      "target": "TimelineEntry"
    },
    {
      "id": "gpui_kit::display::timeline::TimelineEntry::tone",
      "name": "tone",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tone (mut self, tone : Tone) -> Self",
      "cfg": [],
      "target": "TimelineEntry"
    },
    {
      "id": "gpui_kit::display::timeline::TimelineGroup",
      "name": "TimelineGroup",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "A run of entries under one heading, usually a day.",
      "documentation": "A run of entries under one heading, usually a day.",
      "signature": "# [doc = \" A run of entries under one heading, usually a day.\"] pub struct TimelineGroup { id : SharedString, label : SharedString, entries : Vec<TimelineEntry>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::timeline::TimelineGroup::entries",
      "name": "entries",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn entries (mut self, entries : impl IntoIterator<Item = TimelineEntry>) -> Self",
      "cfg": [],
      "target": "TimelineGroup"
    },
    {
      "id": "gpui_kit::display::timeline::TimelineGroup::entry",
      "name": "entry",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn entry (mut self, entry : TimelineEntry) -> Self",
      "cfg": [],
      "target": "TimelineGroup"
    },
    {
      "id": "gpui_kit::display::timeline::TimelineGroup::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::timeline",
      "path": "gpui_kit::display::timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "`label` is the heading in the caller's words — \"Today\", \"12 March\" — because the timeline does not name days either.",
      "documentation": "`label` is the heading in the caller's words — \"Today\", \"12 March\" —\nbecause the timeline does not name days either.",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TimelineGroup"
    },
    {
      "id": "gpui_kit::display::trace::SpanState",
      "name": "SpanState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "What a span is doing, as the host already knows it.",
      "documentation": "What a span is doing, as the host already knows it.",
      "signature": "# [doc = \" What a span is doing, as the host already knows it.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum SpanState { # [default] Pending, Running, Succeeded, Failed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::trace::SpanState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "SpanState"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline",
      "name": "SpanTimeline",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "The waterfall alone: bars and a time axis, with each span named at its own bar instead of in a gutter.",
      "documentation": "The waterfall alone: bars and a time axis, with each span named at its own\nbar instead of in a gutter.",
      "signature": "# [doc = \" The waterfall alone: bars and a time axis, with each span named at its own\"] # [doc = \" bar instead of in a gutter.\"] # [derive (IntoElement)] pub struct SpanTimeline { ident : Ident, label : SharedString, spans : Rc<Vec<TraceSpan>>, options : TraceOptions, axis_start : Option<SharedString>, axis_end : Option<SharedString>, ticks : Vec<AxisTick>, current : Option<SharedString>, on_select : Option<SelectHandler>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::animate_layout",
      "name": "animate_layout",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Animate surviving mounted rows after caller-applied hierarchy changes. Enabled by default, independently of time viewport motion. Disabled or reduced motion settles immediately; removed rows have no exit animation.",
      "documentation": "Animate surviving mounted rows after caller-applied hierarchy changes.\nEnabled by default, independently of time viewport motion. Disabled or\nreduced motion settles immediately; removed rows have no exit animation.",
      "signature": "pub fn animate_layout (mut self, animate : bool) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::animate_viewport",
      "name": "animate_viewport",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Animate caller-applied time windows. Reduced motion and orientation reversal settle immediately; proposals always use the current caller window.",
      "documentation": "Animate caller-applied time windows. Reduced motion and orientation\nreversal settle immediately; proposals always use the current caller window.",
      "signature": "pub fn animate_viewport (mut self, animate : bool) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::axis",
      "name": "axis",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn axis (mut self, start : impl Into<SharedString>, end : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::collapsed",
      "name": "collapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Collapsed identities in the caller's depth-first preorder span list.",
      "documentation": "Collapsed identities in the caller's depth-first preorder span list.",
      "signature": "pub fn collapsed (mut self, ids : impl IntoIterator<Item = SharedString>) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::format_time",
      "name": "format_time",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Formats raw-time ticks and human-facing range/span readouts. The caller owns locale, timezone and precision; event/selection values stay raw.",
      "documentation": "Formats raw-time ticks and human-facing range/span readouts. The caller\nowns locale, timezone and precision; event/selection values stay raw.",
      "signature": "pub fn format_time (mut self, format : impl Fn (f64) -> SharedString + 'static) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::layout_animation",
      "name": "layout_animation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Override Tracking timing for row positions, not the time viewport. Retargeting starts at displayed geometry. New rows wait for survivors to settle, then mount in place without hidden handlers or semantics.",
      "documentation": "Override Tracking timing for row positions, not the time viewport.\nRetargeting starts at displayed geometry. New rows wait for survivors\nto settle, then mount in place without hidden handlers or semantics.",
      "signature": "pub fn layout_animation (mut self, spec : motion::MotionSpec) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::on_time_selection",
      "name": "on_time_selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Shows a range strip and proposes shared controlled range events.",
      "documentation": "Shows a range strip and proposes shared controlled range events.",
      "signature": "pub fn on_time_selection (mut self, handler : impl Fn (crate::interaction::range::RangeEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::on_toggle",
      "name": "on_toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Reports desired expansion, without changing caller-owned hierarchy.",
      "documentation": "Reports desired expansion, without changing caller-owned hierarchy.",
      "signature": "pub fn on_toggle (mut self, handler : impl Fn (SharedString, bool, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::on_viewport",
      "name": "on_viewport",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Ctrl-wheel zooms at the pointer; shift-wheel pans. The host may refuse.",
      "documentation": "Ctrl-wheel zooms at the pointer; shift-wheel pans. The host may refuse.",
      "signature": "pub fn on_viewport (mut self, handler : impl Fn (NumericScale, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::selected_time",
      "name": "selected_time",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Persistent caller-owned ascending raw time range. None clears it. Out-of-viewport values remain authoritative rather than being normalized.",
      "documentation": "Persistent caller-owned ascending raw time range. None clears it.\nOut-of-viewport values remain authoritative rather than being normalized.",
      "signature": "pub fn selected_time (mut self, value : Option<[f64; 2]>,) -> Result<Self, crate::interaction::range::RangeError>",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::shared_spans",
      "name": "shared_spans",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Reuse caller-owned input across frames without cloning every span.",
      "documentation": "Reuse caller-owned input across frames without cloning every span.",
      "signature": "pub fn shared_spans (mut self, spans : Rc<Vec<TraceSpan>>) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::spans",
      "name": "spans",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn spans (mut self, spans : impl IntoIterator<Item = TraceSpan>) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::ticks",
      "name": "ticks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Host-owned gridlines: a position on the same unit axis the spans use, and the exact text under it. Without any, the grid falls back to quarters of the axis, which carry a line and no wording.",
      "documentation": "Host-owned gridlines: a position on the same unit axis the spans use,\nand the exact text under it. Without any, the grid falls back to\nquarters of the axis, which carry a line and no wording.",
      "signature": "pub fn ticks<S : Into<SharedString>> (mut self, ticks : impl IntoIterator<Item = (f32, S)>,) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::time_viewport",
      "name": "time_viewport",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Caller-owned time window. The default remains the normalized [0, 1].",
      "documentation": "Caller-owned time window. The default remains the normalized [0, 1].",
      "signature": "pub fn time_viewport (mut self, domain : [f64; 2]) -> Result<Self, ScaleError>",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::SpanTimeline::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Maximum viewport height in rows; GPUI may measure one additional row. Input scanning remains linear and is not a paint-work claim.",
      "documentation": "Maximum viewport height in rows; GPUI may measure one additional row.\nInput scanning remains linear and is not a paint-work claim.",
      "signature": "pub fn visible_rows (mut self, count : usize) -> Self",
      "cfg": [],
      "target": "SpanTimeline"
    },
    {
      "id": "gpui_kit::display::trace::TraceSpan",
      "name": "TraceSpan",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "One already-timed interval on a unit axis.",
      "documentation": "One already-timed interval on a unit axis.",
      "signature": "# [doc = \" One already-timed interval on a unit axis.\"] # [derive (Debug, Clone, PartialEq)] pub struct TraceSpan { pub id : SharedString, pub label : SharedString, # [doc = \" Inclusive start on the host's normalized axis, in `0..=1`.\"] pub start : f32, # [doc = \" Exclusive end on the same axis. Values outside the unit interval are\"] # [doc = \" clamped when drawn, never rewritten.\"] pub end : f32, pub depth : u32, pub state : SpanState, pub detail : Option<SharedString>, # [doc = \" The host's exact wording for how long this span took. The component\"] # [doc = \" never derives it from `start` and `end`: those are positions on a unit\"] # [doc = \" interval and know nothing about the clock behind them.\"] pub duration : Option<SharedString>, # [doc = \" Optional raw Unix millisecond interval. Overrides normalized positions\"] # [doc = \" only for geometry; labels and duration remain caller-owned.\"] pub time : Option<[f64; 2]>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::trace::TraceSpan::depth",
      "name": "depth",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn depth (mut self, depth : u32) -> Self",
      "cfg": [],
      "target": "TraceSpan"
    },
    {
      "id": "gpui_kit::display::trace::TraceSpan::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TraceSpan"
    },
    {
      "id": "gpui_kit::display::trace::TraceSpan::duration",
      "name": "duration",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "The already-formatted length of this span, shown beside its bar.",
      "documentation": "The already-formatted length of this span, shown beside its bar.",
      "signature": "pub fn duration (mut self, duration : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TraceSpan"
    },
    {
      "id": "gpui_kit::display::trace::TraceSpan::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>, start : f32, end : f32,) -> Self",
      "cfg": [],
      "target": "TraceSpan"
    },
    {
      "id": "gpui_kit::display::trace::TraceSpan::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : SpanState) -> Self",
      "cfg": [],
      "target": "TraceSpan"
    },
    {
      "id": "gpui_kit::display::trace::TraceSpan::time",
      "name": "time",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Raw-time entry point preserving sub-millisecond precision until mapping. Nonfinite or reversed intervals are retained but have no painted bar.",
      "documentation": "Raw-time entry point preserving sub-millisecond precision until mapping.\nNonfinite or reversed intervals are retained but have no painted bar.",
      "signature": "pub fn time (mut self, start_ms : f64, end_ms : f64) -> Self",
      "cfg": [],
      "target": "TraceSpan"
    },
    {
      "id": "gpui_kit::display::trace::TraceView",
      "name": "TraceView",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Hierarchical labels beside a waterfall of caller-owned spans.",
      "documentation": "Hierarchical labels beside a waterfall of caller-owned spans.",
      "signature": "# [doc = \" Hierarchical labels beside a waterfall of caller-owned spans.\"] # [derive (IntoElement)] pub struct TraceView { ident : Ident, label : SharedString, spans : Rc<Vec<TraceSpan>>, options : TraceOptions, axis_start : Option<SharedString>, axis_end : Option<SharedString>, ticks : Vec<AxisTick>, current : Option<SharedString>, on_select : Option<SelectHandler>, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::display::trace::TraceView::animate_layout",
      "name": "animate_layout",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Animate surviving mounted rows after caller-applied hierarchy changes. Enabled by default, independently of time viewport motion. Disabled or reduced motion settles immediately; removed rows have no exit animation.",
      "documentation": "Animate surviving mounted rows after caller-applied hierarchy changes.\nEnabled by default, independently of time viewport motion. Disabled or\nreduced motion settles immediately; removed rows have no exit animation.",
      "signature": "pub fn animate_layout (mut self, animate : bool) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::animate_viewport",
      "name": "animate_viewport",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Animate caller-applied time windows. Reduced motion and orientation reversal settle immediately; proposals always use the current caller window.",
      "documentation": "Animate caller-applied time windows. Reduced motion and orientation\nreversal settle immediately; proposals always use the current caller window.",
      "signature": "pub fn animate_viewport (mut self, animate : bool) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::axis",
      "name": "axis",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Exact wording for the two ends of the host's time axis.",
      "documentation": "Exact wording for the two ends of the host's time axis.",
      "signature": "pub fn axis (mut self, start : impl Into<SharedString>, end : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::collapsed",
      "name": "collapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Collapsed identities in the caller's depth-first preorder span list.",
      "documentation": "Collapsed identities in the caller's depth-first preorder span list.",
      "signature": "pub fn collapsed (mut self, ids : impl IntoIterator<Item = SharedString>) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::format_time",
      "name": "format_time",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Formats raw-time ticks and human-facing range/span readouts. The caller owns locale, timezone and precision; event/selection values stay raw.",
      "documentation": "Formats raw-time ticks and human-facing range/span readouts. The caller\nowns locale, timezone and precision; event/selection values stay raw.",
      "signature": "pub fn format_time (mut self, format : impl Fn (f64) -> SharedString + 'static) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::layout_animation",
      "name": "layout_animation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Override Tracking timing for row positions, not the time viewport. Retargeting starts at displayed geometry. New rows wait for survivors to settle, then mount in place without hidden handlers or semantics.",
      "documentation": "Override Tracking timing for row positions, not the time viewport.\nRetargeting starts at displayed geometry. New rows wait for survivors\nto settle, then mount in place without hidden handlers or semantics.",
      "signature": "pub fn layout_animation (mut self, spec : motion::MotionSpec) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::on_time_selection",
      "name": "on_time_selection",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Shows a range strip and proposes Create/Resize/Move Update, Commit and Cancel events. Cancellation never rolls back previously accepted values.",
      "documentation": "Shows a range strip and proposes Create/Resize/Move Update, Commit and\nCancel events. Cancellation never rolls back previously accepted values.",
      "signature": "pub fn on_time_selection (mut self, handler : impl Fn (crate::interaction::range::RangeEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::on_toggle",
      "name": "on_toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Reports desired expansion, without changing caller-owned hierarchy.",
      "documentation": "Reports desired expansion, without changing caller-owned hierarchy.",
      "signature": "pub fn on_toggle (mut self, handler : impl Fn (SharedString, bool, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::on_viewport",
      "name": "on_viewport",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Ctrl-wheel zooms at the pointer; shift-wheel pans. The host may refuse.",
      "documentation": "Ctrl-wheel zooms at the pointer; shift-wheel pans. The host may refuse.",
      "signature": "pub fn on_viewport (mut self, handler : impl Fn (NumericScale, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::selected_time",
      "name": "selected_time",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Persistent caller-owned ascending raw time range. None clears it. A range outside the viewport remains authoritative but cannot be resized until the caller brings it into view; it is never silently normalized.",
      "documentation": "Persistent caller-owned ascending raw time range. None clears it.\nA range outside the viewport remains authoritative but cannot be resized\nuntil the caller brings it into view; it is never silently normalized.",
      "signature": "pub fn selected_time (mut self, value : Option<[f64; 2]>,) -> Result<Self, crate::interaction::range::RangeError>",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::shared_spans",
      "name": "shared_spans",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Reuse caller-owned input across frames without cloning every span.",
      "documentation": "Reuse caller-owned input across frames without cloning every span.",
      "signature": "pub fn shared_spans (mut self, spans : Rc<Vec<TraceSpan>>) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::spans",
      "name": "spans",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn spans (mut self, spans : impl IntoIterator<Item = TraceSpan>) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::ticks",
      "name": "ticks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Host-owned gridlines: a position on the same unit axis the spans use, and the exact text under it. Without any, the grid falls back to quarters of the axis, which carry a line and no wording.",
      "documentation": "Host-owned gridlines: a position on the same unit axis the spans use,\nand the exact text under it. Without any, the grid falls back to\nquarters of the axis, which carry a line and no wording.",
      "signature": "pub fn ticks<S : Into<SharedString>> (mut self, ticks : impl IntoIterator<Item = (f32, S)>,) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::time_viewport",
      "name": "time_viewport",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Caller-owned time window. The default remains the normalized [0, 1].",
      "documentation": "Caller-owned time window. The default remains the normalized [0, 1].",
      "signature": "pub fn time_viewport (mut self, domain : [f64; 2]) -> Result<Self, ScaleError>",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::display::trace::TraceView::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "display::trace",
      "path": "gpui_kit::display::trace",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Maximum viewport height in rows; GPUI may measure one additional row. Input scanning remains linear and is not a paint-work claim.",
      "documentation": "Maximum viewport height in rows; GPUI may measure one additional row.\nInput scanning remains linear and is not a paint-work claim.",
      "signature": "pub fn visible_rows (mut self, count : usize) -> Self",
      "cfg": [],
      "target": "TraceView"
    },
    {
      "id": "gpui_kit::effects::EffectBudget",
      "name": "EffectBudget",
      "kind": "type",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Maximum animated work admitted during one frame.",
      "documentation": "Maximum animated work admitted during one frame.",
      "signature": "# [doc = \" Maximum animated work admitted during one frame.\"] pub type EffectBudget = EffectCost;",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::EffectCost",
      "name": "EffectCost",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Estimated renderer work consumed by one animated recipe.",
      "documentation": "Estimated renderer work consumed by one animated recipe.",
      "signature": "# [doc = \" Estimated renderer work consumed by one animated recipe.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub struct EffectCost { pub events : u16, pub emitters : u16, pub particles : u32, pub animated_pixels : u32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::EffectCost::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn new (events : u16, emitters : u16, particles : u32, animated_pixels : u32) -> Self",
      "cfg": [],
      "target": "EffectCost"
    },
    {
      "id": "gpui_kit::effects::EffectEvent",
      "name": "EffectEvent",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "One normalized event submitted to the effects policy.",
      "documentation": "One normalized event submitted to the effects policy.",
      "signature": "# [doc = \" One normalized event submitted to the effects policy.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct EffectEvent { pub id : SharedString, pub surface : SharedString, pub target : SharedString, pub origin : Option<SharedString>, pub cue : VisualCue, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::EffectEvent::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, surface : impl Into<SharedString>, target : impl Into<SharedString>, cue : VisualCue,) -> Self",
      "cfg": [],
      "target": "EffectEvent"
    },
    {
      "id": "gpui_kit::effects::EffectEvent::origin",
      "name": "origin",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Names the related source for a transfer or arrival when one exists.",
      "documentation": "Names the related source for a transfer or arrival when one exists.",
      "signature": "pub fn origin (mut self, origin : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "EffectEvent"
    },
    {
      "id": "gpui_kit::effects::EffectFallback",
      "name": "EffectFallback",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Why the full animated recipe resolved to its static counterpart.",
      "documentation": "Why the full animated recipe resolved to its static counterpart.",
      "signature": "# [doc = \" Why the full animated recipe resolved to its static counterpart.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum EffectFallback { Quality, ReducedMotion, Budget, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::EffectImportance",
      "name": "EffectImportance",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Why a cue matters when the active quality tier decides how to present it.",
      "documentation": "Why a cue matters when the active quality tier decides how to present it.",
      "signature": "# [doc = \" Why a cue matters when the active quality tier decides how to present it.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum EffectImportance { Essential, Expressive, Decorative, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::EffectParticles",
      "name": "EffectParticles",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Decorative, batched particles for one policy-resolved [`EffectPlan`].",
      "documentation": "Decorative, batched particles for one policy-resolved [`EffectPlan`].\n\nThe component fills the bounds its parent gives it. It owns recipe\ntopology, palette, timing, deterministic sampling, RTL mirroring, reduced\nmotion fallback, and animation-frame requests; a caller supplies no\nparticle parameters. Replay-suppressed plans render nothing. Static plans\nrender a small fixed constellation and never schedule a frame.\n\nParticles are deliberately absent for zero-emitter recipes such as\n`AttentionPulse` and `RefusalMark`: the semantic control or status remains\nthe required feedback, while this component is only its decorative layer.",
      "signature": "# [doc = \" Decorative, batched particles for one policy-resolved [`EffectPlan`].\"] # [doc = \"\"] # [doc = \" The component fills the bounds its parent gives it. It owns recipe\"] # [doc = \" topology, palette, timing, deterministic sampling, RTL mirroring, reduced\"] # [doc = \" motion fallback, and animation-frame requests; a caller supplies no\"] # [doc = \" particle parameters. Replay-suppressed plans render nothing. Static plans\"] # [doc = \" render a small fixed constellation and never schedule a frame.\"] # [doc = \"\"] # [doc = \" Particles are deliberately absent for zero-emitter recipes such as\"] # [doc = \" `AttentionPulse` and `RefusalMark`: the semantic control or status remains\"] # [doc = \" the required feedback, while this component is only its decorative layer.\"] # [derive (Debug, IntoElement)] pub struct EffectParticles { plan : EffectPlan, sample_at : Option<Duration>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::EffectParticles::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Creates a full-bounds particle layer from a centrally resolved plan.",
      "documentation": "Creates a full-bounds particle layer from a centrally resolved plan.",
      "signature": "pub fn new (plan : EffectPlan) -> Self",
      "cfg": [],
      "target": "EffectParticles"
    },
    {
      "id": "gpui_kit::effects::EffectParticles::sample_at",
      "name": "sample_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Samples an animated plan at an exact absolute time without scheduling.",
      "documentation": "Samples an animated plan at an exact absolute time without scheduling.\n\nThis is for deterministic captures, replay tooling, and scrubbers.\nStatic presentations ignore the supplied time and retain their fixed\nreduced-motion fallback.",
      "signature": "pub fn sample_at (mut self, elapsed : Duration) -> Self",
      "cfg": [],
      "target": "EffectParticles"
    },
    {
      "id": "gpui_kit::effects::EffectPlan",
      "name": "EffectPlan",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "The complete deterministic answer for one semantic event.",
      "documentation": "The complete deterministic answer for one semantic event.",
      "signature": "# [doc = \" The complete deterministic answer for one semantic event.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct EffectPlan { pub id : SharedString, pub surface : SharedString, pub target : SharedString, pub origin : Option<SharedString>, pub cue : VisualCue, pub recipe : EffectRecipe, pub presentation : EffectPresentation, # [doc = \" Stable seed derived from event identity, independent of process hash\"] # [doc = \" randomization and suitable for deterministic particle placement.\"] pub seed : u64, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::EffectPlan::animated",
      "name": "animated",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn animated (& self) -> bool",
      "cfg": [],
      "target": "EffectPlan"
    },
    {
      "id": "gpui_kit::effects::EffectPlan::visible",
      "name": "visible",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn visible (& self) -> bool",
      "cfg": [],
      "target": "EffectPlan"
    },
    {
      "id": "gpui_kit::effects::EffectPlanner",
      "name": "EffectPlanner",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Stateful resolver used by the installed global and available for isolated runtimes or deterministic tests.",
      "documentation": "Stateful resolver used by the installed global and available for isolated\nruntimes or deterministic tests.",
      "signature": "# [doc = \" Stateful resolver used by the installed global and available for isolated\"] # [doc = \" runtimes or deterministic tests.\"] # [derive (Debug)] pub struct EffectPlanner { policy : EffectPolicy, frame : Option<u64>, global_usage : EffectCost, surface_usage : HashMap<SharedString, EffectCost>, replay_order : VecDeque<SharedString>, replay_seen : HashSet<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::EffectPlanner::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (policy : EffectPolicy) -> Self",
      "cfg": [],
      "target": "EffectPlanner"
    },
    {
      "id": "gpui_kit::effects::EffectPlanner::plan",
      "name": "plan",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Resolves one event for a known frame and accessibility preference.",
      "documentation": "Resolves one event for a known frame and accessibility preference.",
      "signature": "pub fn plan (& mut self, event : EffectEvent, frame : u64, reduce_motion : bool) -> EffectPlan",
      "cfg": [],
      "target": "EffectPlanner"
    },
    {
      "id": "gpui_kit::effects::EffectPlanner::policy",
      "name": "policy",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn policy (& self) -> & EffectPolicy",
      "cfg": [],
      "target": "EffectPlanner"
    },
    {
      "id": "gpui_kit::effects::EffectPlanner::set_policy",
      "name": "set_policy",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Changes future quality and budgets without replaying consumed events.",
      "documentation": "Changes future quality and budgets without replaying consumed events.",
      "signature": "pub fn set_policy (& mut self, policy : EffectPolicy)",
      "cfg": [],
      "target": "EffectPlanner"
    },
    {
      "id": "gpui_kit::effects::EffectPolicy",
      "name": "EffectPolicy",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Quality, replay, and frame/surface budget policy installed by the host.",
      "documentation": "Quality, replay, and frame/surface budget policy installed by the host.",
      "signature": "# [doc = \" Quality, replay, and frame/surface budget policy installed by the host.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct EffectPolicy { pub quality : EffectQuality, pub global_budget : EffectBudget, pub surface_budget : EffectBudget, pub replay_capacity : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::EffectPolicy::budgets",
      "name": "budgets",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Replaces both per-frame limits. Static fallbacks do not spend them.",
      "documentation": "Replaces both per-frame limits. Static fallbacks do not spend them.",
      "signature": "pub fn budgets (mut self, global : EffectBudget, per_surface : EffectBudget) -> Self",
      "cfg": [],
      "target": "EffectPolicy"
    },
    {
      "id": "gpui_kit::effects::EffectPolicy::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (quality : EffectQuality) -> Self",
      "cfg": [],
      "target": "EffectPolicy"
    },
    {
      "id": "gpui_kit::effects::EffectPolicy::replay_capacity",
      "name": "replay_capacity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Bounds reconnect/rebuild suppression history. Zero remembers nothing.",
      "documentation": "Bounds reconnect/rebuild suppression history. Zero remembers nothing.",
      "signature": "pub fn replay_capacity (mut self, capacity : usize) -> Self",
      "cfg": [],
      "target": "EffectPolicy"
    },
    {
      "id": "gpui_kit::effects::EffectPresentation",
      "name": "EffectPresentation",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "How the chosen recipe is allowed to appear.",
      "documentation": "How the chosen recipe is allowed to appear.",
      "signature": "# [doc = \" How the chosen recipe is allowed to appear.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum EffectPresentation { # [doc = \" This identity was already consumed and should not appear again.\"] Suppressed (EffectSuppression), # [doc = \" The semantic fallback: visible feedback with no time-based movement.\"] Static (EffectFallback), # [doc = \" The complete token-driven animated recipe.\"] Animated, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::EffectQuality",
      "name": "EffectQuality",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "How much optional visual richness the host permits.",
      "documentation": "How much optional visual richness the host permits.",
      "signature": "# [doc = \" How much optional visual richness the host permits.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash, Default)] pub enum EffectQuality { # [doc = \" No animation. Semantic events still resolve to static feedback.\"] Off, # [doc = \" Animate only events needed to direct attention or explain failure.\"] Essential, # [doc = \" Animate essential and expressive product events, but not spectacle.\"] # [default] Balanced, # [doc = \" Permit decorative reward and celebration treatments as well.\"] Cinematic, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::EffectRecipe",
      "name": "EffectRecipe",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Renderer-facing recipe selected from a semantic cue.",
      "documentation": "Renderer-facing recipe selected from a semantic cue.\n\nRecipes carry no arbitrary shader or caller-selected colour. A renderer\nuses theme semantics, motion tokens, and the [`EffectPresentation`] chosen\nby policy. Concrete particle and stroke primitives are implemented below\nthis boundary.",
      "signature": "# [doc = \" Renderer-facing recipe selected from a semantic cue.\"] # [doc = \"\"] # [doc = \" Recipes carry no arbitrary shader or caller-selected colour. A renderer\"] # [doc = \" uses theme semantics, motion tokens, and the [`EffectPresentation`] chosen\"] # [doc = \" by policy. Concrete particle and stroke primitives are implemented below\"] # [doc = \" this boundary.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum EffectRecipe { ArrivalHalo, DelegationTrace, HandoffTrace, AggregationPulse, SuccessBurst, RewardCelebration, AttentionPulse, RefusalMark, FailurePulse, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::EffectRecipe::cost",
      "name": "cost",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Returns the renderer work reserved when this recipe is admitted.",
      "documentation": "Returns the renderer work reserved when this recipe is admitted.\n\nThe particle renderer uses the same count, so planner accounting and\nemitted topology cannot silently drift apart.",
      "signature": "pub fn cost (self) -> EffectCost",
      "cfg": [],
      "target": "EffectRecipe"
    },
    {
      "id": "gpui_kit::effects::EffectSuppression",
      "name": "EffectSuppression",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Why no visual presentation should be emitted at all.",
      "documentation": "Why no visual presentation should be emitted at all.",
      "signature": "# [doc = \" Why no visual presentation should be emitted at all.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum EffectSuppression { Replay, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::ParticleBurst",
      "name": "ParticleBurst",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Resolves and consumes one semantic event against the active policy. A click-scale particle flavour resolved through the same policy as cues.",
      "documentation": "Resolves and consumes one semantic event against the active policy.\nA click-scale particle flavour resolved through the same policy as cues.",
      "signature": "# [doc = \" Resolves and consumes one semantic event against the active policy.\"] # [doc = \" A click-scale particle flavour resolved through the same policy as cues.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum ParticleBurst { Confetti, Hearts, Stars, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::ParticleBurst::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "ParticleBurst"
    },
    {
      "id": "gpui_kit::effects::VisualCue",
      "name": "VisualCue",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "A product-neutral statement of what changed visually.",
      "documentation": "A product-neutral statement of what changed visually.\n\nThese are meanings, not implementations. In particular `Reward` does not\npromise particles and `Handoff` does not prescribe a colour or path.",
      "signature": "# [doc = \" A product-neutral statement of what changed visually.\"] # [doc = \"\"] # [doc = \" These are meanings, not implementations. In particular `Reward` does not\"] # [doc = \" promise particles and `Handoff` does not prescribe a colour or path.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum VisualCue { Arrival, Delegation, Handoff, Aggregation, Success, Reward, Attention, Refusal, Failure, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::VisualCue::importance",
      "name": "importance",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn importance (self) -> EffectImportance",
      "cfg": [],
      "target": "VisualCue"
    },
    {
      "id": "gpui_kit::effects::burst_particles",
      "name": "burst_particles",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Plans a one-shot particle burst. Identity is consumed once, like any cue.",
      "documentation": "Plans a one-shot particle burst. Identity is consumed once, like any cue.",
      "signature": "pub fn burst_particles (id : impl Into<SharedString>, surface : impl Into<SharedString>, target : impl Into<SharedString>, style : ParticleBurst, window : & Window, cx : & mut App,) -> EffectPlan",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::CinematicEffect",
      "name": "CinematicEffect",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "A semantic one-shot effect with an optional prepared dotLottie clip.",
      "documentation": "A semantic one-shot effect with an optional prepared dotLottie clip.\n\nThe component fills its parent, owns deterministic playback and poster\nsampling, mirrors directional clips in RTL, rechecks reduced motion, and\nfalls back to [`EffectParticles`] for every unavailable or rejected clip.\nIt is decorative and installs no hitbox or action handler.",
      "signature": "# [doc = \" A semantic one-shot effect with an optional prepared dotLottie clip.\"] # [doc = \"\"] # [doc = \" The component fills its parent, owns deterministic playback and poster\"] # [doc = \" sampling, mirrors directional clips in RTL, rechecks reduced motion, and\"] # [doc = \" falls back to [`EffectParticles`] for every unavailable or rejected clip.\"] # [doc = \" It is decorative and installs no hitbox or action handler.\"] # [derive (Debug, IntoElement)] pub struct CinematicEffect { ident : Ident, plan : EffectPlan, source : CinematicSource, sample_at : Option<Duration>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::CinematicEffect::clip",
      "name": "clip",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clip (mut self, clip : Rc<dyn DotLottieClip>) -> Self",
      "cfg": [],
      "target": "CinematicEffect"
    },
    {
      "id": "gpui_kit::effects::dotlottie::CinematicEffect::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, plan : EffectPlan) -> Self",
      "cfg": [],
      "target": "CinematicEffect"
    },
    {
      "id": "gpui_kit::effects::dotlottie::CinematicEffect::resolved",
      "name": "resolved",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Applies a host's preparation result without forcing it to branch just to install the standard fallback.",
      "documentation": "Applies a host's preparation result without forcing it to branch just\nto install the standard fallback.",
      "signature": "pub fn resolved (mut self, clip : Result<Rc<dyn DotLottieClip>, DotLottieError>) -> Self",
      "cfg": [],
      "target": "CinematicEffect"
    },
    {
      "id": "gpui_kit::effects::dotlottie::CinematicEffect::sample_at",
      "name": "sample_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Samples an exact semantic elapsed time and schedules no frames. Elapsed times after the policy-owned recipe duration sample its endpoint.",
      "documentation": "Samples an exact semantic elapsed time and schedules no frames. Elapsed\ntimes after the policy-owned recipe duration sample its endpoint.",
      "signature": "pub fn sample_at (mut self, elapsed : Duration) -> Self",
      "cfg": [],
      "target": "CinematicEffect"
    },
    {
      "id": "gpui_kit::effects::dotlottie::CinematicEffect::unavailable",
      "name": "unavailable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn unavailable (mut self, error : DotLottieError) -> Self",
      "cfg": [],
      "target": "CinematicEffect"
    },
    {
      "id": "gpui_kit::effects::dotlottie::CinematicRecipe",
      "name": "CinematicRecipe",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Semantic cinematic recipe selected from an [`EffectPlan`].",
      "documentation": "Semantic cinematic recipe selected from an [`EffectPlan`].\n\n`asset_slot` is a product-neutral lookup key, not a filename. The host maps\nit to resolved bytes; Box owns duration, poster sampling, and RTL policy.",
      "signature": "# [doc = \" Semantic cinematic recipe selected from an [`EffectPlan`].\"] # [doc = \"\"] # [doc = \" `asset_slot` is a product-neutral lookup key, not a filename. The host maps\"] # [doc = \" it to resolved bytes; Box owns duration, poster sampling, and RTL policy.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum CinematicRecipe { Arrival, Delegation, Handoff, Aggregation, Success, Reward, Attention, Refusal, Failure, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::CinematicRecipe::asset_slot",
      "name": "asset_slot",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn asset_slot (self) -> & 'static str",
      "cfg": [],
      "target": "CinematicRecipe"
    },
    {
      "id": "gpui_kit::effects::dotlottie::CinematicRecipe::duration",
      "name": "duration",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn duration (self, theme : & Theme) -> Duration",
      "cfg": [],
      "target": "CinematicRecipe"
    },
    {
      "id": "gpui_kit::effects::dotlottie::CinematicRecipe::mirrors_in_rtl",
      "name": "mirrors_in_rtl",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn mirrors_in_rtl (self) -> bool",
      "cfg": [],
      "target": "CinematicRecipe"
    },
    {
      "id": "gpui_kit::effects::dotlottie::CinematicRecipe::motion_role",
      "name": "motion_role",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn motion_role (self) -> MotionRole",
      "cfg": [],
      "target": "CinematicRecipe"
    },
    {
      "id": "gpui_kit::effects::dotlottie::CinematicRecipe::poster_progress_per_mille",
      "name": "poster_progress_per_mille",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn poster_progress_per_mille (self) -> u16",
      "cfg": [],
      "target": "CinematicRecipe"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieAdapter",
      "name": "DotLottieAdapter",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Backend-neutral preparation boundary for resolved host bytes.",
      "documentation": "Backend-neutral preparation boundary for resolved host bytes.",
      "signature": "# [doc = \" Backend-neutral preparation boundary for resolved host bytes.\"] pub trait DotLottieAdapter : fmt::Debug { fn available (& self) -> bool; fn prepare (& self, asset : DotLottieAsset, limits : DotLottieLimits,) -> Result<Rc<dyn DotLottieClip>, DotLottieError>; }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieAsset",
      "name": "DotLottieAsset",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Resolved `.lottie` bytes supplied by the host.",
      "documentation": "Resolved `.lottie` bytes supplied by the host.\n\nThis type has no URL or path constructor. Asset lookup, authorization,\ncaching, persistence, and transport remain host responsibilities.",
      "signature": "# [doc = \" Resolved `.lottie` bytes supplied by the host.\"] # [doc = \"\"] # [doc = \" This type has no URL or path constructor. Asset lookup, authorization,\"] # [doc = \" caching, persistence, and transport remain host responsibilities.\"] # [derive (Clone)] pub struct DotLottieAsset { bytes : Arc<[u8]>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieAsset::bytes",
      "name": "bytes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bytes (& self) -> & [u8]",
      "cfg": [],
      "target": "DotLottieAsset"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieAsset::encoded_len",
      "name": "encoded_len",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn encoded_len (& self) -> usize",
      "cfg": [],
      "target": "DotLottieAsset"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieAsset::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "DotLottieAsset"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieAsset::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (bytes : impl Into<Arc<[u8]>>) -> Self",
      "cfg": [],
      "target": "DotLottieAsset"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieClip",
      "name": "DotLottieClip",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "A validated clip prepared by a host-selected adapter.",
      "documentation": "A validated clip prepared by a host-selected adapter.",
      "signature": "# [doc = \" A validated clip prepared by a host-selected adapter.\"] pub trait DotLottieClip : fmt::Debug { fn metadata (& self) -> DotLottieMetadata; # [doc = \" Rasterizes one exact normalized sample. Implementations must return a\"] # [doc = \" complete RGBA-derived frame and honor the requested horizontal mirror.\"] fn render (& self, sample : DotLottieSample) -> Result<Arc<RenderImage>, DotLottieError>; }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieError",
      "name": "DotLottieError",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Typed adapter failure with an optional host-facing diagnostic.",
      "documentation": "Typed adapter failure with an optional host-facing diagnostic.\n\nComponents publish only [`DotLottieErrorKind`] into semantics, so a parser\ndiagnostic cannot leak asset content into snapshots. The detail is for the\nhost's own logs or explicit error UI.",
      "signature": "# [doc = \" Typed adapter failure with an optional host-facing diagnostic.\"] # [doc = \"\"] # [doc = \" Components publish only [`DotLottieErrorKind`] into semantics, so a parser\"] # [doc = \" diagnostic cannot leak asset content into snapshots. The detail is for the\"] # [doc = \" host's own logs or explicit error UI.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct DotLottieError { kind : DotLottieErrorKind, detail : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieError::category",
      "name": "category",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn category (& self) -> DotLottieErrorKind",
      "cfg": [],
      "target": "DotLottieError"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieError::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn detail (& self) -> & str",
      "cfg": [],
      "target": "DotLottieError"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieError::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn kind (kind : DotLottieErrorKind) -> Self",
      "cfg": [],
      "target": "DotLottieError"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieError::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (kind : DotLottieErrorKind, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DotLottieError"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieError::runtime_unavailable",
      "name": "runtime_unavailable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn runtime_unavailable () -> Self",
      "cfg": [],
      "target": "DotLottieError"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieErrorKind",
      "name": "DotLottieErrorKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Stable category for validation, preparation, and rendering failures.",
      "documentation": "Stable category for validation, preparation, and rendering failures.",
      "signature": "# [doc = \" Stable category for validation, preparation, and rendering failures.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] # [non_exhaustive] pub enum DotLottieErrorKind { RuntimeUnavailable, InvalidLimits, EmptyAsset, EncodedSize, ArchiveInvalid, ArchiveEntries, ArchiveEntrySize, ArchiveExpandedSize, ArchiveCompressionRatio, AnimationCount, StateMachineCount, ImageCount, ImageSize, CanvasSize, FrameRate, FrameCount, Duration, UnsupportedFeature, InvalidInput, RenderFailed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieErrorKind::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn name (self) -> & 'static str",
      "cfg": [],
      "target": "DotLottieErrorKind"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieInput",
      "name": "DotLottieInput",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "A bounded state-machine input name and value.",
      "documentation": "A bounded state-machine input name and value.\n\nNames contain at most 64 ASCII letters, digits, dots, dashes, or\nunderscores. Numeric inputs must be finite with an absolute magnitude no\ngreater than [`dotlottie_hard_limits::INPUT_MAGNITUDE`].",
      "signature": "# [doc = \" A bounded state-machine input name and value.\"] # [doc = \"\"] # [doc = \" Names contain at most 64 ASCII letters, digits, dots, dashes, or\"] # [doc = \" underscores. Numeric inputs must be finite with an absolute magnitude no\"] # [doc = \" greater than [`dotlottie_hard_limits::INPUT_MAGNITUDE`].\"] # [derive (Debug, Clone, PartialEq)] pub struct DotLottieInput { name : SharedString, value : DotLottieInputValue, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieInput::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & str",
      "cfg": [],
      "target": "DotLottieInput"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieInput::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (name : impl Into<SharedString>, value : DotLottieInputValue,) -> Result<Self, DotLottieError>",
      "cfg": [],
      "target": "DotLottieInput"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieInput::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn value (& self) -> DotLottieInputValue",
      "cfg": [],
      "target": "DotLottieInput"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieInputValue",
      "name": "DotLottieInputValue",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Values a host runtime may route into an already-selected state machine.",
      "documentation": "Values a host runtime may route into an already-selected state machine.",
      "signature": "# [doc = \" Values a host runtime may route into an already-selected state machine.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub enum DotLottieInputValue { Boolean (bool), Number (f32), Trigger, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieLimits",
      "name": "DotLottieLimits",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Limits applied before a host-provided `.lottie` archive is prepared.",
      "documentation": "Limits applied before a host-provided `.lottie` archive is prepared.\n\nFields are public so a host can make the policy stricter. Values above\n[`dotlottie_hard_limits`] are invalid and are rejected explicitly.",
      "signature": "# [doc = \" Limits applied before a host-provided `.lottie` archive is prepared.\"] # [doc = \"\"] # [doc = \" Fields are public so a host can make the policy stricter. Values above\"] # [doc = \" [`dotlottie_hard_limits`] are invalid and are rejected explicitly.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct DotLottieLimits { pub max_encoded_bytes : usize, pub max_archive_entries : usize, pub max_entry_bytes : u64, pub max_expanded_bytes : u64, pub max_compression_ratio : u32, pub max_dimension : u32, pub max_pixels : u64, pub max_frame_rate : u32, pub max_frames : u32, pub max_duration : Duration, pub max_animations : u16, pub max_state_machines : u16, pub max_images : u16, # [doc = \" Aggregate decoded target pixels across every image asset.\"] pub max_image_pixels : u64, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieLimits::strict",
      "name": "strict",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "The standard runtime boundary: 2 MiB encoded, 8 MiB expanded, a 1024-pixel edge, 60 fps, 600 frames, eight animations, four state machines, 32 images, and two million aggregate image pixels.",
      "documentation": "The standard runtime boundary: 2 MiB encoded, 8 MiB expanded, a\n1024-pixel edge, 60 fps, 600 frames, eight animations, four state\nmachines, 32 images, and two million aggregate image pixels.",
      "signature": "pub const fn strict () -> Self",
      "cfg": [],
      "target": "DotLottieLimits"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieMetadata",
      "name": "DotLottieMetadata",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Validated metadata for the animation selected by the archive manifest.",
      "documentation": "Validated metadata for the animation selected by the archive manifest.",
      "signature": "# [doc = \" Validated metadata for the animation selected by the archive manifest.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct DotLottieMetadata { pub width : u32, pub height : u32, # [doc = \" Frames per second multiplied by 1000, preserving rates such as 29.97.\"] pub frame_rate_millihertz : u32, pub frame_count : u32, pub duration : Duration, pub animation_count : u16, pub state_machine_count : u16, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieMetadata::frame_rate",
      "name": "frame_rate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn frame_rate (self) -> f32",
      "cfg": [],
      "target": "DotLottieMetadata"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottiePlayback",
      "name": "DotLottiePlayback",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "A truthful playback snapshot. It does not mutate or advance itself.",
      "documentation": "A truthful playback snapshot. It does not mutate or advance itself.",
      "signature": "# [doc = \" A truthful playback snapshot. It does not mutate or advance itself.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct DotLottiePlayback { pub state : DotLottiePlaybackState, pub position : Duration, pub looping : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottiePlayback::looping",
      "name": "looping",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn looping (mut self, looping : bool) -> Self",
      "cfg": [],
      "target": "DotLottiePlayback"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottiePlayback::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn new (state : DotLottiePlaybackState, position : Duration) -> Self",
      "cfg": [],
      "target": "DotLottiePlayback"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottiePlaybackState",
      "name": "DotLottiePlaybackState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Caller-owned transport facts for a stateful dotLottie host runtime.",
      "documentation": "Caller-owned transport facts for a stateful dotLottie host runtime.",
      "signature": "# [doc = \" Caller-owned transport facts for a stateful dotLottie host runtime.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum DotLottiePlaybackState { Stopped, Playing, Paused, Completed, Unavailable, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieRequest",
      "name": "DotLottieRequest",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Typed requests for a host-owned playback or state-machine runtime.",
      "documentation": "Typed requests for a host-owned playback or state-machine runtime.\n\nThese are intents only. They make no claim that playback advanced or that\na state-machine transition was accepted.",
      "signature": "# [doc = \" Typed requests for a host-owned playback or state-machine runtime.\"] # [doc = \"\"] # [doc = \" These are intents only. They make no claim that playback advanced or that\"] # [doc = \" a state-machine transition was accepted.\"] # [derive (Debug, Clone, PartialEq)] pub enum DotLottieRequest { Play, Pause, Stop, Seek (Duration), Input (DotLottieInput), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieSample",
      "name": "DotLottieSample",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "One exact, normalized sample requested from a prepared clip.",
      "documentation": "One exact, normalized sample requested from a prepared clip.",
      "signature": "# [doc = \" One exact, normalized sample requested from a prepared clip.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct DotLottieSample { progress_per_mille : u16, mirror_x : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieSample::at_progress",
      "name": "at_progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Creates an exact sample. Progress must be finite and between zero and one; invalid values are refused rather than clamped.",
      "documentation": "Creates an exact sample. Progress must be finite and between zero and\none; invalid values are refused rather than clamped.",
      "signature": "pub fn at_progress (progress : f32, mirror_x : bool) -> Result<Self, DotLottieError>",
      "cfg": [],
      "target": "DotLottieSample"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieSample::mirror_x",
      "name": "mirror_x",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn mirror_x (self) -> bool",
      "cfg": [],
      "target": "DotLottieSample"
    },
    {
      "id": "gpui_kit::effects::dotlottie::DotLottieSample::progress_per_mille",
      "name": "progress_per_mille",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn progress_per_mille (self) -> u16",
      "cfg": [],
      "target": "DotLottieSample"
    },
    {
      "id": "gpui_kit::effects::dotlottie::EffectPlan::cinematic_recipe",
      "name": "cinematic_recipe",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Returns the cinematic asset slot and playback policy for this plan.",
      "documentation": "Returns the cinematic asset slot and playback policy for this plan.",
      "signature": "pub fn cinematic_recipe (& self) -> CinematicRecipe",
      "cfg": [],
      "target": "EffectPlan"
    },
    {
      "id": "gpui_kit::effects::dotlottie::UnavailableDotLottieAdapter",
      "name": "UnavailableDotLottieAdapter",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "Explicit adapter used when no dotLottie runtime is linked or available.",
      "documentation": "Explicit adapter used when no dotLottie runtime is linked or available.",
      "signature": "# [doc = \" Explicit adapter used when no dotLottie runtime is linked or available.\"] # [derive (Debug, Default, Clone, Copy)] pub struct UnavailableDotLottieAdapter;",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::dotlottie::reexport-1",
      "name": "raster :: RasterDotLottieAdapter",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects::dotlottie",
      "path": "gpui_kit::effects::dotlottie",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (feature = \"dotlottie\")] pub use raster::RasterDotLottieAdapter;",
      "cfg": [
        "cfg (feature = \"dotlottie\")"
      ]
    },
    {
      "id": "gpui_kit::effects::effect_policy",
      "name": "effect_policy",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Returns the currently installed policy, defaulting to Balanced.",
      "documentation": "Returns the currently installed policy, defaulting to Balanced.",
      "signature": "pub fn effect_policy (cx : & App) -> EffectPolicy",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::plan_effect",
      "name": "plan_effect",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Resolves and consumes one semantic event against the active policy.",
      "documentation": "Resolves and consumes one semantic event against the active policy.",
      "signature": "pub fn plan_effect (event : EffectEvent, window : & Window, cx : & mut App) -> EffectPlan",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::reexport-1",
      "name": "dotlottie :: *",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use dotlottie::*;",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::set_effect_policy",
      "name": "set_effect_policy",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Installs a new policy while preserving replay history.",
      "documentation": "Installs a new policy while preserving replay history.",
      "signature": "pub fn set_effect_policy (policy : EffectPolicy, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::effects::stagger_for_policy",
      "name": "stagger_for_policy",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "effects",
      "path": "gpui_kit::effects",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Compresses a list wave to the active quality tier.",
      "documentation": "Compresses a list wave to the active quality tier.",
      "signature": "pub fn stagger_for_policy (stagger : crate::motion::Stagger, cx : & App) -> crate::motion::Stagger",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::Disableable",
      "name": "Disableable",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation",
      "path": "gpui_kit::foundation",
      "source": "crates/gpui-kit/src/foundation/mod.rs",
      "summary": "A control that can refuse interaction.",
      "documentation": "A control that can refuse interaction.\n\nImplementations must not install action handlers while disabled, so a\ndisabled control cannot fire even if a host mis-routes an event.",
      "signature": "# [doc = \" A control that can refuse interaction.\"] # [doc = \"\"] # [doc = \" Implementations must not install action handlers while disabled, so a\"] # [doc = \" disabled control cannot fire even if a host mis-routes an event.\"] pub trait Disableable { fn disabled (self, disabled : bool) -> Self; }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::Selectable",
      "name": "Selectable",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation",
      "path": "gpui_kit::foundation",
      "source": "crates/gpui-kit/src/foundation/mod.rs",
      "summary": "A control that can present itself as the current choice.",
      "documentation": "A control that can present itself as the current choice.",
      "signature": "# [doc = \" A control that can present itself as the current choice.\"] pub trait Selectable { fn selected (self, selected : bool) -> Self; }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::Sizable",
      "name": "Sizable",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation",
      "path": "gpui_kit::foundation",
      "source": "crates/gpui-kit/src/foundation/mod.rs",
      "summary": "A control that resolves its metrics from the token control scale.",
      "documentation": "A control that resolves its metrics from the token control scale.",
      "signature": "# [doc = \" A control that resolves its metrics from the token control scale.\"] pub trait Sizable : Sized { fn control_size (self, size : ControlSize) -> Self; fn xs (self) -> Self { self . control_size (ControlSize::Xs) } fn small (self) -> Self { self . control_size (ControlSize::Sm) } fn medium (self) -> Self { self . control_size (ControlSize::Md) } fn large (self) -> Self { self . control_size (ControlSize::Lg) } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::direction::ActiveDirection",
      "name": "ActiveDirection",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "Reads the active reading direction from any context that dereferences to [`App`], the way [`ActiveTheme`](gpui_kit_theme::ActiveTheme) reads the theme.",
      "documentation": "Reads the active reading direction from any context that dereferences to\n[`App`], the way [`ActiveTheme`](gpui_kit_theme::ActiveTheme) reads the\ntheme.",
      "signature": "# [doc = \" Reads the active reading direction from any context that dereferences to\"] # [doc = \" [`App`], the way [`ActiveTheme`](gpui_kit_theme::ActiveTheme) reads the\"] # [doc = \" theme.\"] pub trait ActiveDirection { fn layout_direction (& self) -> LayoutDirection; fn is_rtl (& self) -> bool { self . layout_direction () . is_rtl () } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::direction::DirectionalExt",
      "name": "DirectionalExt",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "Logical box model helpers, named by reading order.",
      "documentation": "Logical box model helpers, named by reading order.\n\nEach one takes the direction explicitly rather than reaching for the\nglobal, because a component has already read it once by the time it styles\nanything and passing it keeps these usable in a test with no application.",
      "signature": "# [doc = \" Logical box model helpers, named by reading order.\"] # [doc = \"\"] # [doc = \" Each one takes the direction explicitly rather than reaching for the\"] # [doc = \" global, because a component has already read it once by the time it styles\"] # [doc = \" anything and passing it keeps these usable in a test with no application.\"] pub trait DirectionalExt : Styled + Sized { # [doc = \" A flex row that runs in reading order.\"] fn row_reading (self, direction : LayoutDirection) -> Self { let element = self . flex () . items_center (); if direction . is_rtl () { element . flex_row_reverse () } else { element . flex_row () } } # [doc = \" Padding on the edge reading begins at.\"] fn ps (self, direction : LayoutDirection, length : Pixels) -> Self { if direction . is_rtl () { self . pr (length) } else { self . pl (length) } } # [doc = \" Padding on the edge reading ends at.\"] fn pe (self, direction : LayoutDirection, length : Pixels) -> Self { if direction . is_rtl () { self . pl (length) } else { self . pr (length) } } # [doc = \" Margin on the edge reading begins at.\"] fn ms (self, direction : LayoutDirection, length : Pixels) -> Self { if direction . is_rtl () { self . mr (length) } else { self . ml (length) } } # [doc = \" Margin on the edge reading ends at.\"] fn me (self, direction : LayoutDirection, length : Pixels) -> Self { if direction . is_rtl () { self . ml (length) } else { self . mr (length) } } # [doc = \" A border on the edge reading begins at.\"] fn border_s (self, direction : LayoutDirection, width : Pixels) -> Self { if direction . is_rtl () { self . border_r (width) } else { self . border_l (width) } } # [doc = \" A border on the edge reading ends at.\"] fn border_e (self, direction : LayoutDirection, width : Pixels) -> Self { if direction . is_rtl () { self . border_l (width) } else { self . border_r (width) } } # [doc = \" Text aligned to where reading begins.\"] fn text_start (self, direction : LayoutDirection) -> Self { self . text_align (match direction { LayoutDirection::LeftToRight => TextAlign::Left, LayoutDirection::RightToLeft => TextAlign::Right, }) } # [doc = \" Text aligned to where reading ends.\"] fn text_end (self, direction : LayoutDirection) -> Self { self . text_align (match direction { LayoutDirection::LeftToRight => TextAlign::Right, LayoutDirection::RightToLeft => TextAlign::Left, }) } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::direction::LayoutDirection",
      "name": "LayoutDirection",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "The direction the interface reads in.",
      "documentation": "The direction the interface reads in.\n\nLeft to right is the default, so a host that never sets one renders\nexactly as it did before this existed.",
      "signature": "# [doc = \" The direction the interface reads in.\"] # [doc = \"\"] # [doc = \" Left to right is the default, so a host that never sets one renders\"] # [doc = \" exactly as it did before this existed.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash, Default)] pub enum LayoutDirection { # [default] LeftToRight, RightToLeft, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::direction::LayoutDirection::arrow_step",
      "name": "arrow_step",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "How far one step through reading order moves when a physical arrow key is pressed. `None` for a key that is not a horizontal arrow.",
      "documentation": "How far one step through reading order moves when a physical arrow key\nis pressed. `None` for a key that is not a horizontal arrow.\n\nA `Left` arrow means \"previous\" while reading left to right and \"next\"\nwhile reading right to left, so a component that steps a selection asks\nthis instead of matching on the key name.",
      "signature": "pub fn arrow_step (self, key : & str) -> Option<i32>",
      "cfg": [],
      "target": "LayoutDirection"
    },
    {
      "id": "gpui_kit::foundation::direction::LayoutDirection::end",
      "name": "end",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "The physical edge that reading ends at.",
      "documentation": "The physical edge that reading ends at.",
      "signature": "pub fn end (self) -> PhysicalSide",
      "cfg": [],
      "target": "LayoutDirection"
    },
    {
      "id": "gpui_kit::foundation::direction::LayoutDirection::is_ltr",
      "name": "is_ltr",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_ltr (self) -> bool",
      "cfg": [],
      "target": "LayoutDirection"
    },
    {
      "id": "gpui_kit::foundation::direction::LayoutDirection::is_rtl",
      "name": "is_rtl",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_rtl (self) -> bool",
      "cfg": [],
      "target": "LayoutDirection"
    },
    {
      "id": "gpui_kit::foundation::direction::LayoutDirection::start",
      "name": "start",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "The physical edge that reading begins at.",
      "documentation": "The physical edge that reading begins at.",
      "signature": "pub fn start (self) -> PhysicalSide",
      "cfg": [],
      "target": "LayoutDirection"
    },
    {
      "id": "gpui_kit::foundation::direction::LogicalSide",
      "name": "LogicalSide",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "An edge named by reading order rather than by geometry.",
      "documentation": "An edge named by reading order rather than by geometry.",
      "signature": "# [doc = \" An edge named by reading order rather than by geometry.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum LogicalSide { Start, End, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::direction::LogicalSide::resolve",
      "name": "resolve",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn resolve (self, direction : LayoutDirection) -> PhysicalSide",
      "cfg": [],
      "target": "LogicalSide"
    },
    {
      "id": "gpui_kit::foundation::direction::PhysicalSide",
      "name": "PhysicalSide",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "An edge that does not move when the reading direction does.",
      "documentation": "An edge that does not move when the reading direction does.",
      "signature": "# [doc = \" An edge that does not move when the reading direction does.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum PhysicalSide { Left, Right, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::direction::PhysicalSide::is_left",
      "name": "is_left",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_left (self) -> bool",
      "cfg": [],
      "target": "PhysicalSide"
    },
    {
      "id": "gpui_kit::foundation::direction::PhysicalSide::opposite",
      "name": "opposite",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn opposite (self) -> Self",
      "cfg": [],
      "target": "PhysicalSide"
    },
    {
      "id": "gpui_kit::foundation::direction::install",
      "name": "install",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "Installs the direction global at its default. Idempotent.",
      "documentation": "Installs the direction global at its default. Idempotent.",
      "signature": "pub fn install (cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::direction::set_layout_direction",
      "name": "set_layout_direction",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::direction",
      "path": "gpui_kit::foundation::direction",
      "source": "crates/gpui-kit/src/foundation/direction.rs",
      "summary": "Sets the reading direction and repaints every window.",
      "documentation": "Sets the reading direction and repaints every window.",
      "signature": "pub fn set_layout_direction (direction : LayoutDirection, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::ident::Ident",
      "name": "Ident",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::ident",
      "path": "gpui_kit::foundation::ident",
      "source": "crates/gpui-kit/src/foundation/ident.rs",
      "summary": "One identity used for both the GPUI element and the semantic tree.",
      "documentation": "One identity used for both the GPUI element and the semantic tree.\n\nIds come from business identity, never list position, so an assertion that\ntargets `settings.provider.anthropic` keeps working when the row moves.",
      "signature": "# [doc = \" One identity used for both the GPUI element and the semantic tree.\"] # [doc = \"\"] # [doc = \" Ids come from business identity, never list position, so an assertion that\"] # [doc = \" targets `settings.provider.anthropic` keeps working when the row moves.\"] pub struct Ident { segments : SmallVec<[SharedString; 3]>, resolved : OnceLock<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::ident::Ident::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::ident",
      "path": "gpui_kit::foundation::ident",
      "source": "crates/gpui-kit/src/foundation/ident.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & str",
      "cfg": [],
      "target": "Ident"
    },
    {
      "id": "gpui_kit::foundation::ident::Ident::child",
      "name": "child",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::ident",
      "path": "gpui_kit::foundation::ident",
      "source": "crates/gpui-kit/src/foundation/ident.rs",
      "summary": "Derives a lazily joined child identity, for example the clear button inside a field.",
      "documentation": "Derives a lazily joined child identity, for example the clear button\ninside a field.\n\nSegments stay separate until an element or semantic id needs the full\nstring. Chained builders therefore materialize once rather than once\nper intermediate child, and the inline segment storage dies with the\nvalue instead of retaining an interning table.",
      "signature": "pub fn child (& self, suffix : impl AsRef<str>) -> Self",
      "cfg": [],
      "target": "Ident"
    },
    {
      "id": "gpui_kit::foundation::ident::Ident::element_id",
      "name": "element_id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::ident",
      "path": "gpui_kit::foundation::ident",
      "source": "crates/gpui-kit/src/foundation/ident.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn element_id (& self) -> ElementId",
      "cfg": [],
      "target": "Ident"
    },
    {
      "id": "gpui_kit::foundation::ident::Ident::indexed_element_id",
      "name": "indexed_element_id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::ident",
      "path": "gpui_kit::foundation::ident",
      "source": "crates/gpui-kit/src/foundation/ident.rs",
      "summary": "An element id for one repeated part, such as a loader cell.",
      "documentation": "An element id for one repeated part, such as a loader cell.\n\nRepeated visual parts have no business identity, so they get an index\nhere and never appear as semantic assertion targets.",
      "signature": "pub fn indexed_element_id (& self, index : usize) -> ElementId",
      "cfg": [],
      "target": "Ident"
    },
    {
      "id": "gpui_kit::foundation::ident::Ident::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::ident",
      "path": "gpui_kit::foundation::ident",
      "source": "crates/gpui-kit/src/foundation/ident.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Ident"
    },
    {
      "id": "gpui_kit::foundation::ident::Ident::semantic_id",
      "name": "semantic_id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::ident",
      "path": "gpui_kit::foundation::ident",
      "source": "crates/gpui-kit/src/foundation/ident.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn semantic_id (& self) -> SharedString",
      "cfg": [],
      "target": "Ident"
    },
    {
      "id": "gpui_kit::foundation::interaction::HoverLift",
      "name": "HoverLift",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::interaction",
      "path": "gpui_kit::foundation::interaction",
      "source": "crates/gpui-kit/src/foundation/interaction.rs",
      "summary": "The response a surface gives while the pointer is over it.",
      "documentation": "The response a surface gives while the pointer is over it.",
      "signature": "# [doc = \" The response a surface gives while the pointer is over it.\"] pub trait HoverLift : InteractiveElement + Styled + Sized { # [doc = \" Raises the surface by `motion.hoverLiftPx` onto the raised elevation\"] # [doc = \" shadow while it is hovered.\"] # [doc = \"\"] # [doc = \" The shadow does the work and the pixel of travel only sells it, so a\"] # [doc = \" theme that casts no shadow at all still gets a legible response.\"] fn hover_lift (self, cx : & App) -> Self { self . hover_lift_with (cx, | style | style) } # [doc = \" The same lift, folded into a hover style the caller already wanted.\"] # [doc = \"\"] # [doc = \" GPUI allows exactly one hover style per element, so a surface that\"] # [doc = \" already washes its background on hover cannot ask for the lift\"] # [doc = \" separately; it asks for both at once. `wash` is applied whether or not\"] # [doc = \" motion is reduced, because a colour change is not motion.\"] fn hover_lift_with (self, cx : & App, wash : impl FnOnce (StyleRefinement) -> StyleRefinement,) -> Self { if ! MotionPolicy::resolve (MotionRole::StateChange, cx) . animates () { return self . hover (wash); } let theme = cx . theme (); let lift = px (- theme . motion . hover_lift); let shadow = theme . shadow (Elevation::Raised) . to_vec (); self . hover (move | style | wash (style) . top (lift) . shadow (shadow . clone ())) } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::interaction::Pressable",
      "name": "Pressable",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::interaction",
      "path": "gpui_kit::foundation::interaction",
      "source": "crates/gpui-kit/src/foundation/interaction.rs",
      "summary": "The response a control gives while the pointer is held on it.",
      "documentation": "The response a control gives while the pointer is held on it.",
      "signature": "# [doc = \" The response a control gives while the pointer is held on it.\"] pub trait Pressable : StatefulInteractiveElement + Styled + Sized { # [doc = \" Sinks the control by `motion.pressOffsetPx` while it is held.\"] # [doc = \"\"] # [doc = \" This is a downward shift, not a scale: the GPUI revision this library\"] # [doc = \" pins offers a transform on `svg` alone, so there is no way to scale a\"] # [doc = \" div and pretending otherwise would mean redrawing the control at a\"] # [doc = \" different size, which is a layout change wearing a costume. A press is\"] # [doc = \" therefore reported the way a physical key reports one — it goes down.\"] fn pressable (self, cx : & App) -> Self { if ! MotionPolicy::resolve (MotionRole::StateChange, cx) . animates () { return self; } self . pressable_with (cx, | style | style) } # [doc = \" Combines a pressed fill with the press motion in GPUI's single active\"] # [doc = \" style. The fill remains visible when Reduce motion removes travel.\"] fn pressable_with (self, cx : & App, wash : impl FnOnce (StyleRefinement) -> StyleRefinement,) -> Self { if ! MotionPolicy::resolve (MotionRole::StateChange, cx) . animates () { return self . active (wash); } let sink = px (cx . theme () . motion . press_offset); self . active (| style | wash (style) . top (sink)) } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::reexport-1",
      "name": "direction :: { ActiveDirection , DirectionalExt , LayoutDirection , LogicalSide , PhysicalSide , set_layout_direction , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation",
      "path": "gpui_kit::foundation",
      "source": "crates/gpui-kit/src/foundation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use direction::{ ActiveDirection, DirectionalExt, LayoutDirection, LogicalSide, PhysicalSide, set_layout_direction, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::reexport-2",
      "name": "ident :: Ident",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation",
      "path": "gpui_kit::foundation",
      "source": "crates/gpui-kit/src/foundation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use ident::Ident;",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::reexport-3",
      "name": "interaction :: { HoverLift , Pressable }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation",
      "path": "gpui_kit::foundation",
      "source": "crates/gpui-kit/src/foundation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use interaction::{ HoverLift, Pressable };",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::reexport-4",
      "name": "slot :: { SlotRender , Slots , Slotted }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation",
      "path": "gpui_kit::foundation",
      "source": "crates/gpui-kit/src/foundation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use slot::{ SlotRender, Slots, Slotted };",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::reexport-5",
      "name": "styled_ext :: { CardVariant , FocusRing , Hoverable , SelectedFill , StyledExt , rule , text }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation",
      "path": "gpui_kit::foundation",
      "source": "crates/gpui-kit/src/foundation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use styled_ext::{ CardVariant, FocusRing, Hoverable, SelectedFill, StyledExt, rule, text };",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::reexport-6",
      "name": "theme_overlay :: ThemeOverlay",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation",
      "path": "gpui_kit::foundation",
      "source": "crates/gpui-kit/src/foundation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use theme_overlay::ThemeOverlay;",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::reexport-7",
      "name": "window_state :: { owner_state_is_live , register_owner_state , release_owner_state }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation",
      "path": "gpui_kit::foundation",
      "source": "crates/gpui-kit/src/foundation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use window_state::{ owner_state_is_live, register_owner_state, release_owner_state };",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::reexport-8",
      "name": "gpui_kit_theme :: { ActiveTheme , ColorChoice , ControlSize , Density , Elevation , Layer , ThemeRegistry , Variant , VariantColors , activate_theme , set_density , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation",
      "path": "gpui_kit::foundation",
      "source": "crates/gpui-kit/src/foundation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui_kit_theme::{ ActiveTheme, ColorChoice, ControlSize, Density, Elevation, Layer, ThemeRegistry, Variant, VariantColors, activate_theme, set_density, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::slot::EMPTY",
      "name": "EMPTY",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::slot",
      "path": "gpui_kit::foundation::slot",
      "source": "crates/gpui-kit/src/foundation/slot.rs",
      "summary": "The slot every component that can have nothing to show names.",
      "documentation": "The slot every component that can have nothing to show names.\n\nA list, a grid, a tree, a catalogue and a palette all reach the same state\nand all authored their own node for it. Sharing the name means a host that\nwants its own empty state writes it once and applies it everywhere.",
      "signature": "pub const EMPTY: & str",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::slot::FAILED",
      "name": "FAILED",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::slot",
      "path": "gpui_kit::foundation::slot",
      "source": "crates/gpui-kit/src/foundation/slot.rs",
      "summary": "The slot for the node a component shows when a load failed.",
      "documentation": "The slot for the node a component shows when a load failed.\n\nKept apart from [`EMPTY`] because a failure and an absence are two facts,\nand a component that lets a caller replace one of them with the other has\nhanded over the means to lie.",
      "signature": "pub const FAILED: & str",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::slot::HEADER_EXTRA",
      "name": "HEADER_EXTRA",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::slot",
      "path": "gpui_kit::foundation::slot",
      "source": "crates/gpui-kit/src/foundation/slot.rs",
      "summary": "The slot for extra controls a host hangs off a header, next to the component's own.",
      "documentation": "The slot for extra controls a host hangs off a header, next to the\ncomponent's own.",
      "signature": "pub const HEADER_EXTRA: & str",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::slot::LOADING",
      "name": "LOADING",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::slot",
      "path": "gpui_kit::foundation::slot",
      "source": "crates/gpui-kit/src/foundation/slot.rs",
      "summary": "The slot for the node a component shows while it is loading.",
      "documentation": "The slot for the node a component shows while it is loading.",
      "signature": "pub const LOADING: & str",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::slot::SlotRender",
      "name": "SlotRender",
      "kind": "type",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::slot",
      "path": "gpui_kit::foundation::slot",
      "source": "crates/gpui-kit/src/foundation/slot.rs",
      "summary": "What a caller supplies for one slot.",
      "documentation": "What a caller supplies for one slot.",
      "signature": "# [doc = \" What a caller supplies for one slot.\"] pub type SlotRender = Rc<dyn Fn (& mut Window, & mut App) -> AnyElement>;",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::slot::Slots",
      "name": "Slots",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::slot",
      "path": "gpui_kit::foundation::slot",
      "source": "crates/gpui-kit/src/foundation/slot.rs",
      "summary": "The nodes a caller has replaced inside one component.",
      "documentation": "The nodes a caller has replaced inside one component.\n\nComponents hold one of these and reach it through [`Slotted`]. The list is\nshort by construction — a component names its slots and there are a few of\nthem — so this is a vector rather than a map.",
      "signature": "# [doc = \" The nodes a caller has replaced inside one component.\"] # [doc = \"\"] # [doc = \" Components hold one of these and reach it through [`Slotted`]. The list is\"] # [doc = \" short by construction — a component names its slots and there are a few of\"] # [doc = \" them — so this is a vector rather than a map.\"] # [derive (Clone, Default)] pub struct Slots { filled : Vec<(& 'static str, SlotRender)>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::slot::Slots::holds",
      "name": "holds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::slot",
      "path": "gpui_kit::foundation::slot",
      "source": "crates/gpui-kit/src/foundation/slot.rs",
      "summary": "Whether the caller replaced this position.",
      "documentation": "Whether the caller replaced this position.\n\nA component asks this when the caller's node makes some of its own\nwork unnecessary, rather than merely different.",
      "signature": "pub fn holds (& self, name : & 'static str) -> bool",
      "cfg": [],
      "target": "Slots"
    },
    {
      "id": "gpui_kit::foundation::slot::Slots::or_else",
      "name": "or_else",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::slot",
      "path": "gpui_kit::foundation::slot",
      "source": "crates/gpui-kit/src/foundation/slot.rs",
      "summary": "The caller's node for this position, or the component's own.",
      "documentation": "The caller's node for this position, or the component's own.\n\nThe component's node is built only when it is the one being used, so a\nreplaced empty state costs nothing to have been replaced.",
      "signature": "pub fn or_else (& self, name : & 'static str, window : & mut Window, cx : & mut App, own : impl FnOnce (& mut Window, & mut App) -> AnyElement,) -> AnyElement",
      "cfg": [],
      "target": "Slots"
    },
    {
      "id": "gpui_kit::foundation::slot::Slots::render",
      "name": "render",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::slot",
      "path": "gpui_kit::foundation::slot",
      "source": "crates/gpui-kit/src/foundation/slot.rs",
      "summary": "The caller's node for this position, if there is one.",
      "documentation": "The caller's node for this position, if there is one.",
      "signature": "pub fn render (& self, name : & 'static str, window : & mut Window, cx : & mut App,) -> Option<AnyElement>",
      "cfg": [],
      "target": "Slots"
    },
    {
      "id": "gpui_kit::foundation::slot::Slots::set",
      "name": "set",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::slot",
      "path": "gpui_kit::foundation::slot",
      "source": "crates/gpui-kit/src/foundation/slot.rs",
      "summary": "Records a caller's node for one position, replacing any earlier one.",
      "documentation": "Records a caller's node for one position, replacing any earlier one.",
      "signature": "pub fn set (& mut self, name : & 'static str, render : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,)",
      "cfg": [],
      "target": "Slots"
    },
    {
      "id": "gpui_kit::foundation::slot::Slotted",
      "name": "Slotted",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::slot",
      "path": "gpui_kit::foundation::slot",
      "source": "crates/gpui-kit/src/foundation/slot.rs",
      "summary": "A component with named positions a caller may replace.",
      "documentation": "A component with named positions a caller may replace.\n\nThe names live in [`Slotted::SLOTS`], which is what makes a typo a failure\ninstead of a silence, and what lets the generated API index tell a reader\nwhich positions a given component actually offers.",
      "signature": "# [doc = \" A component with named positions a caller may replace.\"] # [doc = \"\"] # [doc = \" The names live in [`Slotted::SLOTS`], which is what makes a typo a failure\"] # [doc = \" instead of a silence, and what lets the generated API index tell a reader\"] # [doc = \" which positions a given component actually offers.\"] pub trait Slotted : Sized { # [doc = \" Every position this component names.\"] const SLOTS : & 'static [& 'static str]; fn slots_mut (& mut self) -> & mut Slots; # [doc = \" Replaces the node this component would have authored at `name`.\"] # [doc = \"\"] # [doc = \" # Panics\"] # [doc = \"\"] # [doc = \" If `name` is not one of [`Slotted::SLOTS`]. The set is fixed at compile\"] # [doc = \" time and a slot nobody reads is indistinguishable from a component that\"] # [doc = \" ignored the caller, so this reports rather than absorbs it.\"] # [track_caller] fn slot (mut self, name : & 'static str, render : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self { assert ! (Self::SLOTS . contains (& name), \"{name} is not a slot this component names; it offers {:?}\", Self::SLOTS); self . slots_mut () . set (name, render); self } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::styled_ext::CardVariant",
      "name": "CardVariant",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::styled_ext",
      "path": "gpui_kit::foundation::styled_ext",
      "source": "crates/gpui-kit/src/foundation/styled_ext.rs",
      "summary": "How a card separates itself from what is behind it.",
      "documentation": "How a card separates itself from what is behind it.\n\nThe colour step does the separating in every case: a theme that meets the\nsurface separation floor has already made the boundary legible, so what a\nvariant chooses is the second piece of evidence on top of it.",
      "signature": "# [doc = \" How a card separates itself from what is behind it.\"] # [doc = \"\"] # [doc = \" The colour step does the separating in every case: a theme that meets the\"] # [doc = \" surface separation floor has already made the boundary legible, so what a\"] # [doc = \" variant chooses is the second piece of evidence on top of it.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum CardVariant { # [doc = \" A shadow. One card, or a few, on the surface behind them.\"] # [default] Elevated, # [doc = \" A filled plane with no shadow, for a dense grid of cards whose nearby\"] # [doc = \" elevations would otherwise stack into a wash.\"] Filled, # [doc = \" Neither: structure, padding, identity and interaction, without\"] # [doc = \" claiming to be a plane of its own.\"] Ghost, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::styled_ext::CardVariant::claims_a_plane",
      "name": "claims_a_plane",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::styled_ext",
      "path": "gpui_kit::foundation::styled_ext",
      "source": "crates/gpui-kit/src/foundation/styled_ext.rs",
      "summary": "Whether this card presents itself as a plane of its own.",
      "documentation": "Whether this card presents itself as a plane of its own.\n\nThe two responses a surface can give a pointer are not\ninterchangeable, and which one is honest here follows from this answer\nrather than from a caller's preference. Rising off the page says \"this\nis a plane, and it has come forward\"; a card is the one place in the\nlibrary where that reads as a response rather than as a component\nclimbing out of its own frame. A ghost card has no plane to come\nforward — the lift would raise a shadow around a transparent rectangle\nand move a line of text a pixel to announce it — so what it gives is\nthe wash any row gives.",
      "signature": "pub const fn claims_a_plane (self) -> bool",
      "cfg": [],
      "target": "CardVariant"
    },
    {
      "id": "gpui_kit::foundation::styled_ext::FocusRing",
      "name": "FocusRing",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::styled_ext",
      "path": "gpui_kit::foundation::styled_ext",
      "source": "crates/gpui-kit/src/foundation/styled_ext.rs",
      "summary": "The one focus treatment in the library.",
      "documentation": "The one focus treatment in the library.\n\nEvery keyboard-reachable element wears the same ring from the same tokens,\nso \"the keyboard is here\" looks identical whether it is on a button, a\ntable header, or a tree row. It is a shadow rather than a border so turning\nfocus on never reflows what is around it.\n\nThe ring answers \"the keyboard is here\", so it is drawn for keyboard focus\nand not for a pointer that landed on the same element. A person who just\nclicked a strip knows where they clicked. The halo appends to the resting\nmaterial's shadows, preserving its inner highlight and elevation. An\neditable control is the case this does not cover, and it does not go\nthrough here: a field says where the caret is with its control material and\nits own focused state, which a click must show.",
      "signature": "# [doc = \" The one focus treatment in the library.\"] # [doc = \"\"] # [doc = \" Every keyboard-reachable element wears the same ring from the same tokens,\"] # [doc = \" so \\\"the keyboard is here\\\" looks identical whether it is on a button, a\"] # [doc = \" table header, or a tree row. It is a shadow rather than a border so turning\"] # [doc = \" focus on never reflows what is around it.\"] # [doc = \"\"] # [doc = \" The ring answers \\\"the keyboard is here\\\", so it is drawn for keyboard focus\"] # [doc = \" and not for a pointer that landed on the same element. A person who just\"] # [doc = \" clicked a strip knows where they clicked. The halo appends to the resting\"] # [doc = \" material's shadows, preserving its inner highlight and elevation. An\"] # [doc = \" editable control is the case this does not cover, and it does not go\"] # [doc = \" through here: a field says where the caret is with its control material and\"] # [doc = \" its own focused state, which a click must show.\"] pub trait FocusRing : InteractiveElement + Styled { fn focus_ring (self, theme : & Theme) -> Self { self . focus_ring_on (theme, theme . colors . canvas) } # [doc = \" The same additive halo resolved against the ground behind the control.\"] fn focus_ring_on (mut self, theme : & Theme, background : gpui::Hsla) -> Self { let mut shadows = self . style () . box_shadow . clone () . unwrap_or_default (); shadows . extend (theme . focus_ring_on (background)); self . focus_visible (| style | style . shadow (shadows)) } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::styled_ext::Hoverable",
      "name": "Hoverable",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::styled_ext",
      "path": "gpui_kit::foundation::styled_ext",
      "source": "crates/gpui-kit/src/foundation/styled_ext.rs",
      "summary": "The wash a row takes while the pointer is over it.",
      "documentation": "The wash a row takes while the pointer is over it.\n\nHover is already a low-alpha token, so a component that dims it again is\ndrawing a state nobody can see. This exists so no component has to decide\nthat a second time.",
      "signature": "# [doc = \" The wash a row takes while the pointer is over it.\"] # [doc = \"\"] # [doc = \" Hover is already a low-alpha token, so a component that dims it again is\"] # [doc = \" drawing a state nobody can see. This exists so no component has to decide\"] # [doc = \" that a second time.\"] pub trait Hoverable : gpui::InteractiveElement + Sized { fn hover_row (self, theme : & Theme) -> Self { let hover = theme . colors . hover; self . hover (move | style | style . bg (hover)) } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::styled_ext::SelectedFill",
      "name": "SelectedFill",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::styled_ext",
      "path": "gpui_kit::foundation::styled_ext",
      "source": "crates/gpui-kit/src/foundation/styled_ext.rs",
      "summary": "The one selected treatment shared by rows, tabs, tiles, and controls.",
      "documentation": "The one selected treatment shared by rows, tabs, tiles, and controls.\n\nSelection is a stronger tonal fill and never an outline or an edge rail.",
      "signature": "# [doc = \" The one selected treatment shared by rows, tabs, tiles, and controls.\"] # [doc = \"\"] # [doc = \" Selection is a stronger tonal fill and never an outline or an edge rail.\"] pub trait SelectedFill : Styled + Sized { fn selected_fill (self, theme : & Theme, selected : bool) -> Self { if ! selected { return self; } self . bg (theme . colors . selected) } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::styled_ext::StyledExt",
      "name": "StyledExt",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::styled_ext",
      "path": "gpui_kit::foundation::styled_ext",
      "source": "crates/gpui-kit/src/foundation/styled_ext.rs",
      "summary": "Token-addressed styling helpers.",
      "documentation": "Token-addressed styling helpers.\n\nThese exist so component code names a semantic role instead of repeating a\nliteral, which keeps `crates/gpui-kit-tokens/tokens/*.json` the single authority for values that\noccur more than once.",
      "signature": "# [doc = \" Token-addressed styling helpers.\"] # [doc = \"\"] # [doc = \" These exist so component code names a semantic role instead of repeating a\"] # [doc = \" literal, which keeps `crates/gpui-kit-tokens/tokens/*.json` the single authority for values that\"] # [doc = \" occur more than once.\"] pub trait StyledExt : Styled + Sized { fn surface (self, theme : & Theme, surface : Surface) -> Self { self . bg (theme . surface (surface)) } fn text_tone (self, theme : & Theme, tone : TextTone) -> Self { self . text_color (theme . text_color (tone)) } # [doc = \" The plane a window's content stands on.\"] # [doc = \"\"] # [doc = \" Every other surface reads against this one: a panel is a region *of*\"] # [doc = \" the page, a card is a thing *on* it, and an overlay floats *above* it.\"] # [doc = \" A page body painted panel collapses that ladder — the first card on it\"] # [doc = \" has no colour step left to take — so a host names the page's plane\"] # [doc = \" exactly once, with this, and the surfaces on it keep their footing.\"] fn page (self, theme : & Theme) -> Self { self . surface (theme, Surface::Canvas) . text_tone (theme, TextTone::Primary) } # [doc = \" Monospace text that shows exactly the characters it was handed.\"] # [doc = \"\"] # [doc = \" The family alone is not enough. The bundled mono face carries `liga`\"] # [doc = \" ligatures whose glyphs advance one cell however many characters they\"] # [doc = \" stand for, with the ink hanging left into the cell in front — so a\"] # [doc = \" shaped `--`, `==` or `->` paints over the space before it and the line\"] # [doc = \" finishes a cell short of what it says. In a code view, a diff, a\"] # [doc = \" terminal or a command a reader is being shown, that is not a\"] # [doc = \" typographic preference: the text on screen stops being the text. Off,\"] # [doc = \" one character is one cell again.\"] fn mono (self, theme : & Theme) -> Self { self . font_family (theme . typography . mono . clone ()) . font_features (gpui::FontFeatures::disable_ligatures ()) } # [doc = \" Applies size, line height and weight from one typographic step.\"] fn type_scale (self, theme : & Theme, scale : TypeScale) -> Self { let style = theme . type_style (scale); self . text_size (px (style . size)) . line_height (px (style . line_height)) . font_weight (FontWeight (style . weight)) . font_fallbacks (gpui_kit_assets::text_fallbacks ()) } fn radius (self, theme : & Theme, radius : Radius) -> Self { self . rounded (px (theme . radius (radius))) } fn gap_token (self, theme : & Theme, space : Space) -> Self { self . gap (px (theme . space (space))) } fn p_token (self, theme : & Theme, space : Space) -> Self { self . p (px (theme . space (space))) } fn px_token (self, theme : & Theme, space : Space) -> Self { self . px (px (theme . space (space))) } fn py_token (self, theme : & Theme, space : Space) -> Self { self . py (px (theme . space (space))) } fn mt_token (self, theme : & Theme, space : Space) -> Self { self . mt (px (theme . space (space))) } # [doc = \" Applies the shadow for an elevation step. Flat applies nothing.\"] fn elevation (self, theme : & Theme, level : Elevation) -> Self { let shadow = theme . shadow (level); if shadow . is_empty () { self } else { self . shadow (shadow . to_vec ()) } } # [doc = \" A bordered in-content control, not a glass surface. The definition\"] # [doc = \" edge is deliberately quieter than a focus indicator; the top inset\"] # [doc = \" highlight remains when callers append interaction halos.\"] fn control_surface (self, theme : & Theme, elevation : Elevation) -> Self { self . bg (theme . colors . control) . border (px (theme . borders . hairline)) . border_color (theme . colors . control_hairline) . shadow (theme . control_shadows (elevation)) } # [doc = \" The shell every card-shaped surface in the library is made of.\"] # [doc = \"\"] # [doc = \" [`Card`](crate::display::card::Card) is the component a caller reaches\"] # [doc = \" for; this is the same shell for a component that already owns a richer\"] # [doc = \" semantic node than a grouping and so cannot be wrapped in one. Both go\"] # [doc = \" through here, because a card that means the same thing and is drawn two\"] # [doc = \" ways is two components wearing one name.\"] fn card_surface (self, theme : & Theme, variant : CardVariant) -> Self { self . card_surface_on (theme, variant, Surface::Canvas) } # [doc = \" The same shell for a card standing somewhere other than the page.\"] # [doc = \"\"] # [doc = \" A card is a plane of its own, and the colour step above what holds it\"] # [doc = \" is what says so. The default assumes the page's canvas and paints the\"] # [doc = \" panel step; a host mounting cards inside a region that is already the\"] # [doc = \" panel plane names that ground instead, so the card takes the raised\"] # [doc = \" step and the boundary survives instead of dissolving into its ground.\"] fn card_surface_on (self, theme : & Theme, variant : CardVariant, ground : Surface) -> Self { let plane = match ground { Surface::Panel => Surface::Raised, _ => Surface::Panel, }; let element = self . radius (theme, Radius::Card); match variant { CardVariant::Elevated => element . frame (theme, plane, Elevation::Raised), CardVariant::Filled => element . surface (theme, plane), CardVariant::Ghost => element, } } # [doc = \" A surface that is a distinct thing from the one behind it.\"] # [doc = \"\"] # [doc = \" The colour step and the shadow do the separating, which is why a card,\"] # [doc = \" a popover and a dialog carry no line around them: a line drawn around\"] # [doc = \" something already legible is decoration, and this library reserves\"] # [doc = \" lines for what they alone can say — focus, invalidity, a drop target.\"] fn frame (self, theme : & Theme, surface : Surface, level : Elevation) -> Self { self . surface (theme, surface) . elevation (theme, level) } # [doc = \" The same shell, leaning towards a colour that means something.\"] # [doc = \"\"] # [doc = \" A wash is translucent by construction, so laying one over a surface\"] # [doc = \" replaces that surface rather than tinting it, and what is left is a\"] # [doc = \" panel with a hole in it. Through the hole reads the page — and the\"] # [doc = \" element's own drop shadow, which an elevated surface casts under its\"] # [doc = \" own footprint. On a dark ground the shadow is black over near-black and\"] # [doc = \" nobody sees the hole; on a light one it fills the card with grey and\"] # [doc = \" takes the contrast of everything written inside with it.\"] # [doc = \"\"] # [doc = \" Compositing the wash onto the surface first keeps one opaque fill,\"] # [doc = \" which is what a caller asking for a panel that leans danger meant.\"] fn frame_washed (self, theme : & Theme, surface : Surface, level : Elevation, wash : gpui::Hsla,) -> Self { self . bg (theme . washed_surface (surface, wash)) . elevation (theme, level) } # [doc = \" The recess an editable value sits in.\"] # [doc = \"\"] # [doc = \" A field is a well rather than an outlined box, so the resting state of\"] # [doc = \" every editable control in the library is a colour and nothing else.\"] # [doc = \" Focus and invalidity are paint-only halos, so neither state needs a\"] # [doc = \" transparent border to reserve geometry.\"] fn well (self, theme : & Theme) -> Self { self . surface (theme, Surface::Sunken) } # [doc = \" The colour a surface in a named state bleeds into the pixels around it.\"] fn glow (self, theme : & Theme, color : gpui::Hsla) -> Self { self . shadow (theme . glow (color)) } # [doc = \" A horizontal flex row, the layout most component frames start from.\"] fn row (self) -> Self { self . flex () . flex_row () . items_center () } fn column (self) -> Self { self . flex () . flex_col () } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::styled_ext::rule",
      "name": "rule",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::styled_ext",
      "path": "gpui_kit::foundation::styled_ext",
      "source": "crates/gpui-kit/src/foundation/styled_ext.rs",
      "summary": "The soft, inset line this library draws between two pieces of content.",
      "documentation": "The soft, inset line this library draws between two pieces of content.\n\nA rule divides content that shares a surface; it is not an outline around\nthe surface, which is what a colour step and an elevation are for. It is a\nchild element rather than a border so it stops short of both edges. The\nlow-alpha rounded stroke carries the grouping without becoming a hard rule\nacross the whole plane.",
      "signature": "pub fn rule (theme : & Theme) -> Div",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::styled_ext::text",
      "name": "text",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::styled_ext",
      "path": "gpui_kit::foundation::styled_ext",
      "source": "crates/gpui-kit/src/foundation/styled_ext.rs",
      "summary": "Creates text with an explicit complete type step and primary text tone.",
      "documentation": "Creates text with an explicit complete type step and primary text tone.\n\nThis is the only entry point for putting a string directly into the GPUI\nelement tree. A component cannot rely on a host ancestor's font or colour:\nthe same component must keep its metrics when embedded by itself. Callers\nthat need a secondary colour apply [`StyledExt::text_tone`] to the returned\nelement; callers that need edge alignment apply\n[`DirectionalExt::text_start`](super::DirectionalExt::text_start) or\n[`DirectionalExt::text_end`](super::DirectionalExt::text_end). The helper\ndeliberately chooses no physical left/right alignment, so it does not turn\na right-to-left run back into a left-to-right one.",
      "signature": "pub fn text (theme : & Theme, scale : TypeScale, content : impl Into<SharedString>) -> Div",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::theme_overlay::ThemeOverlay",
      "name": "ThemeOverlay",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::theme_overlay",
      "path": "gpui_kit::foundation::theme_overlay",
      "source": "crates/gpui-kit/src/foundation/theme_overlay.rs",
      "summary": "A subtree that reads a theme its caller adjusted.",
      "documentation": "A subtree that reads a theme its caller adjusted.",
      "signature": "# [doc = \" A subtree that reads a theme its caller adjusted.\"] pub struct ThemeOverlay { adjust : Option<Adjust>, resolved : Option<Theme>, child : AnyElement, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::theme_overlay::ThemeOverlay::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::theme_overlay",
      "path": "gpui_kit::foundation::theme_overlay",
      "source": "crates/gpui-kit/src/foundation/theme_overlay.rs",
      "summary": "Adjusts the theme in force and installs the result for `child`.",
      "documentation": "Adjusts the theme in force and installs the result for `child`.\n\n```ignore\nThemeOverlay::new(\n|theme| theme.clone().modify(|theme| theme.colors.accent = brand),\ncheckout_panel(),\n)\n```",
      "signature": "pub fn new (adjust : impl FnOnce (& Theme) -> Theme + 'static, child : impl IntoElement) -> Self",
      "cfg": [],
      "target": "ThemeOverlay"
    },
    {
      "id": "gpui_kit::foundation::theme_overlay::ThemeOverlay::theme",
      "name": "theme",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::theme_overlay",
      "path": "gpui_kit::foundation::theme_overlay",
      "source": "crates/gpui-kit/src/foundation/theme_overlay.rs",
      "summary": "Installs a whole theme, for a caller that already has the one it wants.",
      "documentation": "Installs a whole theme, for a caller that already has the one it wants.",
      "signature": "pub fn theme (theme : Theme, child : impl IntoElement) -> Self",
      "cfg": [],
      "target": "ThemeOverlay"
    },
    {
      "id": "gpui_kit::foundation::window_state::owner_state_is_live",
      "name": "owner_state_is_live",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::window_state",
      "path": "gpui_kit::foundation::window_state",
      "source": "crates/gpui-kit/src/foundation/window_state.rs",
      "summary": "Whether an owner may still retain Kit keyed state. This is cache lifetime, not permission to perform effects. Native unowned state remains compatible.",
      "documentation": "Whether an owner may still retain Kit keyed state. This is cache lifetime,\nnot permission to perform effects. Native unowned state remains compatible.",
      "signature": "pub fn owner_state_is_live (owner : EffectOwner, cx : & App) -> bool",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::window_state::register_owner_state",
      "name": "register_owner_state",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::window_state",
      "path": "gpui_kit::foundation::window_state",
      "source": "crates/gpui-kit/src/foundation/window_state.rs",
      "summary": "Registers a freshly minted mount owner before constructing its Kit state. Only the host mount lifecycle calls this; never call it from a component, render, or delayed callback. Preserve registration across ordinary renders, release on unmount, and mint a new token for a subsequent mount. This grants cache lifetime only, not clipboard or other effect permission.",
      "documentation": "Registers a freshly minted mount owner before constructing its Kit state.\nOnly the host mount lifecycle calls this; never call it from a component,\nrender, or delayed callback. Preserve registration across ordinary renders,\nrelease on unmount, and mint a new token for a subsequent mount.\nThis grants cache lifetime only, not clipboard or other effect permission.",
      "signature": "pub fn register_owner_state (owner : EffectOwner, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::foundation::window_state::release_owner_state",
      "name": "release_owner_state",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "foundation::window_state",
      "path": "gpui_kit::foundation::window_state",
      "source": "crates/gpui-kit/src/foundation/window_state.rs",
      "summary": "Immediately drops all typed keyed-registry entries belonging to this exact owner, across windows, and removes its registration. Ambient owner scopes cannot recreate it; no retired-token tombstones are retained. Returns the number of removed keys. No semantic-id parsing is involved.",
      "documentation": "Immediately drops all typed keyed-registry entries belonging to this exact\nowner, across windows, and removes its registration. Ambient owner scopes\ncannot recreate it; no retired-token tombstones are retained.\nReturns the number of removed keys. No semantic-id parsing is involved.\n\nHosts use one owner per actual mount, preserve it across ordinary renders,\nand retire it on removal. Typed children must preserve `EffectScoped<T>`.\nThis releases registry references, not arbitrary externally retained Rc or\nEntity handles, and does not partition window-wide overlay coordination.",
      "signature": "pub fn release_owner_state (owner : EffectOwner, cx : & mut App) -> usize",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::Ability",
      "name": "Ability",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "Stable identity of an ability.",
      "documentation": "Stable identity of an ability.",
      "signature": "# [doc = \" Stable identity of an ability.\"] # [derive (Debug, Clone, PartialEq)] pub struct Ability { pub (crate) id : AbilityId, pub (crate) label : SharedString, pub (crate) detail : Option<SharedString>, pub (crate) icon : Option<Icon>, pub (crate) shortcut : Option<SharedString>, pub (crate) cost : Option<SharedString>, pub (crate) charges : Option<AbilityCharges>, pub (crate) state : AbilityState, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::Ability::charges",
      "name": "charges",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn charges (mut self, charges : AbilityCharges) -> Self",
      "cfg": [],
      "target": "Ability"
    },
    {
      "id": "gpui_kit::game::model::Ability::cost",
      "name": "cost",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cost (mut self, cost : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Ability"
    },
    {
      "id": "gpui_kit::game::model::Ability::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Ability"
    },
    {
      "id": "gpui_kit::game::model::Ability::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, icon : Icon) -> Self",
      "cfg": [],
      "target": "Ability"
    },
    {
      "id": "gpui_kit::game::model::Ability::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & AbilityId",
      "cfg": [],
      "target": "Ability"
    },
    {
      "id": "gpui_kit::game::model::Ability::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<AbilityId>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Ability"
    },
    {
      "id": "gpui_kit::game::model::Ability::shortcut",
      "name": "shortcut",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn shortcut (mut self, shortcut : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Ability"
    },
    {
      "id": "gpui_kit::game::model::Ability::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : AbilityState) -> Self",
      "cfg": [],
      "target": "Ability"
    },
    {
      "id": "gpui_kit::game::model::AbilityCharges",
      "name": "AbilityCharges",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "Remaining and maximum charges for one ability.",
      "documentation": "Remaining and maximum charges for one ability.",
      "signature": "# [doc = \" Remaining and maximum charges for one ability.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct AbilityCharges { current : usize, maximum : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::AbilityCharges::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (self) -> usize",
      "cfg": [],
      "target": "AbilityCharges"
    },
    {
      "id": "gpui_kit::game::model::AbilityCharges::maximum",
      "name": "maximum",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn maximum (self) -> usize",
      "cfg": [],
      "target": "AbilityCharges"
    },
    {
      "id": "gpui_kit::game::model::AbilityCharges::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (current : usize, maximum : usize) -> Result<Self, AbilityChargesError>",
      "cfg": [],
      "target": "AbilityCharges"
    },
    {
      "id": "gpui_kit::game::model::AbilityChargesError",
      "name": "AbilityChargesError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "Why charge counts were rejected.",
      "documentation": "Why charge counts were rejected.",
      "signature": "# [doc = \" Why charge counts were rejected.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum AbilityChargesError { ZeroMaximum, AboveMaximum, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::AbilitySet",
      "name": "AbilitySet",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "A caller-owned ability set.",
      "documentation": "A caller-owned ability set.",
      "signature": "# [doc = \" A caller-owned ability set.\"] # [derive (Debug, Clone, PartialEq, Default)] pub struct AbilitySet { pub (crate) abilities : Vec<Ability>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::AbilitySet::abilities",
      "name": "abilities",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn abilities (& self) -> & [Ability]",
      "cfg": [],
      "target": "AbilitySet"
    },
    {
      "id": "gpui_kit::game::model::AbilitySet::issues",
      "name": "issues",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn issues (& self) -> Vec<AbilitySetIssue>",
      "cfg": [],
      "target": "AbilitySet"
    },
    {
      "id": "gpui_kit::game::model::AbilitySet::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (abilities : impl IntoIterator<Item = Ability>) -> Self",
      "cfg": [],
      "target": "AbilitySet"
    },
    {
      "id": "gpui_kit::game::model::AbilitySetIssue",
      "name": "AbilitySetIssue",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "A duplicate ability fact.",
      "documentation": "A duplicate ability fact.",
      "signature": "# [doc = \" A duplicate ability fact.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum AbilitySetIssue { DuplicateId (AbilityId), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::AbilityState",
      "name": "AbilityState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "Caller-owned ability availability.",
      "documentation": "Caller-owned ability availability.",
      "signature": "# [doc = \" Caller-owned ability availability.\"] # [derive (Debug, Clone, PartialEq, Default)] pub enum AbilityState { # [default] Ready, CoolingDown { remaining : SharedString, remaining_fraction : GameFraction, }, Disabled (SharedString), Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::AbilityState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "AbilityState"
    },
    {
      "id": "gpui_kit::game::model::GameFraction",
      "name": "GameFraction",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "A validated scalar in the closed interval from zero to one.",
      "documentation": "A validated scalar in the closed interval from zero to one.",
      "signature": "# [doc = \" A validated scalar in the closed interval from zero to one.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct GameFraction (f32);",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::GameFraction::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (self) -> f32",
      "cfg": [],
      "target": "GameFraction"
    },
    {
      "id": "gpui_kit::game::model::GameFraction::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (value : f32) -> Result<Self, GameFractionError>",
      "cfg": [],
      "target": "GameFraction"
    },
    {
      "id": "gpui_kit::game::model::GameFractionError",
      "name": "GameFractionError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "Why a game fraction was rejected instead of clamped into a believable progress fact.",
      "documentation": "Why a game fraction was rejected instead of clamped into a believable\nprogress fact.",
      "signature": "# [doc = \" Why a game fraction was rejected instead of clamped into a believable\"] # [doc = \" progress fact.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum GameFractionError { NonFinite, OutOfRange, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::Objective",
      "name": "Objective",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "One stable objective and its optional parent relationship.",
      "documentation": "One stable objective and its optional parent relationship.",
      "signature": "# [doc = \" One stable objective and its optional parent relationship.\"] # [derive (Debug, Clone, PartialEq)] pub struct Objective { pub (crate) id : ObjectiveId, pub (crate) title : SharedString, pub (crate) detail : Option<SharedString>, pub (crate) parent : Option<ObjectiveId>, pub (crate) state : ObjectiveState, pub (crate) progress : Option<GameFraction>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::Objective::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Objective"
    },
    {
      "id": "gpui_kit::game::model::Objective::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & ObjectiveId",
      "cfg": [],
      "target": "Objective"
    },
    {
      "id": "gpui_kit::game::model::Objective::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<ObjectiveId>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Objective"
    },
    {
      "id": "gpui_kit::game::model::Objective::parent",
      "name": "parent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn parent (mut self, parent : impl Into<ObjectiveId>) -> Self",
      "cfg": [],
      "target": "Objective"
    },
    {
      "id": "gpui_kit::game::model::Objective::progress",
      "name": "progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn progress (mut self, progress : GameFraction) -> Self",
      "cfg": [],
      "target": "Objective"
    },
    {
      "id": "gpui_kit::game::model::Objective::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : ObjectiveState) -> Self",
      "cfg": [],
      "target": "Objective"
    },
    {
      "id": "gpui_kit::game::model::ObjectiveIssue",
      "name": "ObjectiveIssue",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "A malformed objective relationship.",
      "documentation": "A malformed objective relationship.",
      "signature": "# [doc = \" A malformed objective relationship.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum ObjectiveIssue { DuplicateId (ObjectiveId), DanglingParent { objective : ObjectiveId, parent : ObjectiveId, }, ParentCycle (ObjectiveId), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::ObjectiveSnapshot",
      "name": "ObjectiveSnapshot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "A caller-owned objective document with structural validation.",
      "documentation": "A caller-owned objective document with structural validation.",
      "signature": "# [doc = \" A caller-owned objective document with structural validation.\"] # [derive (Debug, Clone, PartialEq, Default)] pub struct ObjectiveSnapshot { pub (crate) objectives : Vec<Objective>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::ObjectiveSnapshot::issues",
      "name": "issues",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn issues (& self) -> Vec<ObjectiveIssue>",
      "cfg": [],
      "target": "ObjectiveSnapshot"
    },
    {
      "id": "gpui_kit::game::model::ObjectiveSnapshot::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (objectives : impl IntoIterator<Item = Objective>) -> Self",
      "cfg": [],
      "target": "ObjectiveSnapshot"
    },
    {
      "id": "gpui_kit::game::model::ObjectiveSnapshot::objectives",
      "name": "objectives",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn objectives (& self) -> & [Objective]",
      "cfg": [],
      "target": "ObjectiveSnapshot"
    },
    {
      "id": "gpui_kit::game::model::ObjectiveState",
      "name": "ObjectiveState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "Caller-owned objective state. Rules decide it; the tracker only presents it.",
      "documentation": "Caller-owned objective state. Rules decide it; the tracker only presents\nit.",
      "signature": "# [doc = \" Caller-owned objective state. Rules decide it; the tracker only presents\"] # [doc = \" it.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum ObjectiveState { Locked, # [default] Active, Completed, Failed (SharedString), Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::ObjectiveState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "ObjectiveState"
    },
    {
      "id": "gpui_kit::game::model::PartyGauge",
      "name": "PartyGauge",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "One stable caller-named gauge on a party member.",
      "documentation": "One stable caller-named gauge on a party member.",
      "signature": "# [doc = \" One stable caller-named gauge on a party member.\"] # [derive (Debug, Clone, PartialEq)] pub struct PartyGauge { pub (crate) id : SharedString, pub (crate) label : SharedString, pub (crate) state : PartyGaugeState, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::PartyGauge::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "PartyGauge"
    },
    {
      "id": "gpui_kit::game::model::PartyGauge::known",
      "name": "known",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn known (id : impl Into<SharedString>, label : impl Into<SharedString>, fraction : GameFraction, display : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "PartyGauge"
    },
    {
      "id": "gpui_kit::game::model::PartyGauge::unavailable",
      "name": "unavailable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn unavailable (id : impl Into<SharedString>, label : impl Into<SharedString>, reason : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "PartyGauge"
    },
    {
      "id": "gpui_kit::game::model::PartyGauge::unknown",
      "name": "unknown",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn unknown (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PartyGauge"
    },
    {
      "id": "gpui_kit::game::model::PartyGaugeState",
      "name": "PartyGaugeState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "What is known about one party gauge such as health, guard, or mana.",
      "documentation": "What is known about one party gauge such as health, guard, or mana.",
      "signature": "# [doc = \" What is known about one party gauge such as health, guard, or mana.\"] # [derive (Debug, Clone, PartialEq)] pub enum PartyGaugeState { Unknown, Known { fraction : GameFraction, display : SharedString, }, Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::PartyIssue",
      "name": "PartyIssue",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "A malformed party fact that must be shown instead of collapsed.",
      "documentation": "A malformed party fact that must be shown instead of collapsed.",
      "signature": "# [doc = \" A malformed party fact that must be shown instead of collapsed.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum PartyIssue { DuplicateMember (AgentId), DuplicateGauge { member : AgentId, gauge : SharedString, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::PartyMember",
      "name": "PartyMember",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "One caller-owned party member over the shared agent identity vocabulary.",
      "documentation": "One caller-owned party member over the shared agent identity vocabulary.",
      "signature": "# [doc = \" One caller-owned party member over the shared agent identity vocabulary.\"] # [derive (Debug, Clone, PartialEq)] pub struct PartyMember { pub (crate) agent : AgentSnapshot, pub (crate) expression : PersonaExpression, pub (crate) image : Option<PresentationImage>, pub (crate) tint : Option<Hsla>, pub (crate) gauges : Vec<PartyGauge>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::PartyMember::expression",
      "name": "expression",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn expression (mut self, expression : PersonaExpression) -> Self",
      "cfg": [],
      "target": "PartyMember"
    },
    {
      "id": "gpui_kit::game::model::PartyMember::gauge",
      "name": "gauge",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn gauge (mut self, gauge : PartyGauge) -> Self",
      "cfg": [],
      "target": "PartyMember"
    },
    {
      "id": "gpui_kit::game::model::PartyMember::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & AgentId",
      "cfg": [],
      "target": "PartyMember"
    },
    {
      "id": "gpui_kit::game::model::PartyMember::image",
      "name": "image",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn image (mut self, image : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "PartyMember"
    },
    {
      "id": "gpui_kit::game::model::PartyMember::image_source",
      "name": "image_source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "Uses caller-resolved art, retaining any custom loader's access checks.",
      "documentation": "Uses caller-resolved art, retaining any custom loader's access checks.",
      "signature": "pub fn image_source (mut self, image : gpui::ImageSource) -> Self",
      "cfg": [],
      "target": "PartyMember"
    },
    {
      "id": "gpui_kit::game::model::PartyMember::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (agent : AgentSnapshot) -> Self",
      "cfg": [],
      "target": "PartyMember"
    },
    {
      "id": "gpui_kit::game::model::PartyMember::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "PartyMember"
    },
    {
      "id": "gpui_kit::game::model::PartySnapshot",
      "name": "PartySnapshot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "The complete party snapshot consumed by [`PartyRoster`](super::PartyRoster).",
      "documentation": "The complete party snapshot consumed by [`PartyRoster`](super::PartyRoster).",
      "signature": "# [doc = \" The complete party snapshot consumed by [`PartyRoster`](super::PartyRoster).\"] # [derive (Debug, Clone, PartialEq, Default)] pub struct PartySnapshot { pub (crate) members : Vec<PartyMember>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::PartySnapshot::issues",
      "name": "issues",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn issues (& self) -> Vec<PartyIssue>",
      "cfg": [],
      "target": "PartySnapshot"
    },
    {
      "id": "gpui_kit::game::model::PartySnapshot::members",
      "name": "members",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn members (& self) -> & [PartyMember]",
      "cfg": [],
      "target": "PartySnapshot"
    },
    {
      "id": "gpui_kit::game::model::PartySnapshot::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (members : impl IntoIterator<Item = PartyMember>) -> Self",
      "cfg": [],
      "target": "PartySnapshot"
    },
    {
      "id": "gpui_kit::game::model::RewardItem",
      "name": "RewardItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "One reward item. Quantity is a count, not a formatted string, so Kit can present it consistently without interpreting the item.",
      "documentation": "One reward item. Quantity is a count, not a formatted string, so Kit can\npresent it consistently without interpreting the item.",
      "signature": "# [doc = \" One reward item. Quantity is a count, not a formatted string, so Kit can\"] # [doc = \" present it consistently without interpreting the item.\"] # [derive (Debug, Clone, PartialEq)] pub struct RewardItem { pub (crate) id : RewardItemId, pub (crate) label : SharedString, pub (crate) detail : Option<SharedString>, pub (crate) quantity : usize, pub (crate) icon : Option<Icon>, pub (crate) image : Option<PresentationImage>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::RewardItem::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RewardItem"
    },
    {
      "id": "gpui_kit::game::model::RewardItem::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, icon : Icon) -> Self",
      "cfg": [],
      "target": "RewardItem"
    },
    {
      "id": "gpui_kit::game::model::RewardItem::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & RewardItemId",
      "cfg": [],
      "target": "RewardItem"
    },
    {
      "id": "gpui_kit::game::model::RewardItem::image",
      "name": "image",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn image (mut self, image : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RewardItem"
    },
    {
      "id": "gpui_kit::game::model::RewardItem::image_source",
      "name": "image_source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "Uses caller-resolved reward art without inferring a resource location.",
      "documentation": "Uses caller-resolved reward art without inferring a resource location.",
      "signature": "pub fn image_source (mut self, image : gpui::ImageSource) -> Self",
      "cfg": [],
      "target": "RewardItem"
    },
    {
      "id": "gpui_kit::game::model::RewardItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<RewardItemId>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RewardItem"
    },
    {
      "id": "gpui_kit::game::model::RewardItem::quantity",
      "name": "quantity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn quantity (mut self, quantity : usize) -> Self",
      "cfg": [],
      "target": "RewardItem"
    },
    {
      "id": "gpui_kit::game::model::RewardSnapshot",
      "name": "RewardSnapshot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "One reward composition and all caller-owned items it may reveal.",
      "documentation": "One reward composition and all caller-owned items it may reveal.",
      "signature": "# [doc = \" One reward composition and all caller-owned items it may reveal.\"] # [derive (Debug, Clone, PartialEq)] pub struct RewardSnapshot { pub (crate) id : RewardId, pub (crate) title : SharedString, pub (crate) detail : Option<SharedString>, pub (crate) items : Vec<RewardItem>, pub (crate) state : RewardState, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::RewardSnapshot::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RewardSnapshot"
    },
    {
      "id": "gpui_kit::game::model::RewardSnapshot::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & RewardId",
      "cfg": [],
      "target": "RewardSnapshot"
    },
    {
      "id": "gpui_kit::game::model::RewardSnapshot::issues",
      "name": "issues",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn issues (& self) -> Vec<RewardItemId>",
      "cfg": [],
      "target": "RewardSnapshot"
    },
    {
      "id": "gpui_kit::game::model::RewardSnapshot::item",
      "name": "item",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn item (mut self, item : RewardItem) -> Self",
      "cfg": [],
      "target": "RewardSnapshot"
    },
    {
      "id": "gpui_kit::game::model::RewardSnapshot::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<RewardId>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "RewardSnapshot"
    },
    {
      "id": "gpui_kit::game::model::RewardSnapshot::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : RewardState) -> Self",
      "cfg": [],
      "target": "RewardSnapshot"
    },
    {
      "id": "gpui_kit::game::model::RewardState",
      "name": "RewardState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "Caller-owned reward reveal state.",
      "documentation": "Caller-owned reward reveal state.",
      "signature": "# [doc = \" Caller-owned reward reveal state.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum RewardState { # [default] Hidden, Revealed, Claimed, Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::model::RewardState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::model",
      "path": "gpui_kit::game::model",
      "source": "crates/gpui-kit/src/game/model.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "RewardState"
    },
    {
      "id": "gpui_kit::game::presentation::AbilityBar",
      "name": "AbilityBar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "Standard ability controls with cooldown, charge, cost, shortcut, and refusal presentation.",
      "documentation": "Standard ability controls with cooldown, charge, cost, shortcut, and\nrefusal presentation.",
      "signature": "# [doc = \" Standard ability controls with cooldown, charge, cost, shortcut, and\"] # [doc = \" refusal presentation.\"] # [derive (IntoElement)] pub struct AbilityBar { ident : Ident, abilities : AbilitySet, selected : Option<AbilityId>, on_event : Option<AbilityHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::presentation::AbilityBar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, abilities : AbilitySet) -> Self",
      "cfg": [],
      "target": "AbilityBar"
    },
    {
      "id": "gpui_kit::game::presentation::AbilityBar::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& AbilityBarEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "AbilityBar"
    },
    {
      "id": "gpui_kit::game::presentation::AbilityBar::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : impl Into<AbilityId>) -> Self",
      "cfg": [],
      "target": "AbilityBar"
    },
    {
      "id": "gpui_kit::game::presentation::AbilityBarEvent",
      "name": "AbilityBarEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "What an ability bar reports without applying cooldown, charge, or cost.",
      "documentation": "What an ability bar reports without applying cooldown, charge, or cost.",
      "signature": "# [doc = \" What an ability bar reports without applying cooldown, charge, or cost.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum AbilityBarEvent { Activate (AbilityId), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::presentation::ObjectiveTracker",
      "name": "ObjectiveTracker",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "A hierarchical objective tracker with strict identity validation.",
      "documentation": "A hierarchical objective tracker with strict identity validation.",
      "signature": "# [doc = \" A hierarchical objective tracker with strict identity validation.\"] # [derive (IntoElement)] pub struct ObjectiveTracker { ident : Ident, snapshot : ObjectiveSnapshot, selected : Option<ObjectiveId>, on_event : Option<ObjectiveHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::presentation::ObjectiveTracker::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, snapshot : ObjectiveSnapshot) -> Self",
      "cfg": [],
      "target": "ObjectiveTracker"
    },
    {
      "id": "gpui_kit::game::presentation::ObjectiveTracker::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& ObjectiveTrackerEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "ObjectiveTracker"
    },
    {
      "id": "gpui_kit::game::presentation::ObjectiveTracker::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : impl Into<ObjectiveId>) -> Self",
      "cfg": [],
      "target": "ObjectiveTracker"
    },
    {
      "id": "gpui_kit::game::presentation::ObjectiveTrackerEvent",
      "name": "ObjectiveTrackerEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "What an objective tracker reports without selecting or completing it.",
      "documentation": "What an objective tracker reports without selecting or completing it.",
      "signature": "# [doc = \" What an objective tracker reports without selecting or completing it.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum ObjectiveTrackerEvent { Select (ObjectiveId), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::presentation::PartyRoster",
      "name": "PartyRoster",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "A responsive party roster over standard agent and persona presentation.",
      "documentation": "A responsive party roster over standard agent and persona presentation.",
      "signature": "# [doc = \" A responsive party roster over standard agent and persona presentation.\"] # [derive (IntoElement)] pub struct PartyRoster { ident : Ident, party : PartySnapshot, selected : Option<AgentId>, on_event : Option<PartyHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::presentation::PartyRoster::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, party : PartySnapshot) -> Self",
      "cfg": [],
      "target": "PartyRoster"
    },
    {
      "id": "gpui_kit::game::presentation::PartyRoster::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& PartyRosterEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "PartyRoster"
    },
    {
      "id": "gpui_kit::game::presentation::PartyRoster::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : impl Into<AgentId>) -> Self",
      "cfg": [],
      "target": "PartyRoster"
    },
    {
      "id": "gpui_kit::game::presentation::PartyRosterEvent",
      "name": "PartyRosterEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "What a party roster reports without changing its caller-owned selection.",
      "documentation": "What a party roster reports without changing its caller-owned selection.",
      "signature": "# [doc = \" What a party roster reports without changing its caller-owned selection.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum PartyRosterEvent { SelectMember (AgentId), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::presentation::RewardReveal",
      "name": "RewardReveal",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "A complete reward reveal composition with optional policy-resolved effects.",
      "documentation": "A complete reward reveal composition with optional policy-resolved effects.",
      "signature": "# [doc = \" A complete reward reveal composition with optional policy-resolved effects.\"] # [derive (IntoElement)] pub struct RewardReveal { ident : Ident, reward : RewardSnapshot, effect : Option<EffectPlan>, sample_at : Option<Duration>, on_event : Option<RewardHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::presentation::RewardReveal::effect",
      "name": "effect",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn effect (mut self, effect : EffectPlan) -> Self",
      "cfg": [],
      "target": "RewardReveal"
    },
    {
      "id": "gpui_kit::game::presentation::RewardReveal::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, reward : RewardSnapshot) -> Self",
      "cfg": [],
      "target": "RewardReveal"
    },
    {
      "id": "gpui_kit::game::presentation::RewardReveal::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& RewardRevealEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "RewardReveal"
    },
    {
      "id": "gpui_kit::game::presentation::RewardReveal::sample_at",
      "name": "sample_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sample_at (mut self, elapsed : Duration) -> Self",
      "cfg": [],
      "target": "RewardReveal"
    },
    {
      "id": "gpui_kit::game::presentation::RewardRevealEvent",
      "name": "RewardRevealEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game::presentation",
      "path": "gpui_kit::game::presentation",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "What a reward reveal reports without revealing or claiming anything.",
      "documentation": "What a reward reveal reports without revealing or claiming anything.",
      "signature": "# [doc = \" What a reward reveal reports without revealing or claiming anything.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum RewardRevealEvent { RevealRequested (RewardId), ClaimRequested (RewardId), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::reexport-1",
      "name": "model :: { Ability , AbilityCharges , AbilityChargesError , AbilityId , AbilitySet , AbilitySetIssue , AbilityState , GameFraction , GameFractionError , Objective , ObjectiveId , ObjectiveIssue , ObjectiveSnapshot , ObjectiveState , PartyGauge , PartyGaugeState , PartyIssue , PartyMember , PartySnapshot , RewardId , RewardItem , RewardItemId , RewardSnapshot , RewardState , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game",
      "path": "gpui_kit::game",
      "source": "crates/gpui-kit/src/game/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use model::{ Ability, AbilityCharges, AbilityChargesError, AbilityId, AbilitySet, AbilitySetIssue, AbilityState, GameFraction, GameFractionError, Objective, ObjectiveId, ObjectiveIssue, ObjectiveSnapshot, ObjectiveState, PartyGauge, PartyGaugeState, PartyIssue, PartyMember, PartySnapshot, RewardId, RewardItem, RewardItemId, RewardSnapshot, RewardState, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::game::reexport-2",
      "name": "presentation :: { AbilityBar , AbilityBarEvent , ObjectiveTracker , ObjectiveTrackerEvent , PartyRoster , PartyRosterEvent , RewardReveal , RewardRevealEvent , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "game",
      "path": "gpui_kit::game",
      "source": "crates/gpui-kit/src/game/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use presentation::{ AbilityBar, AbilityBarEvent, ObjectiveTracker, ObjectiveTrackerEvent, PartyRoster, PartyRosterEvent, RewardReveal, RewardRevealEvent, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::install",
      "name": "install",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "",
      "path": "gpui_kit",
      "source": "crates/gpui-kit/src/lib.rs",
      "summary": "Installs fonts, the theme global, and the semantic registry.",
      "documentation": "Installs fonts, the theme global, and the semantic registry.",
      "signature": "pub fn install (cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::ActiveDrag",
      "name": "ActiveDrag",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "The drag as anything outside the module can see it.",
      "documentation": "The drag as anything outside the module can see it.",
      "signature": "# [doc = \" The drag as anything outside the module can see it.\"] # [derive (Clone, Debug, PartialEq)] pub struct ActiveDrag { pub item : DragItem, # [doc = \" How fast the pointer is moving right now, in pixels a second. A drag\"] # [doc = \" the user has paused reports [`Velocity::ZERO`].\"] pub velocity : Velocity, # [doc = \" The surface the pointer is currently over, when it offers a slot.\"] pub surface : Option<SharedString>, # [doc = \" Where the drop would land right now.\"] pub position : Option<DropPosition>, # [doc = \" Whether the target under the pointer accepts the payload. A drag over\"] # [doc = \" nothing is neither accepted nor refused.\"] pub accepted : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::DRAG_NODE_ID",
      "name": "DRAG_NODE_ID",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "The semantic id of the node a drag publishes while it is in flight.",
      "documentation": "The semantic id of the node a drag publishes while it is in flight.",
      "signature": "pub const DRAG_NODE_ID: & str",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::DeferredDrop",
      "name": "DeferredDrop",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "Retained, nonblocking acceptance shared by List and Tabs.",
      "documentation": "Retained, nonblocking acceptance shared by List and Tabs.\n\nKeep one controller per mounted surface. The required validator checks\ncaller-owned payload/source/target identity and current data/owner grants;\nit must consult live data, not a request-time snapshot. Native mount,\nrevision, deadline and synchronous acceptance are also checked at commit.\nA same-revision render preserves a request; changing the revision or\nremoving the surface invalidates it. `revoke` permanently closes an owner.\nNo OS drag or pointer capture is held while a reply is pending.",
      "signature": "# [doc = \" Retained, nonblocking acceptance shared by List and Tabs.\"] # [doc = \"\"] # [doc = \" Keep one controller per mounted surface. The required validator checks\"] # [doc = \" caller-owned payload/source/target identity and current data/owner grants;\"] # [doc = \" it must consult live data, not a request-time snapshot. Native mount,\"] # [doc = \" revision, deadline and synchronous acceptance are also checked at commit.\"] # [doc = \" A same-revision render preserves a request; changing the revision or\"] # [doc = \" removing the surface invalidates it. `revoke` permanently closes an owner.\"] # [doc = \" No OS drag or pointer capture is held while a reply is pending.\"] # [derive (Clone)] pub struct DeferredDrop (Rc<DeferredInner>);",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::DeferredDrop::cancel",
      "name": "cancel",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cancel (& self, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "DeferredDrop"
    },
    {
      "id": "gpui_kit::interaction::dnd::DeferredDrop::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (timeout : Duration, validate : impl Fn (& DropIntent, & mut Window, & mut App) -> bool + 'static, on_event : impl Fn (& DropDecisionEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DeferredDrop"
    },
    {
      "id": "gpui_kit::interaction::dnd::DeferredDrop::request",
      "name": "request",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "Submits an explicit candidate through the same path as pointer release. Keyboard reorder affordances may call this; it never mutates data.",
      "documentation": "Submits an explicit candidate through the same path as pointer release.\nKeyboard reorder affordances may call this; it never mutates data.",
      "signature": "pub fn request (& self, intent : DropIntent, window : & mut Window, cx : & mut App,) -> Option<DropRequestId>",
      "cfg": [],
      "target": "DeferredDrop"
    },
    {
      "id": "gpui_kit::interaction::dnd::DeferredDrop::resolve",
      "name": "resolve",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "Resolves once. Stale, duplicate, foreign-window and Pending replies do not commit. Accepted still runs the live validator and current policy.",
      "documentation": "Resolves once. Stale, duplicate, foreign-window and Pending replies do\nnot commit. Accepted still runs the live validator and current policy.",
      "signature": "pub fn resolve (& self, id : DropRequestId, decision : DropDecision, window : & mut Window, cx : & mut App,) -> bool",
      "cfg": [],
      "target": "DeferredDrop"
    },
    {
      "id": "gpui_kit::interaction::dnd::DeferredDrop::revoke",
      "name": "revoke",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn revoke (& self, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "DeferredDrop"
    },
    {
      "id": "gpui_kit::interaction::dnd::DeferredDrop::status",
      "name": "status",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn status (& self) -> Option<(DropRequest, DropDecision)>",
      "cfg": [],
      "target": "DeferredDrop"
    },
    {
      "id": "gpui_kit::interaction::dnd::DragItem",
      "name": "DragItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "What a drag is carrying.",
      "documentation": "What a drag is carrying.\n\nThe identity is the item's business identity, never its position, because a\nreorder changes every position and nothing else.",
      "signature": "# [doc = \" What a drag is carrying.\"] # [doc = \"\"] # [doc = \" The identity is the item's business identity, never its position, because a\"] # [doc = \" reorder changes every position and nothing else.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub struct DragItem { # [doc = \" The surface the drag started in, so a target can tell its own rows from\"] # [doc = \" somebody else's.\"] pub source : SharedString, pub id : SharedString, # [doc = \" The name shown on the ghost and published in the tree.\"] pub label : SharedString, # [doc = \" What sort of thing this is, so a target can refuse a payload it does\"] # [doc = \" not handle.\"] pub kind : SharedString, pub icon : Option<Icon>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::DragItem::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, icon : Icon) -> Self",
      "cfg": [],
      "target": "DragItem"
    },
    {
      "id": "gpui_kit::interaction::dnd::DragItem::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn kind (mut self, kind : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DragItem"
    },
    {
      "id": "gpui_kit::interaction::dnd::DragItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (source : impl Into<SharedString>, id : impl Into<SharedString>, label : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "DragItem"
    },
    {
      "id": "gpui_kit::interaction::dnd::DropAxis",
      "name": "DropAxis",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "Which way a target's slots are laid out.",
      "documentation": "Which way a target's slots are laid out.",
      "signature": "# [doc = \" Which way a target's slots are laid out.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum DropAxis { Vertical, Horizontal, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::DropDecision",
      "name": "DropDecision",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum DropDecision { Pending, Accepted, Refused (DropRefusal), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::DropDecisionEvent",
      "name": "DropDecisionEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "Every request has at most one terminal event, including cancellation.",
      "documentation": "Every request has at most one terminal event, including cancellation.",
      "signature": "# [doc = \" Every request has at most one terminal event, including cancellation.\"] # [derive (Clone, Debug, PartialEq)] pub enum DropDecisionEvent { Requested (Box<DropRequest>), Finished { id : DropRequestId, decision : DropDecision, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::DropIntent",
      "name": "DropIntent",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "One drop, as it is reported to the host.",
      "documentation": "One drop, as it is reported to the host.",
      "signature": "# [doc = \" One drop, as it is reported to the host.\"] # [derive (Clone, Debug, PartialEq)] pub struct DropIntent { pub item : DragItem, pub position : DropPosition, # [doc = \" How fast the pointer was moving when it let go, in pixels a second.\"] # [doc = \"\"] # [doc = \" A gesture that stopped before it was released reports\"] # [doc = \" [`Velocity::ZERO`], which is the difference between a flick and a\"] # [doc = \" deliberate placement. See [`crate::motion::flick`].\"] pub velocity : Velocity, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::DropPosition",
      "name": "DropPosition",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "Where a dropped item goes, expressed against something already there.",
      "documentation": "Where a dropped item goes, expressed against something already there.\n\n\"At index N\" is deliberately absent: an index is a position, and a position\nstops meaning anything the moment the host applies the move. A drop at the\ntop of a list is `Before` the first item; a drop into an empty container is\n`Into` the container.",
      "signature": "# [doc = \" Where a dropped item goes, expressed against something already there.\"] # [doc = \"\"] # [doc = \" \\\"At index N\\\" is deliberately absent: an index is a position, and a position\"] # [doc = \" stops meaning anything the moment the host applies the move. A drop at the\"] # [doc = \" top of a list is `Before` the first item; a drop into an empty container is\"] # [doc = \" `Into` the container.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub enum DropPosition { Before (SharedString), After (SharedString), # [doc = \" Inside the named container — a folder in a tree, or a zone that holds\"] # [doc = \" items without ordering them.\"] Into (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::DropPosition::anchor",
      "name": "anchor",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "The item the position is expressed against.",
      "documentation": "The item the position is expressed against.",
      "signature": "pub fn anchor (& self) -> & SharedString",
      "cfg": [],
      "target": "DropPosition"
    },
    {
      "id": "gpui_kit::interaction::dnd::DropPosition::verb",
      "name": "verb",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn verb (& self) -> & 'static str",
      "cfg": [],
      "target": "DropPosition"
    },
    {
      "id": "gpui_kit::interaction::dnd::DropRefusal",
      "name": "DropRefusal",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum DropRefusal { Policy, Stale, Cancelled, TimedOut, Superseded, Revoked, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::DropRequest",
      "name": "DropRequest",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "A released candidate, not a committed reorder. Replies must name its id.",
      "documentation": "A released candidate, not a committed reorder. Replies must name its id.",
      "signature": "# [doc = \" A released candidate, not a committed reorder. Replies must name its id.\"] # [derive (Clone, Debug, PartialEq)] pub struct DropRequest { pub id : DropRequestId, pub surface : SharedString, pub revision : u64, pub owner : Option<gpui::EffectOwner>, pub intent : DropIntent, pub timeout : Duration, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::DropRequestId",
      "name": "DropRequestId",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "A single-use, process-local request identity, safe to carry as protocol data.",
      "documentation": "A single-use, process-local request identity, safe to carry as protocol data.",
      "signature": "# [doc = \" A single-use, process-local request identity, safe to carry as protocol data.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq, Hash)] pub struct DropRequestId (u64);",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::DropRequestId::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (self) -> u64",
      "cfg": [],
      "target": "DropRequestId"
    },
    {
      "id": "gpui_kit::interaction::dnd::FILE_KIND",
      "name": "FILE_KIND",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "The payload kind an external file drop carries.",
      "documentation": "The payload kind an external file drop carries.",
      "signature": "pub const FILE_KIND: & str",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::MakeWay",
      "name": "MakeWay",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "An element painted beside where layout put it.",
      "documentation": "An element painted beside where layout put it.",
      "signature": "# [doc = \" An element painted beside where layout put it.\"] pub struct MakeWay { element : gpui::AnyElement, state : Rc<RefCell<SlideState>>, offset : Point<Pixels>, spring : Spring, settle : Duration, instant : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::ROW_KIND",
      "name": "ROW_KIND",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "The payload kind a row, node, or tab carries.",
      "documentation": "The payload kind a row, node, or tab carries.",
      "signature": "pub const ROW_KIND: & str",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::StagedDrag",
      "name": "StagedDrag",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "A drag placed by hand rather than by a pointer.",
      "documentation": "A drag placed by hand rather than by a pointer.\n\nA still image cannot photograph a gesture, and a capture that waited for a\nreal drag would race the pointer and the spring. Staging puts the system\ninto one fixed state so a scene renders the same pixels every run.",
      "signature": "# [doc = \" A drag placed by hand rather than by a pointer.\"] # [doc = \"\"] # [doc = \" A still image cannot photograph a gesture, and a capture that waited for a\"] # [doc = \" real drag would race the pointer and the spring. Staging puts the system\"] # [doc = \" into one fixed state so a scene renders the same pixels every run.\"] # [derive (Clone, Debug)] pub struct StagedDrag { item : DragItem, landing : Option<Landing>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::StagedDrag::landing",
      "name": "landing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "Where the staged drag would land. `slot` is how many rows precede the insertion point, which is what decides the rows that slide aside.",
      "documentation": "Where the staged drag would land. `slot` is how many rows precede the\ninsertion point, which is what decides the rows that slide aside.",
      "signature": "pub fn landing (mut self, surface : impl Into<SharedString>, position : DropPosition, slot : Option<usize>, accepted : bool,) -> Self",
      "cfg": [],
      "target": "StagedDrag"
    },
    {
      "id": "gpui_kit::interaction::dnd::StagedDrag::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (item : DragItem) -> Self",
      "cfg": [],
      "target": "StagedDrag"
    },
    {
      "id": "gpui_kit::interaction::dnd::SurfaceDrag::carries",
      "name": "carries",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "Whether the row named `id` is the one being carried.",
      "documentation": "Whether the row named `id` is the one being carried.",
      "signature": "pub fn carries (& self, id : & SharedString) -> bool",
      "cfg": [],
      "target": "SurfaceDrag"
    },
    {
      "id": "gpui_kit::interaction::dnd::SurfaceDrag::indicator_for",
      "name": "indicator_for",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "The indicator this row should draw, if any.",
      "documentation": "The indicator this row should draw, if any.",
      "signature": "pub fn indicator_for (& self, id : & SharedString) -> Option<(DropPosition, bool)>",
      "cfg": [],
      "target": "SurfaceDrag"
    },
    {
      "id": "gpui_kit::interaction::dnd::SurfaceDrag::makes_way",
      "name": "makes_way",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "Whether a row sitting at `index` has to slide to open the slot.",
      "documentation": "Whether a row sitting at `index` has to slide to open the slot.",
      "signature": "pub fn makes_way (& self, index : usize) -> bool",
      "cfg": [],
      "target": "SurfaceDrag"
    },
    {
      "id": "gpui_kit::interaction::dnd::active",
      "name": "active",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "The drag in flight, if there is one.",
      "documentation": "The drag in flight, if there is one.",
      "signature": "pub fn active (window : & Window, cx : & App) -> Option<ActiveDrag>",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::cancel",
      "name": "cancel",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "Abandons a drag in flight. A cancelled drag reports nothing.",
      "documentation": "Abandons a drag in flight. A cancelled drag reports nothing.",
      "signature": "pub fn cancel (window : & mut Window, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::draggable",
      "name": "draggable",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "Makes `element` the handle of a drag carrying `item`.",
      "documentation": "Makes `element` the handle of a drag carrying `item`.\n\nGPUI decides when the press becomes a drag; this only says what is being\ncarried and what the ghost looks like.",
      "signature": "pub fn draggable<E> (element : E, item : DragItem) -> E where E : StatefulInteractiveElement + Sized,",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::install",
      "name": "install",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "Installs the drag session and the key that cancels a drag.",
      "documentation": "Installs the drag session and the key that cancels a drag.\n\nEscape is observed at the application rather than bound to an element,\nbecause the pointer can be anywhere by the time a drag is abandoned and the\nelement the drag started on may no longer be under it.",
      "signature": "pub fn install (cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::stage",
      "name": "stage",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "Places the drag system in a fixed state, for a capture or a review that has to show a drag in flight.",
      "documentation": "Places the drag system in a fixed state, for a capture or a review that has\nto show a drag in flight.",
      "signature": "pub fn stage (drag : StagedDrag, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::dnd::staged_ghost",
      "name": "staged_ghost",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::dnd",
      "path": "gpui_kit::interaction::dnd",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "The ghost of a staged drag, for a scene that places it itself.",
      "documentation": "The ghost of a staged drag, for a scene that places it itself.",
      "signature": "pub fn staged_ghost (cx : & mut App) -> Option<gpui::Div>",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::install",
      "name": "install",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction",
      "path": "gpui_kit::interaction",
      "source": "crates/gpui-kit/src/interaction/mod.rs",
      "summary": "Installs the drag session and the key that cancels a drag.",
      "documentation": "Installs the drag session and the key that cancels a drag.",
      "signature": "pub fn install (cx : & mut gpui::App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::range::RangeError",
      "name": "RangeError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum RangeError { NonFinite, MissingRange, InvalidRange, InvalidIntent, Unrepresentable, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::range::RangeEvent",
      "name": "RangeEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "These are proposals only. Cancellation never proposes a rollback: earlier updates may already have been accepted by a controlled host.",
      "documentation": "These are proposals only. Cancellation never proposes a rollback: earlier\nupdates may already have been accepted by a controlled host.",
      "signature": "# [doc = \" These are proposals only. Cancellation never proposes a rollback: earlier\"] # [doc = \" updates may already have been accepted by a controlled host.\"] # [derive (Clone, Copy, Debug, PartialEq)] pub enum RangeEvent { Update { intent : RangeIntent, value : [f64; 2], }, Commit { intent : RangeIntent, value : [f64; 2], }, Cancel { intent : RangeIntent, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::range::RangeIntent",
      "name": "RangeIntent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum RangeIntent { Create, Resize (RangeTarget), Move, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::range::RangeInteraction",
      "name": "RangeInteraction",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "Retain this transient state alongside a caller-controlled range. The host remains authoritative; only [`Self::preview`] holds an unaccepted proposal.",
      "documentation": "Retain this transient state alongside a caller-controlled range. The host\nremains authoritative; only [`Self::preview`] holds an unaccepted proposal.",
      "signature": "# [doc = \" Retain this transient state alongside a caller-controlled range. The host\"] # [doc = \" remains authoritative; only [`Self::preview`] holds an unaccepted proposal.\"] pub struct RangeInteraction<S> { drag : Option<Drag<S>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::range::RangeInteraction::begin",
      "name": "begin",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "Begin at a finite pointer fraction, possibly outside the viewport. Invalid input preserves any previous gesture. A valid begin replaces it.",
      "documentation": "Begin at a finite pointer fraction, possibly outside the viewport.\nInvalid input preserves any previous gesture. A valid begin replaces it.",
      "signature": "pub fn begin (& mut self, mapping : S, value : Option<[f64; 2]>, intent : RangeIntent, pointer : f64,) -> Result<RangeEvent, RangeError>",
      "cfg": [],
      "target": "RangeInteraction<S>"
    },
    {
      "id": "gpui_kit::interaction::range::RangeInteraction::cancel",
      "name": "cancel",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "Platform cancellation/Escape, not a synthetic release. Idempotent.",
      "documentation": "Platform cancellation/Escape, not a synthetic release. Idempotent.",
      "signature": "pub fn cancel (& mut self) -> Option<RangeEvent>",
      "cfg": [],
      "target": "RangeInteraction<S>"
    },
    {
      "id": "gpui_kit::interaction::range::RangeInteraction::keyboard",
      "name": "keyboard",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "A discrete keyboard edit is a commit proposal. It supersedes an active pointer preview; it never installs the proposed range. Tab/focus and direction-to-step conversion belong to the family adapter.",
      "documentation": "A discrete keyboard edit is a commit proposal. It supersedes an active\npointer preview; it never installs the proposed range. Tab/focus and\ndirection-to-step conversion belong to the family adapter.",
      "signature": "pub fn keyboard (& mut self, mapping : & S, value : [f64; 2], target : RangeTarget, key : RangeKey,) -> Result<RangeEvent, RangeError>",
      "cfg": [],
      "target": "RangeInteraction<S>"
    },
    {
      "id": "gpui_kit::interaction::range::RangeInteraction::preview",
      "name": "preview",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn preview (& self) -> Option<[f64; 2]>",
      "cfg": [],
      "target": "RangeInteraction<S>"
    },
    {
      "id": "gpui_kit::interaction::range::RangeInteraction::release",
      "name": "release",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "Resolve the actual release coordinate, then discard all transient state. The returned commit is not installed until the caller accepts it.",
      "documentation": "Resolve the actual release coordinate, then discard all transient state.\nThe returned commit is not installed until the caller accepts it.",
      "signature": "pub fn release (& mut self, pointer : f64) -> Result<Option<RangeEvent>, RangeError>",
      "cfg": [],
      "target": "RangeInteraction<S>"
    },
    {
      "id": "gpui_kit::interaction::range::RangeInteraction::sync",
      "name": "sync",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "Reconcile a render's authoritative input before handling more events. Unchanged caller values mean no observed acceptance yet. Accepting the latest proposal does not rebase the gesture, avoiding cumulative drag drift. An unrelated replacement or changed mapping cancels transient state. Acceptance is synchronous/latest-value: a delayed older proposal is an external replacement and cancels, never silently rewrites the draft.",
      "documentation": "Reconcile a render's authoritative input before handling more events.\nUnchanged caller values mean no observed acceptance yet. Accepting the latest\nproposal does not rebase the gesture, avoiding cumulative drag drift.\nAn unrelated replacement or changed mapping cancels transient state.\nAcceptance is synchronous/latest-value: a delayed older proposal is an\nexternal replacement and cancels, never silently rewrites the draft.",
      "signature": "pub fn sync (& mut self, mapping : & S, value : Option<[f64; 2]>) -> Option<RangeEvent>",
      "cfg": [],
      "target": "RangeInteraction<S>"
    },
    {
      "id": "gpui_kit::interaction::range::RangeInteraction::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "Update from a finite fraction. Bounding belongs here, not to the input harness: captured movement/release can be outside the window. Resize preserves the initial pointer-to-handle offset, so a wide handle does not jump to the grabbed pixel on the first movement.",
      "documentation": "Update from a finite fraction. Bounding belongs here, not to the input\nharness: captured movement/release can be outside the window.\nResize preserves the initial pointer-to-handle offset, so a wide handle\ndoes not jump to the grabbed pixel on the first movement.",
      "signature": "pub fn update (& mut self, pointer : f64) -> Result<Option<RangeEvent>, RangeError>",
      "cfg": [],
      "target": "RangeInteraction<S>"
    },
    {
      "id": "gpui_kit::interaction::range::RangeKey",
      "name": "RangeKey",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq)] pub enum RangeKey { # [doc = \" Signed display-fraction step, chosen by the caller's keyboard policy.\"] Step (f64), Home, End, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::range::RangeMapping",
      "name": "RangeMapping",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "An existing monotonic, invertible coordinate mapping. Freeze it for the gesture. `unproject(0)` and `unproject(1)` are finite distinct raw domain endpoints; they may descend. `project` must preserve that orientation and `unproject` must invert it within f64 representation. Out-of-domain caller ranges are rejected at begin, not silently normalized. No method mutates caller data. Equality must change when its domain or coordinate interpretation changes.",
      "documentation": "An existing monotonic, invertible coordinate mapping. Freeze it for the gesture.\n`unproject(0)` and `unproject(1)` are finite distinct raw domain endpoints;\nthey may descend. `project` must preserve that orientation and `unproject`\nmust invert it within f64 representation. Out-of-domain caller ranges are\nrejected at begin, not silently normalized. No method mutates caller data.\nEquality must change when its domain or coordinate interpretation changes.",
      "signature": "# [doc = \" An existing monotonic, invertible coordinate mapping. Freeze it for the gesture.\"] # [doc = \" `unproject(0)` and `unproject(1)` are finite distinct raw domain endpoints;\"] # [doc = \" they may descend. `project` must preserve that orientation and `unproject`\"] # [doc = \" must invert it within f64 representation. Out-of-domain caller ranges are\"] # [doc = \" rejected at begin, not silently normalized. No method mutates caller data.\"] # [doc = \" Equality must change when its domain or coordinate interpretation changes.\"] pub trait RangeMapping : Clone + PartialEq { fn project (& self, value : f64) -> Option<f64>; fn unproject (& self, fraction : f64) -> Option<f64>; }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::range::RangeTarget",
      "name": "RangeTarget",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::range",
      "path": "gpui_kit::interaction::range",
      "source": "crates/gpui-kit/src/interaction/range.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum RangeTarget { Start, End, Window, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::reexport-1",
      "name": "dnd :: { ActiveDrag , DRAG_NODE_ID , DragItem , DropAxis , DropIntent , DropPosition , FILE_KIND , ROW_KIND , StagedDrag , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction",
      "path": "gpui_kit::interaction",
      "source": "crates/gpui-kit/src/interaction/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use dnd::{ ActiveDrag, DRAG_NODE_ID, DragItem, DropAxis, DropIntent, DropPosition, FILE_KIND, ROW_KIND, StagedDrag, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::refresh::PullToRefresh",
      "name": "PullToRefresh",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::refresh",
      "path": "gpui_kit::interaction::refresh",
      "source": "crates/gpui-kit/src/interaction/refresh.rs",
      "summary": "Retains its caller-built content in every state, including a failed refresh. The supplied scroll handle must be the handle used by that content.",
      "documentation": "Retains its caller-built content in every state, including a failed refresh.\nThe supplied scroll handle must be the handle used by that content.",
      "signature": "# [doc = \" Retains its caller-built content in every state, including a failed refresh.\"] # [doc = \" The supplied scroll handle must be the handle used by that content.\"] pub struct PullToRefresh { ident : Ident, scroll : ScrollHandle, body : Option<Body>, state : RefreshState, enabled : bool, threshold : f32, pull : Option<f32>, label : SharedString, armed_label : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::refresh::PullToRefresh::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::refresh",
      "path": "gpui_kit::interaction::refresh",
      "source": "crates/gpui-kit/src/interaction/refresh.rs",
      "summary": "Labels are caller-authored/localized: accessible refresh alternative and the armed release instruction. No timing or transport lives here.",
      "documentation": "Labels are caller-authored/localized: accessible refresh alternative and\nthe armed release instruction. No timing or transport lives here.",
      "signature": "pub fn new (ident : impl Into<Ident>, scroll : ScrollHandle, label : impl Into<SharedString>, armed_label : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "PullToRefresh"
    },
    {
      "id": "gpui_kit::interaction::refresh::PullToRefresh::set_content",
      "name": "set_content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::refresh",
      "path": "gpui_kit::interaction::refresh",
      "source": "crates/gpui-kit/src/interaction/refresh.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_content (& mut self, body : Option<Body>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "PullToRefresh"
    },
    {
      "id": "gpui_kit::interaction::refresh::PullToRefresh::set_enabled",
      "name": "set_enabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::refresh",
      "path": "gpui_kit::interaction::refresh",
      "source": "crates/gpui-kit/src/interaction/refresh.rs",
      "summary": "Revocation abandons a pull without reporting a refresh.",
      "documentation": "Revocation abandons a pull without reporting a refresh.",
      "signature": "pub fn set_enabled (& mut self, enabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "PullToRefresh"
    },
    {
      "id": "gpui_kit::interaction::refresh::PullToRefresh::set_state",
      "name": "set_state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::refresh",
      "path": "gpui_kit::interaction::refresh",
      "source": "crates/gpui-kit/src/interaction/refresh.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_state (& mut self, state : RefreshState, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "PullToRefresh"
    },
    {
      "id": "gpui_kit::interaction::refresh::PullToRefresh::set_threshold",
      "name": "set_threshold",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::refresh",
      "path": "gpui_kit::interaction::refresh",
      "source": "crates/gpui-kit/src/interaction/refresh.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_threshold (& mut self, threshold : f32, cx : & mut Context<Self>) -> bool",
      "cfg": [],
      "target": "PullToRefresh"
    },
    {
      "id": "gpui_kit::interaction::refresh::PullToRefreshEvent",
      "name": "PullToRefreshEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::refresh",
      "path": "gpui_kit::interaction::refresh",
      "source": "crates/gpui-kit/src/interaction/refresh.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum PullToRefreshEvent { RefreshRequested, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::refresh::RefreshState",
      "name": "RefreshState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::refresh",
      "path": "gpui_kit::interaction::refresh",
      "source": "crates/gpui-kit/src/interaction/refresh.rs",
      "summary": "Refresh activity is separate from the retained list's data state.",
      "documentation": "Refresh activity is separate from the retained list's data state.",
      "signature": "# [doc = \" Refresh activity is separate from the retained list's data state.\"] # [derive (Debug, Clone, Default, PartialEq, Eq)] pub enum RefreshState { # [default] Ready, Pending (SharedString), Loading (SharedString), Error (SharedString), Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::swipe::SwipeActions",
      "name": "SwipeActions",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::swipe",
      "path": "gpui_kit::interaction::swipe",
      "source": "crates/gpui-kit/src/interaction/swipe.rs",
      "summary": "A stable row with two optional action trays. Revealing is transient visual state, never selection or deletion. Vertical gestures remain scroll gestures.",
      "documentation": "A stable row with two optional action trays. Revealing is transient visual\nstate, never selection or deletion. Vertical gestures remain scroll gestures.",
      "signature": "# [doc = \" A stable row with two optional action trays. Revealing is transient visual\"] # [doc = \" state, never selection or deletion. Vertical gestures remain scroll gestures.\"] pub struct SwipeActions { ident : Ident, body : Option<Body>, left : Vec<SheetAction>, right : Vec<SheetAction>, state : SheetActionState, enabled : bool, revealed : Option<SwipeSide>, drag_from : Option<f32>, preview : Option<f32>, reveal_label : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::swipe::SwipeActions::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::swipe",
      "path": "gpui_kit::interaction::swipe",
      "source": "crates/gpui-kit/src/interaction/swipe.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, reveal_label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SwipeActions"
    },
    {
      "id": "gpui_kit::interaction::swipe::SwipeActions::reveal",
      "name": "reveal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::swipe",
      "path": "gpui_kit::interaction::swipe",
      "source": "crates/gpui-kit/src/interaction/swipe.rs",
      "summary": "Keyboard and assistive-technology alternative to the physical gesture. Does not perform a tray action. Missing sides are rejected.",
      "documentation": "Keyboard and assistive-technology alternative to the physical gesture.\nDoes not perform a tray action. Missing sides are rejected.",
      "signature": "pub fn reveal (& mut self, side : Option<SwipeSide>, cx : & mut Context<Self>) -> bool",
      "cfg": [],
      "target": "SwipeActions"
    },
    {
      "id": "gpui_kit::interaction::swipe::SwipeActions::revealed",
      "name": "revealed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::swipe",
      "path": "gpui_kit::interaction::swipe",
      "source": "crates/gpui-kit/src/interaction/swipe.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn revealed (& self) -> Option<SwipeSide>",
      "cfg": [],
      "target": "SwipeActions"
    },
    {
      "id": "gpui_kit::interaction::swipe::SwipeActions::set_actions",
      "name": "set_actions",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::swipe",
      "path": "gpui_kit::interaction::swipe",
      "source": "crates/gpui-kit/src/interaction/swipe.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_actions (& mut self, side : SwipeSide, actions : Vec<SheetAction>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "SwipeActions"
    },
    {
      "id": "gpui_kit::interaction::swipe::SwipeActions::set_content",
      "name": "set_content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::swipe",
      "path": "gpui_kit::interaction::swipe",
      "source": "crates/gpui-kit/src/interaction/swipe.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_content (& mut self, body : Option<Body>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SwipeActions"
    },
    {
      "id": "gpui_kit::interaction::swipe::SwipeActions::set_enabled",
      "name": "set_enabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::swipe",
      "path": "gpui_kit::interaction::swipe",
      "source": "crates/gpui-kit/src/interaction/swipe.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_enabled (& mut self, enabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SwipeActions"
    },
    {
      "id": "gpui_kit::interaction::swipe::SwipeActions::set_state",
      "name": "set_state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::swipe",
      "path": "gpui_kit::interaction::swipe",
      "source": "crates/gpui-kit/src/interaction/swipe.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_state (& mut self, state : SheetActionState, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SwipeActions"
    },
    {
      "id": "gpui_kit::interaction::swipe::SwipeActionsEvent",
      "name": "SwipeActionsEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::swipe",
      "path": "gpui_kit::interaction::swipe",
      "source": "crates/gpui-kit/src/interaction/swipe.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, PartialEq, Eq)] pub enum SwipeActionsEvent { Revealed (Option<SwipeSide>), ActionRequested (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::interaction::swipe::SwipeSide",
      "name": "SwipeSide",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "interaction::swipe",
      "path": "gpui_kit::interaction::swipe",
      "source": "crates/gpui-kit/src/interaction/swipe.rs",
      "summary": "Physical sides. The caller maps leading/trailing according to reading order.",
      "documentation": "Physical sides. The caller maps leading/trailing according to reading order.",
      "signature": "# [doc = \" Physical sides. The caller maps leading/trailing according to reading order.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum SwipeSide { Left, Right, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::app_bar::AppBar",
      "name": "AppBar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::app_bar",
      "path": "gpui_kit::layout::app_bar",
      "source": "crates/gpui-kit/src/layout/app_bar.rs",
      "summary": "A page title with caller-owned leading and trailing actions. Slots should contain accessible controls. Safe areas belong to the enclosing PageLayout.",
      "documentation": "A page title with caller-owned leading and trailing actions. Slots should\ncontain accessible controls. Safe areas belong to the enclosing PageLayout.",
      "signature": "# [doc = \" A page title with caller-owned leading and trailing actions. Slots should\"] # [doc = \" contain accessible controls. Safe areas belong to the enclosing PageLayout.\"] # [derive (IntoElement)] pub struct AppBar { ident : Ident, title : SharedString, leading : Option<AnyElement>, trailing : Option<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::app_bar::AppBar::leading",
      "name": "leading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::app_bar",
      "path": "gpui_kit::layout::app_bar",
      "source": "crates/gpui-kit/src/layout/app_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn leading (mut self, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "AppBar"
    },
    {
      "id": "gpui_kit::layout::app_bar::AppBar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::app_bar",
      "path": "gpui_kit::layout::app_bar",
      "source": "crates/gpui-kit/src/layout/app_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AppBar"
    },
    {
      "id": "gpui_kit::layout::app_bar::AppBar::trailing",
      "name": "trailing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::app_bar",
      "path": "gpui_kit::layout::app_bar",
      "source": "crates/gpui-kit/src/layout/app_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn trailing (mut self, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "AppBar"
    },
    {
      "id": "gpui_kit::layout::aspect_ratio::AspectFit",
      "name": "AspectFit",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::aspect_ratio",
      "path": "gpui_kit::layout::aspect_ratio",
      "source": "crates/gpui-kit/src/layout/aspect_ratio.rs",
      "summary": "Which dimension the parent decides, leaving the other to the ratio.",
      "documentation": "Which dimension the parent decides, leaving the other to the ratio.",
      "signature": "# [doc = \" Which dimension the parent decides, leaving the other to the ratio.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum AspectFit { # [default] Width, Height, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::aspect_ratio::AspectRatio",
      "name": "AspectRatio",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::aspect_ratio",
      "path": "gpui_kit::layout::aspect_ratio",
      "source": "crates/gpui-kit/src/layout/aspect_ratio.rs",
      "summary": "A container whose two dimensions stay in a fixed ratio.",
      "documentation": "A container whose two dimensions stay in a fixed ratio.",
      "signature": "# [doc = \" A container whose two dimensions stay in a fixed ratio.\"] # [derive (IntoElement)] pub struct AspectRatio { ident : Ident, # [doc = \" Width divided by height. `16.0 / 9.0` is wider than tall.\"] ratio : f32, fit : AspectFit, child : Option<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::aspect_ratio::AspectRatio::child",
      "name": "child",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::aspect_ratio",
      "path": "gpui_kit::layout::aspect_ratio",
      "source": "crates/gpui-kit/src/layout/aspect_ratio.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn child (mut self, child : impl IntoElement) -> Self",
      "cfg": [],
      "target": "AspectRatio"
    },
    {
      "id": "gpui_kit::layout::aspect_ratio::AspectRatio::fit",
      "name": "fit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::aspect_ratio",
      "path": "gpui_kit::layout::aspect_ratio",
      "source": "crates/gpui-kit/src/layout/aspect_ratio.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn fit (mut self, fit : AspectFit) -> Self",
      "cfg": [],
      "target": "AspectRatio"
    },
    {
      "id": "gpui_kit::layout::aspect_ratio::AspectRatio::height_driven",
      "name": "height_driven",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::aspect_ratio",
      "path": "gpui_kit::layout::aspect_ratio",
      "source": "crates/gpui-kit/src/layout/aspect_ratio.rs",
      "summary": "Takes the height from the parent and computes the width.",
      "documentation": "Takes the height from the parent and computes the width.",
      "signature": "pub fn height_driven (self) -> Self",
      "cfg": [],
      "target": "AspectRatio"
    },
    {
      "id": "gpui_kit::layout::aspect_ratio::AspectRatio::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::aspect_ratio",
      "path": "gpui_kit::layout::aspect_ratio",
      "source": "crates/gpui-kit/src/layout/aspect_ratio.rs",
      "summary": "`ratio` is width divided by height.",
      "documentation": "`ratio` is width divided by height.",
      "signature": "pub fn new (ident : impl Into<Ident>, ratio : f32) -> Self",
      "cfg": [],
      "target": "AspectRatio"
    },
    {
      "id": "gpui_kit::layout::aspect_ratio::AspectRatio::of",
      "name": "of",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::aspect_ratio",
      "path": "gpui_kit::layout::aspect_ratio",
      "source": "crates/gpui-kit/src/layout/aspect_ratio.rs",
      "summary": "The ratio written as the two numbers a caller already has, so `sixteen by nine` does not have to be divided at the call site.",
      "documentation": "The ratio written as the two numbers a caller already has, so\n`sixteen by nine` does not have to be divided at the call site.",
      "signature": "pub fn of (ident : impl Into<Ident>, width : f32, height : f32) -> Self",
      "cfg": [],
      "target": "AspectRatio"
    },
    {
      "id": "gpui_kit::layout::aspect_ratio::AspectRatio::ratio",
      "name": "ratio",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::aspect_ratio",
      "path": "gpui_kit::layout::aspect_ratio",
      "source": "crates/gpui-kit/src/layout/aspect_ratio.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ratio (& self) -> f32",
      "cfg": [],
      "target": "AspectRatio"
    },
    {
      "id": "gpui_kit::layout::aspect_ratio::AspectRatio::width_driven",
      "name": "width_driven",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::aspect_ratio",
      "path": "gpui_kit::layout::aspect_ratio",
      "source": "crates/gpui-kit/src/layout/aspect_ratio.rs",
      "summary": "Takes the width from the parent and computes the height.",
      "documentation": "Takes the width from the parent and computes the height.",
      "signature": "pub fn width_driven (self) -> Self",
      "cfg": [],
      "target": "AspectRatio"
    },
    {
      "id": "gpui_kit::layout::dock::Dock",
      "name": "Dock",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "Panels arranged in regions around a centre.",
      "documentation": "Panels arranged in regions around a centre.",
      "signature": "# [doc = \" Panels arranged in regions around a centre.\"] # [derive (IntoElement)] pub struct Dock { ident : Ident, regions : [Region; 4], disabled : bool, on_event : Option<EventHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::dock::Dock::active",
      "name": "active",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "Which panel the caller says is on top. Without one, the first is.",
      "documentation": "Which panel the caller says is on top. Without one, the first is.",
      "signature": "pub fn active (mut self, region : DockRegion, panel : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Dock"
    },
    {
      "id": "gpui_kit::layout::dock::Dock::collapsed",
      "name": "collapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "Draws the region as a rail of its panels rather than as a panel.",
      "documentation": "Draws the region as a rail of its panels rather than as a panel.",
      "signature": "pub fn collapsed (mut self, region : DockRegion, collapsed : bool) -> Self",
      "cfg": [],
      "target": "Dock"
    },
    {
      "id": "gpui_kit::layout::dock::Dock::min_size",
      "name": "min_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "The smallest the region may be dragged to, in pixels.",
      "documentation": "The smallest the region may be dragged to, in pixels.",
      "signature": "pub fn min_size (mut self, region : DockRegion, min : f32) -> Self",
      "cfg": [],
      "target": "Dock"
    },
    {
      "id": "gpui_kit::layout::dock::Dock::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Dock"
    },
    {
      "id": "gpui_kit::layout::dock::Dock::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (DockEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Dock"
    },
    {
      "id": "gpui_kit::layout::dock::Dock::panel",
      "name": "panel",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn panel (mut self, region : DockRegion, panel : DockPanel) -> Self",
      "cfg": [],
      "target": "Dock"
    },
    {
      "id": "gpui_kit::layout::dock::Dock::panels",
      "name": "panels",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn panels (mut self, region : DockRegion, panels : impl IntoIterator<Item = DockPanel>,) -> Self",
      "cfg": [],
      "target": "Dock"
    },
    {
      "id": "gpui_kit::layout::dock::Dock::share",
      "name": "share",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "How much of its own split the region takes, from 0 to 1.",
      "documentation": "How much of its own split the region takes, from 0 to 1.",
      "signature": "pub fn share (mut self, region : DockRegion, share : f32) -> Self",
      "cfg": [],
      "target": "Dock"
    },
    {
      "id": "gpui_kit::layout::dock::DockEvent",
      "name": "DockEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "What the dock reports. The caller decides what any of it means.",
      "documentation": "What the dock reports. The caller decides what any of it means.",
      "signature": "# [doc = \" What the dock reports. The caller decides what any of it means.\"] # [derive (Debug, Clone, PartialEq)] pub enum DockEvent { # [doc = \" A tab or a rail glyph was picked.\"] PanelSelected { region : DockRegion, panel : SharedString, }, # [doc = \" A panel was dragged somewhere. Nothing has moved.\"] PanelMoved { panel : SharedString, to_region : DockRegion, # [doc = \" The panel the moved one should sit in front of, or `None` to put it\"] # [doc = \" last. Never an index: an index stops meaning anything the moment\"] # [doc = \" the host applies the move.\"] before : Option<SharedString>, }, # [doc = \" A region was asked to collapse to its rail, or to come back.\"] RegionCollapsed { region : DockRegion, collapsed : bool }, # [doc = \" A divider beside a region was moved. `ratio` is the share of its own\"] # [doc = \" split the region asked for.\"] RegionResized { region : DockRegion, ratio : f32 }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::dock::DockPanel",
      "name": "DockPanel",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "One panel: a name, a glyph, a count, and whatever the caller puts inside.",
      "documentation": "One panel: a name, a glyph, a count, and whatever the caller puts inside.",
      "signature": "# [doc = \" One panel: a name, a glyph, a count, and whatever the caller puts inside.\"] pub struct DockPanel { id : SharedString, title : SharedString, icon : Option<Icon>, badge : Option<SharedString>, unavailable : Option<SharedString>, # [doc = \" A region draws its active panel once, and an `AnyElement` can be built\"] # [doc = \" exactly once, so the content is handed over rather than copied.\"] content : RefCell<Option<AnyElement>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::dock::DockPanel::badge",
      "name": "badge",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "A count shown beside the title, such as how many problems a panel holds.",
      "documentation": "A count shown beside the title, such as how many problems a panel holds.",
      "signature": "pub fn badge (mut self, badge : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DockPanel"
    },
    {
      "id": "gpui_kit::layout::dock::DockPanel::content",
      "name": "content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn content (self, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "DockPanel"
    },
    {
      "id": "gpui_kit::layout::dock::DockPanel::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, glyph : Icon) -> Self",
      "cfg": [],
      "target": "DockPanel"
    },
    {
      "id": "gpui_kit::layout::dock::DockPanel::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "DockPanel"
    },
    {
      "id": "gpui_kit::layout::dock::DockPanel::is_unavailable",
      "name": "is_unavailable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_unavailable (& self) -> bool",
      "cfg": [],
      "target": "DockPanel"
    },
    {
      "id": "gpui_kit::layout::dock::DockPanel::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DockPanel"
    },
    {
      "id": "gpui_kit::layout::dock::DockPanel::title",
      "name": "title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn title (& self) -> & SharedString",
      "cfg": [],
      "target": "DockPanel"
    },
    {
      "id": "gpui_kit::layout::dock::DockPanel::unavailable",
      "name": "unavailable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "Why the host cannot show this panel right now.",
      "documentation": "Why the host cannot show this panel right now.\n\nAn unavailable panel keeps its tab and states the reason where its\ncontent would be. It does not disappear, because a panel that vanished\nwould read as one the workspace never had.",
      "signature": "pub fn unavailable (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DockPanel"
    },
    {
      "id": "gpui_kit::layout::dock::DockRegion",
      "name": "DockRegion",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "Where a panel sits.",
      "documentation": "Where a panel sits.",
      "signature": "# [doc = \" Where a panel sits.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum DockRegion { Left, Centre, Right, Bottom, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::dock::DockRegion::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock",
      "path": "gpui_kit::layout::dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "DockRegion"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockPlacement",
      "name": "DockPlacement",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "Which side of an existing stack a dropped panel should split into.",
      "documentation": "Which side of an existing stack a dropped panel should split into.",
      "signature": "# [doc = \" Which side of an existing stack a dropped panel should split into.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum DockPlacement { Left, Right, Top, Bottom, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockRecord",
      "name": "DockRecord",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "One node of a [`DockTopology`] as plain caller-serializable fields.",
      "documentation": "One node of a [`DockTopology`] as plain caller-serializable fields.",
      "signature": "# [doc = \" One node of a [`DockTopology`] as plain caller-serializable fields.\"] # [derive (Debug, Clone, PartialEq)] pub struct DockRecord { pub id : SharedString, pub parent : Option<SharedString>, pub kind : DockRecordKind, pub ratio : f32, pub panels : Vec<SharedString>, pub active : Option<SharedString>, pub min_width : f32, pub min_height : f32, pub rail : f32, pub collapsed : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockRecordError",
      "name": "DockRecordError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "Why persisted dock records do not form one valid topology.",
      "documentation": "Why persisted dock records do not form one valid topology.",
      "signature": "# [doc = \" Why persisted dock records do not form one valid topology.\"] # [derive (Debug, Clone, PartialEq)] pub enum DockRecordError { NoRoot, ManyRoots (Vec<SharedString>), DuplicateId (SharedString), MissingParent { id : SharedString, parent : SharedString, }, WrongChildCount { id : SharedString, found : usize, }, StackWithChildren (SharedString), SplitWithPanels (SharedString), DuplicatePanel (SharedString), MissingActive { stack : SharedString, panel : SharedString, }, Unreachable, InvalidFloatingBounds (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockRecordKind",
      "name": "DockRecordKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "What one [`DockRecord`] describes.",
      "documentation": "What one [`DockRecord`] describes.",
      "signature": "# [doc = \" What one [`DockRecord`] describes.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum DockRecordKind { Stack, Horizontal, Vertical, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockStack",
      "name": "DockStack",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "One tab stack at a leaf of a [`DockTopology`].",
      "documentation": "One tab stack at a leaf of a [`DockTopology`].",
      "signature": "# [doc = \" One tab stack at a leaf of a [`DockTopology`].\"] # [derive (Debug, Clone, PartialEq)] pub struct DockStack { id : SharedString, panels : Vec<SharedString>, active : Option<SharedString>, min_width : f32, min_height : f32, rail : f32, collapsed : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockStack::active",
      "name": "active",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn active (mut self, panel : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DockStack"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockStack::active_panel",
      "name": "active_panel",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn active_panel (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "DockStack"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockStack::collapsed",
      "name": "collapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn collapsed (mut self, collapsed : bool) -> Self",
      "cfg": [],
      "target": "DockStack"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockStack::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "DockStack"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockStack::is_collapsed",
      "name": "is_collapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_collapsed (& self) -> bool",
      "cfg": [],
      "target": "DockStack"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockStack::min",
      "name": "min",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn min (mut self, minimum : f32) -> Self",
      "cfg": [],
      "target": "DockStack"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockStack::min_height",
      "name": "min_height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn min_height (mut self, minimum : f32) -> Self",
      "cfg": [],
      "target": "DockStack"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockStack::min_width",
      "name": "min_width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn min_width (mut self, minimum : f32) -> Self",
      "cfg": [],
      "target": "DockStack"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockStack::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, panels : impl IntoIterator<Item = impl Into<SharedString>>,) -> Self",
      "cfg": [],
      "target": "DockStack"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockStack::panels",
      "name": "panels",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn panels (& self) -> & [SharedString]",
      "cfg": [],
      "target": "DockStack"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockStack::rail",
      "name": "rail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rail (mut self, extent : f32) -> Self",
      "cfg": [],
      "target": "DockStack"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTopology",
      "name": "DockTopology",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "A recursive arrangement of tab stacks.",
      "documentation": "A recursive arrangement of tab stacks.",
      "signature": "# [doc = \" A recursive arrangement of tab stacks.\"] # [derive (Debug, Clone, PartialEq)] pub enum DockTopology { Stack (DockStack), Split { id : SharedString, axis : SplitAxis, ratio : f32, start : Box<DockTopology>, end : Box<DockTopology>, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTopology::find_stack",
      "name": "find_stack",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn find_stack (& self, id : & str) -> Option<& DockStack>",
      "cfg": [],
      "target": "DockTopology"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTopology::from_records",
      "name": "from_records",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_records (records : & [DockRecord]) -> Result<Self, DockRecordError>",
      "cfg": [],
      "target": "DockTopology"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTopology::horizontal",
      "name": "horizontal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn horizontal (id : impl Into<SharedString>, ratio : f32, start : DockTopology, end : DockTopology,) -> Self",
      "cfg": [],
      "target": "DockTopology"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTopology::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "DockTopology"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTopology::restore_with_floating",
      "name": "restore_with_floating",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "Restore both surfaces atomically, validating identities across them and retaining caller z-order. Kit owns neither storage nor serialization.",
      "documentation": "Restore both surfaces atomically, validating identities across them and\nretaining caller z-order. Kit owns neither storage nor serialization.",
      "signature": "pub fn restore_with_floating (records : & [DockRecord], floating : & [FloatingDockRecord],) -> Result<(Self, Vec<FloatingDock>), DockRecordError>",
      "cfg": [],
      "target": "DockTopology"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTopology::split",
      "name": "split",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn split (id : impl Into<SharedString>, axis : SplitAxis, ratio : f32, start : DockTopology, end : DockTopology,) -> Self",
      "cfg": [],
      "target": "DockTopology"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTopology::split_layout",
      "name": "split_layout",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn split_layout (& self) -> SplitLayout",
      "cfg": [],
      "target": "DockTopology"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTopology::stack",
      "name": "stack",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn stack (id : impl Into<SharedString>, panels : impl IntoIterator<Item = impl Into<SharedString>>,) -> Self",
      "cfg": [],
      "target": "DockTopology"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTopology::stacks",
      "name": "stacks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn stacks (& self) -> Vec<& DockStack>",
      "cfg": [],
      "target": "DockTopology"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTopology::to_records",
      "name": "to_records",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "The topology flattened into plain records, parents before children.",
      "documentation": "The topology flattened into plain records, parents before children.",
      "signature": "pub fn to_records (& self) -> Vec<DockRecord>",
      "cfg": [],
      "target": "DockTopology"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTopology::vertical",
      "name": "vertical",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn vertical (id : impl Into<SharedString>, ratio : f32, start : DockTopology, end : DockTopology,) -> Self",
      "cfg": [],
      "target": "DockTopology"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTree",
      "name": "DockTree",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "Draws a recursive [`DockTopology`] without owning it.",
      "documentation": "Draws a recursive [`DockTopology`] without owning it.",
      "signature": "# [doc = \" Draws a recursive [`DockTopology`] without owning it.\"] # [derive (IntoElement)] pub struct DockTree { ident : Ident, topology : DockTopology, floating : Vec<FloatingDock>, panels : Vec<DockPanel>, disabled : bool, on_event : Option<EventHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTree::floating",
      "name": "floating",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "Floating stacks in back-to-front order, sharing panel and stack identity with the docked topology. Invalid identities are rejected atomically.",
      "documentation": "Floating stacks in back-to-front order, sharing panel and stack identity\nwith the docked topology. Invalid identities are rejected atomically.",
      "signature": "pub fn floating (mut self, tiles : impl IntoIterator<Item = FloatingDock>,) -> Result<Self, DockRecordError>",
      "cfg": [],
      "target": "DockTree"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTree::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, topology : DockTopology) -> Self",
      "cfg": [],
      "target": "DockTree"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTree::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (DockTreeEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DockTree"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTree::panel",
      "name": "panel",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn panel (mut self, panel : DockPanel) -> Self",
      "cfg": [],
      "target": "DockTree"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTree::panels",
      "name": "panels",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn panels (mut self, panels : impl IntoIterator<Item = DockPanel>) -> Self",
      "cfg": [],
      "target": "DockTree"
    },
    {
      "id": "gpui_kit::layout::dock_tree::DockTreeEvent",
      "name": "DockTreeEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "Caller-owned changes requested through [`DockTree`].",
      "documentation": "Caller-owned changes requested through [`DockTree`].",
      "signature": "# [doc = \" Caller-owned changes requested through [`DockTree`].\"] # [derive (Debug, Clone, PartialEq)] pub enum DockTreeEvent { # [doc = \" Request caller-controlled back-to-front reordering.\"] FloatingRaised { stack : SharedString, }, # [doc = \" Normalized geometry; the caller chooses whether to save live changes or\"] # [doc = \" only completed gestures. Keyboard adjustments finish immediately.\"] FloatingChanged { stack : SharedString, bounds : Bounds<f32>, finished : bool, }, # [doc = \" A gesture was interrupted, not completed. The caller may roll back its\"] # [doc = \" live geometry to its last persisted record.\"] FloatingCancelled { stack : SharedString, }, PanelSelected { stack : SharedString, panel : SharedString, }, PanelMoved { panel : SharedString, to_stack : SharedString, before : Option<SharedString>, }, PanelSplit { panel : SharedString, target_stack : SharedString, placement : DockPlacement, }, SplitResized { split : SharedString, ratio : f32, }, StackCollapsed { stack : SharedString, collapsed : bool, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::dock_tree::FloatingDock",
      "name": "FloatingDock",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "An in-surface floating stack. Bounds are fractions of the dock viewport, preserved across window-size changes. Tile order is caller-owned z-order. This does not create operating-system windows.",
      "documentation": "An in-surface floating stack. Bounds are fractions of the dock viewport,\npreserved across window-size changes. Tile order is caller-owned z-order.\nThis does not create operating-system windows.",
      "signature": "# [doc = \" An in-surface floating stack. Bounds are fractions of the dock viewport,\"] # [doc = \" preserved across window-size changes. Tile order is caller-owned z-order.\"] # [doc = \" This does not create operating-system windows.\"] # [derive (Debug, Clone, PartialEq)] pub struct FloatingDock { stack : DockStack, bounds : Bounds<f32>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::dock_tree::FloatingDock::bounds",
      "name": "bounds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bounds (& self) -> Bounds<f32>",
      "cfg": [],
      "target": "FloatingDock"
    },
    {
      "id": "gpui_kit::layout::dock_tree::FloatingDock::from_record",
      "name": "from_record",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_record (record : & FloatingDockRecord) -> Result<Self, DockRecordError>",
      "cfg": [],
      "target": "FloatingDock"
    },
    {
      "id": "gpui_kit::layout::dock_tree::FloatingDock::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (stack : DockStack, bounds : Bounds<f32>) -> Result<Self, DockRecordError>",
      "cfg": [],
      "target": "FloatingDock"
    },
    {
      "id": "gpui_kit::layout::dock_tree::FloatingDock::stack",
      "name": "stack",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn stack (& self) -> & DockStack",
      "cfg": [],
      "target": "FloatingDock"
    },
    {
      "id": "gpui_kit::layout::dock_tree::FloatingDock::to_record",
      "name": "to_record",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn to_record (& self) -> FloatingDockRecord",
      "cfg": [],
      "target": "FloatingDock"
    },
    {
      "id": "gpui_kit::layout::dock_tree::FloatingDockRecord",
      "name": "FloatingDockRecord",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::dock_tree",
      "path": "gpui_kit::layout::dock_tree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "Caller-persisted state. Storage and serialization remain host policy.",
      "documentation": "Caller-persisted state. Storage and serialization remain host policy.",
      "signature": "# [doc = \" Caller-persisted state. Storage and serialization remain host policy.\"] # [derive (Debug, Clone, PartialEq)] pub struct FloatingDockRecord { pub stack : DockRecord, pub bounds : Bounds<f32>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::grid::Breakpoint",
      "name": "Breakpoint",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "A theme-defined container width at which a grid may change arrangement.",
      "documentation": "A theme-defined container width at which a grid may change arrangement.",
      "signature": "# [doc = \" A theme-defined container width at which a grid may change arrangement.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum Breakpoint { Small, Medium, Large, ExtraLarge, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::grid::Container",
      "name": "Container",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "A centered, token-backed page container.",
      "documentation": "A centered, token-backed page container.",
      "signature": "# [doc = \" A centered, token-backed page container.\"] # [derive (IntoElement)] pub struct Container { ident : Ident, width : ContainerWidth, padding : Space, child : Option<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::grid::Container::child",
      "name": "child",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn child (mut self, child : impl IntoElement) -> Self",
      "cfg": [],
      "target": "Container"
    },
    {
      "id": "gpui_kit::layout::grid::Container::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Container"
    },
    {
      "id": "gpui_kit::layout::grid::Container::padding",
      "name": "padding",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn padding (mut self, padding : Space) -> Self",
      "cfg": [],
      "target": "Container"
    },
    {
      "id": "gpui_kit::layout::grid::Container::width",
      "name": "width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn width (mut self, width : ContainerWidth) -> Self",
      "cfg": [],
      "target": "Container"
    },
    {
      "id": "gpui_kit::layout::grid::ContainerWidth",
      "name": "ContainerWidth",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "The max-width and padding recipe used by page-level content.",
      "documentation": "The max-width and padding recipe used by page-level content.",
      "signature": "# [doc = \" The max-width and padding recipe used by page-level content.\"] # [derive (Debug, Clone, Copy, Default, PartialEq)] pub enum ContainerWidth { Full, # [default] Readable, Dialog, Custom (f32), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::grid::Grid",
      "name": "Grid",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "A measured, token-guttered grid that retains caller item order.",
      "documentation": "A measured, token-guttered grid that retains caller item order.",
      "signature": "# [doc = \" A measured, token-guttered grid that retains caller item order.\"] # [derive (IntoElement)] pub struct Grid { ident : Ident, items : Vec<GridItem>, columns : GridColumns, gap : Space, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::grid::Grid::columns",
      "name": "columns",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn columns (mut self, columns : u16) -> Self",
      "cfg": [],
      "target": "Grid"
    },
    {
      "id": "gpui_kit::layout::grid::Grid::columns_at",
      "name": "columns_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn columns_at (mut self, breakpoint : Breakpoint, columns : u16) -> Self",
      "cfg": [],
      "target": "Grid"
    },
    {
      "id": "gpui_kit::layout::grid::Grid::gap",
      "name": "gap",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn gap (mut self, gap : Space) -> Self",
      "cfg": [],
      "target": "Grid"
    },
    {
      "id": "gpui_kit::layout::grid::Grid::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn items (mut self, items : impl IntoIterator<Item = GridItem>) -> Self",
      "cfg": [],
      "target": "Grid"
    },
    {
      "id": "gpui_kit::layout::grid::Grid::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Grid"
    },
    {
      "id": "gpui_kit::layout::grid::GridColumns",
      "name": "GridColumns",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "Number of columns at the base width and at optional token breakpoints.",
      "documentation": "Number of columns at the base width and at optional token breakpoints.",
      "signature": "# [doc = \" Number of columns at the base width and at optional token breakpoints.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct GridColumns { base : u16, small : Option<u16>, medium : Option<u16>, large : Option<u16>, extra_large : Option<u16>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::grid::GridColumns::at",
      "name": "at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "Sets the column count at a theme-defined container breakpoint.",
      "documentation": "Sets the column count at a theme-defined container breakpoint.",
      "signature": "pub fn at (mut self, breakpoint : Breakpoint, columns : u16) -> Self",
      "cfg": [],
      "target": "GridColumns"
    },
    {
      "id": "gpui_kit::layout::grid::GridColumns::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "Starts a responsive column recipe with a base column count.",
      "documentation": "Starts a responsive column recipe with a base column count.",
      "signature": "pub fn new (base : u16) -> Self",
      "cfg": [],
      "target": "GridColumns"
    },
    {
      "id": "gpui_kit::layout::grid::GridItem",
      "name": "GridItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "One item in a declarative [`Grid`].",
      "documentation": "One item in a declarative [`Grid`].",
      "signature": "# [doc = \" One item in a declarative [`Grid`].\"] pub struct GridItem { pub id : SharedString, pub content : AnyElement, span : u16, small_span : Option<u16>, medium_span : Option<u16>, large_span : Option<u16>, extra_large_span : Option<u16>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::grid::GridItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "GridItem"
    },
    {
      "id": "gpui_kit::layout::grid::GridItem::span",
      "name": "span",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn span (mut self, span : u16) -> Self",
      "cfg": [],
      "target": "GridItem"
    },
    {
      "id": "gpui_kit::layout::grid::GridItem::span_at",
      "name": "span_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::grid",
      "path": "gpui_kit::layout::grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn span_at (mut self, breakpoint : Breakpoint, span : u16) -> Self",
      "cfg": [],
      "target": "GridItem"
    },
    {
      "id": "gpui_kit::layout::page::PageLayout",
      "name": "PageLayout",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::page",
      "path": "gpui_kit::layout::page",
      "source": "crates/gpui-kit/src/layout/page.rs",
      "summary": "A full-height page with fixed header/footer and a bounded body. Insets are residual obscuration in this viewport's logical pixels, not physical screen coordinates. A keyboard that already resized the viewport has zero residual overlap; floating keyboards must not be approximated by edge padding.",
      "documentation": "A full-height page with fixed header/footer and a bounded body. Insets are\nresidual obscuration in this viewport's logical pixels, not physical screen\ncoordinates. A keyboard that already resized the viewport has zero residual\noverlap; floating keyboards must not be approximated by edge padding.",
      "signature": "# [doc = \" A full-height page with fixed header/footer and a bounded body. Insets are\"] # [doc = \" residual obscuration in this viewport's logical pixels, not physical screen\"] # [doc = \" coordinates. A keyboard that already resized the viewport has zero residual\"] # [doc = \" overlap; floating keyboards must not be approximated by edge padding.\"] # [derive (IntoElement)] pub struct PageLayout { ident : Ident, insets : Option<WindowInsets>, header : Option<AnyElement>, footer : Option<AnyElement>, body : AnyElement, hide_footer : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::page::PageLayout::footer",
      "name": "footer",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::page",
      "path": "gpui_kit::layout::page",
      "source": "crates/gpui-kit/src/layout/page.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn footer (mut self, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "PageLayout"
    },
    {
      "id": "gpui_kit::layout::page::PageLayout::header",
      "name": "header",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::page",
      "path": "gpui_kit::layout::page",
      "source": "crates/gpui-kit/src/layout/page.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn header (mut self, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "PageLayout"
    },
    {
      "id": "gpui_kit::layout::page::PageLayout::hide_footer",
      "name": "hide_footer",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::page",
      "path": "gpui_kit::layout::page",
      "source": "crates/gpui-kit/src/layout/page.rs",
      "summary": "Explicit host policy, including when a resized keyboard leaves no IME overlap. Hidden footer controls are unmounted, not merely transparent.",
      "documentation": "Explicit host policy, including when a resized keyboard leaves no IME\noverlap. Hidden footer controls are unmounted, not merely transparent.",
      "signature": "pub fn hide_footer (mut self, hidden : bool) -> Self",
      "cfg": [],
      "target": "PageLayout"
    },
    {
      "id": "gpui_kit::layout::page::PageLayout::insets",
      "name": "insets",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::page",
      "path": "gpui_kit::layout::page",
      "source": "crates/gpui-kit/src/layout/page.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn insets (mut self, insets : WindowInsets) -> Self",
      "cfg": [],
      "target": "PageLayout"
    },
    {
      "id": "gpui_kit::layout::page::PageLayout::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::page",
      "path": "gpui_kit::layout::page",
      "source": "crates/gpui-kit/src/layout/page.rs",
      "summary": "Defaults to the window's current system insets (zero on desktop). Nested pages should override with zero after an ancestor consumed them.",
      "documentation": "Defaults to the window's current system insets (zero on desktop).\nNested pages should override with zero after an ancestor consumed them.",
      "signature": "pub fn new (ident : impl Into<Ident>, body : impl IntoElement) -> Self",
      "cfg": [],
      "target": "PageLayout"
    },
    {
      "id": "gpui_kit::layout::reexport-1",
      "name": "app_bar :: AppBar",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use app_bar::AppBar;",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-10",
      "name": "scroll_fade :: { FadeEdges , ScrollFade }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use scroll_fade::{ FadeEdges, ScrollFade };",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-11",
      "name": "split :: { SplitAxis , SplitPane , SplitSide }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use split::{ SplitAxis, SplitPane, SplitSide };",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-12",
      "name": "status_bar :: { StatusBar , StatusGroup , StatusItem }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use status_bar::{ StatusBar, StatusGroup, StatusItem };",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-13",
      "name": "titlebar :: { DesktopTitlebar , DesktopTitlebarEvent }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use titlebar::{ DesktopTitlebar, DesktopTitlebarEvent };",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-14",
      "name": "toolbar :: { Toolbar , ToolbarItem }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use toolbar::{ Toolbar, ToolbarItem };",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-15",
      "name": "tree :: { SplitChange , SplitKind , SplitLayout , SplitPaneSpec , SplitRecord , SplitRecordError , SplitTree , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use tree::{ SplitChange, SplitKind, SplitLayout, SplitPaneSpec, SplitRecord, SplitRecordError, SplitTree, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-2",
      "name": "aspect_ratio :: { AspectFit , AspectRatio }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use aspect_ratio::{ AspectFit, AspectRatio };",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-3",
      "name": "dock :: { Dock , DockEvent , DockPanel , DockRegion }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use dock::{ Dock, DockEvent, DockPanel, DockRegion };",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-4",
      "name": "dock_tree :: { DockPlacement , DockRecord , DockRecordError , DockRecordKind , DockStack , DockTopology , DockTree , DockTreeEvent , FloatingDock , FloatingDockRecord , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use dock_tree::{ DockPlacement, DockRecord, DockRecordError, DockRecordKind, DockStack, DockTopology, DockTree, DockTreeEvent, FloatingDock, FloatingDockRecord, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-5",
      "name": "grid :: { Breakpoint , Container , ContainerWidth , Grid , GridColumns , GridItem }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use grid::{ Breakpoint, Container, ContainerWidth, Grid, GridColumns, GridItem };",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-6",
      "name": "page :: PageLayout",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use page::PageLayout;",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-7",
      "name": "responsive :: { ContainerSize , Responsive }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use responsive::{ ContainerSize, Responsive };",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-8",
      "name": "scroll :: { ScrollArea , ScrollAxis , scroll_offset , scroll_to }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use scroll::{ ScrollArea, ScrollAxis, scroll_offset, scroll_to };",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::reexport-9",
      "name": "scroll_edge :: { ScrollEdgeEffect , ScrollEdgeKind }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout",
      "path": "gpui_kit::layout",
      "source": "crates/gpui-kit/src/layout/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use scroll_edge::{ ScrollEdgeEffect, ScrollEdgeKind };",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::responsive::ContainerSize",
      "name": "ContainerSize",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::responsive",
      "path": "gpui_kit::layout::responsive",
      "source": "crates/gpui-kit/src/layout/responsive.rs",
      "summary": "The space a container was given on the previous frame.",
      "documentation": "The space a container was given on the previous frame.",
      "signature": "# [doc = \" The space a container was given on the previous frame.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub enum ContainerSize { # [doc = \" This container has not been laid out yet. Exactly one frame is spent\"] # [doc = \" here, and the frame that resolves it has already been requested.\"] Unmeasured, # [doc = \" Logical pixels, as GPUI laid the container out last frame.\"] Measured { width : f32, height : f32 }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::responsive::ContainerSize::at_least",
      "name": "at_least",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::responsive",
      "path": "gpui_kit::layout::responsive",
      "source": "crates/gpui-kit/src/layout/responsive.rs",
      "summary": "Whether the container is *known* to be at least this wide.",
      "documentation": "Whether the container is *known* to be at least this wide.\n\nAn unmeasured container answers `false`, which is the conservative\ndirection: it shows the arrangement that fits in less room for the one\nframe before the width is known, rather than the one that might not fit\nat all.",
      "signature": "pub fn at_least (self, width : f32) -> bool",
      "cfg": [],
      "target": "ContainerSize"
    },
    {
      "id": "gpui_kit::layout::responsive::ContainerSize::height",
      "name": "height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::responsive",
      "path": "gpui_kit::layout::responsive",
      "source": "crates/gpui-kit/src/layout/responsive.rs",
      "summary": "The measured height, or `None` on the frame before there is one.",
      "documentation": "The measured height, or `None` on the frame before there is one.",
      "signature": "pub fn height (self) -> Option<f32>",
      "cfg": [],
      "target": "ContainerSize"
    },
    {
      "id": "gpui_kit::layout::responsive::ContainerSize::narrower_than",
      "name": "narrower_than",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::responsive",
      "path": "gpui_kit::layout::responsive",
      "source": "crates/gpui-kit/src/layout/responsive.rs",
      "summary": "Whether the container is known to be narrower than this.",
      "documentation": "Whether the container is known to be narrower than this.\n\nAn unmeasured container answers `false` here too, so `at_least` and\n`narrower_than` are both false while nothing is known. They are not\neach other's negation on purpose: two questions that disagree about an\nunmeasured container would let a caller derive a width it does not have.",
      "signature": "pub fn narrower_than (self, width : f32) -> bool",
      "cfg": [],
      "target": "ContainerSize"
    },
    {
      "id": "gpui_kit::layout::responsive::ContainerSize::width",
      "name": "width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::responsive",
      "path": "gpui_kit::layout::responsive",
      "source": "crates/gpui-kit/src/layout/responsive.rs",
      "summary": "The measured width, or `None` on the frame before there is one.",
      "documentation": "The measured width, or `None` on the frame before there is one.",
      "signature": "pub fn width (self) -> Option<f32>",
      "cfg": [],
      "target": "ContainerSize"
    },
    {
      "id": "gpui_kit::layout::responsive::Responsive",
      "name": "Responsive",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::responsive",
      "path": "gpui_kit::layout::responsive",
      "source": "crates/gpui-kit/src/layout/responsive.rs",
      "summary": "A container that builds its content from its own measured width.",
      "documentation": "A container that builds its content from its own measured width.\n\n```ignore\nResponsive::new(\"settings.body\", |size, _, _| {\nif size.at_least(720.0) {\ntwo_columns().into_any_element()\n} else {\none_column().into_any_element()\n}\n})\n```",
      "signature": "# [doc = \" A container that builds its content from its own measured width.\"] # [doc = \"\"] # [doc = \" ```ignore\"] # [doc = \" Responsive::new(\\\"settings.body\\\", |size, _, _| {\"] # [doc = \" if size.at_least(720.0) {\"] # [doc = \" two_columns().into_any_element()\"] # [doc = \" } else {\"] # [doc = \" one_column().into_any_element()\"] # [doc = \" }\"] # [doc = \" })\"] # [doc = \" ```\"] # [derive (IntoElement)] pub struct Responsive { ident : Ident, build : Build, fill : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::responsive::Responsive::fill",
      "name": "fill",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::responsive",
      "path": "gpui_kit::layout::responsive",
      "source": "crates/gpui-kit/src/layout/responsive.rs",
      "summary": "Fill the height the parent assigned as well as its width.",
      "documentation": "Fill the height the parent assigned as well as its width.\n\nThe default keeps content-height behavior for document layouts. Use\nthis for bounded workspaces whose responsive child contains absolute\npanes and therefore contributes no intrinsic height of its own.",
      "signature": "pub fn fill (mut self) -> Self",
      "cfg": [],
      "target": "Responsive"
    },
    {
      "id": "gpui_kit::layout::responsive::Responsive::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::responsive",
      "path": "gpui_kit::layout::responsive",
      "source": "crates/gpui-kit/src/layout/responsive.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, build : impl FnOnce (ContainerSize, & mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "Responsive"
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollArea",
      "name": "ScrollArea",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "A scrollable region.",
      "documentation": "A scrollable region.",
      "signature": "# [doc = \" A scrollable region.\"] # [derive (IntoElement)] pub struct ScrollArea { ident : Ident, axis : ScrollAxis, label : Option<SharedString>, width : Option<f32>, height : Option<f32>, # [doc = \" Whether the area is as tall as what it holds instead of as tall as it\"] # [doc = \" is offered.\"] fit_height : bool, # [doc = \" Something that already scrolls, whose position this area draws rather\"] # [doc = \" than scrolling its own content.\"] target : Option<Rc<dyn ScrollTarget>>, content : Option<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollArea::axis",
      "name": "axis",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn axis (mut self, axis : ScrollAxis) -> Self",
      "cfg": [],
      "target": "ScrollArea"
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollArea::both",
      "name": "both",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn both (self) -> Self",
      "cfg": [],
      "target": "ScrollArea"
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollArea::bound_to",
      "name": "bound_to",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "Draws this area's scrollbar for something that scrolls itself.",
      "documentation": "Draws this area's scrollbar for something that scrolls itself.\n\nA virtualized list holds its own scroll position, because it decides\nwhich rows exist from where it has been scrolled to. Wrapping one in an\noverflowing container gives it a second, disagreeing position and a\nthumb sized from a content height nobody has measured. Bound to the\nlist's own [`ScrollTarget`], the area stops scrolling and only reports:\nthe numbers on the gutter, and in the semantic tree, are the list's.",
      "signature": "pub fn bound_to (mut self, target : impl ScrollTarget + 'static) -> Self",
      "cfg": [],
      "target": "ScrollArea"
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollArea::child",
      "name": "child",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn child (mut self, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "ScrollArea"
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollArea::fit_height",
      "name": "fit_height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "Makes the area as tall as its content rather than as tall as the space around it.",
      "documentation": "Makes the area as tall as its content rather than as tall as the space\naround it.\n\nBy default the area fills the height it is offered, which is what a\npane wants. A parent that states no height offers none, and the area\nthen has nowhere to draw: it disappears, taking its content with it.\nA caller placing one in a column that grows with its children says so\nhere.",
      "signature": "pub fn fit_height (mut self) -> Self",
      "cfg": [],
      "target": "ScrollArea"
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollArea::height",
      "name": "height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn height (mut self, height : f32) -> Self",
      "cfg": [],
      "target": "ScrollArea"
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollArea::horizontal",
      "name": "horizontal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn horizontal (self) -> Self",
      "cfg": [],
      "target": "ScrollArea"
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollArea::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "What the region is called, for a reader that has only the tree.",
      "documentation": "What the region is called, for a reader that has only the tree.",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ScrollArea"
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollArea::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "ScrollArea"
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollArea::vertical",
      "name": "vertical",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn vertical (self) -> Self",
      "cfg": [],
      "target": "ScrollArea"
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollArea::width",
      "name": "width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "Bounds the viewport. Without a bound on the scrolled axis the region grows to its content and never scrolls at all.",
      "documentation": "Bounds the viewport. Without a bound on the scrolled axis the region\ngrows to its content and never scrolls at all.",
      "signature": "pub fn width (mut self, width : f32) -> Self",
      "cfg": [],
      "target": "ScrollArea"
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollAxis",
      "name": "ScrollAxis",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "Which way the content may be scrolled.",
      "documentation": "Which way the content may be scrolled.",
      "signature": "# [doc = \" Which way the content may be scrolled.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum ScrollAxis { # [default] Vertical, Horizontal, Both, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollAxis::has_horizontal",
      "name": "has_horizontal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn has_horizontal (self) -> bool",
      "cfg": [],
      "target": "ScrollAxis"
    },
    {
      "id": "gpui_kit::layout::scroll::ScrollAxis::has_vertical",
      "name": "has_vertical",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn has_vertical (self) -> bool",
      "cfg": [],
      "target": "ScrollAxis"
    },
    {
      "id": "gpui_kit::layout::scroll::scroll_offset",
      "name": "scroll_offset",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "How far the region with this identity has been scrolled, in pixels down and across from the start of its content.",
      "documentation": "How far the region with this identity has been scrolled, in pixels down\nand across from the start of its content.\n\nThis is what a scroll-linked value reads: pair it with\n[`ScrollLink`] to collapse a header or fade a\nheading as the content moves under it. A region that has never rendered\nreports zero, which is where it will be when it does.",
      "signature": "pub fn scroll_offset (ident : impl Into<Ident>, window : & Window, cx : & mut App) -> Point<Pixels>",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::scroll::scroll_to",
      "name": "scroll_to",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll",
      "path": "gpui_kit::layout::scroll",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "Puts the region with this identity at `offset`, measured the same way [`scroll_offset`] reports it.",
      "documentation": "Puts the region with this identity at `offset`, measured the same way\n[`scroll_offset`] reports it.\n\nThe counterpart to reading, for a host restoring where the user was: a\nreopened document belongs where they left it, not at the top. It takes\neffect on the next frame, and a region that has never rendered remembers\nthe position until it does.",
      "signature": "pub fn scroll_to (ident : impl Into<Ident>, offset : Point<Pixels>, window : & Window, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeEffect",
      "name": "ScrollEdgeEffect",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "A visual ramp at the edges where floating glass overlaps scrolling content.",
      "documentation": "A visual ramp at the edges where floating glass overlaps scrolling content.",
      "signature": "# [doc = \" A visual ramp at the edges where floating glass overlaps scrolling content.\"] # [derive (IntoElement)] pub struct ScrollEdgeEffect { ident : Ident, edges : FadeEdges, kind : ScrollEdgeKind, band : Option<f32>, blur : Option<f32>, child : Option<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeEffect::band",
      "name": "band",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "How far the ramp reaches, overriding `effect.scrollEdgeBand`.",
      "documentation": "How far the ramp reaches, overriding `effect.scrollEdgeBand`.",
      "signature": "pub fn band (mut self, band : f32) -> Self",
      "cfg": [],
      "target": "ScrollEdgeEffect"
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeEffect::blur",
      "name": "blur",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "How far the soft ramp scatters, overriding `effect.scrollEdgeBlur`.",
      "documentation": "How far the soft ramp scatters, overriding `effect.scrollEdgeBlur`.",
      "signature": "pub fn blur (mut self, blur : f32) -> Self",
      "cfg": [],
      "target": "ScrollEdgeEffect"
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeEffect::bottom",
      "name": "bottom",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "Whether the bottom edge ramps.",
      "documentation": "Whether the bottom edge ramps.",
      "signature": "pub fn bottom (mut self, fade : bool) -> Self",
      "cfg": [],
      "target": "ScrollEdgeEffect"
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeEffect::child",
      "name": "child",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "Content the ramp is painted over.",
      "documentation": "Content the ramp is painted over.",
      "signature": "pub fn child (mut self, child : impl IntoElement) -> Self",
      "cfg": [],
      "target": "ScrollEdgeEffect"
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeEffect::edges",
      "name": "edges",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "Which edges hide content under floating chrome.",
      "documentation": "Which edges hide content under floating chrome.",
      "signature": "pub fn edges (mut self, edges : FadeEdges) -> Self",
      "cfg": [],
      "target": "ScrollEdgeEffect"
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeEffect::hard",
      "name": "hard",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "Opaque backing, for reduced transparency.",
      "documentation": "Opaque backing, for reduced transparency.",
      "signature": "pub fn hard (self) -> Self",
      "cfg": [],
      "target": "ScrollEdgeEffect"
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeEffect::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "Soft scatters; Hard is an opaque backing.",
      "documentation": "Soft scatters; Hard is an opaque backing.",
      "signature": "pub fn kind (mut self, kind : ScrollEdgeKind) -> Self",
      "cfg": [],
      "target": "ScrollEdgeEffect"
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeEffect::left",
      "name": "left",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "Whether the left edge ramps.",
      "documentation": "Whether the left edge ramps.",
      "signature": "pub fn left (mut self, fade : bool) -> Self",
      "cfg": [],
      "target": "ScrollEdgeEffect"
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeEffect::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "A ramp that paints no edge until the caller names one.",
      "documentation": "A ramp that paints no edge until the caller names one.",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "ScrollEdgeEffect"
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeEffect::right",
      "name": "right",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "Whether the right edge ramps.",
      "documentation": "Whether the right edge ramps.",
      "signature": "pub fn right (mut self, fade : bool) -> Self",
      "cfg": [],
      "target": "ScrollEdgeEffect"
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeEffect::soft",
      "name": "soft",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "Progressive blur and fade.",
      "documentation": "Progressive blur and fade.",
      "signature": "pub fn soft (self) -> Self",
      "cfg": [],
      "target": "ScrollEdgeEffect"
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeEffect::top",
      "name": "top",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "Whether the top edge ramps.",
      "documentation": "Whether the top edge ramps.",
      "signature": "pub fn top (mut self, fade : bool) -> Self",
      "cfg": [],
      "target": "ScrollEdgeEffect"
    },
    {
      "id": "gpui_kit::layout::scroll_edge::ScrollEdgeKind",
      "name": "ScrollEdgeKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_edge",
      "path": "gpui_kit::layout::scroll_edge",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "How a scroll-edge ramp separates floating chrome from the content under it.",
      "documentation": "How a scroll-edge ramp separates floating chrome from the content under it.",
      "signature": "# [doc = \" How a scroll-edge ramp separates floating chrome from the content under it.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum ScrollEdgeKind { # [doc = \" Progressive blur and fade into the content.\"] # [default] Soft, # [doc = \" An opaque backing, used when transparency is reduced.\"] Hard, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::scroll_fade::FadeEdges",
      "name": "FadeEdges",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "Which edges of a region its content fades towards.",
      "documentation": "Which edges of a region its content fades towards.",
      "signature": "# [doc = \" Which edges of a region its content fades towards.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub struct FadeEdges { pub top : bool, pub bottom : bool, pub left : bool, pub right : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::scroll_fade::FadeEdges::any",
      "name": "any",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "Whether any edge fades at all. None of them is a region that says nothing is hidden, which is a fade that must not be painted.",
      "documentation": "Whether any edge fades at all. None of them is a region that says\nnothing is hidden, which is a fade that must not be painted.",
      "signature": "pub fn any (self) -> bool",
      "cfg": [],
      "target": "FadeEdges"
    },
    {
      "id": "gpui_kit::layout::scroll_fade::FadeEdges::horizontal",
      "name": "horizontal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "Both ends of a row.",
      "documentation": "Both ends of a row.",
      "signature": "pub fn horizontal () -> Self",
      "cfg": [],
      "target": "FadeEdges"
    },
    {
      "id": "gpui_kit::layout::scroll_fade::FadeEdges::names",
      "name": "names",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "The edges as a stable list, for a reader that has only the tree.",
      "documentation": "The edges as a stable list, for a reader that has only the tree.",
      "signature": "pub fn names (self) -> Vec<& 'static str>",
      "cfg": [],
      "target": "FadeEdges"
    },
    {
      "id": "gpui_kit::layout::scroll_fade::FadeEdges::vertical",
      "name": "vertical",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "Both ends of a column.",
      "documentation": "Both ends of a column.",
      "signature": "pub fn vertical () -> Self",
      "cfg": [],
      "target": "FadeEdges"
    },
    {
      "id": "gpui_kit::layout::scroll_fade::ScrollFade",
      "name": "ScrollFade",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "A region whose content fades towards the edges it is scrolled past.",
      "documentation": "A region whose content fades towards the edges it is scrolled past.",
      "signature": "# [doc = \" A region whose content fades towards the edges it is scrolled past.\"] # [derive (IntoElement)] pub struct ScrollFade { ident : Ident, edges : FadeEdges, band : Option<f32>, # [doc = \" Whether the region is as tall as what it holds instead of as tall as\"] # [doc = \" the space it is offered.\"] fit_height : bool, # [doc = \" Whether this region is one a reader can name. A fade a component draws\"] # [doc = \" inside itself is not: the component is the region, and a second node\"] # [doc = \" under the same identity would answer for it.\"] published : bool, child : Option<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::scroll_fade::ScrollFade::band",
      "name": "band",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "How far the ramp reaches inside each active edge, in pixels, when `effect.edgeFadeBand` is not what this region wants.",
      "documentation": "How far the ramp reaches inside each active edge, in pixels, when\n`effect.edgeFadeBand` is not what this region wants.",
      "signature": "pub fn band (mut self, band : f32) -> Self",
      "cfg": [],
      "target": "ScrollFade"
    },
    {
      "id": "gpui_kit::layout::scroll_fade::ScrollFade::bottom",
      "name": "bottom",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bottom (mut self, fade : bool) -> Self",
      "cfg": [],
      "target": "ScrollFade"
    },
    {
      "id": "gpui_kit::layout::scroll_fade::ScrollFade::child",
      "name": "child",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn child (mut self, child : impl IntoElement) -> Self",
      "cfg": [],
      "target": "ScrollFade"
    },
    {
      "id": "gpui_kit::layout::scroll_fade::ScrollFade::edges",
      "name": "edges",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn edges (mut self, edges : FadeEdges) -> Self",
      "cfg": [],
      "target": "ScrollFade"
    },
    {
      "id": "gpui_kit::layout::scroll_fade::ScrollFade::fit_height",
      "name": "fit_height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "Makes the region as tall as its content rather than as tall as the space around it, which is what a caller who already bounded the scroll area inside wants. This follows [`ScrollArea::fit_height`](crate::layout::ScrollArea::fit_height): a region that fills a height nobody offered has nowhere to draw, and takes its content with it.",
      "documentation": "Makes the region as tall as its content rather than as tall as the\nspace around it, which is what a caller who already bounded the scroll\narea inside wants. This follows\n[`ScrollArea::fit_height`](crate::layout::ScrollArea::fit_height): a\nregion that fills a height nobody offered has nowhere to draw, and\ntakes its content with it.",
      "signature": "pub fn fit_height (mut self) -> Self",
      "cfg": [],
      "target": "ScrollFade"
    },
    {
      "id": "gpui_kit::layout::scroll_fade::ScrollFade::left",
      "name": "left",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn left (mut self, fade : bool) -> Self",
      "cfg": [],
      "target": "ScrollFade"
    },
    {
      "id": "gpui_kit::layout::scroll_fade::ScrollFade::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "A region that fades at no edge until the caller says which ones hide something.",
      "documentation": "A region that fades at no edge until the caller says which ones hide\nsomething.",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "ScrollFade"
    },
    {
      "id": "gpui_kit::layout::scroll_fade::ScrollFade::right",
      "name": "right",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn right (mut self, fade : bool) -> Self",
      "cfg": [],
      "target": "ScrollFade"
    },
    {
      "id": "gpui_kit::layout::scroll_fade::ScrollFade::top",
      "name": "top",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::scroll_fade",
      "path": "gpui_kit::layout::scroll_fade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn top (mut self, fade : bool) -> Self",
      "cfg": [],
      "target": "ScrollFade"
    },
    {
      "id": "gpui_kit::layout::split::SplitAxis",
      "name": "SplitAxis",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "Which way the two panes are laid out.",
      "documentation": "Which way the two panes are laid out.",
      "signature": "# [doc = \" Which way the two panes are laid out.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum SplitAxis { # [doc = \" Side by side, with a vertical divider.\"] # [default] Horizontal, # [doc = \" Stacked, with a horizontal divider.\"] Vertical, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::split::SplitPane",
      "name": "SplitPane",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "Two panes separated by a divider.",
      "documentation": "Two panes separated by a divider.",
      "signature": "# [doc = \" Two panes separated by a divider.\"] # [derive (IntoElement)] pub struct SplitPane { ident : Ident, axis : SplitAxis, ratio : f32, min_start : f32, min_end : f32, step : f32, collapsible : bool, handle_label : Option<SharedString>, start : Option<AnyElement>, end : Option<AnyElement>, disabled : bool, on_resize : Option<ResizeHandler>, on_collapse : Option<CollapseHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::split::SplitPane::axis",
      "name": "axis",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn axis (mut self, axis : SplitAxis) -> Self",
      "cfg": [],
      "target": "SplitPane"
    },
    {
      "id": "gpui_kit::layout::split::SplitPane::collapsible",
      "name": "collapsible",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "Whether a double click on the divider reports a collapse.",
      "documentation": "Whether a double click on the divider reports a collapse.",
      "signature": "pub fn collapsible (mut self, collapsible : bool) -> Self",
      "cfg": [],
      "target": "SplitPane"
    },
    {
      "id": "gpui_kit::layout::split::SplitPane::end",
      "name": "end",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn end (mut self, pane : impl IntoElement) -> Self",
      "cfg": [],
      "target": "SplitPane"
    },
    {
      "id": "gpui_kit::layout::split::SplitPane::handle_label",
      "name": "handle_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "What the divider is called, for a reader that has only the tree.",
      "documentation": "What the divider is called, for a reader that has only the tree.",
      "signature": "pub fn handle_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SplitPane"
    },
    {
      "id": "gpui_kit::layout::split::SplitPane::horizontal",
      "name": "horizontal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn horizontal (self) -> Self",
      "cfg": [],
      "target": "SplitPane"
    },
    {
      "id": "gpui_kit::layout::split::SplitPane::min_sizes",
      "name": "min_sizes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "The smallest each pane may be dragged to, in pixels.",
      "documentation": "The smallest each pane may be dragged to, in pixels.",
      "signature": "pub fn min_sizes (mut self, start : f32, end : f32) -> Self",
      "cfg": [],
      "target": "SplitPane"
    },
    {
      "id": "gpui_kit::layout::split::SplitPane::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "SplitPane"
    },
    {
      "id": "gpui_kit::layout::split::SplitPane::on_collapse",
      "name": "on_collapse",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "Reports the pane a double click on the divider asked to collapse.",
      "documentation": "Reports the pane a double click on the divider asked to collapse.",
      "signature": "pub fn on_collapse (mut self, handler : impl Fn (SplitSide, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "SplitPane"
    },
    {
      "id": "gpui_kit::layout::split::SplitPane::on_resize",
      "name": "on_resize",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_resize (mut self, handler : impl Fn (f32, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "SplitPane"
    },
    {
      "id": "gpui_kit::layout::split::SplitPane::ratio",
      "name": "ratio",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "How much of the split the first pane takes, from 0 to 1.",
      "documentation": "How much of the split the first pane takes, from 0 to 1.",
      "signature": "pub fn ratio (mut self, ratio : f32) -> Self",
      "cfg": [],
      "target": "SplitPane"
    },
    {
      "id": "gpui_kit::layout::split::SplitPane::start",
      "name": "start",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn start (mut self, pane : impl IntoElement) -> Self",
      "cfg": [],
      "target": "SplitPane"
    },
    {
      "id": "gpui_kit::layout::split::SplitPane::step",
      "name": "step",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "How far one arrow key moves the divider, in pixels.",
      "documentation": "How far one arrow key moves the divider, in pixels.",
      "signature": "pub fn step (mut self, step : f32) -> Self",
      "cfg": [],
      "target": "SplitPane"
    },
    {
      "id": "gpui_kit::layout::split::SplitPane::vertical",
      "name": "vertical",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn vertical (self) -> Self",
      "cfg": [],
      "target": "SplitPane"
    },
    {
      "id": "gpui_kit::layout::split::SplitSide",
      "name": "SplitSide",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "One of the two panes.",
      "documentation": "One of the two panes.",
      "signature": "# [doc = \" One of the two panes.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum SplitSide { # [doc = \" Left in a horizontal split, top in a vertical one.\"] Start, # [doc = \" Right in a horizontal split, bottom in a vertical one.\"] End, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::split::SplitSide::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::split",
      "path": "gpui_kit::layout::split",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "SplitSide"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusBar",
      "name": "StatusBar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "The strip along the bottom of a window.",
      "documentation": "The strip along the bottom of a window.",
      "signature": "# [doc = \" The strip along the bottom of a window.\"] # [derive (IntoElement)] pub struct StatusBar { ident : Ident, label : Option<SharedString>, groups : [Vec<StatusItem>; 3], disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusBar::centre",
      "name": "centre",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn centre (self, items : impl IntoIterator<Item = StatusItem>) -> Self",
      "cfg": [],
      "target": "StatusBar"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusBar::end",
      "name": "end",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn end (self, items : impl IntoIterator<Item = StatusItem>) -> Self",
      "cfg": [],
      "target": "StatusBar"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusBar::height",
      "name": "height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "The vertical space this bar reserves in its host shell.",
      "documentation": "The vertical space this bar reserves in its host shell.",
      "signature": "pub fn height () -> gpui::Pixels",
      "cfg": [],
      "target": "StatusBar"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusBar::item",
      "name": "item",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn item (mut self, group : StatusGroup, item : StatusItem) -> Self",
      "cfg": [],
      "target": "StatusBar"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusBar::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn items (mut self, group : StatusGroup, items : impl IntoIterator<Item = StatusItem>,) -> Self",
      "cfg": [],
      "target": "StatusBar"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusBar::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "What the strip is, for a reader that has only the tree.",
      "documentation": "What the strip is, for a reader that has only the tree.",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "StatusBar"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusBar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "StatusBar"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusBar::start",
      "name": "start",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn start (self, items : impl IntoIterator<Item = StatusItem>) -> Self",
      "cfg": [],
      "target": "StatusBar"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusGroup",
      "name": "StatusGroup",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "Which group an item sits in.",
      "documentation": "Which group an item sits in.",
      "signature": "# [doc = \" Which group an item sits in.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum StatusGroup { Start, Centre, End, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusGroup::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "StatusGroup"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem",
      "name": "StatusItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "One thing the bar says.",
      "documentation": "One thing the bar says.",
      "signature": "# [doc = \" One thing the bar says.\"] pub struct StatusItem { id : SharedString, label : SharedString, content : Content, icon : Option<Icon>, # [doc = \" The name of the state the host gave this item, if it gave one.\"] state : Option<SharedString>, stale : bool, disabled : bool, on_click : Option<ClickHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "A control. Without `on_click` it installs no handler and is refused.",
      "documentation": "A control. Without `on_click` it installs no handler and is refused.",
      "signature": "pub fn action (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::count",
      "name": "count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn count (mut self, done : usize, total : usize) -> Self",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::element",
      "name": "element",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "Whatever the caller wants in the strip, usually a `Popover` or a `Menu` that opens from it. The element publishes its own identities.",
      "documentation": "Whatever the caller wants in the strip, usually a `Popover` or a `Menu`\nthat opens from it. The element publishes its own identities.",
      "signature": "pub fn element (id : impl Into<SharedString>, label : impl Into<SharedString>, element : impl IntoElement,) -> Self",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::fraction",
      "name": "fraction",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn fraction (mut self, fraction : f32) -> Self",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, glyph : Icon) -> Self",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::is_stale",
      "name": "is_stale",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_stale (& self) -> bool",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::on_click",
      "name": "on_click",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_click (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::progress",
      "name": "progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "A ring. Without a fraction or a count the extent is unknown, and is drawn as unknown rather than as a ring that happens to be part full.",
      "documentation": "A ring. Without a fraction or a count the extent is unknown, and is\ndrawn as unknown rather than as a ring that happens to be part full.",
      "signature": "pub fn progress (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::stale",
      "name": "stale",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "Marks the text as the last verified value rather than the current one.",
      "documentation": "Marks the text as the last verified value rather than the current one.",
      "signature": "pub fn stale (mut self, stale : bool) -> Self",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "A dot and words. The tone is the host's judgement, never the bar's.",
      "documentation": "A dot and words. The tone is the host's judgement, never the bar's.",
      "signature": "pub fn state (id : impl Into<SharedString>, label : impl Into<SharedString>, tone : Tone) -> Self",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::state_name",
      "name": "state_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "The name of the state the host says this item is in. Publishing it is how a test reads what the host claimed rather than what was painted.",
      "documentation": "The name of the state the host says this item is in. Publishing it is\nhow a test reads what the host claimed rather than what was painted.",
      "signature": "pub fn state_name (mut self, state : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::status_bar::StatusItem::tracking",
      "name": "tracking",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::status_bar",
      "path": "gpui_kit::layout::status_bar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "Takes the text and the staleness from a value the host is refreshing.",
      "documentation": "Takes the text and the staleness from a value the host is refreshing.\n\nA refresh that failed keeps the last verified text on screen and marks\nit stale; a value the host never had shows the item's own label.",
      "signature": "pub fn tracking<E> (mut self, value : & AsyncValue<SharedString, E>) -> Self",
      "cfg": [],
      "target": "StatusItem"
    },
    {
      "id": "gpui_kit::layout::titlebar::DesktopTitlebar",
      "name": "DesktopTitlebar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::titlebar",
      "path": "gpui_kit::layout::titlebar",
      "source": "crates/gpui-kit/src/layout/titlebar.rs",
      "summary": "A client-rendered desktop titlebar with native window-control hit testing.",
      "documentation": "A client-rendered desktop titlebar with native window-control hit testing.",
      "signature": "# [doc = \" A client-rendered desktop titlebar with native window-control hit testing.\"] # [derive (IntoElement)] pub struct DesktopTitlebar { ident : Ident, title : SharedString, subtitle : Option<SharedString>, left : Option<AnyElement>, right : Option<AnyElement>, button_layout : Option<WindowButtonLayout>, controls : Option<WindowControls>, on_event : Option<EventHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::titlebar::DesktopTitlebar::button_layout",
      "name": "button_layout",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::titlebar",
      "path": "gpui_kit::layout::titlebar",
      "source": "crates/gpui-kit/src/layout/titlebar.rs",
      "summary": "Overrides the platform's physical button order.",
      "documentation": "Overrides the platform's physical button order.\n\nThis is useful for deterministic fixtures and for hosts that already\nown a desktop preference. Without it, Linux follows the platform's\n`button-layout`; Windows uses Minimize, Maximize, Close on the right;\nand macOS leaves controls to the native traffic lights.",
      "signature": "pub fn button_layout (mut self, layout : WindowButtonLayout) -> Self",
      "cfg": [],
      "target": "DesktopTitlebar"
    },
    {
      "id": "gpui_kit::layout::titlebar::DesktopTitlebar::controls",
      "name": "controls",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::titlebar",
      "path": "gpui_kit::layout::titlebar",
      "source": "crates/gpui-kit/src/layout/titlebar.rs",
      "summary": "Overrides which standard window controls the platform reports.",
      "documentation": "Overrides which standard window controls the platform reports.",
      "signature": "pub fn controls (mut self, controls : WindowControls) -> Self",
      "cfg": [],
      "target": "DesktopTitlebar"
    },
    {
      "id": "gpui_kit::layout::titlebar::DesktopTitlebar::left",
      "name": "left",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::titlebar",
      "path": "gpui_kit::layout::titlebar",
      "source": "crates/gpui-kit/src/layout/titlebar.rs",
      "summary": "Caller content on the physical left side of the strip.",
      "documentation": "Caller content on the physical left side of the strip.\n\nThe slot is a normal client area even though the surrounding titlebar\nis draggable, so controls inside it retain their pointer behavior.",
      "signature": "pub fn left (mut self, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "DesktopTitlebar"
    },
    {
      "id": "gpui_kit::layout::titlebar::DesktopTitlebar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::titlebar",
      "path": "gpui_kit::layout::titlebar",
      "source": "crates/gpui-kit/src/layout/titlebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DesktopTitlebar"
    },
    {
      "id": "gpui_kit::layout::titlebar::DesktopTitlebar::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::titlebar",
      "path": "gpui_kit::layout::titlebar",
      "source": "crates/gpui-kit/src/layout/titlebar.rs",
      "summary": "Receives standard window requests.",
      "documentation": "Receives standard window requests.\n\nNo control buttons are rendered without this handler: an action the\nhost has not agreed to apply is not shown as an operable control.",
      "signature": "pub fn on_event (mut self, handler : impl Fn (DesktopTitlebarEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "DesktopTitlebar"
    },
    {
      "id": "gpui_kit::layout::titlebar::DesktopTitlebar::right",
      "name": "right",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::titlebar",
      "path": "gpui_kit::layout::titlebar",
      "source": "crates/gpui-kit/src/layout/titlebar.rs",
      "summary": "Caller content on the physical right side of the strip.",
      "documentation": "Caller content on the physical right side of the strip.",
      "signature": "pub fn right (mut self, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "DesktopTitlebar"
    },
    {
      "id": "gpui_kit::layout::titlebar::DesktopTitlebar::subtitle",
      "name": "subtitle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::titlebar",
      "path": "gpui_kit::layout::titlebar",
      "source": "crates/gpui-kit/src/layout/titlebar.rs",
      "summary": "Secondary caller-owned context shown below the window title.",
      "documentation": "Secondary caller-owned context shown below the window title.",
      "signature": "pub fn subtitle (mut self, subtitle : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "DesktopTitlebar"
    },
    {
      "id": "gpui_kit::layout::titlebar::DesktopTitlebarEvent",
      "name": "DesktopTitlebarEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::titlebar",
      "path": "gpui_kit::layout::titlebar",
      "source": "crates/gpui-kit/src/layout/titlebar.rs",
      "summary": "A standard desktop-window request.",
      "documentation": "A standard desktop-window request.\n\nThe component reports the request and changes no window state itself.",
      "signature": "# [doc = \" A standard desktop-window request.\"] # [doc = \"\"] # [doc = \" The component reports the request and changes no window state itself.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum DesktopTitlebarEvent { Minimize, ToggleMaximize, Close, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::titlebar::DesktopTitlebarEvent::apply",
      "name": "apply",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::titlebar",
      "path": "gpui_kit::layout::titlebar",
      "source": "crates/gpui-kit/src/layout/titlebar.rs",
      "summary": "Applies this standard request through GPUI's window contract.",
      "documentation": "Applies this standard request through GPUI's window contract.\n\nCalling this remains a host decision. In particular, `Close` uses the\nplatform close path rather than removing the window directly, so an\n`on_window_should_close` callback can refuse it.",
      "signature": "pub fn apply (self, window : & mut Window)",
      "cfg": [],
      "target": "DesktopTitlebarEvent"
    },
    {
      "id": "gpui_kit::layout::toolbar::Toolbar",
      "name": "Toolbar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "A bar of grouped actions.",
      "documentation": "A bar of grouped actions.",
      "signature": "# [doc = \" A bar of grouped actions.\"] # [derive (IntoElement)] pub struct Toolbar { ident : Ident, label : Option<SharedString>, slots : Vec<Slot>, size : ControlSize, overflow_after : Option<usize>, overflow_menu : Option<Entity<Menu>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::toolbar::Toolbar::group",
      "name": "group",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "A run of related actions, separated from its neighbours by a rule.",
      "documentation": "A run of related actions, separated from its neighbours by a rule.",
      "signature": "pub fn group (mut self, id : impl Into<SharedString>, items : impl IntoIterator<Item = ToolbarItem>,) -> Self",
      "cfg": [],
      "target": "Toolbar"
    },
    {
      "id": "gpui_kit::layout::toolbar::Toolbar::item_count",
      "name": "item_count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "How many actions the bar holds, drawn or overflowed.",
      "documentation": "How many actions the bar holds, drawn or overflowed.",
      "signature": "pub fn item_count (& self) -> usize",
      "cfg": [],
      "target": "Toolbar"
    },
    {
      "id": "gpui_kit::layout::toolbar::Toolbar::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "What the bar is called, for a reader that has only the tree.",
      "documentation": "What the bar is called, for a reader that has only the tree.",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Toolbar"
    },
    {
      "id": "gpui_kit::layout::toolbar::Toolbar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Toolbar"
    },
    {
      "id": "gpui_kit::layout::toolbar::Toolbar::overflow_after",
      "name": "overflow_after",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "Keeps the first `count` items in the bar and moves the rest into the overflow menu, instead of the measured cut.",
      "documentation": "Keeps the first `count` items in the bar and moves the rest into the\noverflow menu, instead of the measured cut.",
      "signature": "pub fn overflow_after (mut self, count : usize) -> Self",
      "cfg": [],
      "target": "Toolbar"
    },
    {
      "id": "gpui_kit::layout::toolbar::Toolbar::overflow_menu",
      "name": "overflow_menu",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "The menu the overflowed items are moved into.",
      "documentation": "The menu the overflowed items are moved into.\n\nIt is caller-owned because whether it is open outlives a frame.",
      "signature": "pub fn overflow_menu (mut self, menu : Entity<Menu>) -> Self",
      "cfg": [],
      "target": "Toolbar"
    },
    {
      "id": "gpui_kit::layout::toolbar::Toolbar::spacer",
      "name": "spacer",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "Flexible space: everything after it sits at the far end of the bar.",
      "documentation": "Flexible space: everything after it sits at the far end of the bar.",
      "signature": "pub fn spacer (mut self) -> Self",
      "cfg": [],
      "target": "Toolbar"
    },
    {
      "id": "gpui_kit::layout::toolbar::ToolbarItem",
      "name": "ToolbarItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "One action in the bar.",
      "documentation": "One action in the bar.\n\nThe element is what the bar draws; the id and label are what the overflow\nmenu needs to offer the same action when the item does not fit.",
      "signature": "# [doc = \" One action in the bar.\"] # [doc = \"\"] # [doc = \" The element is what the bar draws; the id and label are what the overflow\"] # [doc = \" menu needs to offer the same action when the item does not fit.\"] pub struct ToolbarItem { id : SharedString, label : SharedString, icon : Option<Icon>, shortcut : Option<SharedString>, disabled : bool, content : AnyElement, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::toolbar::ToolbarItem::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "ToolbarItem"
    },
    {
      "id": "gpui_kit::layout::toolbar::ToolbarItem::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "The glyph the overflow row carries. The inline control draws its own.",
      "documentation": "The glyph the overflow row carries. The inline control draws its own.",
      "signature": "pub fn icon (mut self, glyph : Icon) -> Self",
      "cfg": [],
      "target": "ToolbarItem"
    },
    {
      "id": "gpui_kit::layout::toolbar::ToolbarItem::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "ToolbarItem"
    },
    {
      "id": "gpui_kit::layout::toolbar::ToolbarItem::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "ToolbarItem"
    },
    {
      "id": "gpui_kit::layout::toolbar::ToolbarItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "`id` is the action's business identity, and is what the overflow menu reports when the item is taken from there instead of from the bar.",
      "documentation": "`id` is the action's business identity, and is what the overflow menu\nreports when the item is taken from there instead of from the bar.",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>, content : impl IntoElement,) -> Self",
      "cfg": [],
      "target": "ToolbarItem"
    },
    {
      "id": "gpui_kit::layout::toolbar::ToolbarItem::shortcut",
      "name": "shortcut",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::toolbar",
      "path": "gpui_kit::layout::toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn shortcut (mut self, keystroke : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ToolbarItem"
    },
    {
      "id": "gpui_kit::layout::tree::SplitChange",
      "name": "SplitChange",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "A change the typist asked the layout for. Nothing has been applied.",
      "documentation": "A change the typist asked the layout for. Nothing has been applied.",
      "signature": "# [doc = \" A change the typist asked the layout for. Nothing has been applied.\"] # [derive (Debug, Clone, PartialEq)] pub enum SplitChange { Ratio { split : SharedString, ratio : f32, }, Collapsed { split : SharedString, side : SplitSide, pane : SharedString, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::tree::SplitKind",
      "name": "SplitKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "What one [`SplitRecord`] describes.",
      "documentation": "What one [`SplitRecord`] describes.",
      "signature": "# [doc = \" What one [`SplitRecord`] describes.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum SplitKind { Pane, Horizontal, Vertical, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::tree::SplitKind::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "SplitKind"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout",
      "name": "SplitLayout",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "A tree of splits the caller owns.",
      "documentation": "A tree of splits the caller owns.",
      "signature": "# [doc = \" A tree of splits the caller owns.\"] # [derive (Debug, Clone, PartialEq)] pub enum SplitLayout { Pane (SplitPaneSpec), Branch { id : SharedString, axis : SplitAxis, # [doc = \" How much of the branch the first child takes, from 0 to 1.\"] ratio : f32, start : Box<SplitLayout>, end : Box<SplitLayout>, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::applied",
      "name": "applied",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "The same tree with a reported change applied.",
      "documentation": "The same tree with a reported change applied.\n\nThis is offered so a host that simply accepts every change has one call\nto make. A host that judges them applies the ones it accepts itself.",
      "signature": "pub fn applied (& self, change : & SplitChange) -> Self",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::find",
      "name": "find",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "The subtree named `id`, wherever it sits.",
      "documentation": "The subtree named `id`, wherever it sits.",
      "signature": "pub fn find (& self, id : & str) -> Option<& SplitLayout>",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::from_records",
      "name": "from_records",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "Rebuilds a tree the host wrote out with [`SplitLayout::to_records`].",
      "documentation": "Rebuilds a tree the host wrote out with [`SplitLayout::to_records`].",
      "signature": "pub fn from_records (records : & [SplitRecord]) -> Result<Self, SplitRecordError>",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::horizontal",
      "name": "horizontal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn horizontal (id : impl Into<SharedString>, ratio : f32, start : SplitLayout, end : SplitLayout,) -> Self",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::is_pane",
      "name": "is_pane",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_pane (& self) -> bool",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::leaf",
      "name": "leaf",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn leaf (spec : SplitPaneSpec) -> Self",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::min_extent",
      "name": "min_extent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "The smallest this subtree may be drawn at along `axis`, in pixels.",
      "documentation": "The smallest this subtree may be drawn at along `axis`, in pixels.",
      "signature": "pub fn min_extent (& self, axis : SplitAxis) -> f32",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::pane",
      "name": "pane",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn pane (id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::panes",
      "name": "panes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "Every leaf, in the order it is drawn.",
      "documentation": "Every leaf, in the order it is drawn.",
      "signature": "pub fn panes (& self) -> Vec<& SplitPaneSpec>",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::split",
      "name": "split",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn split (id : impl Into<SharedString>, axis : SplitAxis, ratio : f32, start : SplitLayout, end : SplitLayout,) -> Self",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::to_records",
      "name": "to_records",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "The tree flattened into plain records, parents before children and the first child before the second.",
      "documentation": "The tree flattened into plain records, parents before children and the\nfirst child before the second.",
      "signature": "pub fn to_records (& self) -> Vec<SplitRecord>",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::vertical",
      "name": "vertical",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn vertical (id : impl Into<SharedString>, ratio : f32, start : SplitLayout, end : SplitLayout,) -> Self",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::with_collapsed",
      "name": "with_collapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "The same tree with one leaf's collapsed flag replaced.",
      "documentation": "The same tree with one leaf's collapsed flag replaced.",
      "signature": "pub fn with_collapsed (& self, pane : & str, collapsed : bool) -> Self",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitLayout::with_ratio",
      "name": "with_ratio",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "The same tree with one branch's ratio replaced.",
      "documentation": "The same tree with one branch's ratio replaced.",
      "signature": "pub fn with_ratio (& self, split : & str, ratio : f32) -> Self",
      "cfg": [],
      "target": "SplitLayout"
    },
    {
      "id": "gpui_kit::layout::tree::SplitPaneSpec",
      "name": "SplitPaneSpec",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "One leaf of a [`SplitLayout`]: a named place the caller puts content.",
      "documentation": "One leaf of a [`SplitLayout`]: a named place the caller puts content.",
      "signature": "# [doc = \" One leaf of a [`SplitLayout`]: a named place the caller puts content.\"] # [derive (Debug, Clone, PartialEq)] pub struct SplitPaneSpec { id : SharedString, min_width : f32, min_height : f32, rail : f32, collapsed : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::tree::SplitPaneSpec::collapsed",
      "name": "collapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "Whether the caller says this pane is collapsed. A collapsed pane is drawn at its rail extent and its divider is not offered, because there is nothing to drag it between.",
      "documentation": "Whether the caller says this pane is collapsed. A collapsed pane is\ndrawn at its rail extent and its divider is not offered, because there\nis nothing to drag it between.",
      "signature": "pub fn collapsed (mut self, collapsed : bool) -> Self",
      "cfg": [],
      "target": "SplitPaneSpec"
    },
    {
      "id": "gpui_kit::layout::tree::SplitPaneSpec::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "SplitPaneSpec"
    },
    {
      "id": "gpui_kit::layout::tree::SplitPaneSpec::is_collapsed",
      "name": "is_collapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_collapsed (& self) -> bool",
      "cfg": [],
      "target": "SplitPaneSpec"
    },
    {
      "id": "gpui_kit::layout::tree::SplitPaneSpec::min",
      "name": "min",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "The smallest this pane may be drawn at on either axis, in pixels.",
      "documentation": "The smallest this pane may be drawn at on either axis, in pixels.\n\nA pane that only cares about one axis states that axis instead: a file\ntree that needs 180px of width does not thereby need 180px of height,\nand saying so would stop a divider it has nothing to do with.",
      "signature": "pub fn min (self, min : f32) -> Self",
      "cfg": [],
      "target": "SplitPaneSpec"
    },
    {
      "id": "gpui_kit::layout::tree::SplitPaneSpec::min_height",
      "name": "min_height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn min_height (mut self, min : f32) -> Self",
      "cfg": [],
      "target": "SplitPaneSpec"
    },
    {
      "id": "gpui_kit::layout::tree::SplitPaneSpec::min_size",
      "name": "min_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "The smallest this pane may be drawn at along `axis`, in pixels.",
      "documentation": "The smallest this pane may be drawn at along `axis`, in pixels.",
      "signature": "pub fn min_size (& self, axis : SplitAxis) -> f32",
      "cfg": [],
      "target": "SplitPaneSpec"
    },
    {
      "id": "gpui_kit::layout::tree::SplitPaneSpec::min_width",
      "name": "min_width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn min_width (mut self, min : f32) -> Self",
      "cfg": [],
      "target": "SplitPaneSpec"
    },
    {
      "id": "gpui_kit::layout::tree::SplitPaneSpec::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SplitPaneSpec"
    },
    {
      "id": "gpui_kit::layout::tree::SplitPaneSpec::rail",
      "name": "rail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "How wide the pane is while collapsed. A rail of zero removes the pane from the drawing entirely.",
      "documentation": "How wide the pane is while collapsed. A rail of zero removes the pane\nfrom the drawing entirely.",
      "signature": "pub fn rail (mut self, rail : f32) -> Self",
      "cfg": [],
      "target": "SplitPaneSpec"
    },
    {
      "id": "gpui_kit::layout::tree::SplitPaneSpec::rail_size",
      "name": "rail_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rail_size (& self) -> f32",
      "cfg": [],
      "target": "SplitPaneSpec"
    },
    {
      "id": "gpui_kit::layout::tree::SplitRecord",
      "name": "SplitRecord",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "One node of a [`SplitLayout`], as plain fields a host can write anywhere.",
      "documentation": "One node of a [`SplitLayout`], as plain fields a host can write anywhere.\n\n`ratio` is meaningful for a branch, and `min_width`, `min_height`, `rail`,\nand `collapsed` for a pane; the other fields are zero and ignored, so a host\nthat stores every field back gets the same tree.",
      "signature": "# [doc = \" One node of a [`SplitLayout`], as plain fields a host can write anywhere.\"] # [doc = \"\"] # [doc = \" `ratio` is meaningful for a branch, and `min_width`, `min_height`, `rail`,\"] # [doc = \" and `collapsed` for a pane; the other fields are zero and ignored, so a host\"] # [doc = \" that stores every field back gets the same tree.\"] # [derive (Debug, Clone, PartialEq)] pub struct SplitRecord { pub id : SharedString, pub parent : Option<SharedString>, pub kind : SplitKind, pub ratio : f32, pub min_width : f32, pub min_height : f32, pub rail : f32, pub collapsed : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::tree::SplitRecordError",
      "name": "SplitRecordError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "Why a set of records is not a tree.",
      "documentation": "Why a set of records is not a tree.",
      "signature": "# [doc = \" Why a set of records is not a tree.\"] # [derive (Debug, Clone, PartialEq)] pub enum SplitRecordError { NoRoot, ManyRoots (Vec<SharedString>), DuplicateId (SharedString), MissingParent { id : SharedString, parent : SharedString, }, # [doc = \" A split needs exactly two children.\"] WrongChildCount { id : SharedString, found : usize, }, PaneWithChildren (SharedString), # [doc = \" Records that no path from the root reaches, which means a cycle.\"] Unreachable, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::tree::SplitTree",
      "name": "SplitTree",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "Draws a [`SplitLayout`] and reports what the typist asked to change.",
      "documentation": "Draws a [`SplitLayout`] and reports what the typist asked to change.",
      "signature": "# [doc = \" Draws a [`SplitLayout`] and reports what the typist asked to change.\"] # [derive (IntoElement)] pub struct SplitTree { ident : Ident, layout : SplitLayout, panes : HashMap<SharedString, AnyElement>, disabled : bool, on_change : Option<ChangeHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::layout::tree::SplitTree::layout",
      "name": "layout",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn layout (mut self, layout : SplitLayout) -> Self",
      "cfg": [],
      "target": "SplitTree"
    },
    {
      "id": "gpui_kit::layout::tree::SplitTree::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "SplitTree"
    },
    {
      "id": "gpui_kit::layout::tree::SplitTree::on_change",
      "name": "on_change",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_change (mut self, handler : impl Fn (SplitChange, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "SplitTree"
    },
    {
      "id": "gpui_kit::layout::tree::SplitTree::pane",
      "name": "pane",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "layout::tree",
      "path": "gpui_kit::layout::tree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "What goes in the leaf named `id`. A leaf nothing is given draws empty.",
      "documentation": "What goes in the leaf named `id`. A leaf nothing is given draws empty.",
      "signature": "pub fn pane (mut self, id : impl Into<SharedString>, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "SplitTree"
    },
    {
      "id": "gpui_kit::media::audio_player::AudioPlayer",
      "name": "AudioPlayer",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::audio_player",
      "path": "gpui_kit::media::audio_player",
      "source": "crates/gpui-kit/src/media/audio_player.rs",
      "summary": "A player for one piece of audio.",
      "documentation": "A player for one piece of audio.",
      "signature": "# [doc = \" A player for one piece of audio.\"] # [derive (IntoElement)] pub struct AudioPlayer { ident : Ident, title : Option<SharedString>, subtitle : Option<SharedString>, transport : Option<Rc<dyn MediaTransport>>, elapsed : Option<SharedString>, remaining : Option<SharedString>, peaks : Vec<f32>, step : Option<f32>, speeds : Vec<f32>, control_size : ControlSize, disabled : bool, on_event : Option<EventHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::audio_player::AudioPlayer::elapsed",
      "name": "elapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::audio_player",
      "path": "gpui_kit::media::audio_player",
      "source": "crates/gpui-kit/src/media/audio_player.rs",
      "summary": "How far in the audio is, in the host's own words.",
      "documentation": "How far in the audio is, in the host's own words.",
      "signature": "pub fn elapsed (mut self, elapsed : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AudioPlayer"
    },
    {
      "id": "gpui_kit::media::audio_player::AudioPlayer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::audio_player",
      "path": "gpui_kit::media::audio_player",
      "source": "crates/gpui-kit/src/media/audio_player.rs",
      "summary": "A player with no transport, which is a player that says so.",
      "documentation": "A player with no transport, which is a player that says so.",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "AudioPlayer"
    },
    {
      "id": "gpui_kit::media::audio_player::AudioPlayer::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::audio_player",
      "path": "gpui_kit::media::audio_player",
      "source": "crates/gpui-kit/src/media/audio_player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& MediaEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "AudioPlayer"
    },
    {
      "id": "gpui_kit::media::audio_player::AudioPlayer::peaks",
      "name": "peaks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::audio_player",
      "path": "gpui_kit::media::audio_player",
      "source": "crates/gpui-kit/src/media/audio_player.rs",
      "summary": "The peak amplitude of each slice of the audio, between zero and one, as somebody who read the samples measured it.",
      "documentation": "The peak amplitude of each slice of the audio, between zero and one,\nas somebody who read the samples measured it.\n\nSupplying none draws no waveform. There is no decoder here, so an\nenvelope this component invented would be a picture of nothing.",
      "signature": "pub fn peaks (mut self, peaks : impl IntoIterator<Item = f32>) -> Self",
      "cfg": [],
      "target": "AudioPlayer"
    },
    {
      "id": "gpui_kit::media::audio_player::AudioPlayer::remaining",
      "name": "remaining",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::audio_player",
      "path": "gpui_kit::media::audio_player",
      "source": "crates/gpui-kit/src/media/audio_player.rs",
      "summary": "How much is left, in the host's own words.",
      "documentation": "How much is left, in the host's own words.",
      "signature": "pub fn remaining (mut self, remaining : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AudioPlayer"
    },
    {
      "id": "gpui_kit::media::audio_player::AudioPlayer::speeds",
      "name": "speeds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::audio_player",
      "path": "gpui_kit::media::audio_player",
      "source": "crates/gpui-kit/src/media/audio_player.rs",
      "summary": "The speeds the transport offers. Offering none leaves the control out.",
      "documentation": "The speeds the transport offers. Offering none leaves the control out.",
      "signature": "pub fn speeds (mut self, speeds : impl IntoIterator<Item = f32>) -> Self",
      "cfg": [],
      "target": "AudioPlayer"
    },
    {
      "id": "gpui_kit::media::audio_player::AudioPlayer::step_seconds",
      "name": "step_seconds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::audio_player",
      "path": "gpui_kit::media::audio_player",
      "source": "crates/gpui-kit/src/media/audio_player.rs",
      "summary": "How far one arrow key jumps, in seconds.",
      "documentation": "How far one arrow key jumps, in seconds.",
      "signature": "pub fn step_seconds (mut self, seconds : f32) -> Self",
      "cfg": [],
      "target": "AudioPlayer"
    },
    {
      "id": "gpui_kit::media::audio_player::AudioPlayer::subtitle",
      "name": "subtitle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::audio_player",
      "path": "gpui_kit::media::audio_player",
      "source": "crates/gpui-kit/src/media/audio_player.rs",
      "summary": "A second line under the title: a speaker, an artist, a source.",
      "documentation": "A second line under the title: a speaker, an artist, a source.",
      "signature": "pub fn subtitle (mut self, subtitle : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AudioPlayer"
    },
    {
      "id": "gpui_kit::media::audio_player::AudioPlayer::title",
      "name": "title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::audio_player",
      "path": "gpui_kit::media::audio_player",
      "source": "crates/gpui-kit/src/media/audio_player.rs",
      "summary": "What is playing.",
      "documentation": "What is playing.",
      "signature": "pub fn title (mut self, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AudioPlayer"
    },
    {
      "id": "gpui_kit::media::audio_player::AudioPlayer::transport",
      "name": "transport",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::audio_player",
      "path": "gpui_kit::media::audio_player",
      "source": "crates/gpui-kit/src/media/audio_player.rs",
      "summary": "The player behind the controls.",
      "documentation": "The player behind the controls.\n\nWithout one there is no playback on this machine, and this component\nsays that rather than drawing controls that would do nothing.",
      "signature": "pub fn transport (mut self, transport : Rc<dyn MediaTransport>) -> Self",
      "cfg": [],
      "target": "AudioPlayer"
    },
    {
      "id": "gpui_kit::media::gltf::ModelAabb",
      "name": "ModelAabb",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "An axis-aligned box around everything the reader accepted.",
      "documentation": "An axis-aligned box around everything the reader accepted.",
      "signature": "# [doc = \" An axis-aligned box around everything the reader accepted.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct ModelAabb { pub min : [f32; 3], pub max : [f32; 3], }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::gltf::ModelAabb::centre",
      "name": "centre",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn centre (self) -> [f32; 3]",
      "cfg": [],
      "target": "ModelAabb"
    },
    {
      "id": "gpui_kit::media::gltf::ModelAabb::radius",
      "name": "radius",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "The radius of the sphere around the box, which is what a camera fits against so that orbiting does not change the size of the model.",
      "documentation": "The radius of the sphere around the box, which is what a camera fits\nagainst so that orbiting does not change the size of the model.",
      "signature": "pub fn radius (self) -> f32",
      "cfg": [],
      "target": "ModelAabb"
    },
    {
      "id": "gpui_kit::media::gltf::ModelBounds",
      "name": "ModelBounds",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "How much of a document this reader will take.",
      "documentation": "How much of a document this reader will take.\n\nThe defaults are chosen for what the viewer can draw at an interactive\nframe rate on a laptop rather than for what a format allows: a model that\nwould take a second to paint is refused with a number the caller can raise\non purpose.",
      "signature": "# [doc = \" How much of a document this reader will take.\"] # [doc = \"\"] # [doc = \" The defaults are chosen for what the viewer can draw at an interactive\"] # [doc = \" frame rate on a laptop rather than for what a format allows: a model that\"] # [doc = \" would take a second to paint is refused with a number the caller can raise\"] # [doc = \" on purpose.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct ModelBounds { pub max_bytes : usize, pub max_nodes : usize, pub max_depth : usize, pub max_primitives : usize, pub max_vertices : usize, pub max_triangles : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::gltf::ModelBounds::max_bytes",
      "name": "max_bytes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn max_bytes (mut self, bytes : usize) -> Self",
      "cfg": [],
      "target": "ModelBounds"
    },
    {
      "id": "gpui_kit::media::gltf::ModelBounds::max_depth",
      "name": "max_depth",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn max_depth (mut self, depth : usize) -> Self",
      "cfg": [],
      "target": "ModelBounds"
    },
    {
      "id": "gpui_kit::media::gltf::ModelBounds::max_nodes",
      "name": "max_nodes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn max_nodes (mut self, nodes : usize) -> Self",
      "cfg": [],
      "target": "ModelBounds"
    },
    {
      "id": "gpui_kit::media::gltf::ModelBounds::max_primitives",
      "name": "max_primitives",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn max_primitives (mut self, primitives : usize) -> Self",
      "cfg": [],
      "target": "ModelBounds"
    },
    {
      "id": "gpui_kit::media::gltf::ModelBounds::max_triangles",
      "name": "max_triangles",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn max_triangles (mut self, triangles : usize) -> Self",
      "cfg": [],
      "target": "ModelBounds"
    },
    {
      "id": "gpui_kit::media::gltf::ModelBounds::max_vertices",
      "name": "max_vertices",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn max_vertices (mut self, vertices : usize) -> Self",
      "cfg": [],
      "target": "ModelBounds"
    },
    {
      "id": "gpui_kit::media::gltf::ModelDefect",
      "name": "ModelDefect",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "Why a document is not one this reader will draw.",
      "documentation": "Why a document is not one this reader will draw.\n\nEach variant is a code rather than a sentence, because the sentence a\nreader sees is the host's to write and this crate holds no English outside\n[`crate::strings`].",
      "signature": "# [doc = \" Why a document is not one this reader will draw.\"] # [doc = \"\"] # [doc = \" Each variant is a code rather than a sentence, because the sentence a\"] # [doc = \" reader sees is the host's to write and this crate holds no English outside\"] # [doc = \" [`crate::strings`].\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum ModelDefect { # [doc = \" The bytes are not JSON, or not a JSON object.\"] NotJson, # [doc = \" The GLB header, its declared length, or a chunk length is wrong.\"] BadContainer, # [doc = \" There is no `asset.version`, so this is not a glTF document.\"] NotGltf, # [doc = \" The document declares a glTF major version other than 2.\"] UnsupportedVersion, # [doc = \" A buffer points somewhere this crate would have to fetch.\"] ExternalResource, # [doc = \" A `data:` URI that is not base64, or base64 that will not decode.\"] UnsupportedEncoding, # [doc = \" A sparse accessor, which substitutes values this reader does not read.\"] SparseAccessor, # [doc = \" A primitive that is not a triangle list.\"] UnsupportedPrimitive, # [doc = \" An accessor component type this reader does not read.\"] UnsupportedComponentType, # [doc = \" An accessor whose element type is not the one the attribute requires.\"] UnsupportedAccessorType, # [doc = \" A primitive with no `POSITION`, which has no geometry to draw.\"] MissingPositions, # [doc = \" An index into accessors, buffer views, buffers, meshes, or nodes that\"] # [doc = \" the document does not contain.\"] DanglingIndex, # [doc = \" An accessor that reads past the end of the bytes it was given.\"] TruncatedBuffer, # [doc = \" An index that names a vertex the primitive does not have.\"] IndexOutOfRange, # [doc = \" A document that parsed and contains no triangle to draw.\"] EmptyScene, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::gltf::ModelDefect::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "The code a refusal publishes.",
      "documentation": "The code a refusal publishes.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "ModelDefect"
    },
    {
      "id": "gpui_kit::media::gltf::ModelError",
      "name": "ModelError",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "Why a document was not read.",
      "documentation": "Why a document was not read.",
      "signature": "# [doc = \" Why a document was not read.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum ModelError { # [doc = \" The document asked for more than the caller allowed.\"] TooLarge { limit : ModelLimit, # [doc = \" What the document asked for.\"] found : usize, # [doc = \" What the caller allowed.\"] allowed : usize, }, # [doc = \" The document is outside the subset this reader accepts.\"] Rejected (ModelDefect), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::gltf::ModelError::code",
      "name": "code",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "The code inside the refusal: a limit name or a defect code.",
      "documentation": "The code inside the refusal: a limit name or a defect code.",
      "signature": "pub fn code (self) -> & 'static str",
      "cfg": [],
      "target": "ModelError"
    },
    {
      "id": "gpui_kit::media::gltf::ModelError::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "The name a semantic node publishes for the refusal itself.",
      "documentation": "The name a semantic node publishes for the refusal itself.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "ModelError"
    },
    {
      "id": "gpui_kit::media::gltf::ModelLimit",
      "name": "ModelLimit",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "Which cap a document ran into.",
      "documentation": "Which cap a document ran into.",
      "signature": "# [doc = \" Which cap a document ran into.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum ModelLimit { Bytes, Nodes, Depth, Primitives, Vertices, Triangles, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::gltf::ModelLimit::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "The name a refusal publishes and a caller matches on.",
      "documentation": "The name a refusal publishes and a caller matches on.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "ModelLimit"
    },
    {
      "id": "gpui_kit::media::gltf::ModelMesh",
      "name": "ModelMesh",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "One primitive's triangles, already in the document's world space.",
      "documentation": "One primitive's triangles, already in the document's world space.",
      "signature": "# [doc = \" One primitive's triangles, already in the document's world space.\"] # [derive (Debug, Clone, PartialEq)] pub struct ModelMesh { name : SharedString, positions : Vec<[f32; 3]>, indices : Vec<u32>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::gltf::ModelMesh::indices",
      "name": "indices",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "Three indices per triangle, into [`positions`](Self::positions).",
      "documentation": "Three indices per triangle, into [`positions`](Self::positions).",
      "signature": "pub fn indices (& self) -> & [u32]",
      "cfg": [],
      "target": "ModelMesh"
    },
    {
      "id": "gpui_kit::media::gltf::ModelMesh::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & SharedString",
      "cfg": [],
      "target": "ModelMesh"
    },
    {
      "id": "gpui_kit::media::gltf::ModelMesh::positions",
      "name": "positions",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn positions (& self) -> & [[f32; 3]]",
      "cfg": [],
      "target": "ModelMesh"
    },
    {
      "id": "gpui_kit::media::gltf::ModelMesh::triangle_count",
      "name": "triangle_count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn triangle_count (& self) -> usize",
      "cfg": [],
      "target": "ModelMesh"
    },
    {
      "id": "gpui_kit::media::gltf::ModelScene",
      "name": "ModelScene",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "Everything the reader accepted out of one document.",
      "documentation": "Everything the reader accepted out of one document.",
      "signature": "# [doc = \" Everything the reader accepted out of one document.\"] # [derive (Debug, Clone, PartialEq)] pub struct ModelScene { meshes : Vec<ModelMesh>, vertices : usize, triangles : usize, aabb : ModelAabb, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::gltf::ModelScene::aabb",
      "name": "aabb",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn aabb (& self) -> ModelAabb",
      "cfg": [],
      "target": "ModelScene"
    },
    {
      "id": "gpui_kit::media::gltf::ModelScene::mesh_count",
      "name": "mesh_count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn mesh_count (& self) -> usize",
      "cfg": [],
      "target": "ModelScene"
    },
    {
      "id": "gpui_kit::media::gltf::ModelScene::meshes",
      "name": "meshes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn meshes (& self) -> & [ModelMesh]",
      "cfg": [],
      "target": "ModelScene"
    },
    {
      "id": "gpui_kit::media::gltf::ModelScene::parse",
      "name": "parse",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "Reads a glTF 2.0 document, refusing anything outside the accepted subset and anything past `bounds`.",
      "documentation": "Reads a glTF 2.0 document, refusing anything outside the accepted\nsubset and anything past `bounds`.",
      "signature": "pub fn parse (bytes : & [u8], bounds : ModelBounds) -> Result<Self, ModelError>",
      "cfg": [],
      "target": "ModelScene"
    },
    {
      "id": "gpui_kit::media::gltf::ModelScene::triangle_count",
      "name": "triangle_count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn triangle_count (& self) -> usize",
      "cfg": [],
      "target": "ModelScene"
    },
    {
      "id": "gpui_kit::media::gltf::ModelScene::vertex_count",
      "name": "vertex_count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::gltf",
      "path": "gpui_kit::media::gltf",
      "source": "crates/gpui-kit/src/media/gltf.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn vertex_count (& self) -> usize",
      "cfg": [],
      "target": "ModelScene"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelShading",
      "name": "ModelShading",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "How the model is drawn.",
      "documentation": "How the model is drawn.",
      "signature": "# [doc = \" How the model is drawn.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum ModelShading { # [doc = \" Every face filled, lit by its own normal. Nothing here is the\"] # [doc = \" document's material, because the reader does not read one.\"] # [default] Flat, # [doc = \" Every triangle's three edges, and no fill.\"] Wireframe, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelShading::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "The name a semantic node publishes and a control addresses.",
      "documentation": "The name a semantic node publishes and a control addresses.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "ModelShading"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelState",
      "name": "ModelState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "What the viewer has, as the host reports it.",
      "documentation": "What the viewer has, as the host reports it.",
      "signature": "# [doc = \" What the viewer has, as the host reports it.\"] # [derive (Debug, Clone, PartialEq)] pub enum ModelState { # [doc = \" No model has been handed to this viewer.\"] Empty, # [doc = \" The host is still reading one.\"] Loading, # [doc = \" A document the reader accepted.\"] Ready (Rc<ModelScene>), # [doc = \" A document the reader refused, and why.\"] Rejected (ModelError), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "The name a semantic node publishes.",
      "documentation": "The name a semantic node publishes.",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "ModelState"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelState::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "Reads a document and answers with the state it produced.",
      "documentation": "Reads a document and answers with the state it produced.\n\nThis is the whole of what a host has to do: the refusal is a state and\nnot an error to be handled somewhere the reader cannot see it.",
      "signature": "pub fn read (bytes : & [u8], bounds : ModelBounds) -> Self",
      "cfg": [],
      "target": "ModelState"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelViewer",
      "name": "ModelViewer",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "A bounded viewer for one 3D model.",
      "documentation": "A bounded viewer for one 3D model.",
      "signature": "# [doc = \" A bounded viewer for one 3D model.\"] # [derive (IntoElement)] pub struct ModelViewer { ident : Ident, title : Option<SharedString>, state : ModelState, shading : ModelShading, yaw : f32, pitch : f32, height : Option<f32>, disabled : bool, on_event : Option<EventHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelViewer::height",
      "name": "height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn height (mut self, height : f32) -> Self",
      "cfg": [],
      "target": "ModelViewer"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelViewer::loading",
      "name": "loading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn loading (self) -> Self",
      "cfg": [],
      "target": "ModelViewer"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelViewer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "A viewer with nothing in it.",
      "documentation": "A viewer with nothing in it.",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "ModelViewer"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelViewer::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& ModelViewerEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "ModelViewer"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelViewer::orbit",
      "name": "orbit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "Where the caller says the camera stands, in radians. The viewer draws this and reports every request to change it.",
      "documentation": "Where the caller says the camera stands, in radians. The viewer draws\nthis and reports every request to change it.",
      "signature": "pub fn orbit (mut self, yaw : f32, pitch : f32) -> Self",
      "cfg": [],
      "target": "ModelViewer"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelViewer::rejected",
      "name": "rejected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "A document the reader refused.",
      "documentation": "A document the reader refused.",
      "signature": "pub fn rejected (self, error : ModelError) -> Self",
      "cfg": [],
      "target": "ModelViewer"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelViewer::scene",
      "name": "scene",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "A document the reader accepted.",
      "documentation": "A document the reader accepted.",
      "signature": "pub fn scene (self, scene : Rc<ModelScene>) -> Self",
      "cfg": [],
      "target": "ModelViewer"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelViewer::shading",
      "name": "shading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn shading (mut self, shading : ModelShading) -> Self",
      "cfg": [],
      "target": "ModelViewer"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelViewer::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : ModelState) -> Self",
      "cfg": [],
      "target": "ModelViewer"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelViewer::title",
      "name": "title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn title (mut self, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ModelViewer"
    },
    {
      "id": "gpui_kit::media::model_viewer::ModelViewerEvent",
      "name": "ModelViewerEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::model_viewer",
      "path": "gpui_kit::media::model_viewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "What a model viewer reports. It applies none of it.",
      "documentation": "What a model viewer reports. It applies none of it.",
      "signature": "# [doc = \" What a model viewer reports. It applies none of it.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub enum ModelViewerEvent { # [doc = \" A drag or the reset control asked for these angles, in radians.\"] OrbitChanged { yaw : f32, pitch : f32 }, # [doc = \" The reader asked for the other shading.\"] ShadingChanged (ModelShading), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::platform::PlatformMediaTransport",
      "name": "PlatformMediaTransport",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::platform",
      "path": "gpui_kit::media::platform",
      "source": "crates/gpui-kit/src/media/platform.rs",
      "summary": "The AVFoundation or Media Foundation player used by media components.",
      "documentation": "The AVFoundation or Media Foundation player used by media components.",
      "signature": "# [doc = \" The AVFoundation or Media Foundation player used by media components.\"] pub struct PlatformMediaTransport { player : Rc<NativeMediaPlayer>, view : Option<PlatformViewHandle>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::platform::PlatformMediaTransport::audio",
      "name": "audio",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::platform",
      "path": "gpui_kit::media::platform",
      "source": "crates/gpui-kit/src/media/platform.rs",
      "summary": "Creates a native audio transport.",
      "documentation": "Creates a native audio transport.",
      "signature": "pub fn audio () -> Rc<Self>",
      "cfg": [],
      "target": "PlatformMediaTransport"
    },
    {
      "id": "gpui_kit::media::platform::PlatformMediaTransport::frame",
      "name": "frame",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::platform",
      "path": "gpui_kit::media::platform",
      "source": "crates/gpui-kit/src/media/platform.rs",
      "summary": "A full-size native frame for [`super::VideoPlayer::frame`]. Audio and unsupported transports return `None`.",
      "documentation": "A full-size native frame for [`super::VideoPlayer::frame`]. Audio and\nunsupported transports return `None`.",
      "signature": "pub fn frame (& self) -> Option<AnyElement>",
      "cfg": [],
      "target": "PlatformMediaTransport"
    },
    {
      "id": "gpui_kit::media::platform::PlatformMediaTransport::load",
      "name": "load",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::platform",
      "path": "gpui_kit::media::platform",
      "source": "crates/gpui-kit/src/media/platform.rs",
      "summary": "Replaces the source and begins opening it asynchronously.",
      "documentation": "Replaces the source and begins opening it asynchronously.",
      "signature": "pub fn load (& self, source : impl Into<MediaSource>) -> Result<(), NativeMediaError>",
      "cfg": [],
      "target": "PlatformMediaTransport"
    },
    {
      "id": "gpui_kit::media::platform::PlatformMediaTransport::player",
      "name": "player",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::platform",
      "path": "gpui_kit::media::platform",
      "source": "crates/gpui-kit/src/media/platform.rs",
      "summary": "Direct access to the product-neutral native service for capabilities outside the component transport contract.",
      "documentation": "Direct access to the product-neutral native service for capabilities\noutside the component transport contract.",
      "signature": "pub fn player (& self) -> & NativeMediaPlayer",
      "cfg": [],
      "target": "PlatformMediaTransport"
    },
    {
      "id": "gpui_kit::media::platform::PlatformMediaTransport::shared",
      "name": "shared",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::platform",
      "path": "gpui_kit::media::platform",
      "source": "crates/gpui-kit/src/media/platform.rs",
      "summary": "A trait-object clone for [`super::AudioPlayer::transport`] or [`super::VideoPlayer::transport`].",
      "documentation": "A trait-object clone for [`super::AudioPlayer::transport`] or\n[`super::VideoPlayer::transport`].",
      "signature": "pub fn shared (self : & Rc<Self>) -> Rc<dyn MediaTransport>",
      "cfg": [],
      "target": "PlatformMediaTransport"
    },
    {
      "id": "gpui_kit::media::platform::PlatformMediaTransport::subscribe",
      "name": "subscribe",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::platform",
      "path": "gpui_kit::media::platform",
      "source": "crates/gpui-kit/src/media/platform.rs",
      "summary": "Registers a native change signal. The callback may arrive on a media thread; marshal it to the GPUI foreground executor and call `cx.notify()` there.",
      "documentation": "Registers a native change signal. The callback may arrive on a media\nthread; marshal it to the GPUI foreground executor and call\n`cx.notify()` there.",
      "signature": "pub fn subscribe (& self, handler : impl Fn (NativeMediaEvent) + Send + Sync + 'static,) -> NativeMediaSubscription",
      "cfg": [],
      "target": "PlatformMediaTransport"
    },
    {
      "id": "gpui_kit::media::platform::PlatformMediaTransport::video",
      "name": "video",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::platform",
      "path": "gpui_kit::media::platform",
      "source": "crates/gpui-kit/src/media/platform.rs",
      "summary": "Creates a native video transport and its hosted platform view.",
      "documentation": "Creates a native video transport and its hosted platform view.",
      "signature": "pub fn video () -> Rc<Self>",
      "cfg": [],
      "target": "PlatformMediaTransport"
    },
    {
      "id": "gpui_kit::media::platform::reexport-1",
      "name": "media :: { MediaCapabilities as NativeMediaCapabilities , MediaError as NativeMediaError , MediaEvent as NativeMediaEvent , MediaPlayer as NativeMediaPlayer , MediaSource , MediaSubscription as NativeMediaSubscription , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::platform",
      "path": "gpui_kit::media::platform",
      "source": "crates/gpui-kit/src/media/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use media::{ MediaCapabilities as NativeMediaCapabilities, MediaError as NativeMediaError, MediaEvent as NativeMediaEvent, MediaPlayer as NativeMediaPlayer, MediaSource, MediaSubscription as NativeMediaSubscription, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::reexport-1",
      "name": "audio_player :: AudioPlayer",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media",
      "path": "gpui_kit::media",
      "source": "crates/gpui-kit/src/media/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use audio_player::AudioPlayer;",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::reexport-2",
      "name": "gltf :: { ModelBounds , ModelDefect , ModelError , ModelLimit , ModelMesh , ModelScene }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media",
      "path": "gpui_kit::media",
      "source": "crates/gpui-kit/src/media/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gltf::{ ModelBounds, ModelDefect, ModelError, ModelLimit, ModelMesh, ModelScene };",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::reexport-3",
      "name": "model_viewer :: { ModelShading , ModelState , ModelViewer , ModelViewerEvent }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media",
      "path": "gpui_kit::media",
      "source": "crates/gpui-kit/src/media/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use model_viewer::{ ModelShading, ModelState, ModelViewer, ModelViewerEvent };",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::reexport-4",
      "name": "platform :: { MediaSource , NativeMediaCapabilities , NativeMediaError , NativeMediaEvent , NativeMediaPlayer , NativeMediaSubscription , PlatformMediaTransport , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media",
      "path": "gpui_kit::media",
      "source": "crates/gpui-kit/src/media/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use platform::{ MediaSource, NativeMediaCapabilities, NativeMediaError, NativeMediaEvent, NativeMediaPlayer, NativeMediaSubscription, PlatformMediaTransport, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::reexport-5",
      "name": "transport :: { FixtureTransport , MediaAvailability , MediaCapabilities , MediaCommand , MediaError , MediaErrorKind , MediaEvent , MediaOrigin , MediaOutcome , MediaSnapshot , MediaTransport , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media",
      "path": "gpui_kit::media",
      "source": "crates/gpui-kit/src/media/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use transport::{ FixtureTransport, MediaAvailability, MediaCapabilities, MediaCommand, MediaError, MediaErrorKind, MediaEvent, MediaOrigin, MediaOutcome, MediaSnapshot, MediaTransport, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::reexport-6",
      "name": "video_player :: VideoPlayer",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media",
      "path": "gpui_kit::media",
      "source": "crates/gpui-kit/src/media/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use video_player::VideoPlayer;",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::reexport-7",
      "name": "waveform :: { AudioWaveform , AudioWaveformState }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media",
      "path": "gpui_kit::media",
      "source": "crates/gpui-kit/src/media/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use waveform::{ AudioWaveform, AudioWaveformState };",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport",
      "name": "FixtureTransport",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "A transport that plays nothing, on purpose.",
      "documentation": "A transport that plays nothing, on purpose.\n\nIt holds a snapshot the caller wrote and moves it only when a command asks\nit to: no clock runs, so the same scene renders the same pixels on every\nmachine and in any order, which is what the visual gate needs. It records\nevery command so a test can assert what a control asked for.\n\nIt reports [`MediaOrigin::Fixture`], and every surface in this module\npublishes and draws that, so a fixture on screen is never mistaken for a\nplayer.",
      "signature": "# [doc = \" A transport that plays nothing, on purpose.\"] # [doc = \"\"] # [doc = \" It holds a snapshot the caller wrote and moves it only when a command asks\"] # [doc = \" it to: no clock runs, so the same scene renders the same pixels on every\"] # [doc = \" machine and in any order, which is what the visual gate needs. It records\"] # [doc = \" every command so a test can assert what a control asked for.\"] # [doc = \"\"] # [doc = \" It reports [`MediaOrigin::Fixture`], and every surface in this module\"] # [doc = \" publishes and draws that, so a fixture on screen is never mistaken for a\"] # [doc = \" player.\"] pub struct FixtureTransport { snapshot : RefCell<MediaSnapshot>, commands : RefCell<Vec<MediaCommand>>, capabilities : MediaCapabilities, # [doc = \" Set when the fixture is standing in for a backend that says no.\"] refusal : Option<MediaError>, unsupported : Vec<& 'static str>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::buffered",
      "name": "buffered",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn buffered (mut self, ranges : impl IntoIterator<Item = BufferedRange>) -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::commands",
      "name": "commands",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "Every command asked of it, in order.",
      "documentation": "Every command asked of it, in order.",
      "signature": "pub fn commands (& self) -> Vec<MediaCommand>",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::failed",
      "name": "failed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "Stands in for media that was opened and could not be read.",
      "documentation": "Stands in for media that was opened and could not be read.",
      "signature": "pub fn failed (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::live",
      "name": "live",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "A fixture standing in for a live stream: ready, and no total.",
      "documentation": "A fixture standing in for a live stream: ready, and no total.",
      "signature": "pub fn live () -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::loading",
      "name": "loading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn loading (mut self) -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::muted",
      "name": "muted",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn muted (mut self, muted : bool) -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "A fixture holding nothing, which is [`MediaAvailability::Idle`].",
      "documentation": "A fixture holding nothing, which is [`MediaAvailability::Idle`].",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::no_backend",
      "name": "no_backend",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "Stands in for a machine with no backend that can play this.",
      "documentation": "Stands in for a machine with no backend that can play this.",
      "signature": "pub fn no_backend (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::position",
      "name": "position",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "Where the head stands. It stays there: nothing here advances it.",
      "documentation": "Where the head stands. It stays there: nothing here advances it.",
      "signature": "pub fn position (mut self, seconds : f32) -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::ready",
      "name": "ready",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "A fixture that holds media of a known length and is ready to move it.",
      "documentation": "A fixture that holds media of a known length and is ready to move it.",
      "signature": "pub fn ready (duration : f32) -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::refusing",
      "name": "refusing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "Makes every command answer [`MediaOutcome::Refused`], which is how a test proves a refused control changes nothing on screen.",
      "documentation": "Makes every command answer [`MediaOutcome::Refused`], which is how a\ntest proves a refused control changes nothing on screen.",
      "signature": "pub fn refusing (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::shared",
      "name": "shared",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "The fixture as a surface takes it.",
      "documentation": "The fixture as a surface takes it.",
      "signature": "pub fn shared (self) -> Rc<dyn MediaTransport>",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::speed",
      "name": "speed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn speed (mut self, speed : f32) -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : TransportState) -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::unsupported",
      "name": "unsupported",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "Names commands this fixture does not implement, by [`MediaCommand::name`].",
      "documentation": "Names commands this fixture does not implement, by\n[`MediaCommand::name`].",
      "signature": "pub fn unsupported (mut self, commands : impl IntoIterator<Item = & 'static str>) -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::volume",
      "name": "volume",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn volume (mut self, volume : f32) -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::FixtureTransport::with_capabilities",
      "name": "with_capabilities",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "Overrides the operations this deterministic transport accepts.",
      "documentation": "Overrides the operations this deterministic transport accepts.",
      "signature": "pub fn with_capabilities (mut self, capabilities : MediaCapabilities) -> Self",
      "cfg": [],
      "target": "FixtureTransport"
    },
    {
      "id": "gpui_kit::media::transport::MediaAvailability",
      "name": "MediaAvailability",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "Whether there is anything to play, and whether anything could play it.",
      "documentation": "Whether there is anything to play, and whether anything could play it.\n\nThis is [`crate::state::Loadable`]'s vocabulary with the one distinction a\nplayer needs and a list does not: media the host holds and nothing on this\nmachine can decode is neither loading nor broken, and calling it either\nwould send the reader looking for the wrong repair.",
      "signature": "# [doc = \" Whether there is anything to play, and whether anything could play it.\"] # [doc = \"\"] # [doc = \" This is [`crate::state::Loadable`]'s vocabulary with the one distinction a\"] # [doc = \" player needs and a list does not: media the host holds and nothing on this\"] # [doc = \" machine can decode is neither loading nor broken, and calling it either\"] # [doc = \" would send the reader looking for the wrong repair.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum MediaAvailability { # [doc = \" Nothing has been handed to the transport yet.\"] # [default] Idle, # [doc = \" The transport is opening the media.\"] Loading, # [doc = \" There is no backend on this machine that can play it, in the\"] # [doc = \" backend's own words.\"] NoBackend (MediaError), # [doc = \" The media was opened and could not be read, in the backend's words.\"] Failed (MediaError), # [doc = \" The transport holds the media and can move it.\"] Ready, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::transport::MediaAvailability::error",
      "name": "error",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn error (& self) -> Option<& MediaError>",
      "cfg": [],
      "target": "MediaAvailability"
    },
    {
      "id": "gpui_kit::media::transport::MediaAvailability::is_ready",
      "name": "is_ready",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_ready (& self) -> bool",
      "cfg": [],
      "target": "MediaAvailability"
    },
    {
      "id": "gpui_kit::media::transport::MediaAvailability::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "The name a semantic node publishes.",
      "documentation": "The name a semantic node publishes.",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "MediaAvailability"
    },
    {
      "id": "gpui_kit::media::transport::MediaAvailability::reason",
      "name": "reason",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "The backend's own sentence, when it gave one.",
      "documentation": "The backend's own sentence, when it gave one.",
      "signature": "pub fn reason (& self) -> Option<SharedString>",
      "cfg": [],
      "target": "MediaAvailability"
    },
    {
      "id": "gpui_kit::media::transport::MediaCapabilities",
      "name": "MediaCapabilities",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "Playback features one transport can actually honor.",
      "documentation": "Playback features one transport can actually honor.\n\nThis is runtime data. Components use it instead of target checks, so a\ncompiled-in backend that failed to initialize does not leave dead controls\non screen and a future adapter can expose only the operations it supports.",
      "signature": "# [doc = \" Playback features one transport can actually honor.\"] # [doc = \"\"] # [doc = \" This is runtime data. Components use it instead of target checks, so a\"] # [doc = \" compiled-in backend that failed to initialize does not leave dead controls\"] # [doc = \" on screen and a future adapter can expose only the operations it supports.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct MediaCapabilities { pub audio : bool, pub video : bool, pub seek : bool, pub volume : bool, pub rates : bool, pub native_tracks : bool, pub output_selection : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::transport::MediaCapabilities::can_play",
      "name": "can_play",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn can_play (self) -> bool",
      "cfg": [],
      "target": "MediaCapabilities"
    },
    {
      "id": "gpui_kit::media::transport::MediaCapabilities::none",
      "name": "none",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn none () -> Self",
      "cfg": [],
      "target": "MediaCapabilities"
    },
    {
      "id": "gpui_kit::media::transport::MediaCapabilities::standard",
      "name": "standard",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "The operations the original transport contract promised before capabilities became explicit. This default preserves custom transport implementations while letting them override any unsupported operation.",
      "documentation": "The operations the original transport contract promised before\ncapabilities became explicit. This default preserves custom transport\nimplementations while letting them override any unsupported operation.",
      "signature": "pub const fn standard () -> Self",
      "cfg": [],
      "target": "MediaCapabilities"
    },
    {
      "id": "gpui_kit::media::transport::MediaCommand",
      "name": "MediaCommand",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "What a surface asks a transport for. It decides none of it.",
      "documentation": "What a surface asks a transport for. It decides none of it.",
      "signature": "# [doc = \" What a surface asks a transport for. It decides none of it.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub enum MediaCommand { Play, Pause, # [doc = \" Go to this many seconds.\"] Seek (f32), SetVolume (f32), ToggleMute, SetSpeed (f32), Step (TrackStep), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::transport::MediaCommand::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "The name a semantic node and an event log use.",
      "documentation": "The name a semantic node and an event log use.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "MediaCommand"
    },
    {
      "id": "gpui_kit::media::transport::MediaError",
      "name": "MediaError",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "A machine-readable media category and a caller-facing diagnostic.",
      "documentation": "A machine-readable media category and a caller-facing diagnostic.\n\nConsumers branch on [`MediaErrorKind`] and may show `detail`; they never\nneed to parse a platform sentence to decide whether a backend is missing,\na source is invalid, or playback failed.",
      "signature": "# [doc = \" A machine-readable media category and a caller-facing diagnostic.\"] # [doc = \"\"] # [doc = \" Consumers branch on [`MediaErrorKind`] and may show `detail`; they never\"] # [doc = \" need to parse a platform sentence to decide whether a backend is missing,\"] # [doc = \" a source is invalid, or playback failed.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct MediaError { kind : MediaErrorKind, detail : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::transport::MediaError::category",
      "name": "category",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn category (& self) -> MediaErrorKind",
      "cfg": [],
      "target": "MediaError"
    },
    {
      "id": "gpui_kit::media::transport::MediaError::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn detail (& self) -> & str",
      "cfg": [],
      "target": "MediaError"
    },
    {
      "id": "gpui_kit::media::transport::MediaError::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (kind : MediaErrorKind, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MediaError"
    },
    {
      "id": "gpui_kit::media::transport::MediaErrorKind",
      "name": "MediaErrorKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "Stable category for a media backend failure or refusal.",
      "documentation": "Stable category for a media backend failure or refusal.",
      "signature": "# [doc = \" Stable category for a media backend failure or refusal.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] # [non_exhaustive] pub enum MediaErrorKind { NoBackend, InvalidSource, Open, Playback, Refused, Failed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::transport::MediaErrorKind::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn name (self) -> & 'static str",
      "cfg": [],
      "target": "MediaErrorKind"
    },
    {
      "id": "gpui_kit::media::transport::MediaEvent",
      "name": "MediaEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "What a player surface reports. It applies none of it: the transport already did or already refused, and this says which.",
      "documentation": "What a player surface reports. It applies none of it: the transport\nalready did or already refused, and this says which.",
      "signature": "# [doc = \" What a player surface reports. It applies none of it: the transport\"] # [doc = \" already did or already refused, and this says which.\"] # [derive (Debug, Clone, PartialEq)] pub enum MediaEvent { # [doc = \" The transport took the command.\"] Applied (MediaCommand), # [doc = \" The transport declined, and this is why.\"] Refused (MediaCommand, MediaError), # [doc = \" The transport does not implement the command.\"] Unsupported (MediaCommand), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::transport::MediaEvent::command",
      "name": "command",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn command (& self) -> MediaCommand",
      "cfg": [],
      "target": "MediaEvent"
    },
    {
      "id": "gpui_kit::media::transport::MediaEvent::of",
      "name": "of",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "Pairs a command with what the transport answered.",
      "documentation": "Pairs a command with what the transport answered.",
      "signature": "pub fn of (command : MediaCommand, outcome : MediaOutcome) -> Self",
      "cfg": [],
      "target": "MediaEvent"
    },
    {
      "id": "gpui_kit::media::transport::MediaOrigin",
      "name": "MediaOrigin",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "Where a surface's playback facts came from.",
      "documentation": "Where a surface's playback facts came from.",
      "signature": "# [doc = \" Where a surface's playback facts came from.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum MediaOrigin { # [doc = \" A real player: a decoder, an output device, and a clock that advances\"] # [doc = \" on its own.\"] Platform, # [doc = \" A deterministic stand-in. Nothing is decoded and no clock runs.\"] Fixture, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::transport::MediaOrigin::is_fixture",
      "name": "is_fixture",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_fixture (self) -> bool",
      "cfg": [],
      "target": "MediaOrigin"
    },
    {
      "id": "gpui_kit::media::transport::MediaOrigin::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "The name a semantic node publishes, so a test reads where the facts came from rather than which caption was drawn for them.",
      "documentation": "The name a semantic node publishes, so a test reads where the facts\ncame from rather than which caption was drawn for them.",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "MediaOrigin"
    },
    {
      "id": "gpui_kit::media::transport::MediaOutcome",
      "name": "MediaOutcome",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "What the transport did with a command.",
      "documentation": "What the transport did with a command.",
      "signature": "# [doc = \" What the transport did with a command.\"] # [derive (Debug, Clone, PartialEq)] pub enum MediaOutcome { # [doc = \" The transport took it. The next snapshot says what that produced;\"] # [doc = \" nothing here promises the change is already visible.\"] Applied, # [doc = \" The transport declined, in its own words.\"] Refused (MediaError), # [doc = \" This backend does not implement this command at all. It is not a\"] # [doc = \" failure and not a refusal, and a surface may drop the control instead\"] # [doc = \" of offering one that never works.\"] Unsupported, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::transport::MediaOutcome::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "MediaOutcome"
    },
    {
      "id": "gpui_kit::media::transport::MediaSnapshot",
      "name": "MediaSnapshot",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "Everything a player surface draws, as the transport reports it.",
      "documentation": "Everything a player surface draws, as the transport reports it.",
      "signature": "# [doc = \" Everything a player surface draws, as the transport reports it.\"] # [derive (Debug, Clone, PartialEq)] pub struct MediaSnapshot { pub availability : MediaAvailability, pub state : TransportState, # [doc = \" Where the head is, in seconds.\"] pub position : f32, pub duration : TransportDuration, pub volume : f32, pub muted : bool, pub speed : f32, # [doc = \" The spans the backend already holds. An empty list draws no buffer,\"] # [doc = \" rather than a full one.\"] pub buffered : Vec<BufferedRange>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::transport::MediaTransport",
      "name": "MediaTransport",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::transport",
      "path": "gpui_kit::media::transport",
      "source": "crates/gpui-kit/src/media/transport.rs",
      "summary": "A player, seen from a component that will never be one.",
      "documentation": "A player, seen from a component that will never be one.\n\nImplementations answer through `&self` and hold whatever interior\nmutability they need, because a surface holds an [`Rc`] of one and is\nrebuilt every frame.",
      "signature": "# [doc = \" A player, seen from a component that will never be one.\"] # [doc = \"\"] # [doc = \" Implementations answer through `&self` and hold whatever interior\"] # [doc = \" mutability they need, because a surface holds an [`Rc`] of one and is\"] # [doc = \" rebuilt every frame.\"] pub trait MediaTransport : std::fmt::Debug { # [doc = \" Whether these facts come from a real player or from a fixture.\"] fn origin (& self) -> MediaOrigin; # [doc = \" Operations this transport can currently honor.\"] fn capabilities (& self) -> MediaCapabilities { MediaCapabilities::standard () } # [doc = \" What is true now. Called once per frame; it must not block.\"] fn snapshot (& self) -> MediaSnapshot; # [doc = \" Asks for a change, and answers what became of the request.\"] fn apply (& self, command : MediaCommand) -> MediaOutcome; }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer",
      "name": "VideoPlayer",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "A player for one piece of video.",
      "documentation": "A player for one piece of video.",
      "signature": "# [doc = \" A player for one piece of video.\"] # [derive (IntoElement)] pub struct VideoPlayer { ident : Ident, title : Option<SharedString>, transport : Option<Rc<dyn MediaTransport>>, frame : Option<FrameSupplier>, poster : Option<FrameSupplier>, ratio : f32, elapsed : Option<SharedString>, remaining : Option<SharedString>, step : Option<f32>, speeds : Vec<f32>, control_size : ControlSize, presentation : Option<(MediaPresentation, SharedString)>, presentation_refusal : Option<SharedString>, on_presentation : Option<PresentationHandler>, disabled : bool, on_event : Option<EventHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::elapsed",
      "name": "elapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "How far in the video is, in the host's own words.",
      "documentation": "How far in the video is, in the host's own words.",
      "signature": "pub fn elapsed (mut self, elapsed : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::frame",
      "name": "frame",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "Supplies the element that draws the current frame.",
      "documentation": "Supplies the element that draws the current frame.\n\nAnswering `None` is a statement, not a gap: the surface falls back to\nthe poster and says why the picture is not moving.",
      "signature": "pub fn frame (mut self, supplier : impl Fn (& mut Window, & mut App) -> Option<AnyElement> + 'static,) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "A player with no transport and no frames, which is a player that says there is no playback here.",
      "documentation": "A player with no transport and no frames, which is a player that says\nthere is no playback here.",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (& MediaEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::on_presentation_request",
      "name": "on_presentation_request",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "Requests native presentation independently of decoder commands. The host must update `presentation` after native completion/dismissal, or report a refusal.",
      "documentation": "Requests native presentation independently of decoder commands. The host must\nupdate `presentation` after native completion/dismissal, or report a refusal.",
      "signature": "pub fn on_presentation_request (mut self, handler : impl Fn (MediaPresentation, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::poster",
      "name": "poster",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "Supplies the still shown when there are no frames.",
      "documentation": "Supplies the still shown when there are no frames.",
      "signature": "pub fn poster (mut self, supplier : impl Fn (& mut Window, & mut App) -> Option<AnyElement> + 'static,) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::presentation",
      "name": "presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "The verified native video presentation and localized next-action label. Omit when the host cannot present this media. This never enters window fullscreen.",
      "documentation": "The verified native video presentation and localized next-action label.\nOmit when the host cannot present this media. This never enters window fullscreen.",
      "signature": "pub fn presentation (mut self, state : MediaPresentation, label : impl Into<SharedString>,) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::presentation_refused",
      "name": "presentation_refused",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "The host refused presentation; retain the actual state and show its reason.",
      "documentation": "The host refused presentation; retain the actual state and show its reason.",
      "signature": "pub fn presentation_refused (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::ratio",
      "name": "ratio",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "The picture's own shape, width divided by height.",
      "documentation": "The picture's own shape, width divided by height.",
      "signature": "pub fn ratio (mut self, ratio : f32) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::ratio_of",
      "name": "ratio_of",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "The picture's shape as the two numbers the caller already has.",
      "documentation": "The picture's shape as the two numbers the caller already has.",
      "signature": "pub fn ratio_of (self, width : f32, height : f32) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::remaining",
      "name": "remaining",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "How much is left, in the host's own words.",
      "documentation": "How much is left, in the host's own words.",
      "signature": "pub fn remaining (mut self, remaining : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::speeds",
      "name": "speeds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "The speeds the transport offers. Offering none leaves the control out.",
      "documentation": "The speeds the transport offers. Offering none leaves the control out.",
      "signature": "pub fn speeds (mut self, speeds : impl IntoIterator<Item = f32>) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::step_seconds",
      "name": "step_seconds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "How far one arrow key jumps, in seconds.",
      "documentation": "How far one arrow key jumps, in seconds.",
      "signature": "pub fn step_seconds (mut self, seconds : f32) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::title",
      "name": "title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn title (mut self, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::video_player::VideoPlayer::transport",
      "name": "transport",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::video_player",
      "path": "gpui_kit::media::video_player",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "The player behind the controls.",
      "documentation": "The player behind the controls.",
      "signature": "pub fn transport (mut self, transport : Rc<dyn MediaTransport>) -> Self",
      "cfg": [],
      "target": "VideoPlayer"
    },
    {
      "id": "gpui_kit::media::waveform::AudioWaveform",
      "name": "AudioWaveform",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::waveform",
      "path": "gpui_kit::media::waveform",
      "source": "crates/gpui-kit/src/media/waveform.rs",
      "summary": "A measured waveform the host already sampled.",
      "documentation": "A measured waveform the host already sampled.",
      "signature": "# [doc = \" A measured waveform the host already sampled.\"] # [derive (IntoElement)] pub struct AudioWaveform { ident : Ident, peaks : Vec<f32>, playhead : Option<f32>, state : AudioWaveformState, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::waveform::AudioWaveform::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::waveform",
      "path": "gpui_kit::media::waveform",
      "source": "crates/gpui-kit/src/media/waveform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "AudioWaveform"
    },
    {
      "id": "gpui_kit::media::waveform::AudioWaveform::peaks",
      "name": "peaks",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::waveform",
      "path": "gpui_kit::media::waveform",
      "source": "crates/gpui-kit/src/media/waveform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn peaks (mut self, peaks : impl IntoIterator<Item = f32>) -> Self",
      "cfg": [],
      "target": "AudioWaveform"
    },
    {
      "id": "gpui_kit::media::waveform::AudioWaveform::playhead",
      "name": "playhead",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::waveform",
      "path": "gpui_kit::media::waveform",
      "source": "crates/gpui-kit/src/media/waveform.rs",
      "summary": "Normalized playhead. Without one, nothing is drawn as played.",
      "documentation": "Normalized playhead. Without one, nothing is drawn as played.",
      "signature": "pub fn playhead (mut self, fraction : f32) -> Self",
      "cfg": [],
      "target": "AudioWaveform"
    },
    {
      "id": "gpui_kit::media::waveform::AudioWaveform::state",
      "name": "state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::waveform",
      "path": "gpui_kit::media::waveform",
      "source": "crates/gpui-kit/src/media/waveform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn state (mut self, state : AudioWaveformState) -> Self",
      "cfg": [],
      "target": "AudioWaveform"
    },
    {
      "id": "gpui_kit::media::waveform::AudioWaveformState",
      "name": "AudioWaveformState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::waveform",
      "path": "gpui_kit::media::waveform",
      "source": "crates/gpui-kit/src/media/waveform.rs",
      "summary": "How the envelope was asked for.",
      "documentation": "How the envelope was asked for.",
      "signature": "# [doc = \" How the envelope was asked for.\"] # [derive (Debug, Clone, PartialEq)] pub enum AudioWaveformState { Loading, Ready, Empty, Unavailable (SharedString), Error (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::media::waveform::AudioWaveformState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "media::waveform",
      "path": "gpui_kit::media::waveform",
      "source": "crates/gpui-kit/src/media/waveform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "AudioWaveformState"
    },
    {
      "id": "gpui_kit::motion::animated::Animated",
      "name": "Animated",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animated",
      "path": "gpui_kit::motion::animated",
      "source": "crates/gpui-kit/src/motion/animated.rs",
      "summary": "A token-backed entrance in one call.",
      "documentation": "A token-backed entrance in one call.",
      "signature": "# [doc = \" A token-backed entrance in one call.\"] pub trait Animated : Styled + IntoElement + Sized + 'static { # [doc = \" Runs `entrance` on this element.\"] # [doc = \"\"] # [doc = \" The travel is applied as a relative offset, so the element occupies its\"] # [doc = \" settled box for the whole run and nothing beside it moves. Under\"] # [doc = \" [`gpui::App::reduce_motion`] GPUI finishes the animation immediately,\"] # [doc = \" which lands the element exactly where it was going to be anyway.\"] fn animate_in (self, id : impl Into<ElementId>, cx : & App, entrance : Entrance,) -> AnimationElement<Self> { self . animate_with (id, entrance, entrance . spec (cx . theme ())) } # [doc = \" The same arrival, delayed into place as one member of a group.\"] # [doc = \"\"] # [doc = \" The wave is capped however long the group is, so a five hundred row\"] # [doc = \" list finishes arriving in the same window an eight row one does.\"] fn animate_in_staggered (self, id : impl Into<ElementId>, cx : & App, entrance : Entrance, index : usize, count : usize,) -> AnimationElement<Self> { let spec = Stagger::rows (cx . theme ()) . spec (index, count, entrance . spec (cx . theme ())); self . animate_with (id, entrance, spec) } # [doc = \" The arrival with a specification the caller has already composed —\"] # [doc = \" sequenced after another, delayed, or re-sprung.\"] fn animate_with (self, id : impl Into<ElementId>, entrance : Entrance, spec : MotionSpec,) -> AnimationElement<Self> { let travel = entrance . travel (); let from = entrance . opening_opacity (); self . with_animation (id, spec . animation (), move | element, progress | { let element = element . opacity (from + (1.0 - from) * progress); if travel == 0.0 { element } else { element . relative () . top (px (travel * (1.0 - progress))) } }) } # [doc = \" The response an element gives when the value it is showing changes.\"] # [doc = \"\"] # [doc = \" Short and opacity-only, because it is answering something the user has\"] # [doc = \" just done and the element is not going anywhere.\"] fn animate_change (self, id : impl Into<ElementId>, cx : & App) -> AnimationElement<Self> { self . animate_with (id, Entrance::Fade, state_change (cx . theme ())) } # [doc = \" The arrival on a named spring rather than along a curve.\"] fn animate_sprung (self, id : impl Into<ElementId>, cx : & App, entrance : Entrance, preset : SpringPreset,) -> AnimationElement<Self> { let spec = MotionSpec::sprung (Spring::preset (cx . theme (), preset)); self . animate_with (id, entrance, spec) } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::animated::Entrance",
      "name": "Entrance",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animated",
      "path": "gpui_kit::motion::animated",
      "source": "crates/gpui-kit/src/motion/animated.rs",
      "summary": "How an element arrives.",
      "documentation": "How an element arrives.\n\nEach variant is a claim about what the element is, not about how far it\nshould travel: a menu answering a click and a dialog taking the page over\narrive differently because they mean different things, and the distances\nand curves that express that live in the token document.",
      "signature": "# [doc = \" How an element arrives.\"] # [doc = \"\"] # [doc = \" Each variant is a claim about what the element is, not about how far it\"] # [doc = \" should travel: a menu answering a click and a dialog taking the page over\"] # [doc = \" arrive differently because they mean different things, and the distances\"] # [doc = \" and curves that express that live in the token document.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum Entrance { # [doc = \" Opacity alone.\"] # [doc = \"\"] # [doc = \" The arrival for anything whose position is load-bearing while it\"] # [doc = \" arrives — a row in a list, a cell in a grid — because a rise is a\"] # [doc = \" layout input and an element that slid into place would publish a\"] # [doc = \" moving box the whole way.\"] Fade, # [doc = \" Opacity with a short rise: a block of content replacing what was there.\"] # [default] Rise, # [doc = \" The opening a menu makes: quick, and downward from its anchor.\"] Menu, # [doc = \" The arrival a modal makes, on a spring, so it lands with weight.\"] Dialog, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::animator::Animator",
      "name": "Animator",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "A scrubbable playhead over a run of a known length.",
      "documentation": "A scrubbable playhead over a run of a known length.\n\nThe head is a fraction of the whole run, which is the same clock\n[`Motion::sample`] and [`Sequence::progress`] read, so one animator drives\neither.\n\nA caller holds one in an entity — `cx.new(|_| Animator::new(total))` — and\nasks it where the head is while painting. A playing animator needs the\nframe after this one, so the view that owns it requests one; an animator\nthat is paused or has reached an end has nothing to ask for, which is what\n[`Animator::running`] answers.",
      "signature": "# [doc = \" A scrubbable playhead over a run of a known length.\"] # [doc = \"\"] # [doc = \" The head is a fraction of the whole run, which is the same clock\"] # [doc = \" [`Motion::sample`] and [`Sequence::progress`] read, so one animator drives\"] # [doc = \" either.\"] # [doc = \"\"] # [doc = \" A caller holds one in an entity — `cx.new(|_| Animator::new(total))` — and\"] # [doc = \" asks it where the head is while painting. A playing animator needs the\"] # [doc = \" frame after this one, so the view that owns it requests one; an animator\"] # [doc = \" that is paused or has reached an end has nothing to ask for, which is what\"] # [doc = \" [`Animator::running`] answers.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Animator { duration : Duration, # [doc = \" Where the head was at `anchor`, or where it simply is when paused.\"] head : f32, # [doc = \" The instant `head` was true, set only while playing.\"] anchor : Option<Instant>, speed : f32, reversed : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::animator::Animator::across",
      "name": "across",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "A playhead over every step of a sequence.",
      "documentation": "A playhead over every step of a sequence.",
      "signature": "pub fn across (sequence : & Sequence) -> Self",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::duration",
      "name": "duration",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn duration (self) -> Duration",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::elapsed",
      "name": "elapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "How far into the run the head is at `now`, as a time rather than a fraction, which is what a caller showing a position reads.",
      "documentation": "How far into the run the head is at `now`, as a time rather than a\nfraction, which is what a caller showing a position reads.",
      "signature": "pub fn elapsed (self, now : Instant) -> Duration",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::finish",
      "name": "finish",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "Parks the head at the end it is travelling towards and stops.",
      "documentation": "Parks the head at the end it is travelling towards and stops.\n\nThis is what [`reduce_motion`](super::reduce_motion) asks for: the run\nis over, and it is over where it was going to end.",
      "signature": "pub fn finish (& mut self)",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::finished",
      "name": "finished",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "Whether the head has reached the end it is travelling towards.",
      "documentation": "Whether the head has reached the end it is travelling towards.",
      "signature": "pub fn finished (self, now : Instant) -> bool",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::head",
      "name": "head",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "Where the head is at `now`, between 0 and 1.",
      "documentation": "Where the head is at `now`, between 0 and 1.\n\nA pure function of the anchor, so the same animator and the same\ninstant always report the same place, and a test can hand it an\ninstant that has not happened.",
      "signature": "pub fn head (self, now : Instant) -> f32",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::is_playing",
      "name": "is_playing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_playing (self) -> bool",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::is_reversed",
      "name": "is_reversed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_reversed (self) -> bool",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "A paused playhead at the start of a run of `duration`.",
      "documentation": "A paused playhead at the start of a run of `duration`.",
      "signature": "pub fn new (duration : Duration) -> Self",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::over",
      "name": "over",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "A playhead over a described motion, including its delay.",
      "documentation": "A playhead over a described motion, including its delay.",
      "signature": "pub fn over (theme : & Theme, motion : & Motion) -> Self",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::pause",
      "name": "pause",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "Stops the head where it is at `now`.",
      "documentation": "Stops the head where it is at `now`.\n\nA paused animator has no clock in it: it reports the same place\nhowever long it is left.",
      "signature": "pub fn pause (& mut self, now : Instant)",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::play",
      "name": "play",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "Starts the head moving from wherever it is.",
      "documentation": "Starts the head moving from wherever it is.",
      "signature": "pub fn play (& mut self, now : Instant)",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::reverse",
      "name": "reverse",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "Turns the head around without moving it, so it retraces exactly the path it came along.",
      "documentation": "Turns the head around without moving it, so it retraces exactly the\npath it came along.",
      "signature": "pub fn reverse (& mut self, now : Instant)",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::rewind",
      "name": "rewind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "Puts the head back at the start of the run, stopped and forwards.",
      "documentation": "Puts the head back at the start of the run, stopped and forwards.",
      "signature": "pub fn rewind (& mut self)",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::running",
      "name": "running",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "Whether the head is still moving at `now`: playing, and not already parked against the end it is travelling towards.",
      "documentation": "Whether the head is still moving at `now`: playing, and not already\nparked against the end it is travelling towards.\n\nThis is what a view asks before requesting another frame.",
      "signature": "pub fn running (self, now : Instant) -> bool",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::sample",
      "name": "sample",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "What `motion` looks like where the head is at `now`.",
      "documentation": "What `motion` looks like where the head is at `now`.",
      "signature": "pub fn sample (self, theme : & Theme, motion : & Motion, now : Instant) -> MotionSample",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::scrub",
      "name": "scrub",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "Moves the head to `head` without changing whether it is playing.",
      "documentation": "Moves the head to `head` without changing whether it is playing.\n\nA head that is not a number is not a place, so it is refused rather\nthan propagated: a NaN here would reach layout as a NaN offset.",
      "signature": "pub fn scrub (& mut self, now : Instant, head : f32)",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::set_speed",
      "name": "set_speed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "Scales how fast the head travels, without changing its direction.",
      "documentation": "Scales how fast the head travels, without changing its direction.\n\nZero holds the head where it is while leaving the animator playing,\nwhich is a different state from paused: it resumes at whatever speed\nit is next given.",
      "signature": "pub fn set_speed (& mut self, now : Instant, speed : f32)",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::speed",
      "name": "speed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn speed (self) -> f32",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::animator::Animator::toggle",
      "name": "toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::animator",
      "path": "gpui_kit::motion::animator",
      "source": "crates/gpui-kit/src/motion/animator.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn toggle (& mut self, now : Instant)",
      "cfg": [],
      "target": "Animator"
    },
    {
      "id": "gpui_kit::motion::busy::Activity",
      "name": "Activity",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::busy",
      "path": "gpui_kit::motion::busy",
      "source": "crates/gpui-kit/src/motion/busy.rs",
      "summary": "The shape of a piece of work that is currently under way.",
      "documentation": "The shape of a piece of work that is currently under way.",
      "signature": "# [doc = \" The shape of a piece of work that is currently under way.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum Activity { # [doc = \" The extent is known and the work is moving through it.\"] Advancing, # [doc = \" It is running, and how much is left is not known.\"] Working, # [doc = \" Something is being weighed, with no progress to report.\"] Deliberating, # [doc = \" A live state is continuously present, without a measurable extent.\"] Signaling, # [doc = \" Traffic is moving from a source to a destination.\"] Transmitting, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::busy::Activity::curve",
      "name": "curve",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::busy",
      "path": "gpui_kit::motion::busy",
      "source": "crates/gpui-kit/src/motion/busy.rs",
      "summary": "The curve the repetition runs on.",
      "documentation": "The curve the repetition runs on.\n\nA turn is linear because any easing on a loop puts a stall at the seam,\nand a mark that hesitates once per revolution reads as a mark that is\ncatching on something. Transmission is linear for the same reason: a\nhighlight that slows before its destination reads as congestion. The\nother three ease, because each has a natural turning point.",
      "signature": "pub fn curve (self, theme : & Theme) -> CubicBezier",
      "cfg": [],
      "target": "Activity"
    },
    {
      "id": "gpui_kit::motion::busy::Activity::period_ms",
      "name": "period_ms",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::busy",
      "path": "gpui_kit::motion::busy",
      "source": "crates/gpui-kit/src/motion/busy.rs",
      "summary": "How long one repetition takes.",
      "documentation": "How long one repetition takes.",
      "signature": "pub fn period_ms (self, theme : & Theme) -> u64",
      "cfg": [],
      "target": "Activity"
    },
    {
      "id": "gpui_kit::motion::busy::breath",
      "name": "breath",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::busy",
      "path": "gpui_kit::motion::busy",
      "source": "crates/gpui-kit/src/motion/busy.rs",
      "summary": "Maps a pulse wave into breathing opacity, floored so the element never vanishes: a mark that reached nothing would read as having been removed rather than as still working.",
      "documentation": "Maps a pulse wave into breathing opacity, floored so the element never\nvanishes: a mark that reached nothing would read as having been removed\nrather than as still working.",
      "signature": "pub fn breath (wave : f32) -> f32",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::busy::breathe",
      "name": "breathe",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::busy",
      "path": "gpui_kit::motion::busy",
      "source": "crates/gpui-kit/src/motion/busy.rs",
      "summary": "Breathes an element, for work that has nothing to report yet.",
      "documentation": "Breathes an element, for work that has nothing to report yet.\n\nOpacity only. A breath that also moved or resized would shift the text\nbeside it on every cycle, and the whole point of this one is that it is the\nquietest of the three.",
      "signature": "pub fn breathe<E> (element : E, id : impl Into<ElementId>, theme : & Theme, cx : & App) -> AnyElement where E : Styled + IntoElement + 'static,",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::busy::breathe_as",
      "name": "breathe_as",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::busy",
      "path": "gpui_kit::motion::busy",
      "source": "crates/gpui-kit/src/motion/busy.rs",
      "summary": "Breathes on the period of `activity`, for a mark that can only fade.",
      "documentation": "Breathes on the period of `activity`, for a mark that can only fade.\n\nA circle has nothing for a rotation to read against, so both a working\nand a deliberating dot use a breath. The period still tells them apart:\nworking is the faster of the two, because it is the stronger claim.",
      "signature": "pub fn breathe_as<E> (element : E, id : impl Into<ElementId>, activity : Activity, theme : & Theme, cx : & App,) -> AnyElement where E : Styled + IntoElement + 'static,",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::busy::breathing_dot",
      "name": "breathing_dot",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::busy",
      "path": "gpui_kit::motion::busy",
      "source": "crates/gpui-kit/src/motion/busy.rs",
      "summary": "A dot that breathes, for a place with room for a mark but not a glyph.",
      "documentation": "A dot that breathes, for a place with room for a mark but not a glyph.\n\nThe size is the caller's, because this sits inside layouts that have\nalready decided how much room the mark gets.",
      "signature": "pub fn breathing_dot (id : impl Into<ElementId>, theme : & Theme, color : gpui::Hsla, size : f32, cx : & App,) -> AnyElement",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::busy::spin",
      "name": "spin",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::busy",
      "path": "gpui_kit::motion::busy",
      "source": "crates/gpui-kit/src/motion/busy.rs",
      "summary": "Turns a glyph, for work whose remaining extent is unknown.",
      "documentation": "Turns a glyph, for work whose remaining extent is unknown.\n\nTakes an [`Svg`] rather than any element because rotation is a transform\nand GPUI carries transforms on `Svg` alone. [`crate::display::icon::paint`]\nis the supported way to get one that already honours reading direction.",
      "signature": "pub fn spin (icon : Svg, id : impl Into<ElementId>, theme : & Theme, cx : & App) -> AnyElement",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::busy::sweep",
      "name": "sweep",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::busy",
      "path": "gpui_kit::motion::busy",
      "source": "crates/gpui-kit/src/motion/busy.rs",
      "summary": "A band travelling across whatever it is placed in, for work of known extent.",
      "documentation": "A band travelling across whatever it is placed in, for work of known extent.\n\nReturns an absolutely positioned overlay, so the caller adds it as a child\nof a `relative().overflow_hidden()` element and nothing it already draws\nmoves. It paints in `color`, which callers set to the accent or to the\ntrack they are sweeping over.",
      "signature": "pub fn sweep (id : impl Into<ElementId>, theme : & Theme, color : gpui::Hsla, cx : & App,) -> Option<AnyElement>",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::description::Motion",
      "name": "Motion",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "A motion written as what moves rather than as a closure that moves it.",
      "documentation": "A motion written as what moves rather than as a closure that moves it.\n\nA description resolves to a [`MotionSpec`] — [`Motion::spec`] — so anything\nthat already runs a specification runs a description without knowing it is\none. What the description adds is [`Motion::sample`]: the values the\nproperties hold at a point in the run, which is what makes a motion\ntestable without a window and scrubbable by an [`Animator`](super::Animator).\n\nThe curve is kept as an [`Easing`] rather than as resolved control points,\nbecause the point of naming a curve is that the token document decides what\nit is. That is why sampling takes a theme.",
      "signature": "# [doc = \" A motion written as what moves rather than as a closure that moves it.\"] # [doc = \"\"] # [doc = \" A description resolves to a [`MotionSpec`] — [`Motion::spec`] — so anything\"] # [doc = \" that already runs a specification runs a description without knowing it is\"] # [doc = \" one. What the description adds is [`Motion::sample`]: the values the\"] # [doc = \" properties hold at a point in the run, which is what makes a motion\"] # [doc = \" testable without a window and scrubbable by an [`Animator`](super::Animator).\"] # [doc = \"\"] # [doc = \" The curve is kept as an [`Easing`] rather than as resolved control points,\"] # [doc = \" because the point of naming a curve is that the token document decides what\"] # [doc = \" it is. That is why sampling takes a theme.\"] # [derive (Debug, Clone, PartialEq)] pub struct Motion { duration_ms : u64, delay_ms : u64, easing : Easing, alternate : bool, tracks : Vec<Track>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::description::Motion::alternating",
      "name": "alternating",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "Plays the run forwards over its first half and backwards over its second, so the description returns to where it started.",
      "documentation": "Plays the run forwards over its first half and backwards over its\nsecond, so the description returns to where it started.\n\nThe duration is still the whole run: an alternating motion of 400ms\narrives at its far end after 200ms and is back where it began at 400.",
      "signature": "pub fn alternating (mut self) -> Self",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::delay",
      "name": "delay",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn delay (mut self, delay_ms : u64) -> Self",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::delay_ms",
      "name": "delay_ms",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn delay_ms (& self) -> u64",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::duration",
      "name": "duration",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn duration (mut self, duration_ms : u64) -> Self",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::duration_ms",
      "name": "duration_ms",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn duration_ms (& self) -> u64",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::eased",
      "name": "eased",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn eased (mut self, easing : impl Into<Easing>) -> Self",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::easing",
      "name": "easing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn easing (& self) -> Easing",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::is_alternating",
      "name": "is_alternating",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_alternating (& self) -> bool",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (duration_ms : u64) -> Self",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::progress",
      "name": "progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "The eased progress at `raw`, which is `raw` through the whole run including the delay — the same clock [`MotionSpec::progress`] reads.",
      "documentation": "The eased progress at `raw`, which is `raw` through the whole run\nincluding the delay — the same clock [`MotionSpec::progress`] reads.",
      "signature": "pub fn progress (& self, theme : & Theme, raw : f32) -> f32",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::properties",
      "name": "properties",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "The properties this motion describes, in the order they were given.",
      "documentation": "The properties this motion describes, in the order they were given.",
      "signature": "pub fn properties (& self) -> Vec<MotionProperty>",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::sample",
      "name": "sample",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "What every property holds when the run is `raw` through.",
      "documentation": "What every property holds when the run is `raw` through.\n\nPure: no window, no clock, no element. Properties the motion never\nmentions report their neutral value, so a sample is always complete\nand a caller never has to ask which of the four were described.",
      "signature": "pub fn sample (& self, theme : & Theme, raw : f32) -> MotionSample",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::spec",
      "name": "spec",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "The description as the specification everything else already runs.",
      "documentation": "The description as the specification everything else already runs.",
      "signature": "pub fn spec (& self, theme : & Theme) -> MotionSpec",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::track",
      "name": "track",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "A property that passes through stops given as `(offset, value)`, where the offset is a fraction of the run.",
      "documentation": "A property that passes through stops given as `(offset, value)`, where\nthe offset is a fraction of the run.\n\nStops may be given in any order and a property given twice keeps the\nlast description of it, so a caller building one up in a loop does not\nhave to check what it already said.",
      "signature": "pub fn track (mut self, property : MotionProperty, stops : impl IntoIterator<Item = (f32, f32)>,) -> Self",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::Motion::tween",
      "name": "tween",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "A property that travels straight from `from` to `to`.",
      "documentation": "A property that travels straight from `from` to `to`.",
      "signature": "pub fn tween (self, property : MotionProperty, from : f32, to : f32) -> Self",
      "cfg": [],
      "target": "Motion"
    },
    {
      "id": "gpui_kit::motion::description::MotionProperty",
      "name": "MotionProperty",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "A property a described motion can move.",
      "documentation": "A property a described motion can move.\n\nDeliberately short: these are the four values a caller can apply to any\nelement without publishing a different box than the settled one. A\ncomponent that animates its own colour, width or corner radius is animating\nsomething only it knows the meaning of, and reaches for\n[`Transition`](super::Transition) with the value in hand.",
      "signature": "# [doc = \" A property a described motion can move.\"] # [doc = \"\"] # [doc = \" Deliberately short: these are the four values a caller can apply to any\"] # [doc = \" element without publishing a different box than the settled one. A\"] # [doc = \" component that animates its own colour, width or corner radius is animating\"] # [doc = \" something only it knows the meaning of, and reaches for\"] # [doc = \" [`Transition`](super::Transition) with the value in hand.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum MotionProperty { Opacity, # [doc = \" Horizontal paint offset, in pixels, relative to the settled position.\"] X, # [doc = \" Vertical paint offset, in pixels, relative to the settled position.\"] Y, # [doc = \" A multiplier around the element's own size, where 1 is settled.\"] Scale, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::description::MotionProperty::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "MotionProperty"
    },
    {
      "id": "gpui_kit::motion::description::MotionProperty::neutral",
      "name": "neutral",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "The value the property has when nothing is animating it, which is also what a sample falls back to when the arithmetic that produced it did not yield a number.",
      "documentation": "The value the property has when nothing is animating it, which is also\nwhat a sample falls back to when the arithmetic that produced it did\nnot yield a number.",
      "signature": "pub fn neutral (self) -> f32",
      "cfg": [],
      "target": "MotionProperty"
    },
    {
      "id": "gpui_kit::motion::description::MotionSample",
      "name": "MotionSample",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "Where a described motion has got to: one value per property, ready to be applied to an element.",
      "documentation": "Where a described motion has got to: one value per property, ready to be\napplied to an element.",
      "signature": "# [doc = \" Where a described motion has got to: one value per property, ready to be\"] # [doc = \" applied to an element.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct MotionSample { # [doc = \" Already inside 0..=1, because an overshooting curve overshoots opacity\"] # [doc = \" too and GPUI has nothing to do with an element that is 106% opaque.\"] pub opacity : f32, pub x : f32, pub y : f32, pub scale : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::description::MotionSample::apply",
      "name": "apply",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "Applies the sample to an element as paint, never as layout input.",
      "documentation": "Applies the sample to an element as paint, never as layout input.\n\nThe offsets are relative, so the element occupies its settled box for\nthe whole run and nothing beside it moves — the same rule\n[`Animated::animate_in`](super::Animated::animate_in) follows.\n\n[`MotionSample::scale`] is not applied here, because GPUI carries a\nsubtree scale on `Svg` alone; a caller that has a scalable element\nreads the field and applies it itself.",
      "signature": "pub fn apply<E : Styled + IntoElement> (self, element : E) -> E",
      "cfg": [],
      "target": "MotionSample"
    },
    {
      "id": "gpui_kit::motion::description::MotionSample::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (self, property : MotionProperty) -> f32",
      "cfg": [],
      "target": "MotionSample"
    },
    {
      "id": "gpui_kit::motion::description::motion",
      "name": "motion",
      "kind": "macro",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "Writes a [`Motion`]: how long it takes, what curve it travels on, and what moves.",
      "documentation": "Writes a [`Motion`]: how long it takes, what curve it travels on, and what\nmoves.\n\n```\nlet arrive = gpui_kit::motion! {\nduration: 420;\ndelay: 40;\nease: overshoot;\nopacity: 0.0 => 1.0;\ny: 12.0 => 0.0;\n};\nassert_eq!(arrive.duration_ms(), 420);\n```\n\nThe entries, in any order and each ended by a semicolon:\n\n- `duration: <ms>;` and `delay: <ms>;`\n- `ease: <name>;` where the name is one of the [`Easing`] roles in\nsnake case — `linear`, `standard`, `ease_in`, `ease_out`, `ease_in_out`,\n`emphasized`, `overshoot`, `exit`, `settle` — or any expression that\nconverts into an [`Easing`], which is how a [`CubicBezier`](super::CubicBezier)\nis written;\n- `alternate;`, which plays the run out and back;\n- `opacity`, `x`, `y` or `scale`, each either `<from> => <to>;` or a stop\nlist `[<offset> => <value>, ...];`.\n\nValues are `f32` expressions, so `0.0` rather than `0`.\n\n```\nlet pulse = gpui_kit::motion! {\nduration: 600;\nease: linear;\nopacity: [0.0 => 0.4, 0.5 => 1.0, 1.0 => 0.4];\n};\nlet theme = gpui_kit::theme::Theme::studio_dark();\nassert!(pulse.sample(&theme, 0.5).opacity > pulse.sample(&theme, 0.0).opacity);\n```",
      "signature": "macro_rules! motion",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::description::sequence",
      "name": "sequence",
      "kind": "macro",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::description",
      "path": "gpui_kit::motion::description",
      "source": "crates/gpui-kit/src/motion/description.rs",
      "summary": "Writes a [`Sequence`](super::Sequence): specifications that run one after another, with an optional gap before any of them.",
      "documentation": "Writes a [`Sequence`](super::Sequence): specifications that run one after\nanother, with an optional gap before any of them.\n\n```\nuse gpui_kit::theme::Theme;\n\nlet theme = Theme::studio_dark();\nlet panel = gpui_kit::motion::menu(&theme);\nlet content = gpui_kit::motion::entrance(&theme);\n\nlet opening = gpui_kit::sequence![panel, +80 content];\nassert_eq!(opening.len(), 2);\nassert_eq!(\nopening.total(),\npanel.total() + content.total() + std::time::Duration::from_millis(80),\n);\n```\n\nAn entry is a [`MotionSpec`] expression. `+<ms>` before one delays it that\nmuch further past the end of the step before it, which is the same thing as\nwriting the delay on the specification — it is written here because that is\nwhere the gap is.",
      "signature": "macro_rules! sequence",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::easing::CubicBezier",
      "name": "CubicBezier",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::easing",
      "path": "gpui_kit::motion::easing",
      "source": "crates/gpui-kit/src/motion/easing.rs",
      "summary": "A CSS-compatible cubic-bezier curve, evaluated in pure Rust so a curve can be asserted without a window.",
      "documentation": "A CSS-compatible cubic-bezier curve, evaluated in pure Rust so a curve can\nbe asserted without a window.",
      "signature": "# [doc = \" A CSS-compatible cubic-bezier curve, evaluated in pure Rust so a curve can\"] # [doc = \" be asserted without a window.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct CubicBezier { pub x1 : f32, pub y1 : f32, pub x2 : f32, pub y2 : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::easing::CubicBezier::eval",
      "name": "eval",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::easing",
      "path": "gpui_kit::motion::easing",
      "source": "crates/gpui-kit/src/motion/easing.rs",
      "summary": "Evaluates the curve at `input`.",
      "documentation": "Evaluates the curve at `input`.\n\nThe result is not clamped to 0..1, because overshoot curves are\nexpected to exceed one before settling.",
      "signature": "pub fn eval (self, input : f32) -> f32",
      "cfg": [],
      "target": "CubicBezier"
    },
    {
      "id": "gpui_kit::motion::easing::CubicBezier::from_points",
      "name": "from_points",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::easing",
      "path": "gpui_kit::motion::easing",
      "source": "crates/gpui-kit/src/motion/easing.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn from_points (points : [f32; 4]) -> Self",
      "cfg": [],
      "target": "CubicBezier"
    },
    {
      "id": "gpui_kit::motion::easing::CubicBezier::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::easing",
      "path": "gpui_kit::motion::easing",
      "source": "crates/gpui-kit/src/motion/easing.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn new (x1 : f32, y1 : f32, x2 : f32, y2 : f32) -> Self",
      "cfg": [],
      "target": "CubicBezier"
    },
    {
      "id": "gpui_kit::motion::easing::Easing",
      "name": "Easing",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::easing",
      "path": "gpui_kit::motion::easing",
      "source": "crates/gpui-kit/src/motion/easing.rs",
      "summary": "A curve named by role rather than by control points.",
      "documentation": "A curve named by role rather than by control points.",
      "signature": "# [doc = \" A curve named by role rather than by control points.\"] # [derive (Debug, Clone, Copy, PartialEq, Default)] pub enum Easing { Linear, # [doc = \" The default for state changes that start and end on screen.\"] # [default] Standard, EaseIn, EaseOut, EaseInOut, # [doc = \" Fast start with a long settle, for entrances that need attention.\"] Emphasized, # [doc = \" Passes its target and returns; the only curve that leaves 0..1.\"] Overshoot, Exit, Settle, Custom (CubicBezier), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::easing::Easing::curve",
      "name": "curve",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::easing",
      "path": "gpui_kit::motion::easing",
      "source": "crates/gpui-kit/src/motion/easing.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn curve (self, theme : & Theme) -> CubicBezier",
      "cfg": [],
      "target": "Easing"
    },
    {
      "id": "gpui_kit::motion::flip::Flip",
      "name": "Flip",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "A handle to one element's slide, keyed by semantic id.",
      "documentation": "A handle to one element's slide, keyed by semantic id.\n\nCheap to clone and to rebuild: the state lives in an application global, so\nboth a `RenderOnce` builder and a `Render` view can ask for the same handle\non every frame.",
      "signature": "# [doc = \" A handle to one element's slide, keyed by semantic id.\"] # [doc = \"\"] # [doc = \" Cheap to clone and to rebuild: the state lives in an application global, so\"] # [doc = \" both a `RenderOnce` builder and a `Render` view can ask for the same handle\"] # [doc = \" on every frame.\"] # [derive (Clone)] pub struct Flip { id : SharedString, state : Rc<RefCell<FlipState>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::flip::Flip::drawn_shape",
      "name": "drawn_shape",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "The shape currently painted, once an element has asked for one.",
      "documentation": "The shape currently painted, once an element has asked for one.",
      "signature": "pub fn drawn_shape (& self) -> Option<Shape>",
      "cfg": [],
      "target": "Flip"
    },
    {
      "id": "gpui_kit::motion::flip::Flip::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "Flip"
    },
    {
      "id": "gpui_kit::motion::flip::Flip::is_animating",
      "name": "is_animating",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_animating (& self) -> bool",
      "cfg": [],
      "target": "Flip"
    },
    {
      "id": "gpui_kit::motion::flip::Flip::is_contended",
      "name": "is_contended",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "Whether two elements are currently sharing this id.",
      "documentation": "Whether two elements are currently sharing this id.\n\nA contested id does not animate at all.",
      "signature": "pub fn is_contended (& self) -> bool",
      "cfg": [],
      "target": "Flip"
    },
    {
      "id": "gpui_kit::motion::flip::Flip::offset",
      "name": "offset",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "The offset currently painted, in pixels.",
      "documentation": "The offset currently painted, in pixels.\n\nChild painting, hit targets and semantic bounds include this offset.\nThe parent's layout slot remains settled, so position-only animation\ndoes not move siblings. This is a displayed-geometry measurement.",
      "signature": "pub fn offset (& self) -> Point<Pixels>",
      "cfg": [],
      "target": "Flip"
    },
    {
      "id": "gpui_kit::motion::flip::Flip::shape",
      "name": "shape",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "The shape to draw with this frame, animating toward `target`.",
      "documentation": "The shape to draw with this frame, animating toward `target`.\n\nThe caller applies it with [`Shaping::shaped`]; the handle only says\nwhat the shape is right now. Under reduced motion the answer is\n`target` from the first frame.\n\n```ignore\nlet handle = flip(id, window, cx);\nlet shape = handle.shape(if open { card } else { row }, window, cx);\ndiv().shaped(shape).flip(&handle, window, cx)\n```",
      "signature": "pub fn shape (& self, target : Shape, window : & mut Window, cx : & App) -> Shape",
      "cfg": [],
      "target": "Flip"
    },
    {
      "id": "gpui_kit::motion::flip::Flip::size",
      "name": "size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "The size currently painted, once an element has opted into animating its size with [`Flipping::flip_size`].",
      "documentation": "The size currently painted, once an element has opted into animating\nits size with [`Flipping::flip_size`].\n\nBoth child layout and semantic bounds report this size: a size\nanimation is a real layout change and can move siblings.",
      "signature": "pub fn size (& self) -> Option<Size<Pixels>>",
      "cfg": [],
      "target": "Flip"
    },
    {
      "id": "gpui_kit::motion::flip::Flip::target_size",
      "name": "target_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "The size layout would give the element if nothing were animating.",
      "documentation": "The size layout would give the element if nothing were animating.",
      "signature": "pub fn target_size (& self) -> Option<Size<Pixels>>",
      "cfg": [],
      "target": "Flip"
    },
    {
      "id": "gpui_kit::motion::flip::Flipped",
      "name": "Flipped",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "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.",
      "documentation": "An element painted at an offset from where layout put it, and optionally at\na size on its way to the size layout would give it.",
      "signature": "# [doc = \" An element painted at an offset from where layout put it, and optionally at\"] # [doc = \" a size on its way to the size layout would give it.\"] pub struct Flipped { element : gpui::AnyElement, state : Rc<RefCell<FlipState>>, timing : MotionSpec, enabled : bool, sized : bool, # [doc = \" Whether this frame is one the element owns its layout node on. The\"] # [doc = \" first frame an id is ever seen on is not: see\"] # [doc = \" [`Element::request_layout`].\"] measuring : bool, # [doc = \" The constraints this frame's natural size was measured against, so\"] # [doc = \" prepaint can tell whether layout has since offered different ones.\"] measured_against : Option<Size<AvailableSpace>>, reduce_motion : bool, frame : Option<u64>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::flip::Flipped::animate",
      "name": "animate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "Disable visual motion and settle retained position and size on this frame. Re-enabling does not replay an old offset. Reduced motion wins.",
      "documentation": "Disable visual motion and settle retained position and size on this\nframe. Re-enabling does not replay an old offset. Reduced motion wins.",
      "signature": "pub fn animate (mut self, enabled : bool) -> Self",
      "cfg": [],
      "target": "Flipped"
    },
    {
      "id": "gpui_kit::motion::flip::Flipped::animation",
      "name": "animation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "Override Tracking timing for position and size, including tween delay or spring behavior. Timing changes retarget from displayed geometry.",
      "documentation": "Override Tracking timing for position and size, including tween delay\nor spring behavior. Timing changes retarget from displayed geometry.",
      "signature": "pub fn animation (mut self, spec : MotionSpec) -> Self",
      "cfg": [],
      "target": "Flipped"
    },
    {
      "id": "gpui_kit::motion::flip::Flipping",
      "name": "Flipping",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "Slides an element from where it was to where it is.",
      "documentation": "Slides an element from where it was to where it is.",
      "signature": "# [doc = \" Slides an element from where it was to where it is.\"] pub trait Flipping : IntoElement + Sized { # [doc = \" Wraps the element so a change in its position is played back as a\"] # [doc = \" slide.\"] # [doc = \"\"] # [doc = \" The wrapper contributes no box of its own and the offset is applied\"] # [doc = \" after layout, so this cannot move anything beside the element.\"] # [doc = \"\"] # [doc = \" Under reduced motion the element is simply at its new place from the\"] # [doc = \" first frame.\"] fn flip (self, flip : & Flip, window : & mut Window, cx : & mut App) -> Flipped { flipped (self, flip, false, window, cx) } # [doc = \" The same, and a change in the element's size is played back too.\"] # [doc = \"\"] # [doc = \" This costs what [`Flipping::flip`] does not. The element takes a layout\"] # [doc = \" node of its own, is measured twice a frame while it animates, and is\"] # [doc = \" genuinely the animated size rather than a scaled picture of the settled\"] # [doc = \" one — so its siblings move with it, and the size the semantic tree\"] # [doc = \" publishes is the size in flight. Position and size run independently,\"] # [doc = \" so an element that both moves and grows does both.\"] # [doc = \"\"] # [doc = \" Under reduced motion the element is at its new size from the first\"] # [doc = \" frame.\"] fn flip_size (self, flip : & Flip, window : & mut Window, cx : & mut App) -> Flipped { flipped (self, flip, true, window, cx) } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::flip::Shape",
      "name": "Shape",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "The visual form an element is drawn with, as opposed to where it is.",
      "documentation": "The visual form an element is drawn with, as opposed to where it is.\n\nA slide moves an element; it does not restyle it, because [`Flipped`]\nwraps an `AnyElement` it did not build and cannot reach the radius or the\nborder inside it. So the caller keeps ownership of the shape and asks the\nhandle what to draw with this frame, the same way it asks a container for\nits width. What comes back is a shape, not a style: applying it is\n[`Shaping::shaped`], and everything else about the element stays the\ncaller's.\n\nThis is what a row becoming a card needs. The two forms differ by a radius,\na border and a surface, and cutting between them on the frame the layout\nchanges is the one part of that transition a reader actually notices.",
      "signature": "# [doc = \" The visual form an element is drawn with, as opposed to where it is.\"] # [doc = \"\"] # [doc = \" A slide moves an element; it does not restyle it, because [`Flipped`]\"] # [doc = \" wraps an `AnyElement` it did not build and cannot reach the radius or the\"] # [doc = \" border inside it. So the caller keeps ownership of the shape and asks the\"] # [doc = \" handle what to draw with this frame, the same way it asks a container for\"] # [doc = \" its width. What comes back is a shape, not a style: applying it is\"] # [doc = \" [`Shaping::shaped`], and everything else about the element stays the\"] # [doc = \" caller's.\"] # [doc = \"\"] # [doc = \" This is what a row becoming a card needs. The two forms differ by a radius,\"] # [doc = \" a border and a surface, and cutting between them on the frame the layout\"] # [doc = \" changes is the one part of that transition a reader actually notices.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Shape { pub radius : Pixels, pub border : Pixels, pub border_color : Hsla, pub background : Hsla, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::flip::Shape::border",
      "name": "border",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "A border of `width` in `color`.",
      "documentation": "A border of `width` in `color`.\n\nA width of zero still carries its colour, so a shape animating from no\nborder to one grows the line rather than fading a colour in from\nwhatever happened to be behind it.",
      "signature": "pub fn border (mut self, width : f32, color : Hsla) -> Self",
      "cfg": [],
      "target": "Shape"
    },
    {
      "id": "gpui_kit::motion::flip::Shape::radius",
      "name": "radius",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn radius (mut self, radius : f32) -> Self",
      "cfg": [],
      "target": "Shape"
    },
    {
      "id": "gpui_kit::motion::flip::Shape::surface",
      "name": "surface",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "A shape that is a surface and nothing else.",
      "documentation": "A shape that is a surface and nothing else.",
      "signature": "pub fn surface (background : Hsla) -> Self",
      "cfg": [],
      "target": "Shape"
    },
    {
      "id": "gpui_kit::motion::flip::Shaping",
      "name": "Shaping",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "Applies a [`Shape`] to an element.",
      "documentation": "Applies a [`Shape`] to an element.",
      "signature": "# [doc = \" Applies a [`Shape`] to an element.\"] pub trait Shaping : gpui::Styled + Sized { fn shaped (self, shape : Shape) -> Self { self . rounded (shape . radius) . border (shape . border) . border_color (shape . border_color) . bg (shape . background) } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::flip::flip",
      "name": "flip",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "The slide handle for `id`.",
      "documentation": "The slide handle for `id`.",
      "signature": "pub fn flip (id : impl Into<SharedString>, window : & Window, cx : & mut App) -> Flip",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::flip::shared_flip",
      "name": "shared_flip",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "The slide handle for `id`, kept alive across a handoff between two element trees.",
      "documentation": "The slide handle for `id`, kept alive across a handoff between two element\ntrees.\n\nA row that opens into a detail panel is two elements in two trees with one\nidentity. Because the state is keyed by id rather than by element, the\npanel inverts from the rectangle the row last recorded and travels there\ninstead of cutting. What this adds over [`flip`] is only patience: the\nrectangle survives the frames in which neither tree renders the id, up to\n30 frames and 500 ms of wall clock, whichever ends first. Past that the\narriving element is simply already in place.\n\nBoth trees rendering the id at once is a collision, and a collision does\nnot animate; see [`Flip::is_contended`].",
      "signature": "pub fn shared_flip (id : impl Into<SharedString>, window : & Window, cx : & mut App) -> Flip",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::flip::tracked_ids",
      "name": "tracked_ids",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::flip",
      "path": "gpui_kit::motion::flip",
      "source": "crates/gpui-kit/src/motion/flip.rs",
      "summary": "The ids the flip global currently retains.",
      "documentation": "The ids the flip global currently retains.\n\nAn id that stops rendering is dropped within two frames — or within 30\nwhen it was last asked for through [`shared_flip`] — so this is the set\nof elements on screen rather than every element ever flipped.",
      "signature": "pub fn tracked_ids (window : & Window, cx : & App) -> Vec<SharedString>",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::follow::AtEnd",
      "name": "AtEnd",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::follow",
      "path": "gpui_kit::motion::follow",
      "source": "crates/gpui-kit/src/motion/follow.rs",
      "summary": "What one frame found out about a surface's relationship to its end.",
      "documentation": "What one frame found out about a surface's relationship to its end.",
      "signature": "# [doc = \" What one frame found out about a surface's relationship to its end.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct AtEnd { # [doc = \" Whether the end is being held.\"] pub pinned : bool, # [doc = \" How far above the end the view is sitting.\"] pub distance : Pixels, # [doc = \" Whether the motion has finished, so a caller can tell a surface that\"] # [doc = \" has arrived from one still travelling.\"] pub settled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::follow::Chase",
      "name": "Chase",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::follow",
      "path": "gpui_kit::motion::follow",
      "source": "crates/gpui-kit/src/motion/follow.rs",
      "summary": "The scroll velocity of a surface being held against a moving end.",
      "documentation": "The scroll velocity of a surface being held against a moving end.\n\nPosition and target are scroll offsets in pixels, larger meaning nearer the\nend. The integration is fixed-timestep at one 60Hz frame so that behaviour is\na property of the spring rather than of the display it is running on, and a\nstep is clamped at the target: this never overshoots, never oscillates, and\nlands exactly rather than asymptotically.",
      "signature": "# [doc = \" The scroll velocity of a surface being held against a moving end.\"] # [doc = \"\"] # [doc = \" Position and target are scroll offsets in pixels, larger meaning nearer the\"] # [doc = \" end. The integration is fixed-timestep at one 60Hz frame so that behaviour is\"] # [doc = \" a property of the spring rather than of the display it is running on, and a\"] # [doc = \" step is clamped at the target: this never overshoots, never oscillates, and\"] # [doc = \" lands exactly rather than asymptotically.\"] # [derive (Debug, Clone, Copy)] pub struct Chase { # [doc = \" Pixels per reference frame.\"] velocity : f32, # [doc = \" The smoothed estimate of how fast the target is receding, in pixels per\"] # [doc = \" reference frame.\"] growth : f32, # [doc = \" The target as the previous step saw it, or `None` when parked.\"] target : Option<f32>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::follow::Chase::growth",
      "name": "growth",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::follow",
      "path": "gpui_kit::motion::follow",
      "source": "crates/gpui-kit/src/motion/follow.rs",
      "summary": "How fast the end is estimated to be receding, in pixels per reference frame.",
      "documentation": "How fast the end is estimated to be receding, in pixels per reference\nframe.",
      "signature": "pub fn growth (& self) -> f32",
      "cfg": [],
      "target": "Chase"
    },
    {
      "id": "gpui_kit::motion::follow::Chase::is_idle",
      "name": "is_idle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::follow",
      "path": "gpui_kit::motion::follow",
      "source": "crates/gpui-kit/src/motion/follow.rs",
      "summary": "Whether there is any motion left to spend.",
      "documentation": "Whether there is any motion left to spend.",
      "signature": "pub fn is_idle (& self) -> bool",
      "cfg": [],
      "target": "Chase"
    },
    {
      "id": "gpui_kit::motion::follow::Chase::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::follow",
      "path": "gpui_kit::motion::follow",
      "source": "crates/gpui-kit/src/motion/follow.rs",
      "summary": "A parked chase, carrying no speed and no estimate.",
      "documentation": "A parked chase, carrying no speed and no estimate.",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "Chase"
    },
    {
      "id": "gpui_kit::motion::follow::Chase::reset",
      "name": "reset",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::follow",
      "path": "gpui_kit::motion::follow",
      "source": "crates/gpui-kit/src/motion/follow.rs",
      "summary": "Park it. The next step starts cold.",
      "documentation": "Park it. The next step starts cold.",
      "signature": "pub fn reset (& mut self)",
      "cfg": [],
      "target": "Chase"
    },
    {
      "id": "gpui_kit::motion::follow::Chase::step",
      "name": "step",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::follow",
      "path": "gpui_kit::motion::follow",
      "source": "crates/gpui-kit/src/motion/follow.rs",
      "summary": "Advance by `frames` reference frames and answer the new position.",
      "documentation": "Advance by `frames` reference frames and answer the new position.",
      "signature": "pub fn step (& mut self, mut position : f32, target : f32, mut frames : f32) -> f32",
      "cfg": [],
      "target": "Chase"
    },
    {
      "id": "gpui_kit::motion::follow::STICK_BAND",
      "name": "STICK_BAND",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::follow",
      "path": "gpui_kit::motion::follow",
      "source": "crates/gpui-kit/src/motion/follow.rs",
      "summary": "How near the end a returning reader has to get before the surface takes over again.",
      "documentation": "How near the end a returning reader has to get before the surface takes\nover again.",
      "signature": "pub const STICK_BAND: f32",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::follow::engage_end",
      "name": "engage_end",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::follow",
      "path": "gpui_kit::motion::follow",
      "source": "crates/gpui-kit/src/motion/follow.rs",
      "summary": "Hold the end from now on, gliding to it from wherever the view is.",
      "documentation": "Hold the end from now on, gliding to it from wherever the view is.\n\nThis is what an own send and a \"jump to newest\" affordance do. It is not\nwhat arriving content does: content that arrives while the surface is\nalready following is followed, and content that arrives while it is not\nfollowing must not drag the reader anywhere.",
      "signature": "pub fn engage_end (ident : & Ident, window : & Window, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::follow::follow_end",
      "name": "follow_end",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::follow",
      "path": "gpui_kit::motion::follow",
      "source": "crates/gpui-kit/src/motion/follow.rs",
      "summary": "Keeps the surface named by `ident` against its end, and reports where it is.",
      "documentation": "Keeps the surface named by `ident` against its end, and reports where it is.\n\nCalled once per frame by whatever draws the list. It installs the gesture\nlistener the first time it sees the list, advances the spring while the end\nis being held, and asks for another frame while there is anywhere left to\ntravel — so a caller does not schedule anything itself.\n\nA surface that has not yet drawn as a variable-height list has nothing to\nfollow and is reported as settled where it is.",
      "signature": "pub fn follow_end (ident : & Ident, window : & mut Window, cx : & mut App) -> AtEnd",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::follow::follows_end",
      "name": "follows_end",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::follow",
      "path": "gpui_kit::motion::follow",
      "source": "crates/gpui-kit/src/motion/follow.rs",
      "summary": "Whether this surface is currently holding its end.",
      "documentation": "Whether this surface is currently holding its end.",
      "signature": "pub fn follows_end (ident : & Ident, window : & Window, cx : & App) -> bool",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::follow::release_end",
      "name": "release_end",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::follow",
      "path": "gpui_kit::motion::follow",
      "source": "crates/gpui-kit/src/motion/follow.rs",
      "summary": "Stop holding the end, leaving the view exactly where it is.",
      "documentation": "Stop holding the end, leaving the view exactly where it is.",
      "signature": "pub fn release_end (ident : & Ident, window : & Window, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::gesture::Flick",
      "name": "Flick",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "Which way a flick went.",
      "documentation": "Which way a flick went.",
      "signature": "# [doc = \" Which way a flick went.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum Flick { Left, Right, Up, Down, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::gesture::Flick::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "Flick"
    },
    {
      "id": "gpui_kit::motion::gesture::VELOCITY_WINDOW",
      "name": "VELOCITY_WINDOW",
      "kind": "constant",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "How far back a velocity is measured by default.",
      "documentation": "How far back a velocity is measured by default.\n\nShort enough that the answer is the speed at release rather than the\naverage of the whole gesture, long enough to span several events at any\nframe rate a platform delivers.",
      "signature": "pub const VELOCITY_WINDOW: Duration",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::gesture::Velocity",
      "name": "Velocity",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "How fast a gesture is moving, in pixels a second on each axis.",
      "documentation": "How fast a gesture is moving, in pixels a second on each axis.",
      "signature": "# [doc = \" How fast a gesture is moving, in pixels a second on each axis.\"] # [derive (Debug, Clone, Copy, PartialEq, Default)] pub struct Velocity { pub x : f32, pub y : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::gesture::Velocity::is_still",
      "name": "is_still",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "Whether the gesture is, for practical purposes, standing still.",
      "documentation": "Whether the gesture is, for practical purposes, standing still.",
      "signature": "pub fn is_still (self) -> bool",
      "cfg": [],
      "target": "Velocity"
    },
    {
      "id": "gpui_kit::motion::gesture::Velocity::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (x : f32, y : f32) -> Self",
      "cfg": [],
      "target": "Velocity"
    },
    {
      "id": "gpui_kit::motion::gesture::Velocity::speed",
      "name": "speed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "The speed, with the direction thrown away.",
      "documentation": "The speed, with the direction thrown away.",
      "signature": "pub fn speed (self) -> f32",
      "cfg": [],
      "target": "Velocity"
    },
    {
      "id": "gpui_kit::motion::gesture::VelocityTracker",
      "name": "VelocityTracker",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "The speed and direction of a pointer, measured over a short trailing window.",
      "documentation": "The speed and direction of a pointer, measured over a short trailing\nwindow.\n\nThe window rather than the last two events is the whole point. Platforms\ndeliver moves at whatever rate they please, so the last pair can be a\nmillisecond apart and report an impossible speed, and — more importantly —\na gesture that stopped before release still has old fast samples behind it.\nSamples older than the window are discarded, so a drag the user parked\nreports a stop rather than the speed it had before the pause. A tracker\nthat reported one would fling away the thing the user deliberately put\ndown.",
      "signature": "# [doc = \" The speed and direction of a pointer, measured over a short trailing\"] # [doc = \" window.\"] # [doc = \"\"] # [doc = \" The window rather than the last two events is the whole point. Platforms\"] # [doc = \" deliver moves at whatever rate they please, so the last pair can be a\"] # [doc = \" millisecond apart and report an impossible speed, and — more importantly —\"] # [doc = \" a gesture that stopped before release still has old fast samples behind it.\"] # [doc = \" Samples older than the window are discarded, so a drag the user parked\"] # [doc = \" reports a stop rather than the speed it had before the pause. A tracker\"] # [doc = \" that reported one would fling away the thing the user deliberately put\"] # [doc = \" down.\"] # [derive (Debug, Clone)] pub struct VelocityTracker { window : Duration, samples : VecDeque<(Instant, Point<Pixels>)>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::gesture::VelocityTracker::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "Forgets the gesture, for a drag that was cancelled rather than dropped.",
      "documentation": "Forgets the gesture, for a drag that was cancelled rather than dropped.",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "VelocityTracker"
    },
    {
      "id": "gpui_kit::motion::gesture::VelocityTracker::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "VelocityTracker"
    },
    {
      "id": "gpui_kit::motion::gesture::VelocityTracker::sample",
      "name": "sample",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "Records where the pointer was at `at`.",
      "documentation": "Records where the pointer was at `at`.\n\nA sample older than one already recorded is ignored: the tracker\nmeasures a gesture forward in time, and reordering events would let a\nlate delivery invent a direction.",
      "signature": "pub fn sample (& mut self, position : Point<Pixels>, at : Instant)",
      "cfg": [],
      "target": "VelocityTracker"
    },
    {
      "id": "gpui_kit::motion::gesture::VelocityTracker::velocity_at",
      "name": "velocity_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "The speed the pointer is moving at as of `now`.",
      "documentation": "The speed the pointer is moving at as of `now`.\n\n`now` rather than the last sample, because a pointer that has stopped\nsends nothing at all: the pause is visible only against a clock.",
      "signature": "pub fn velocity_at (& self, now : Instant) -> Velocity",
      "cfg": [],
      "target": "VelocityTracker"
    },
    {
      "id": "gpui_kit::motion::gesture::VelocityTracker::with_window",
      "name": "with_window",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_window (window : Duration) -> Self",
      "cfg": [],
      "target": "VelocityTracker"
    },
    {
      "id": "gpui_kit::motion::gesture::flick",
      "name": "flick",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "Whether a gesture that travelled `travel` and let go at `velocity` was a flick, and which way it went.",
      "documentation": "Whether a gesture that travelled `travel` and let go at `velocity` was a\nflick, and which way it went.\n\nA flick is a claim about intent, so it takes both numbers. Speed alone\nwould call a twitch a flick; distance alone would call a slow deliberate\ndrag one, and those are the two gestures a dismissal has to tell apart.\nThe threshold is `motion.flickVelocityPxPerSec`.\n\nThe direction comes from the speed and the travel has to agree with it: a\ngesture that went out and was coming back when it was released was not\nflicked out.",
      "signature": "pub fn flick (travel : Point<Pixels>, velocity : Velocity, theme : & Theme) -> Option<Flick>",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::gesture::overscroll",
      "name": "overscroll",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "The distance actually shown when a gesture pulls `overscroll` past a boundary.",
      "documentation": "The distance actually shown when a gesture pulls `overscroll` past a\nboundary.\n\nResistance grows with the pull: `tension` is the fraction of the first\npixel that shows, and every pixel after it shows less, so the band tightens\nsmoothly rather than at a point the hand can feel. The result approaches\n`extent` and never reaches it, however hard the pull, so a boundary can be\nstretched but not crossed.\n\nThis is a function of the pull and nothing else — no clock, no state, no\nframe — because the band is where the hand is holding it.\nHow far a pull past a scroll boundary should paint, using the theme band.\n\nThe scroll itself still stops at the edge: GPUI's viewport does not travel\npast its content. This is the visual remainder of that pull, so a host\nthat measures an attempted overscroll can show resistance rather than a\nhard stop with no evidence.",
      "signature": "pub fn overscroll (pull : Pixels, theme : & Theme) -> Pixels",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::gesture::rubber_band",
      "name": "rubber_band",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::gesture",
      "path": "gpui_kit::motion::gesture",
      "source": "crates/gpui-kit/src/motion/gesture.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rubber_band (overscroll : Pixels, extent : Pixels, tension : f32) -> Pixels",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::glide::Glide",
      "name": "Glide",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::glide",
      "path": "gpui_kit::motion::glide",
      "source": "crates/gpui-kit/src/motion/glide.rs",
      "summary": "A curve's progress, expressed as how much of what is left to go.",
      "documentation": "A curve's progress, expressed as how much of what is left to go.\n\nOne `Glide` is one journey. It is driven by eased progress rather than by\ntime so that the caller keeps ownership of the clock: the same timeline\nserves a frame loop, a test that steps by hand, and a motion scale the\nreader has slowed down.",
      "signature": "# [doc = \" A curve's progress, expressed as how much of what is left to go.\"] # [doc = \"\"] # [doc = \" One `Glide` is one journey. It is driven by eased progress rather than by\"] # [doc = \" time so that the caller keeps ownership of the clock: the same timeline\"] # [doc = \" serves a frame loop, a test that steps by hand, and a motion scale the\"] # [doc = \" reader has slowed down.\"] # [derive (Clone, Copy, Debug, Default, PartialEq)] pub struct Glide { eased : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::glide::Glide::arrived",
      "name": "arrived",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::glide",
      "path": "gpui_kit::motion::glide",
      "source": "crates/gpui-kit/src/motion/glide.rs",
      "summary": "Whether the journey is over.",
      "documentation": "Whether the journey is over.",
      "signature": "pub fn arrived (& self) -> bool",
      "cfg": [],
      "target": "Glide"
    },
    {
      "id": "gpui_kit::motion::glide::Glide::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::glide",
      "path": "gpui_kit::motion::glide",
      "source": "crates/gpui-kit/src/motion/glide.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "Glide"
    },
    {
      "id": "gpui_kit::motion::glide::Glide::progress",
      "name": "progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::glide",
      "path": "gpui_kit::motion::glide",
      "source": "crates/gpui-kit/src/motion/glide.rs",
      "summary": "How far along the curve this glide is, for a caller that wants to interpolate something else on the same timeline.",
      "documentation": "How far along the curve this glide is, for a caller that wants to\ninterpolate something else on the same timeline.",
      "signature": "pub fn progress (& self) -> f32",
      "cfg": [],
      "target": "Glide"
    },
    {
      "id": "gpui_kit::motion::glide::Glide::step",
      "name": "step",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::glide",
      "path": "gpui_kit::motion::glide",
      "source": "crates/gpui-kit/src/motion/glide.rs",
      "summary": "The share of the remaining distance this frame should consume, for a curve that has now reached `eased`.",
      "documentation": "The share of the remaining distance this frame should consume, for a\ncurve that has now reached `eased`.\n\nProgress that went backwards yields nothing rather than moving back:\na curve is monotone, so a lower reading is a clock that stuttered, and\nundoing travel already made would be visible as a twitch.",
      "signature": "pub fn step (& mut self, eased : f32) -> f32",
      "cfg": [],
      "target": "Glide"
    },
    {
      "id": "gpui_kit::motion::interpolate::Interpolate",
      "name": "Interpolate",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::interpolate",
      "path": "gpui_kit::motion::interpolate",
      "source": "crates/gpui-kit/src/motion/interpolate.rs",
      "summary": "A value an animation can move through.",
      "documentation": "A value an animation can move through.\n\n`t` outside 0..1 is meaningful: overshoot curves and underdamped springs\ndeliberately pass their target, so implementations extrapolate rather than\nclamp.",
      "signature": "# [doc = \" A value an animation can move through.\"] # [doc = \"\"] # [doc = \" `t` outside 0..1 is meaningful: overshoot curves and underdamped springs\"] # [doc = \" deliberately pass their target, so implementations extrapolate rather than\"] # [doc = \" clamp.\"] pub trait Interpolate : Copy { fn lerp (self, other : Self, t : f32) -> Self; # [doc = \" How far apart two values are, in one number, so a retarget can rescale\"] # [doc = \" a velocity it is carrying into the new distance.\"] fn distance (self, other : Self) -> f32; }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::keyframes::Keyframe",
      "name": "Keyframe",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::keyframes",
      "path": "gpui_kit::motion::keyframes",
      "source": "crates/gpui-kit/src/motion/keyframes.rs",
      "summary": "One stop on the path: the value, where along the run it is reached, and optionally the curve it is reached on.",
      "documentation": "One stop on the path: the value, where along the run it is reached, and\noptionally the curve it is reached on.",
      "signature": "# [doc = \" One stop on the path: the value, where along the run it is reached, and\"] # [doc = \" optionally the curve it is reached on.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Keyframe<T> { offset : f32, value : T, easing : Option<Easing>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::keyframes::Keyframe::eased",
      "name": "eased",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::keyframes",
      "path": "gpui_kit::motion::keyframes",
      "source": "crates/gpui-kit/src/motion/keyframes.rs",
      "summary": "The curve the value travels on to reach this stop, rather than the specification's.",
      "documentation": "The curve the value travels on to reach this stop, rather than the\nspecification's.",
      "signature": "pub fn eased (mut self, easing : impl Into<Easing>) -> Self",
      "cfg": [],
      "target": "Keyframe<T>"
    },
    {
      "id": "gpui_kit::motion::keyframes::Keyframe::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::keyframes",
      "path": "gpui_kit::motion::keyframes",
      "source": "crates/gpui-kit/src/motion/keyframes.rs",
      "summary": "`offset` is a fraction of the run and is clamped into 0..=1.",
      "documentation": "`offset` is a fraction of the run and is clamped into 0..=1.",
      "signature": "pub fn new (offset : f32, value : T) -> Self",
      "cfg": [],
      "target": "Keyframe<T>"
    },
    {
      "id": "gpui_kit::motion::keyframes::Keyframes",
      "name": "Keyframes",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::keyframes",
      "path": "gpui_kit::motion::keyframes",
      "source": "crates/gpui-kit/src/motion/keyframes.rs",
      "summary": "A value that passes through named stops rather than travelling straight from one end to the other.",
      "documentation": "A value that passes through named stops rather than travelling straight\nfrom one end to the other.\n\nThe stops are the whole path: sampling outside 0..=1 clamps, because an\nauthor who wrote where a value goes did not write what is past the last\nplace they put it.",
      "signature": "# [doc = \" A value that passes through named stops rather than travelling straight\"] # [doc = \" from one end to the other.\"] # [doc = \"\"] # [doc = \" The stops are the whole path: sampling outside 0..=1 clamps, because an\"] # [doc = \" author who wrote where a value goes did not write what is past the last\"] # [doc = \" place they put it.\"] # [derive (Debug, Clone, PartialEq)] pub struct Keyframes<T : Interpolate> { stops : Vec<Stop<T>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::keyframes::Keyframes::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::keyframes",
      "path": "gpui_kit::motion::keyframes",
      "source": "crates/gpui-kit/src/motion/keyframes.rs",
      "summary": "Builds the path from stops given in any order.",
      "documentation": "Builds the path from stops given in any order.\n\n`None` for an empty list: a path through no stops has no value to\nreport, and every other answer would be invented.",
      "signature": "pub fn new (theme : & Theme, spec : MotionSpec, stops : impl IntoIterator<Item = Keyframe<T>>,) -> Option<Self>",
      "cfg": [],
      "target": "Keyframes<T>"
    },
    {
      "id": "gpui_kit::motion::keyframes::Keyframes::offsets",
      "name": "offsets",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::keyframes",
      "path": "gpui_kit::motion::keyframes",
      "source": "crates/gpui-kit/src/motion/keyframes.rs",
      "summary": "Where the stops sit along the run, in order.",
      "documentation": "Where the stops sit along the run, in order.",
      "signature": "pub fn offsets (& self) -> Vec<f32>",
      "cfg": [],
      "target": "Keyframes<T>"
    },
    {
      "id": "gpui_kit::motion::keyframes::Keyframes::sample",
      "name": "sample",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::keyframes",
      "path": "gpui_kit::motion::keyframes",
      "source": "crates/gpui-kit/src/motion/keyframes.rs",
      "summary": "The value at `progress`.",
      "documentation": "The value at `progress`.\n\nA path that does not start at 0 or reach 1 holds its nearest stop out\nto that end, so an author can describe only the part that moves.",
      "signature": "pub fn sample (& self, progress : f32) -> T",
      "cfg": [],
      "target": "Keyframes<T>"
    },
    {
      "id": "gpui_kit::motion::micro::Micro",
      "name": "Micro",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::micro",
      "path": "gpui_kit::motion::micro",
      "source": "crates/gpui-kit/src/motion/micro.rs",
      "summary": "A named procedural reaction.",
      "documentation": "A named procedural reaction.",
      "signature": "# [doc = \" A named procedural reaction.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum Micro { Heartbeat, Bounce, Wobble, Pop, Sparkle, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::micro::Micro::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::micro",
      "path": "gpui_kit::motion::micro",
      "source": "crates/gpui-kit/src/motion/micro.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "Micro"
    },
    {
      "id": "gpui_kit::motion::micro::MicroMark",
      "name": "MicroMark",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::micro",
      "path": "gpui_kit::motion::micro",
      "source": "crates/gpui-kit/src/motion/micro.rs",
      "summary": "A labelled glyph that plays one named micro-motion.",
      "documentation": "A labelled glyph that plays one named micro-motion.",
      "signature": "# [doc = \" A labelled glyph that plays one named micro-motion.\"] # [derive (IntoElement)] pub struct MicroMark { ident : Ident, kind : Micro, label : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::micro::MicroMark::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::micro",
      "path": "gpui_kit::motion::micro",
      "source": "crates/gpui-kit/src/motion/micro.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, kind : Micro, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MicroMark"
    },
    {
      "id": "gpui_kit::motion::micro::MicroMotion",
      "name": "MicroMotion",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::micro",
      "path": "gpui_kit::motion::micro",
      "source": "crates/gpui-kit/src/motion/micro.rs",
      "summary": "Fluent entry point used as `.micro(id, Micro::Heartbeat, cx)`.",
      "documentation": "Fluent entry point used as `.micro(id, Micro::Heartbeat, cx)`.",
      "signature": "# [doc = \" Fluent entry point used as `.micro(id, Micro::Heartbeat, cx)`.\"] pub trait MicroMotion : Styled + IntoElement + 'static { fn micro (self, id : impl Into<ElementId>, kind : Micro, cx : & App) -> AnyElement { micro (self, id, kind, cx) } # [doc = \" Alias matching the design language of a reaction on a glyph or emoji.\"] fn reaction (self, id : impl Into<ElementId>, kind : Micro, cx : & App) -> AnyElement { micro (self, id, kind, cx) } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::micro::micro",
      "name": "micro",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::micro",
      "path": "gpui_kit::motion::micro",
      "source": "crates/gpui-kit/src/motion/micro.rs",
      "summary": "Applies a named micro-motion. Honors reduced motion by doing nothing.",
      "documentation": "Applies a named micro-motion. Honors reduced motion by doing nothing.",
      "signature": "pub fn micro<E> (element : E, id : impl Into<ElementId>, kind : Micro, cx : & App) -> AnyElement where E : Styled + IntoElement + 'static,",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::policy::MotionDisposition",
      "name": "MotionDisposition",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::policy",
      "path": "gpui_kit::motion::policy",
      "source": "crates/gpui-kit/src/motion/policy.rs",
      "summary": "What the resolved policy permits the renderer to do.",
      "documentation": "What the resolved policy permits the renderer to do.",
      "signature": "# [doc = \" What the resolved policy permits the renderer to do.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum MotionDisposition { # [doc = \" Run the resolved timeline.\"] Animate, # [doc = \" Publish and paint the settled endpoint immediately.\"] Settle, # [doc = \" Do not start a timeline; the component's static state carries meaning.\"] Suppress, # [doc = \" Paint the component's policy-owned representative frame.\"] Poster, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::policy::MotionPolicy",
      "name": "MotionPolicy",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::policy",
      "path": "gpui_kit::motion::policy",
      "source": "crates/gpui-kit/src/motion/policy.rs",
      "summary": "The sole mapping from semantic roles to motion tokens and preferences.",
      "documentation": "The sole mapping from semantic roles to motion tokens and preferences.",
      "signature": "# [doc = \" The sole mapping from semantic roles to motion tokens and preferences.\"] # [derive (Debug, Clone, Copy, Default)] pub struct MotionPolicy;",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::policy::MotionPolicy::resolve",
      "name": "resolve",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::policy",
      "path": "gpui_kit::motion::policy",
      "source": "crates/gpui-kit/src/motion/policy.rs",
      "summary": "Resolves a role using the active theme and platform preference.",
      "documentation": "Resolves a role using the active theme and platform preference.",
      "signature": "pub fn resolve (role : MotionRole, cx : & App) -> ResolvedMotion",
      "cfg": [],
      "target": "MotionPolicy"
    },
    {
      "id": "gpui_kit::motion::policy::MotionPolicy::resolve_for",
      "name": "resolve_for",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::policy",
      "path": "gpui_kit::motion::policy",
      "source": "crates/gpui-kit/src/motion/policy.rs",
      "summary": "Resolves a role against an explicit theme and preference.",
      "documentation": "Resolves a role against an explicit theme and preference.\n\nThis is useful to state policy before a render context exists and to\ntest both preference branches without constructing a window.",
      "signature": "pub fn resolve_for (role : MotionRole, theme : & Theme, reduce_motion : bool) -> ResolvedMotion",
      "cfg": [],
      "target": "MotionPolicy"
    },
    {
      "id": "gpui_kit::motion::policy::MotionPolicy::spec",
      "name": "spec",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::policy",
      "path": "gpui_kit::motion::policy",
      "source": "crates/gpui-kit/src/motion/policy.rs",
      "summary": "Resolves only the tokenized timeline for code whose reduced-motion branch is handled by [`Transition`](super::Transition), [`Presence`](super::Presence), or the caller's static presentation.",
      "documentation": "Resolves only the tokenized timeline for code whose reduced-motion\nbranch is handled by [`Transition`](super::Transition),\n[`Presence`](super::Presence), or the caller's static presentation.",
      "signature": "pub fn spec (role : MotionRole, theme : & Theme) -> MotionSpec",
      "cfg": [],
      "target": "MotionPolicy"
    },
    {
      "id": "gpui_kit::motion::policy::MotionRole",
      "name": "MotionRole",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::policy",
      "path": "gpui_kit::motion::policy",
      "source": "crates/gpui-kit/src/motion/policy.rs",
      "summary": "Why a surface is moving.",
      "documentation": "Why a surface is moving.",
      "signature": "# [doc = \" Why a surface is moving.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum MotionRole { # [doc = \" Content becomes part of the current surface.\"] Entrance, # [doc = \" A pointer-owned menu answers the action that opened it.\"] MenuEnter, # [doc = \" A modal surface arrives with physical weight.\"] ModalEnter, # [doc = \" Content changes inside a modal surface.\"] ModalTransition, # [doc = \" A surface leaves after dismissal.\"] Exit, # [doc = \" A control answers a local state change.\"] StateChange, # [doc = \" A measured value or region changes extent.\"] Resize, # [doc = \" A value follows a pointer or another continuously moving target.\"] Tracking, # [doc = \" The reader travels from one location to another.\"] Navigation, # [doc = \" Newly arriving content settles without delaying its publication.\"] Streaming, # [doc = \" A one-shot visual response reports an outcome or handoff.\"] Feedback, # [doc = \" A deliberately prominent one-shot response marks a reward.\"] Celebration, # [doc = \" Continuous work whose truth is described by [`Activity`].\"] Activity (Activity), # [doc = \" A named procedural reaction.\"] Micro (Micro), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::policy::ResolvedMotion",
      "name": "ResolvedMotion",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::policy",
      "path": "gpui_kit::motion::policy",
      "source": "crates/gpui-kit/src/motion/policy.rs",
      "summary": "One role resolved against a theme and the user's motion preference.",
      "documentation": "One role resolved against a theme and the user's motion preference.",
      "signature": "# [doc = \" One role resolved against a theme and the user's motion preference.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct ResolvedMotion { role : MotionRole, spec : MotionSpec, disposition : MotionDisposition, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::policy::ResolvedMotion::animates",
      "name": "animates",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::policy",
      "path": "gpui_kit::motion::policy",
      "source": "crates/gpui-kit/src/motion/policy.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn animates (self) -> bool",
      "cfg": [],
      "target": "ResolvedMotion"
    },
    {
      "id": "gpui_kit::motion::policy::ResolvedMotion::disposition",
      "name": "disposition",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::policy",
      "path": "gpui_kit::motion::policy",
      "source": "crates/gpui-kit/src/motion/policy.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn disposition (self) -> MotionDisposition",
      "cfg": [],
      "target": "ResolvedMotion"
    },
    {
      "id": "gpui_kit::motion::policy::ResolvedMotion::role",
      "name": "role",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::policy",
      "path": "gpui_kit::motion::policy",
      "source": "crates/gpui-kit/src/motion/policy.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn role (self) -> MotionRole",
      "cfg": [],
      "target": "ResolvedMotion"
    },
    {
      "id": "gpui_kit::motion::policy::ResolvedMotion::spec",
      "name": "spec",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::policy",
      "path": "gpui_kit::motion::policy",
      "source": "crates/gpui-kit/src/motion/policy.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn spec (self) -> MotionSpec",
      "cfg": [],
      "target": "ResolvedMotion"
    },
    {
      "id": "gpui_kit::motion::presence::Phase",
      "name": "Phase",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "Where an element is in its arrival or departure.",
      "documentation": "Where an element is in its arrival or departure.",
      "signature": "# [doc = \" Where an element is in its arrival or departure.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum Phase { Entering, Present, Exiting, Gone, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::presence::Presence",
      "name": "Presence",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "An element's arrival and departure, either of which can be cancelled by the other while it is still running.",
      "documentation": "An element's arrival and departure, either of which can be cancelled by the\nother while it is still running.\n\nA cancelled phase is played backwards from where it had got to rather than\nrestarted. The two phases are separate specifications with separate\ndurations and separate curves, so \"where it had got to\" is a position and\nnot a time: the visible progress is looked up in the other specification —\n[`MotionSpec::time_at`] — and the reversal starts from the point that\nproduces it. An entrance cancelled at 30% therefore leaves from 30%,\nthrough the exit's own curve, in the part of the exit's time that is left\nonce 70% of it is already behind.\n\nThis is deliberately not the velocity handover\n[`Transition`](super::Transition) performs on a retarget. A value aimed\nsomewhere new is still going the way it was going; a phase that is\ncancelled has been told to go back, and carrying the speed across would\nmean an element on its way in overshooting past being present, which is not\na state a lifecycle has.",
      "signature": "# [doc = \" An element's arrival and departure, either of which can be cancelled by the\"] # [doc = \" other while it is still running.\"] # [doc = \"\"] # [doc = \" A cancelled phase is played backwards from where it had got to rather than\"] # [doc = \" restarted. The two phases are separate specifications with separate\"] # [doc = \" durations and separate curves, so \\\"where it had got to\\\" is a position and\"] # [doc = \" not a time: the visible progress is looked up in the other specification —\"] # [doc = \" [`MotionSpec::time_at`] — and the reversal starts from the point that\"] # [doc = \" produces it. An entrance cancelled at 30% therefore leaves from 30%,\"] # [doc = \" through the exit's own curve, in the part of the exit's time that is left\"] # [doc = \" once 70% of it is already behind.\"] # [doc = \"\"] # [doc = \" This is deliberately not the velocity handover\"] # [doc = \" [`Transition`](super::Transition) performs on a retarget. A value aimed\"] # [doc = \" somewhere new is still going the way it was going; a phase that is\"] # [doc = \" cancelled has been told to go back, and carrying the speed across would\"] # [doc = \" mean an element on its way in overshooting past being present, which is not\"] # [doc = \" a state a lifecycle has.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Presence { phase : Phase, elapsed : Duration, enter : MotionSpec, exit : MotionSpec, last_frame : Option<Instant>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::presence::Presence::advance",
      "name": "advance",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn advance (& mut self, delta : Duration)",
      "cfg": [],
      "target": "Presence"
    },
    {
      "id": "gpui_kit::motion::presence::Presence::animate",
      "name": "animate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "Advances by the time since the previous frame and requests the next one while a phase is running. Reduced motion skips straight to the end.",
      "documentation": "Advances by the time since the previous frame and requests the next one\nwhile a phase is running. Reduced motion skips straight to the end.",
      "signature": "pub fn animate (& mut self, window : & mut Window, cx : & mut App) -> f32",
      "cfg": [],
      "target": "Presence"
    },
    {
      "id": "gpui_kit::motion::presence::Presence::hidden",
      "name": "hidden",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "Starts hidden, so the first [`Presence::show`] animates in.",
      "documentation": "Starts hidden, so the first [`Presence::show`] animates in.",
      "signature": "pub fn hidden (enter : MotionSpec, exit : MotionSpec) -> Self",
      "cfg": [],
      "target": "Presence"
    },
    {
      "id": "gpui_kit::motion::presence::Presence::hide",
      "name": "hide",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn hide (& mut self)",
      "cfg": [],
      "target": "Presence"
    },
    {
      "id": "gpui_kit::motion::presence::Presence::is_animating",
      "name": "is_animating",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_animating (& self) -> bool",
      "cfg": [],
      "target": "Presence"
    },
    {
      "id": "gpui_kit::motion::presence::Presence::is_rendered",
      "name": "is_rendered",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "True while the caller must keep the element in the tree, including for the whole exit animation.",
      "documentation": "True while the caller must keep the element in the tree, including for\nthe whole exit animation.",
      "signature": "pub fn is_rendered (& self) -> bool",
      "cfg": [],
      "target": "Presence"
    },
    {
      "id": "gpui_kit::motion::presence::Presence::phase",
      "name": "phase",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn phase (& self) -> Phase",
      "cfg": [],
      "target": "Presence"
    },
    {
      "id": "gpui_kit::motion::presence::Presence::progress",
      "name": "progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "0 while absent, 1 while fully present.",
      "documentation": "0 while absent, 1 while fully present.",
      "signature": "pub fn progress (& self) -> f32",
      "cfg": [],
      "target": "Presence"
    },
    {
      "id": "gpui_kit::motion::presence::Presence::settle",
      "name": "settle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "Finishes the current phase instantly.",
      "documentation": "Finishes the current phase instantly.",
      "signature": "pub fn settle (& mut self)",
      "cfg": [],
      "target": "Presence"
    },
    {
      "id": "gpui_kit::motion::presence::Presence::show",
      "name": "show",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "Enters, or reverses an exit that is still in flight.",
      "documentation": "Enters, or reverses an exit that is still in flight.",
      "signature": "pub fn show (& mut self)",
      "cfg": [],
      "target": "Presence"
    },
    {
      "id": "gpui_kit::motion::presence::Presence::toggle",
      "name": "toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn toggle (& mut self)",
      "cfg": [],
      "target": "Presence"
    },
    {
      "id": "gpui_kit::motion::presence::Presence::visible",
      "name": "visible",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "Starts fully present, for content that exists before the first frame.",
      "documentation": "Starts fully present, for content that exists before the first frame.",
      "signature": "pub fn visible (enter : MotionSpec, exit : MotionSpec) -> Self",
      "cfg": [],
      "target": "Presence"
    },
    {
      "id": "gpui_kit::motion::presence::Presenting",
      "name": "Presenting",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "A floating surface's whole life, from its arrival to the frame after it is dismissed.",
      "documentation": "A floating surface's whole life, from its arrival to the frame after it is\ndismissed.\n\nThe library's arrival helpers — [`menu_in`](super::menu_in),\n[`dialog_in`](super::dialog_in), [`fade_in`](super::fade_in) — are built on\n`with_animation`, which runs once when an element appears and has nowhere\nto put a departure. An element cannot animate out after it has been dropped\nfrom the tree, so a surface built on them either snaps away or keeps a\n[`Presence`] and hand-writes everything around it. `Toast` and `Drawer` each\ndid the second, which is why an application wanting a command palette that\ncloses had to copy a component's private recipe rather than use one.\n\nThis is that recipe, named. It pairs the enter specification the role\ncarries with the library's one exit, keeps the two phases cancellable by\neach other, and hands out the progress that\n[`presenting`](super::presenting) turns into an appearance. A host that\nholds one of these and honours [`is_rendered`](Self::is_rendered) has the\nsame lifecycle every overlay in the library has.\n\n```no_run\n# use gpui_kit::motion::{MotionRole, Presenting, presenting};\n# use gpui_kit::prelude::*;\n# fn example(theme: &gpui_kit_theme::Theme) {\nlet mut palette = Presenting::closed(theme, MotionRole::MenuEnter);\npalette.open();\n// While `palette.is_rendered()` the surface stays in the tree, even\n// after `palette.close()`, which is what gives the exit somewhere to run.\n# }\n```",
      "signature": "# [doc = \" A floating surface's whole life, from its arrival to the frame after it is\"] # [doc = \" dismissed.\"] # [doc = \"\"] # [doc = \" The library's arrival helpers — [`menu_in`](super::menu_in),\"] # [doc = \" [`dialog_in`](super::dialog_in), [`fade_in`](super::fade_in) — are built on\"] # [doc = \" `with_animation`, which runs once when an element appears and has nowhere\"] # [doc = \" to put a departure. An element cannot animate out after it has been dropped\"] # [doc = \" from the tree, so a surface built on them either snaps away or keeps a\"] # [doc = \" [`Presence`] and hand-writes everything around it. `Toast` and `Drawer` each\"] # [doc = \" did the second, which is why an application wanting a command palette that\"] # [doc = \" closes had to copy a component's private recipe rather than use one.\"] # [doc = \"\"] # [doc = \" This is that recipe, named. It pairs the enter specification the role\"] # [doc = \" carries with the library's one exit, keeps the two phases cancellable by\"] # [doc = \" each other, and hands out the progress that\"] # [doc = \" [`presenting`](super::presenting) turns into an appearance. A host that\"] # [doc = \" holds one of these and honours [`is_rendered`](Self::is_rendered) has the\"] # [doc = \" same lifecycle every overlay in the library has.\"] # [doc = \"\"] # [doc = \" ```no_run\"] # [doc = \" # use gpui_kit::motion::{MotionRole, Presenting, presenting};\"] # [doc = \" # use gpui_kit::prelude::*;\"] # [doc = \" # fn example(theme: &gpui_kit_theme::Theme) {\"] # [doc = \" let mut palette = Presenting::closed(theme, MotionRole::MenuEnter);\"] # [doc = \" palette.open();\"] # [doc = \" // While `palette.is_rendered()` the surface stays in the tree, even\"] # [doc = \" // after `palette.close()`, which is what gives the exit somewhere to run.\"] # [doc = \" # }\"] # [doc = \" ```\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Presenting { presence : Presence, role : super::MotionRole, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::presence::Presenting::advance",
      "name": "advance",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn advance (& mut self, delta : Duration)",
      "cfg": [],
      "target": "Presenting"
    },
    {
      "id": "gpui_kit::motion::presence::Presenting::animate",
      "name": "animate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "Advances one frame and requests the next while a phase is running. Reduced motion settles immediately.",
      "documentation": "Advances one frame and requests the next while a phase is running.\nReduced motion settles immediately.",
      "signature": "pub fn animate (& mut self, window : & mut Window, cx : & mut App) -> f32",
      "cfg": [],
      "target": "Presenting"
    },
    {
      "id": "gpui_kit::motion::presence::Presenting::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "Starts the departure. The surface stays rendered until it finishes.",
      "documentation": "Starts the departure. The surface stays rendered until it finishes.",
      "signature": "pub fn close (& mut self)",
      "cfg": [],
      "target": "Presenting"
    },
    {
      "id": "gpui_kit::motion::presence::Presenting::closed",
      "name": "closed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "Starts closed, so the first [`open`](Self::open) animates in.",
      "documentation": "Starts closed, so the first [`open`](Self::open) animates in.\n\nThe role decides the arrival: a menu answers the action that opened it,\na modal arrives with weight, and content that becomes part of the\nsurface rises. Every departure is\n[`MotionRole::Exit`](crate::motion::MotionRole::Exit), because leaving is\none thing however the surface arrived — a surface that took its entrance\ncurve back out would decelerate on the way off screen, which reads as\nreluctance rather than dismissal.",
      "signature": "pub fn closed (theme : & gpui_kit_theme::Theme, role : super::MotionRole) -> Self",
      "cfg": [],
      "target": "Presenting"
    },
    {
      "id": "gpui_kit::motion::presence::Presenting::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "True while the surface is here or on its way here, which is the question a focus trap, a stack push or an escape binding asks — not whether it is painted.",
      "documentation": "True while the surface is here or on its way here, which is the\nquestion a focus trap, a stack push or an escape binding asks — not\nwhether it is painted.",
      "signature": "pub fn is_open (& self) -> bool",
      "cfg": [],
      "target": "Presenting"
    },
    {
      "id": "gpui_kit::motion::presence::Presenting::is_rendered",
      "name": "is_rendered",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "True while the host must keep the surface in the tree, including for the whole departure.",
      "documentation": "True while the host must keep the surface in the tree, including for\nthe whole departure.",
      "signature": "pub fn is_rendered (& self) -> bool",
      "cfg": [],
      "target": "Presenting"
    },
    {
      "id": "gpui_kit::motion::presence::Presenting::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "Arrives, or reverses a departure still in flight.",
      "documentation": "Arrives, or reverses a departure still in flight.",
      "signature": "pub fn open (& mut self)",
      "cfg": [],
      "target": "Presenting"
    },
    {
      "id": "gpui_kit::motion::presence::Presenting::opened",
      "name": "opened",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "Starts open, for a surface that exists before the first frame.",
      "documentation": "Starts open, for a surface that exists before the first frame.",
      "signature": "pub fn opened (theme : & gpui_kit_theme::Theme, role : super::MotionRole) -> Self",
      "cfg": [],
      "target": "Presenting"
    },
    {
      "id": "gpui_kit::motion::presence::Presenting::phase",
      "name": "phase",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn phase (& self) -> Phase",
      "cfg": [],
      "target": "Presenting"
    },
    {
      "id": "gpui_kit::motion::presence::Presenting::progress",
      "name": "progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn progress (& self) -> f32",
      "cfg": [],
      "target": "Presenting"
    },
    {
      "id": "gpui_kit::motion::presence::Presenting::role",
      "name": "role",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "The role this surface arrives on.",
      "documentation": "The role this surface arrives on.",
      "signature": "pub const fn role (& self) -> super::MotionRole",
      "cfg": [],
      "target": "Presenting"
    },
    {
      "id": "gpui_kit::motion::presence::Presenting::settle",
      "name": "settle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "Finishes whichever phase is running, for a host that wants the surface where it is going without the frames in between.",
      "documentation": "Finishes whichever phase is running, for a host that wants the surface\nwhere it is going without the frames in between.",
      "signature": "pub fn settle (& mut self)",
      "cfg": [],
      "target": "Presenting"
    },
    {
      "id": "gpui_kit::motion::presence::Presenting::toggle",
      "name": "toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::presence",
      "path": "gpui_kit::motion::presence",
      "source": "crates/gpui-kit/src/motion/presence.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn toggle (& mut self)",
      "cfg": [],
      "target": "Presenting"
    },
    {
      "id": "gpui_kit::motion::reduce_motion",
      "name": "reduce_motion",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "Whether the user asked for non-essential motion to be suppressed.",
      "documentation": "Whether the user asked for non-essential motion to be suppressed.",
      "signature": "pub fn reduce_motion (cx : & gpui::App) -> bool",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-1",
      "name": "animated :: { Animated , Entrance }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use animated::{ Animated, Entrance };",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-10",
      "name": "interpolate :: Interpolate",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use interpolate::Interpolate;",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-11",
      "name": "keyframes :: { Keyframe , Keyframes }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use keyframes::{ Keyframe, Keyframes };",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-12",
      "name": "micro :: { Micro , MicroMark , MicroMotion , micro }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use micro::{ Micro, MicroMark, MicroMotion, micro };",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-13",
      "name": "policy :: { MotionDisposition , MotionPolicy , MotionRole , ResolvedMotion }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use policy::{ MotionDisposition, MotionPolicy, MotionRole, ResolvedMotion };",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-14",
      "name": "presence :: { Phase , Presence , Presenting }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use presence::{ Phase, Presence, Presenting };",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-15",
      "name": "scroll_link :: ScrollLink",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use scroll_link::ScrollLink;",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-16",
      "name": "sequence :: Sequence",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use sequence::Sequence;",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-17",
      "name": "spec :: { MotionSpec , content_in , dialog , dialog_arrival , dialog_in , entrance , fade_in , gradient_opacity , menu , menu_in , presenting , pulse_wave , resize , row_in , shimmer_offset , state_change , surface_in , tracking , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use spec::{ MotionSpec, content_in, dialog, dialog_arrival, dialog_in, entrance, fade_in, gradient_opacity, menu, menu_in, presenting, pulse_wave, resize, row_in, shimmer_offset, state_change, surface_in, tracking, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-18",
      "name": "spring :: Spring",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use spring::Spring;",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-19",
      "name": "stagger :: { Stagger , StaggerBudget , row_stagger_cap , staggered_phase }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use stagger::{ Stagger, StaggerBudget, row_stagger_cap, staggered_phase };",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-2",
      "name": "animator :: Animator",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use animator::Animator;",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-20",
      "name": "transition :: Transition",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use transition::Transition;",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-21",
      "name": "gpui :: AnimationExt",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui::AnimationExt;",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-3",
      "name": "busy :: { Activity , breath , breathe , breathe_as , breathing_dot , spin , sweep }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use busy::{ Activity, breath, breathe, breathe_as, breathing_dot, spin, sweep };",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-4",
      "name": "description :: { Motion , MotionProperty , MotionSample }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use description::{ Motion, MotionProperty, MotionSample };",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-5",
      "name": "easing :: { CubicBezier , Easing }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use easing::{ CubicBezier, Easing };",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-6",
      "name": "flip :: { Flip , Flipped , Flipping , Shape , Shaping , flip , shared_flip , tracked_ids }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use flip::{ Flip, Flipped, Flipping, Shape, Shaping, flip, shared_flip, tracked_ids };",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-7",
      "name": "follow :: { AtEnd , Chase , STICK_BAND , engage_end , follow_end , follows_end , release_end }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use follow::{ AtEnd, Chase, STICK_BAND, engage_end, follow_end, follows_end, release_end };",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-8",
      "name": "gesture :: { Flick , VELOCITY_WINDOW , Velocity , VelocityTracker , flick , overscroll , rubber_band , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gesture::{ Flick, VELOCITY_WINDOW, Velocity, VelocityTracker, flick, overscroll, rubber_band, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::reexport-9",
      "name": "glide :: Glide",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion",
      "path": "gpui_kit::motion",
      "source": "crates/gpui-kit/src/motion/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use glide::Glide;",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::scroll_link::ScrollLink",
      "name": "ScrollLink",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::scroll_link",
      "path": "gpui_kit::motion::scroll_link",
      "source": "crates/gpui-kit/src/motion/scroll_link.rs",
      "summary": "Scroll offsets mapped onto progress from 0 to 1.",
      "documentation": "Scroll offsets mapped onto progress from 0 to 1.\n\n# Reduced motion\n\nA link makes no decision of its own, and that is deliberate rather than\nlazy. A header that collapses as the content scrolls under it, or a shadow\nthat appears once there is something above the fold, is not gratuitous\nmotion: it is a direct, one-to-one response to a movement the user is\nmaking with their own hand, and suppressing it would remove information\nrather than calm. A decorative parallax — a background drifting at a\ndifferent rate to say nothing at all — is the opposite, and under reduced\nmotion it should not drift.\n\nOnly the caller knows which of those it is building, so the caller says so\nwith [`ScrollLink::decorative`]. A decorative link marked under reduced\nmotion reports 0 at every offset, which is the resting end of the effect:\nthe parallax layer simply sits where it belongs.",
      "signature": "# [doc = \" Scroll offsets mapped onto progress from 0 to 1.\"] # [doc = \"\"] # [doc = \" # Reduced motion\"] # [doc = \"\"] # [doc = \" A link makes no decision of its own, and that is deliberate rather than\"] # [doc = \" lazy. A header that collapses as the content scrolls under it, or a shadow\"] # [doc = \" that appears once there is something above the fold, is not gratuitous\"] # [doc = \" motion: it is a direct, one-to-one response to a movement the user is\"] # [doc = \" making with their own hand, and suppressing it would remove information\"] # [doc = \" rather than calm. A decorative parallax — a background drifting at a\"] # [doc = \" different rate to say nothing at all — is the opposite, and under reduced\"] # [doc = \" motion it should not drift.\"] # [doc = \"\"] # [doc = \" Only the caller knows which of those it is building, so the caller says so\"] # [doc = \" with [`ScrollLink::decorative`]. A decorative link marked under reduced\"] # [doc = \" motion reports 0 at every offset, which is the resting end of the effect:\"] # [doc = \" the parallax layer simply sits where it belongs.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct ScrollLink { start : f32, end : f32, suppressed : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::scroll_link::ScrollLink::decorative",
      "name": "decorative",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::scroll_link",
      "path": "gpui_kit::motion::scroll_link",
      "source": "crates/gpui-kit/src/motion/scroll_link.rs",
      "summary": "Marks the effect decorative, and suppresses it when the user has asked for less motion.",
      "documentation": "Marks the effect decorative, and suppresses it when the user has asked\nfor less motion.\n\nPass [`reduce_motion`](super::reduce_motion). A link left unmarked\nalways reports the offset, because a response to the user's own\nscrolling is not the motion the preference is about.",
      "signature": "pub fn decorative (mut self, reduce_motion : bool) -> Self",
      "cfg": [],
      "target": "ScrollLink"
    },
    {
      "id": "gpui_kit::motion::scroll_link::ScrollLink::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::scroll_link",
      "path": "gpui_kit::motion::scroll_link",
      "source": "crates/gpui-kit/src/motion/scroll_link.rs",
      "summary": "Over the offsets `start..end`, measured the way a reader thinks about scrolling: 0 is the top of the content and the number grows as the content moves up.",
      "documentation": "Over the offsets `start..end`, measured the way a reader thinks about\nscrolling: 0 is the top of the content and the number grows as the\ncontent moves up.\n\nA range with no length is a threshold rather than a ramp: progress is 0\nbelow it and 1 from it on.",
      "signature": "pub fn new (start : Pixels, end : Pixels) -> Self",
      "cfg": [],
      "target": "ScrollLink"
    },
    {
      "id": "gpui_kit::motion::scroll_link::ScrollLink::over",
      "name": "over",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::scroll_link",
      "path": "gpui_kit::motion::scroll_link",
      "source": "crates/gpui-kit/src/motion/scroll_link.rs",
      "summary": "Over the first `distance` of scrolling.",
      "documentation": "Over the first `distance` of scrolling.",
      "signature": "pub fn over (distance : Pixels) -> Self",
      "cfg": [],
      "target": "ScrollLink"
    },
    {
      "id": "gpui_kit::motion::scroll_link::ScrollLink::progress",
      "name": "progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::scroll_link",
      "path": "gpui_kit::motion::scroll_link",
      "source": "crates/gpui-kit/src/motion/scroll_link.rs",
      "summary": "Where `offset` sits in the range: 0 before it, 1 after it, and monotonically between.",
      "documentation": "Where `offset` sits in the range: 0 before it, 1 after it, and\nmonotonically between.",
      "signature": "pub fn progress (self, offset : Pixels) -> f32",
      "cfg": [],
      "target": "ScrollLink"
    },
    {
      "id": "gpui_kit::motion::scroll_link::ScrollLink::sample",
      "name": "sample",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::scroll_link",
      "path": "gpui_kit::motion::scroll_link",
      "source": "crates/gpui-kit/src/motion/scroll_link.rs",
      "summary": "Anything interpolable, read off the offset.",
      "documentation": "Anything interpolable, read off the offset.\n\nAnything that takes a progress can be driven from here, including\n[`Keyframes::sample`](super::Keyframes::sample) for a value that passes\nthrough stops on the way.",
      "signature": "pub fn sample<T : Interpolate> (self, offset : Pixels, from : T, to : T) -> T",
      "cfg": [],
      "target": "ScrollLink"
    },
    {
      "id": "gpui_kit::motion::sequence::Sequence",
      "name": "Sequence",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::sequence",
      "path": "gpui_kit::motion::sequence",
      "source": "crates/gpui-kit/src/motion/sequence.rs",
      "summary": "A chain of specifications, each starting when the one before it has finished.",
      "documentation": "A chain of specifications, each starting when the one before it has\nfinished.\n\n[`MotionSpec::after`] already composes two, and a chain of them is a\nperfectly good way to write \"and then\". This exists for what that shape\ncannot answer: it keeps the steps, so a caller can ask where step three\nstarts or drive the whole chain from one clock, and it reports the total —\nwhich [`Presence`](super::Presence), a caller holding an element on screen,\nor anything else waiting for the group to be over cannot otherwise know\nwithout adding the durations up by hand.\n\nEach step keeps its own delay, counted from the end of the previous step,\nso a gap between two motions is written where the gap is.",
      "signature": "# [doc = \" A chain of specifications, each starting when the one before it has\"] # [doc = \" finished.\"] # [doc = \"\"] # [doc = \" [`MotionSpec::after`] already composes two, and a chain of them is a\"] # [doc = \" perfectly good way to write \\\"and then\\\". This exists for what that shape\"] # [doc = \" cannot answer: it keeps the steps, so a caller can ask where step three\"] # [doc = \" starts or drive the whole chain from one clock, and it reports the total —\"] # [doc = \" which [`Presence`](super::Presence), a caller holding an element on screen,\"] # [doc = \" or anything else waiting for the group to be over cannot otherwise know\"] # [doc = \" without adding the durations up by hand.\"] # [doc = \"\"] # [doc = \" Each step keeps its own delay, counted from the end of the previous step,\"] # [doc = \" so a gap between two motions is written where the gap is.\"] # [derive (Debug, Clone, Default, PartialEq)] pub struct Sequence { # [doc = \" Steps as given, with their delays still relative to the step before.\"] steps : Vec<MotionSpec>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::sequence::Sequence::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::sequence",
      "path": "gpui_kit::motion::sequence",
      "source": "crates/gpui-kit/src/motion/sequence.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "Sequence"
    },
    {
      "id": "gpui_kit::motion::sequence::Sequence::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::sequence",
      "path": "gpui_kit::motion::sequence",
      "source": "crates/gpui-kit/src/motion/sequence.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "Sequence"
    },
    {
      "id": "gpui_kit::motion::sequence::Sequence::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::sequence",
      "path": "gpui_kit::motion::sequence",
      "source": "crates/gpui-kit/src/motion/sequence.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (steps : impl IntoIterator<Item = MotionSpec>) -> Self",
      "cfg": [],
      "target": "Sequence"
    },
    {
      "id": "gpui_kit::motion::sequence::Sequence::progress",
      "name": "progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::sequence",
      "path": "gpui_kit::motion::sequence",
      "source": "crates/gpui-kit/src/motion/sequence.rs",
      "summary": "Where step `index` has got to when the sequence as a whole is `raw` through, so one clock over [`Sequence::total`] drives every step.",
      "documentation": "Where step `index` has got to when the sequence as a whole is `raw`\nthrough, so one clock over [`Sequence::total`] drives every step.\n\nA step that has not started reports 0 and a step that has finished\nreports 1, which is what a caller painting all of them at once needs:\nthe steps that are over stay where they landed.",
      "signature": "pub fn progress (& self, index : usize, raw : f32) -> f32",
      "cfg": [],
      "target": "Sequence"
    },
    {
      "id": "gpui_kit::motion::sequence::Sequence::start",
      "name": "start",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::sequence",
      "path": "gpui_kit::motion::sequence",
      "source": "crates/gpui-kit/src/motion/sequence.rs",
      "summary": "When step `index` starts, measured from the start of the sequence. Its own delay is part of the step, not part of the wait.",
      "documentation": "When step `index` starts, measured from the start of the sequence.\nIts own delay is part of the step, not part of the wait.",
      "signature": "pub fn start (& self, index : usize) -> Duration",
      "cfg": [],
      "target": "Sequence"
    },
    {
      "id": "gpui_kit::motion::sequence::Sequence::step",
      "name": "step",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::sequence",
      "path": "gpui_kit::motion::sequence",
      "source": "crates/gpui-kit/src/motion/sequence.rs",
      "summary": "Step `index` with its delay measured from the start of the sequence, so it can be handed to anything that runs a single specification.",
      "documentation": "Step `index` with its delay measured from the start of the sequence,\nso it can be handed to anything that runs a single specification.",
      "signature": "pub fn step (& self, index : usize) -> Option<MotionSpec>",
      "cfg": [],
      "target": "Sequence"
    },
    {
      "id": "gpui_kit::motion::sequence::Sequence::steps",
      "name": "steps",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::sequence",
      "path": "gpui_kit::motion::sequence",
      "source": "crates/gpui-kit/src/motion/sequence.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn steps (& self) -> impl Iterator<Item = MotionSpec> + '_",
      "cfg": [],
      "target": "Sequence"
    },
    {
      "id": "gpui_kit::motion::sequence::Sequence::then",
      "name": "then",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::sequence",
      "path": "gpui_kit::motion::sequence",
      "source": "crates/gpui-kit/src/motion/sequence.rs",
      "summary": "Adds a step that begins when everything already in the sequence has finished.",
      "documentation": "Adds a step that begins when everything already in the sequence has\nfinished.",
      "signature": "pub fn then (mut self, spec : MotionSpec) -> Self",
      "cfg": [],
      "target": "Sequence"
    },
    {
      "id": "gpui_kit::motion::sequence::Sequence::total",
      "name": "total",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::sequence",
      "path": "gpui_kit::motion::sequence",
      "source": "crates/gpui-kit/src/motion/sequence.rs",
      "summary": "How long the whole sequence lasts.",
      "documentation": "How long the whole sequence lasts.",
      "signature": "pub fn total (& self) -> Duration",
      "cfg": [],
      "target": "Sequence"
    },
    {
      "id": "gpui_kit::motion::spec::MotionSpec",
      "name": "MotionSpec",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "A curve with a duration and a delay: everything one animation needs, taken from the token document rather than written beside the element.",
      "documentation": "A curve with a duration and a delay: everything one animation needs, taken\nfrom the token document rather than written beside the element.\n\nA specification can carry a spring instead of a curve. Its duration is then\nthe spring's settle time, so everything that already knows how to run a\nspecification — [`Transition`](super::Transition),\n[`Presence`](super::Presence), [`Stagger`](super::Stagger) and GPUI's\n`with_animation` — runs a spring without knowing it is one.",
      "signature": "# [doc = \" A curve with a duration and a delay: everything one animation needs, taken\"] # [doc = \" from the token document rather than written beside the element.\"] # [doc = \"\"] # [doc = \" A specification can carry a spring instead of a curve. Its duration is then\"] # [doc = \" the spring's settle time, so everything that already knows how to run a\"] # [doc = \" specification — [`Transition`](super::Transition),\"] # [doc = \" [`Presence`](super::Presence), [`Stagger`](super::Stagger) and GPUI's\"] # [doc = \" `with_animation` — runs a spring without knowing it is one.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct MotionSpec { pub duration_ms : u64, pub delay_ms : u64, pub curve : CubicBezier, # [doc = \" Set when the specification is sprung; the curve is then unused.\"] spring : Option<Spring>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::MotionSpec::after",
      "name": "after",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "The specification moved to start when `previous` has finished.",
      "documentation": "The specification moved to start when `previous` has finished.\n\nIts own delay is kept and counted from there, so \"80ms after the panel\nhas opened\" is `content.with_delay(80).after(panel)` and the caller\nnever adds two numbers together. [`Sequence`](super::Sequence) is the\nsame composition for more than two, and can report the total.",
      "signature": "pub fn after (mut self, previous : MotionSpec) -> Self",
      "cfg": [],
      "target": "MotionSpec"
    },
    {
      "id": "gpui_kit::motion::spec::MotionSpec::animation",
      "name": "animation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "Adapts the specification to GPUI's animation driver.",
      "documentation": "Adapts the specification to GPUI's animation driver.\n\nGPUI accepts finite values outside 0..1, but the existing Kit helpers\nuse this fraction for properties such as opacity, so this compatibility\nadapter remains clamped. Overshoot survives in\n[`Transition`](super::Transition), [`Presence`](super::Presence), and\nGPUI's stateful `with_spring` path.",
      "signature": "pub fn animation (self) -> Animation",
      "cfg": [],
      "target": "MotionSpec"
    },
    {
      "id": "gpui_kit::motion::spec::MotionSpec::is_sprung",
      "name": "is_sprung",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_sprung (self) -> bool",
      "cfg": [],
      "target": "MotionSpec"
    },
    {
      "id": "gpui_kit::motion::spec::MotionSpec::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn new (duration_ms : u64, curve : CubicBezier) -> Self",
      "cfg": [],
      "target": "MotionSpec"
    },
    {
      "id": "gpui_kit::motion::spec::MotionSpec::progress",
      "name": "progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn progress (self, raw : f32) -> f32",
      "cfg": [],
      "target": "MotionSpec"
    },
    {
      "id": "gpui_kit::motion::spec::MotionSpec::repeating",
      "name": "repeating",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn repeating (self) -> Animation",
      "cfg": [],
      "target": "MotionSpec"
    },
    {
      "id": "gpui_kit::motion::spec::MotionSpec::spring",
      "name": "spring",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "The spring behind a sprung specification, for callers that need more of it than an eased fraction — velocity across a retarget, for one.",
      "documentation": "The spring behind a sprung specification, for callers that need more of\nit than an eased fraction — velocity across a retarget, for one.",
      "signature": "pub fn spring (self) -> Option<Spring>",
      "cfg": [],
      "target": "MotionSpec"
    },
    {
      "id": "gpui_kit::motion::spec::MotionSpec::sprung",
      "name": "sprung",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "A specification that arrives on a spring rather than along a curve.",
      "documentation": "A specification that arrives on a spring rather than along a curve.\n\nThe duration is the spring's settle time, which is where the weight\ncomes from: a spring is still moving after a curve of the same nominal\nlength has stopped.",
      "signature": "pub fn sprung (spring : Spring) -> Self",
      "cfg": [],
      "target": "MotionSpec"
    },
    {
      "id": "gpui_kit::motion::spec::MotionSpec::time_at",
      "name": "time_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "The earliest point in the run at which the specification has reached `value`: the inverse of [`MotionSpec::progress`], on the same clock.",
      "documentation": "The earliest point in the run at which the specification has reached\n`value`: the inverse of [`MotionSpec::progress`], on the same clock.\n\nSampled at a millisecond rather than solved, because a cubic bezier has\nno closed-form inverse and a spring is not even monotonic — an\nunderdamped one passes its target and comes back, so \"the earliest time\nit was there\" is the only well-defined answer. A millisecond is the\ngranularity a specification is written in anyway.\n\nA value never reached returns the whole run.",
      "signature": "pub fn time_at (self, value : f32) -> Duration",
      "cfg": [],
      "target": "MotionSpec"
    },
    {
      "id": "gpui_kit::motion::spec::MotionSpec::total",
      "name": "total",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn total (self) -> Duration",
      "cfg": [],
      "target": "MotionSpec"
    },
    {
      "id": "gpui_kit::motion::spec::MotionSpec::with_delay",
      "name": "with_delay",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn with_delay (mut self, delay_ms : u64) -> Self",
      "cfg": [],
      "target": "MotionSpec"
    },
    {
      "id": "gpui_kit::motion::spec::content_in",
      "name": "content_in",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "The arrival a block of content makes when it replaces what was there.",
      "documentation": "The arrival a block of content makes when it replaces what was there.\n\nThe rise belongs on a wrapper inside the element that publishes the node,\nso the published box is the settled one and only the pixels travel.",
      "signature": "pub fn content_in<E> (id : impl Into<ElementId>, theme : & Theme, element : E) -> AnimationElement<E> where E : Styled + IntoElement + 'static,",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::dialog",
      "name": "dialog",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "How a modal arrives: slower, because it is taking the page over.",
      "documentation": "How a modal arrives: slower, because it is taking the page over.",
      "signature": "pub fn dialog (theme : & Theme) -> MotionSpec",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::dialog_arrival",
      "name": "dialog_arrival",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "How a modal arrives when it should arrive with weight: on the smooth spring, which keeps moving after a curve of the same length has stopped.",
      "documentation": "How a modal arrives when it should arrive with weight: on the smooth\nspring, which keeps moving after a curve of the same length has stopped.",
      "signature": "pub fn dialog_arrival (theme : & Theme) -> MotionSpec",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::dialog_in",
      "name": "dialog_in",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "The arrival a modal makes: it rises onto the page on a spring, so it arrives with weight rather than simply appearing at full strength.",
      "documentation": "The arrival a modal makes: it rises onto the page on a spring, so it\narrives with weight rather than simply appearing at full strength.",
      "signature": "pub fn dialog_in<E> (id : impl Into<ElementId>, theme : & Theme, element : E) -> AnimationElement<E> where E : Styled + IntoElement + 'static,",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::entrance",
      "name": "entrance",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "How a surface that is part of the page arrives.",
      "documentation": "How a surface that is part of the page arrives.",
      "signature": "pub fn entrance (theme : & Theme) -> MotionSpec",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::fade_in",
      "name": "fade_in",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "Fades `element` in over the entrance specification.",
      "documentation": "Fades `element` in over the entrance specification.",
      "signature": "pub fn fade_in<E> (id : impl Into<ElementId>, theme : & Theme, element : E) -> AnimationElement<E> where E : Styled + IntoElement + 'static,",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::gradient_opacity",
      "name": "gradient_opacity",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "The repeating opacity a gradient spinner turns on.",
      "documentation": "The repeating opacity a gradient spinner turns on.",
      "signature": "pub fn gradient_opacity (phase : f32, dim : f32) -> f32",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::menu",
      "name": "menu",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "How a menu opens: short, because it is answering a click.",
      "documentation": "How a menu opens: short, because it is answering a click.",
      "signature": "pub fn menu (theme : & Theme) -> MotionSpec",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::menu_in",
      "name": "menu_in",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "The opening a menu makes: a fade with a small rise.",
      "documentation": "The opening a menu makes: a fade with a small rise.",
      "signature": "pub fn menu_in<E> (id : impl Into<ElementId>, theme : & Theme, element : E) -> AnimationElement<E> where E : Styled + IntoElement + 'static,",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::presenting",
      "name": "presenting",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "How a surface on `role` looks at `progress`, where 0 is absent and 1 is fully present.",
      "documentation": "How a surface on `role` looks at `progress`, where 0 is absent and 1 is\nfully present.\n\nThe `*_in` helpers above each own two things: the timeline, and what the\nelement looks like partway along it. That pairing is why none of them can\nrun backwards — `with_animation` drives the timeline, and it only goes one\nway. This is the second half on its own, taking the progress from wherever\nthe caller keeps it, which for an overlay is [`Presenting`](super::Presenting).\n\nThe appearance is the same one the matching helper produces, so a surface\nthat departs through this and a surface that arrives through `menu_in` are\nthe same surface. What it adds is that the departure is the arrival in\nreverse: a menu that rose two pixels sinks two pixels back, rather than\nvanishing from wherever it was.",
      "signature": "pub fn presenting<E> (element : E, role : MotionRole, progress : f32) -> E where E : Styled,",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::pulse_wave",
      "name": "pulse_wave",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "The repeating wave a loading placeholder breathes on.",
      "documentation": "The repeating wave a loading placeholder breathes on.",
      "signature": "pub fn pulse_wave (phase : f32) -> f32",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::resize",
      "name": "resize",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "How a value that has a position moves to a new one, such as a progress fill or an opening section.",
      "documentation": "How a value that has a position moves to a new one, such as a progress\nfill or an opening section.",
      "signature": "pub fn resize (theme : & Theme) -> MotionSpec",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::row_in",
      "name": "row_in",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "The arrival one row of a menu-shaped list makes.",
      "documentation": "The arrival one row of a menu-shaped list makes.\n\nOpacity only, and deliberately so: a rise is a layout input, so a row that\nslid into place would publish a moving box while it travelled. The wave is\n[`Stagger::rows`](super::Stagger::rows), whose window is capped however\nlong the list is.",
      "signature": "pub fn row_in<E> (id : impl Into<ElementId>, theme : & Theme, index : usize, count : usize, element : E,) -> AnimationElement<E> where E : Styled + IntoElement + 'static,",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::shimmer_offset",
      "name": "shimmer_offset",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "The sweep a loading placeholder's highlight travels on, as a fraction of the placeholder's own width.",
      "documentation": "The sweep a loading placeholder's highlight travels on, as a fraction of\nthe placeholder's own width.\n\nThe band starts fully off the leading edge and finishes fully off the\ntrailing one, so a row is never left with a bright edge parked on it.",
      "signature": "pub fn shimmer_offset (phase : f32, band : f32) -> f32",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::state_change",
      "name": "state_change",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "How one control moves to a new state: short, because it is answering a pointer that is still on it.",
      "documentation": "How one control moves to a new state: short, because it is answering a\npointer that is still on it.",
      "signature": "pub fn state_change (theme : & Theme) -> MotionSpec",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::surface_in",
      "name": "surface_in",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "How a surface arrives when it replaces a loading or empty stand-in.",
      "documentation": "How a surface arrives when it replaces a loading or empty stand-in.\n\nOpacity only. A rise would move the first line of real content after a\nskeleton, and the whole point of this swap is that the settled box was\nalready reserved. Under reduced motion the animation finishes immediately.",
      "signature": "pub fn surface_in<E> (id : impl Into<ElementId>, theme : & Theme, element : E) -> AnimationElement<E> where E : Styled + IntoElement + 'static,",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spec::tracking",
      "name": "tracking",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spec",
      "path": "gpui_kit::motion::spec",
      "source": "crates/gpui-kit/src/motion/spec.rs",
      "summary": "How a control that is being manipulated follows the value: the tight spring, so it feels attached rather than trailing.",
      "documentation": "How a control that is being manipulated follows the value: the tight\nspring, so it feels attached rather than trailing.",
      "signature": "pub fn tracking (theme : & Theme) -> MotionSpec",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spring::Spring",
      "name": "Spring",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "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.",
      "documentation": "A damped spring, solved in closed form so a position is a function of time\nrather than of how many frames happened to be delivered.",
      "signature": "# [doc = \" A damped spring, solved in closed form so a position is a function of time\"] # [doc = \" rather than of how many frames happened to be delivered.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Spring { pub stiffness : f32, pub damping : f32, pub mass : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::spring::Spring::animation",
      "name": "animation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "Expresses the spring as a GPUI animation, so it can drive `with_animation` alongside curve-based motion.",
      "documentation": "Expresses the spring as a GPUI animation, so it can drive\n`with_animation` alongside curve-based motion.",
      "signature": "pub fn animation (self) -> Animation",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::spring::Spring::bounce",
      "name": "bounce",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "The bounce half, inverted from the damping ratio.",
      "documentation": "The bounce half, inverted from the damping ratio.",
      "signature": "pub fn bounce (self) -> f32",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::spring::Spring::damping_ratio",
      "name": "damping_ratio",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "Damping ratio: below one oscillates, one settles fastest, above one crawls.",
      "documentation": "Damping ratio: below one oscillates, one settles fastest, above one crawls.",
      "signature": "pub fn damping_ratio (self) -> f32",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::spring::Spring::is_visually_settled",
      "name": "is_visually_settled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "Whether the remaining visual change is below a pixel or an opacity step.",
      "documentation": "Whether the remaining visual change is below a pixel or an opacity step.",
      "signature": "pub fn is_visually_settled (self, elapsed : Duration, velocity : f32, span : f32) -> bool",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::spring::Spring::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (stiffness : f32, damping : f32, mass : f32) -> Self",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::spring::Spring::perceptual",
      "name": "perceptual",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "A spring described the way a design decision is: how long it takes and how much it overshoots.",
      "documentation": "A spring described the way a design decision is: how long it takes and\nhow much it overshoots.\n\nStiffness, damping and mass are three numbers for two decisions, and\nneither decision is either of the three. This is the same\nparameterisation as SwiftUI's `Spring(duration:bounce:)`, and it is a\nchange of variables rather than an approximation:\n\n- mass is fixed at 1. A spring's behaviour depends on stiffness and\ndamping only through `k/m` and `c/m`, so nothing is lost by it;\n- `duration` is the period of the undamped oscillation, which is what\nsets the pace whatever the damping does:\n`omega = 2 * PI / duration`, and `stiffness = omega^2 * mass`;\n- `bounce` is the damping ratio turned inside out, so that 0 is\ncritically damped whichever side of it the value is on:\n`zeta = 1 - bounce` for a positive bounce, which reaches the\nundamped `zeta = 0` at 1, and `zeta = 1 / (1 + bounce)` for a\nnegative one, which grows without bound toward -1. Damping follows\nfrom the ratio: `damping = 2 * zeta * sqrt(stiffness * mass)`, which\nwith the frequency above is `4 * PI * zeta * mass / duration`.\n\nSo a bounce of 0 settles without passing its target, a positive bounce\novershoots and comes back, and a negative one crawls in. The bounce is\nheld inside `-0.99..=0.99`.\n\n[`Spring::new`] is unchanged and remains the way in for a spring whose\nthree constants are already known, a token preset included.",
      "signature": "pub fn perceptual (duration : Duration, bounce : f32) -> Self",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::spring::Spring::perceptual_duration",
      "name": "perceptual_duration",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "The duration half of [`Spring::perceptual`], for a spring built any other way: the period of the undamped oscillation.",
      "documentation": "The duration half of [`Spring::perceptual`], for a spring built any\nother way: the period of the undamped oscillation.\n\nIt is not the settle time. A spring is still perceptibly arriving after\nits perceptual duration — at a bounce of 0 it is roughly 99% of the way\nthere — and [`Spring::settle_time`] is the honest end of the motion.",
      "signature": "pub fn perceptual_duration (self) -> Duration",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::spring::Spring::preset",
      "name": "preset",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn preset (theme : & Theme, preset : SpringPreset) -> Self",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::spring::Spring::settle_time",
      "name": "settle_time",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "How long until the spring stays within one part in a thousand of its target.",
      "documentation": "How long until the spring stays within one part in a thousand of its target.",
      "signature": "pub fn settle_time (self) -> Duration",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::spring::Spring::settle_time_at",
      "name": "settle_time_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "The same, for a spring released with `velocity` already carried into the motion: one that is travelling fast needs longer to come to rest.",
      "documentation": "The same, for a spring released with `velocity` already carried into\nthe motion: one that is travelling fast needs longer to come to rest.",
      "signature": "pub fn settle_time_at (self, velocity : f32) -> Duration",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::spring::Spring::settle_time_at_for",
      "name": "settle_time_at_for",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "The same, for a spring released with `velocity` already carried in.",
      "documentation": "The same, for a spring released with `velocity` already carried in.",
      "signature": "pub fn settle_time_at_for (self, velocity : f32, span : f32) -> Duration",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::spring::Spring::settle_time_for",
      "name": "settle_time_for",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "How long until the remaining change is smaller than a pixel or an opacity step, for a motion whose full span is `span`.",
      "documentation": "How long until the remaining change is smaller than a pixel or an\nopacity step, for a motion whose full span is `span`.\n\nA ten-pixel slide can stop when 0.1px remains. A fade whose span is\n`1.0` still uses the opacity floor. Both also require the velocity to\nhave dropped below the same floor, so a spring that is still racing\nthrough the epsilon band is not marked settled.",
      "signature": "pub fn settle_time_for (self, span : f32) -> Duration",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::spring::Spring::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "Normalized step response: 0 at rest, approaching 1 as it settles.",
      "documentation": "Normalized step response: 0 at rest, approaching 1 as it settles.",
      "signature": "pub fn value (self, elapsed : Duration) -> f32",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::spring::Spring::value_at",
      "name": "value_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::spring",
      "path": "gpui_kit::motion::spring",
      "source": "crates/gpui-kit/src/motion/spring.rs",
      "summary": "Normalized step response for a spring that was already moving when it was aimed here.",
      "documentation": "Normalized step response for a spring that was already moving when it\nwas aimed here.\n\n`velocity` is the speed carried into the motion, in units of the full\ndistance per second and positive toward the target. The pair is the\nvalue and its own velocity, so a caller that retargets again can hand\nthe motion on rather than restarting it.",
      "signature": "pub fn value_at (self, elapsed : Duration, velocity : f32) -> (f32, f32)",
      "cfg": [],
      "target": "Spring"
    },
    {
      "id": "gpui_kit::motion::stagger::Stagger",
      "name": "Stagger",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "Delays each item in a list so a group animates as a wave.",
      "documentation": "Delays each item in a list so a group animates as a wave.\n\nThe total is capped so a long list stays responsive: past `max_items` the\nper-item delay shrinks instead of the sequence growing without bound.",
      "signature": "# [doc = \" Delays each item in a list so a group animates as a wave.\"] # [doc = \"\"] # [doc = \" The total is capped so a long list stays responsive: past `max_items` the\"] # [doc = \" per-item delay shrinks instead of the sequence growing without bound.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Stagger { step : Duration, max_items : usize, reversed : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::stagger::Stagger::delay",
      "name": "delay",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn delay (& self, index : usize, count : usize) -> Duration",
      "cfg": [],
      "target": "Stagger"
    },
    {
      "id": "gpui_kit::motion::stagger::Stagger::from_millis",
      "name": "from_millis",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_millis (step_ms : u64) -> Self",
      "cfg": [],
      "target": "Stagger"
    },
    {
      "id": "gpui_kit::motion::stagger::Stagger::is_reversed",
      "name": "is_reversed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_reversed (& self) -> bool",
      "cfg": [],
      "target": "Stagger"
    },
    {
      "id": "gpui_kit::motion::stagger::Stagger::max_items",
      "name": "max_items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn max_items (mut self, max_items : usize) -> Self",
      "cfg": [],
      "target": "Stagger"
    },
    {
      "id": "gpui_kit::motion::stagger::Stagger::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (step : Duration, max_items : usize) -> Self",
      "cfg": [],
      "target": "Stagger"
    },
    {
      "id": "gpui_kit::motion::stagger::Stagger::progress_at",
      "name": "progress_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "Progress of item `index` on one shared group clock.",
      "documentation": "Progress of item `index` on one shared group clock.\n\nEvery row samples the same `elapsed` instead of owning a timer. Past\nthe item's window the answer is 1, so a long list that has already\narrived does not keep scheduling frames for the last row.",
      "signature": "pub fn progress_at (& self, elapsed : Duration, index : usize, count : usize, spec : MotionSpec,) -> f32",
      "cfg": [],
      "target": "Stagger"
    },
    {
      "id": "gpui_kit::motion::stagger::Stagger::reversed",
      "name": "reversed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "Runs the wave from the last item to the first.",
      "documentation": "Runs the wave from the last item to the first.\n\nThis is the order a list leaves on. A list that arrived from the top\ndown should depart from the bottom up, so the row the user is looking\nat — the one they just acted on, at the top — is the last to go rather\nthan the first, and the group empties away from them instead of out\nfrom under them.",
      "signature": "pub fn reversed (mut self) -> Self",
      "cfg": [],
      "target": "Stagger"
    },
    {
      "id": "gpui_kit::motion::stagger::Stagger::rows",
      "name": "rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "The wave a list of menu-shaped rows arrives on.",
      "documentation": "The wave a list of menu-shaped rows arrives on.\n\nBoth the neighbour delay and the maximum span come from the active\ntheme. Past that span the step shrinks to keep the window fixed.",
      "signature": "pub fn rows (theme : & Theme) -> Self",
      "cfg": [],
      "target": "Stagger"
    },
    {
      "id": "gpui_kit::motion::stagger::Stagger::spec",
      "name": "spec",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "Applies the delay for one item to a spec.",
      "documentation": "Applies the delay for one item to a spec.",
      "signature": "pub fn spec (& self, index : usize, count : usize, spec : MotionSpec) -> MotionSpec",
      "cfg": [],
      "target": "Stagger"
    },
    {
      "id": "gpui_kit::motion::stagger::Stagger::total",
      "name": "total",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "The window the whole group occupies, including the last item's span.",
      "documentation": "The window the whole group occupies, including the last item's span.\n\nReversing changes which item waits longest, not how long the group\ntakes, so the window is measured from the furthest place rather than\nfrom the last index.",
      "signature": "pub fn total (& self, count : usize, spec : MotionSpec) -> Duration",
      "cfg": [],
      "target": "Stagger"
    },
    {
      "id": "gpui_kit::motion::stagger::Stagger::with_budget",
      "name": "with_budget",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "Compresses or silences the wave when the frame cannot afford one.",
      "documentation": "Compresses or silences the wave when the frame cannot afford one.",
      "signature": "pub fn with_budget (self, budget : StaggerBudget) -> Self",
      "cfg": [],
      "target": "Stagger"
    },
    {
      "id": "gpui_kit::motion::stagger::StaggerBudget",
      "name": "StaggerBudget",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "How much of a stagger the current frame is allowed to spend.",
      "documentation": "How much of a stagger the current frame is allowed to spend.",
      "signature": "# [doc = \" How much of a stagger the current frame is allowed to spend.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum StaggerBudget { Full, Compressed, Off, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::stagger::row_stagger_cap",
      "name": "row_stagger_cap",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "The longest a row wave can last, whatever the row count.",
      "documentation": "The longest a row wave can last, whatever the row count.",
      "signature": "pub fn row_stagger_cap (theme : & Theme) -> Duration",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::stagger::staggered_phase",
      "name": "staggered_phase",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::stagger",
      "path": "gpui_kit::motion::stagger",
      "source": "crates/gpui-kit/src/motion/stagger.rs",
      "summary": "The repeating phase for item `index` in a looping group animation, such as a chase or wave loader.",
      "documentation": "The repeating phase for item `index` in a looping group animation, such as\na chase or wave loader.",
      "signature": "pub fn staggered_phase (raw : f32, index : usize, stagger : f32) -> f32",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::transition::Transition",
      "name": "Transition",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::transition",
      "path": "gpui_kit::motion::transition",
      "source": "crates/gpui-kit/src/motion/transition.rs",
      "summary": "A value that animates toward whatever it is last told to be.",
      "documentation": "A value that animates toward whatever it is last told to be.\n\nRetargeting starts from the value currently on screen rather than from the\nprevious target, so an interrupted transition does not jump backward.",
      "signature": "# [doc = \" A value that animates toward whatever it is last told to be.\"] # [doc = \"\"] # [doc = \" Retargeting starts from the value currently on screen rather than from the\"] # [doc = \" previous target, so an interrupted transition does not jump backward.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Transition<T : Interpolate> { from : T, to : T, spec : MotionSpec, elapsed : Duration, # [doc = \" Progress velocity carried in from the motion this one interrupted, in\"] # [doc = \" units of the current distance per second.\"] carried : f32, # [doc = \" How long the run takes, delay excluded. A spring that was already\"] # [doc = \" moving needs longer than its resting settle time.\"] duration : Duration, last_frame : Option<Instant>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::motion::transition::Transition::advance",
      "name": "advance",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::transition",
      "path": "gpui_kit::motion::transition",
      "source": "crates/gpui-kit/src/motion/transition.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn advance (& mut self, delta : Duration)",
      "cfg": [],
      "target": "Transition<T>"
    },
    {
      "id": "gpui_kit::motion::transition::Transition::animate",
      "name": "animate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::transition",
      "path": "gpui_kit::motion::transition",
      "source": "crates/gpui-kit/src/motion/transition.rs",
      "summary": "Advances by the time since the previous frame and schedules the next one while the transition is still running.",
      "documentation": "Advances by the time since the previous frame and schedules the next\none while the transition is still running.\n\nHonors reduced motion by finishing immediately, so a caller gets the\nfinal value without any intermediate frames.",
      "signature": "pub fn animate (& mut self, window : & mut Window, cx : & mut App) -> T",
      "cfg": [],
      "target": "Transition<T>"
    },
    {
      "id": "gpui_kit::motion::transition::Transition::is_animating",
      "name": "is_animating",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::transition",
      "path": "gpui_kit::motion::transition",
      "source": "crates/gpui-kit/src/motion/transition.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_animating (& self) -> bool",
      "cfg": [],
      "target": "Transition<T>"
    },
    {
      "id": "gpui_kit::motion::transition::Transition::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::transition",
      "path": "gpui_kit::motion::transition",
      "source": "crates/gpui-kit/src/motion/transition.rs",
      "summary": "Starts settled at `value`, so a first render does not animate in.",
      "documentation": "Starts settled at `value`, so a first render does not animate in.",
      "signature": "pub fn new (value : T, spec : MotionSpec) -> Self",
      "cfg": [],
      "target": "Transition<T>"
    },
    {
      "id": "gpui_kit::motion::transition::Transition::release",
      "name": "release",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::transition",
      "path": "gpui_kit::motion::transition",
      "source": "crates/gpui-kit/src/motion/transition.rs",
      "summary": "Aims at a new target with a speed the value did not get from an animation, which is what a value let go of by the hand has.",
      "documentation": "Aims at a new target with a speed the value did not get from an\nanimation, which is what a value let go of by the hand has.\n\nThis is inertia. The gesture reports its speed — see\n[`VelocityTracker`](super::VelocityTracker) — and the spring is\nreleased with it rather than from a standstill, so a flicked thing\ncarries on and settles instead of stopping dead the instant the finger\nleaves it. It is the same handover a retarget performs, with the speed\ncoming from outside instead of from the motion being interrupted.\n\n`velocity` is in value units a second and positive toward `target`. A\nrelease always restarts the motion, including at the current target: a\nvalue thrown at where it already is has somewhere to go and come back\nfrom.\n\nOnly a sprung specification can carry it. A curve has no momentum, so a\nreleased curve is an ordinary [`Transition::set`].",
      "signature": "pub fn release (& mut self, target : T, velocity : f32)",
      "cfg": [],
      "target": "Transition<T>"
    },
    {
      "id": "gpui_kit::motion::transition::Transition::set",
      "name": "set",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::transition",
      "path": "gpui_kit::motion::transition",
      "source": "crates/gpui-kit/src/motion/transition.rs",
      "summary": "Aims at a new target. Setting the current target again is a no-op, so a render that re-declares the same value does not restart the animation.",
      "documentation": "Aims at a new target. Setting the current target again is a no-op, so a\nrender that re-declares the same value does not restart the animation.\n\nA retarget hands the motion on rather than restarting it: the speed the\nvalue already had is measured, converted into the new distance, and\nreleased into the new motion. Without that, a target changed mid-flight\nstalls the value for the first few frames of the new run.\n\nThe speed keeps its direction, so reversing a target throws the value\non the way it was already going before it comes back. Turning it round\non the spot would be the stall this exists to remove, wearing a\ndifferent shape.",
      "signature": "pub fn set (& mut self, target : T) where T : PartialEq,",
      "cfg": [],
      "target": "Transition<T>"
    },
    {
      "id": "gpui_kit::motion::transition::Transition::snap",
      "name": "snap",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::transition",
      "path": "gpui_kit::motion::transition",
      "source": "crates/gpui-kit/src/motion/transition.rs",
      "summary": "Jumps to `target` without animating, for state changes the user did not cause, such as a theme switch.",
      "documentation": "Jumps to `target` without animating, for state changes the user did not\ncause, such as a theme switch.",
      "signature": "pub fn snap (& mut self, target : T)",
      "cfg": [],
      "target": "Transition<T>"
    },
    {
      "id": "gpui_kit::motion::transition::Transition::spec",
      "name": "spec",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::transition",
      "path": "gpui_kit::motion::transition",
      "source": "crates/gpui-kit/src/motion/transition.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn spec (mut self, spec : MotionSpec) -> Self",
      "cfg": [],
      "target": "Transition<T>"
    },
    {
      "id": "gpui_kit::motion::transition::Transition::target",
      "name": "target",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::transition",
      "path": "gpui_kit::motion::transition",
      "source": "crates/gpui-kit/src/motion/transition.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn target (& self) -> T",
      "cfg": [],
      "target": "Transition<T>"
    },
    {
      "id": "gpui_kit::motion::transition::Transition::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "motion::transition",
      "path": "gpui_kit::motion::transition",
      "source": "crates/gpui-kit/src/motion/transition.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn value (& self) -> T",
      "cfg": [],
      "target": "Transition<T>"
    },
    {
      "id": "gpui_kit::navigation::accordion::Accordion",
      "name": "Accordion",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::accordion",
      "path": "gpui_kit::navigation::accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "A stack of disclosure sections.",
      "documentation": "A stack of disclosure sections.",
      "signature": "# [doc = \" A stack of disclosure sections.\"] # [derive (IntoElement)] pub struct Accordion { ident : Ident, sections : Vec<AccordionSection>, expanded : Vec<SharedString>, exclusive : bool, size : ControlSize, on_toggle : Option<ToggleHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::accordion::Accordion::exclusive",
      "name": "exclusive",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::accordion",
      "path": "gpui_kit::navigation::accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "Whether opening a section also reports a close for every other open section.",
      "documentation": "Whether opening a section also reports a close for every other open\nsection.\n\nExclusivity changes only what is reported, never what is shown: the\naccordion always renders the set the caller passed to\n[`Accordion::expanded`], so a host that applies only part of the report\ngets exactly what it applied.",
      "signature": "pub fn exclusive (mut self, exclusive : bool) -> Self",
      "cfg": [],
      "target": "Accordion"
    },
    {
      "id": "gpui_kit::navigation::accordion::Accordion::expanded",
      "name": "expanded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::accordion",
      "path": "gpui_kit::navigation::accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn expanded (mut self, ids : impl IntoIterator<Item = SharedString>) -> Self",
      "cfg": [],
      "target": "Accordion"
    },
    {
      "id": "gpui_kit::navigation::accordion::Accordion::expanded_ids",
      "name": "expanded_ids",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::accordion",
      "path": "gpui_kit::navigation::accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn expanded_ids<S : AsRef<str>> (mut self, ids : & [S]) -> Self",
      "cfg": [],
      "target": "Accordion"
    },
    {
      "id": "gpui_kit::navigation::accordion::Accordion::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::accordion",
      "path": "gpui_kit::navigation::accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Accordion"
    },
    {
      "id": "gpui_kit::navigation::accordion::Accordion::on_toggle",
      "name": "on_toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::accordion",
      "path": "gpui_kit::navigation::accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_toggle (mut self, handler : impl Fn (SharedString, bool, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Accordion"
    },
    {
      "id": "gpui_kit::navigation::accordion::Accordion::section",
      "name": "section",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::accordion",
      "path": "gpui_kit::navigation::accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn section (mut self, section : AccordionSection) -> Self",
      "cfg": [],
      "target": "Accordion"
    },
    {
      "id": "gpui_kit::navigation::accordion::Accordion::sections",
      "name": "sections",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::accordion",
      "path": "gpui_kit::navigation::accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sections (mut self, sections : impl IntoIterator<Item = AccordionSection>) -> Self",
      "cfg": [],
      "target": "Accordion"
    },
    {
      "id": "gpui_kit::navigation::accordion::AccordionSection",
      "name": "AccordionSection",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::accordion",
      "path": "gpui_kit::navigation::accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "One disclosure section: a header the typist can operate and a body that exists only while the section is open.",
      "documentation": "One disclosure section: a header the typist can operate and a body that\nexists only while the section is open.",
      "signature": "# [doc = \" One disclosure section: a header the typist can operate and a body that\"] # [doc = \" exists only while the section is open.\"] pub struct AccordionSection { id : SharedString, title : SharedString, description : Option<SharedString>, disabled : bool, body : Option<AnyElement>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::accordion::AccordionSection::body",
      "name": "body",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::accordion",
      "path": "gpui_kit::navigation::accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn body (mut self, body : impl IntoElement) -> Self",
      "cfg": [],
      "target": "AccordionSection"
    },
    {
      "id": "gpui_kit::navigation::accordion::AccordionSection::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::accordion",
      "path": "gpui_kit::navigation::accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "Secondary text in the header, readable while the section is closed.",
      "documentation": "Secondary text in the header, readable while the section is closed.",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AccordionSection"
    },
    {
      "id": "gpui_kit::navigation::accordion::AccordionSection::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::accordion",
      "path": "gpui_kit::navigation::accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "AccordionSection"
    },
    {
      "id": "gpui_kit::navigation::accordion::AccordionSection::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::accordion",
      "path": "gpui_kit::navigation::accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AccordionSection"
    },
    {
      "id": "gpui_kit::navigation::anchor_list::Anchor",
      "name": "Anchor",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "One caller-owned document destination, identified independently of order.",
      "documentation": "One caller-owned document destination, identified independently of order.",
      "signature": "# [doc = \" One caller-owned document destination, identified independently of order.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct Anchor { id : SharedString, label : SharedString, disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::anchor_list::Anchor::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "Anchor"
    },
    {
      "id": "gpui_kit::navigation::anchor_list::Anchor::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "Anchor"
    },
    {
      "id": "gpui_kit::navigation::anchor_list::Anchor::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "Anchor"
    },
    {
      "id": "gpui_kit::navigation::anchor_list::Anchor::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "Anchor"
    },
    {
      "id": "gpui_kit::navigation::anchor_list::Anchor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Anchor"
    },
    {
      "id": "gpui_kit::navigation::anchor_list::AnchorList",
      "name": "AnchorList",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "A horizontal reading-order list of links to sections in the current page.",
      "documentation": "A horizontal reading-order list of links to sections in the current page.",
      "signature": "# [doc = \" A horizontal reading-order list of links to sections in the current page.\"] # [derive (IntoElement)] pub struct AnchorList { ident : Ident, anchors : Vec<Anchor>, active : Option<SharedString>, disabled : bool, size : ControlSize, on_navigate : Option<NavigateHandler>, overflow_after : Option<usize>, overflow_menu : Option<Entity<Menu>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::anchor_list::AnchorList::active",
      "name": "active",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn active (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "AnchorList"
    },
    {
      "id": "gpui_kit::navigation::anchor_list::AnchorList::anchor",
      "name": "anchor",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn anchor (mut self, anchor : Anchor) -> Self",
      "cfg": [],
      "target": "AnchorList"
    },
    {
      "id": "gpui_kit::navigation::anchor_list::AnchorList::anchors",
      "name": "anchors",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn anchors (mut self, anchors : impl IntoIterator<Item = Anchor>) -> Self",
      "cfg": [],
      "target": "AnchorList"
    },
    {
      "id": "gpui_kit::navigation::anchor_list::AnchorList::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "AnchorList"
    },
    {
      "id": "gpui_kit::navigation::anchor_list::AnchorList::on_navigate",
      "name": "on_navigate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_navigate (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "AnchorList"
    },
    {
      "id": "gpui_kit::navigation::anchor_list::AnchorList::overflow_after",
      "name": "overflow_after",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "Keeps `count` anchors inline and moves the remainder into the supplied menu. Without a menu this declaration hides nothing.",
      "documentation": "Keeps `count` anchors inline and moves the remainder into the supplied\nmenu. Without a menu this declaration hides nothing.",
      "signature": "pub fn overflow_after (mut self, count : usize) -> Self",
      "cfg": [],
      "target": "AnchorList"
    },
    {
      "id": "gpui_kit::navigation::anchor_list::AnchorList::overflow_menu",
      "name": "overflow_menu",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::anchor_list",
      "path": "gpui_kit::navigation::anchor_list",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "Supplies the caller-owned menu that can hold overflowed anchors. The menu reports an overflowed anchor through [`crate::overlay::MenuEvent::Invoked`] with the same stable id that `on_navigate` reports for inline and keyboard navigation.",
      "documentation": "Supplies the caller-owned menu that can hold overflowed anchors.\nThe menu reports an overflowed anchor through\n[`crate::overlay::MenuEvent::Invoked`] with the same stable id that\n`on_navigate` reports for inline and keyboard navigation.",
      "signature": "pub fn overflow_menu (mut self, menu : Entity<Menu>) -> Self",
      "cfg": [],
      "target": "AnchorList"
    },
    {
      "id": "gpui_kit::navigation::bottom_navigation::BottomNavigation",
      "name": "BottomNavigation",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::bottom_navigation",
      "path": "gpui_kit::navigation::bottom_navigation",
      "source": "crates/gpui-kit/src/navigation/bottom_navigation.rs",
      "summary": "Equal-width destination actions for compact pages. No safe-area padding is added here: PageLayout consumes system insets once for all its slots. Without a handler destinations are disabled rather than falsely operable.",
      "documentation": "Equal-width destination actions for compact pages. No safe-area padding is\nadded here: PageLayout consumes system insets once for all its slots.\nWithout a handler destinations are disabled rather than falsely operable.",
      "signature": "# [doc = \" Equal-width destination actions for compact pages. No safe-area padding is\"] # [doc = \" added here: PageLayout consumes system insets once for all its slots.\"] # [doc = \" Without a handler destinations are disabled rather than falsely operable.\"] # [derive (IntoElement)] pub struct BottomNavigation { ident : Ident, items : Vec<NavigationItem>, selected : Option<SharedString>, on_select : Option<Select>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::bottom_navigation::BottomNavigation::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::bottom_navigation",
      "path": "gpui_kit::navigation::bottom_navigation",
      "source": "crates/gpui-kit/src/navigation/bottom_navigation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn items (mut self, items : impl IntoIterator<Item = NavigationItem>) -> Self",
      "cfg": [],
      "target": "BottomNavigation"
    },
    {
      "id": "gpui_kit::navigation::bottom_navigation::BottomNavigation::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::bottom_navigation",
      "path": "gpui_kit::navigation::bottom_navigation",
      "source": "crates/gpui-kit/src/navigation/bottom_navigation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "BottomNavigation"
    },
    {
      "id": "gpui_kit::navigation::bottom_navigation::BottomNavigation::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::bottom_navigation",
      "path": "gpui_kit::navigation::bottom_navigation",
      "source": "crates/gpui-kit/src/navigation/bottom_navigation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "BottomNavigation"
    },
    {
      "id": "gpui_kit::navigation::bottom_navigation::BottomNavigation::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::bottom_navigation",
      "path": "gpui_kit::navigation::bottom_navigation",
      "source": "crates/gpui-kit/src/navigation/bottom_navigation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "BottomNavigation"
    },
    {
      "id": "gpui_kit::navigation::bottom_navigation::NavigationItem",
      "name": "NavigationItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::bottom_navigation",
      "path": "gpui_kit::navigation::bottom_navigation",
      "source": "crates/gpui-kit/src/navigation/bottom_navigation.rs",
      "summary": "A destination identified by caller identity, never list position.",
      "documentation": "A destination identified by caller identity, never list position.",
      "signature": "# [doc = \" A destination identified by caller identity, never list position.\"] # [derive (Debug, Clone)] pub struct NavigationItem { pub id : SharedString, pub label : SharedString, pub icon : Option<Icon>, pub disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::bottom_navigation::NavigationItem::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::bottom_navigation",
      "path": "gpui_kit::navigation::bottom_navigation",
      "source": "crates/gpui-kit/src/navigation/bottom_navigation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "NavigationItem"
    },
    {
      "id": "gpui_kit::navigation::bottom_navigation::NavigationItem::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::bottom_navigation",
      "path": "gpui_kit::navigation::bottom_navigation",
      "source": "crates/gpui-kit/src/navigation/bottom_navigation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, icon : Icon) -> Self",
      "cfg": [],
      "target": "NavigationItem"
    },
    {
      "id": "gpui_kit::navigation::bottom_navigation::NavigationItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::bottom_navigation",
      "path": "gpui_kit::navigation::bottom_navigation",
      "source": "crates/gpui-kit/src/navigation/bottom_navigation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NavigationItem"
    },
    {
      "id": "gpui_kit::navigation::breadcrumb::Breadcrumb",
      "name": "Breadcrumb",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::breadcrumb",
      "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.",
      "documentation": "A trail of crumbs, collapsed in the middle when it grows too long.",
      "signature": "# [doc = \" A trail of crumbs, collapsed in the middle when it grows too long.\"] # [derive (IntoElement)] pub struct Breadcrumb { ident : Ident, crumbs : Vec<Crumb>, max_visible : Option<usize>, on_select : Option<SelectHandler>, on_reveal : Option<RevealHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::breadcrumb::Breadcrumb::crumb",
      "name": "crumb",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::breadcrumb",
      "path": "gpui_kit::navigation::breadcrumb",
      "source": "crates/gpui-kit/src/navigation/breadcrumb.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn crumb (mut self, crumb : Crumb) -> Self",
      "cfg": [],
      "target": "Breadcrumb"
    },
    {
      "id": "gpui_kit::navigation::breadcrumb::Breadcrumb::crumbs",
      "name": "crumbs",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::breadcrumb",
      "path": "gpui_kit::navigation::breadcrumb",
      "source": "crates/gpui-kit/src/navigation/breadcrumb.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn crumbs (mut self, crumbs : impl IntoIterator<Item = Crumb>) -> Self",
      "cfg": [],
      "target": "Breadcrumb"
    },
    {
      "id": "gpui_kit::navigation::breadcrumb::Breadcrumb::max_visible",
      "name": "max_visible",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::breadcrumb",
      "path": "gpui_kit::navigation::breadcrumb",
      "source": "crates/gpui-kit/src/navigation/breadcrumb.rs",
      "summary": "How many real crumbs may be shown before the trail collapses.",
      "documentation": "How many real crumbs may be shown before the trail collapses.\n\nA collapsed trail keeps the first crumb and the most recent ones, and\nputs everything between them behind one ellipsis crumb. Fewer than two\nvisible crumbs would hide the current place, so the count is clamped.",
      "signature": "pub fn max_visible (mut self, max_visible : usize) -> Self",
      "cfg": [],
      "target": "Breadcrumb"
    },
    {
      "id": "gpui_kit::navigation::breadcrumb::Breadcrumb::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::breadcrumb",
      "path": "gpui_kit::navigation::breadcrumb",
      "source": "crates/gpui-kit/src/navigation/breadcrumb.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Breadcrumb"
    },
    {
      "id": "gpui_kit::navigation::breadcrumb::Breadcrumb::on_reveal",
      "name": "on_reveal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::breadcrumb",
      "path": "gpui_kit::navigation::breadcrumb",
      "source": "crates/gpui-kit/src/navigation/breadcrumb.rs",
      "summary": "Reports the ids the ellipsis crumb hides, in trail order.",
      "documentation": "Reports the ids the ellipsis crumb hides, in trail order.\n\nWithout this handler the ellipsis is not actionable, because there\nwould be no way to act on it.",
      "signature": "pub fn on_reveal (mut self, handler : impl Fn (Vec<SharedString>, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Breadcrumb"
    },
    {
      "id": "gpui_kit::navigation::breadcrumb::Breadcrumb::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::breadcrumb",
      "path": "gpui_kit::navigation::breadcrumb",
      "source": "crates/gpui-kit/src/navigation/breadcrumb.rs",
      "summary": "Reports the crumb that was picked. The last crumb never reports.",
      "documentation": "Reports the crumb that was picked. The last crumb never reports.",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Breadcrumb"
    },
    {
      "id": "gpui_kit::navigation::breadcrumb::Crumb",
      "name": "Crumb",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::breadcrumb",
      "path": "gpui_kit::navigation::breadcrumb",
      "source": "crates/gpui-kit/src/navigation/breadcrumb.rs",
      "summary": "One place on the trail.",
      "documentation": "One place on the trail.",
      "signature": "# [doc = \" One place on the trail.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct Crumb { pub id : SharedString, pub label : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::breadcrumb::Crumb::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::breadcrumb",
      "path": "gpui_kit::navigation::breadcrumb",
      "source": "crates/gpui-kit/src/navigation/breadcrumb.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Crumb"
    },
    {
      "id": "gpui_kit::navigation::carousel::Carousel",
      "name": "Carousel",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::carousel",
      "path": "gpui_kit::navigation::carousel",
      "source": "crates/gpui-kit/src/navigation/carousel.rs",
      "summary": "A token-backed paged viewport.",
      "documentation": "A token-backed paged viewport.",
      "signature": "# [doc = \" A token-backed paged viewport.\"] # [derive (IntoElement)] pub struct Carousel { ident : Ident, items : Vec<CarouselItem>, active : Option<SharedString>, status : CarouselStatus, looped : bool, size : gpui_kit_theme::ControlSize, on_event : Option<EventHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::carousel::Carousel::active",
      "name": "active",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::carousel",
      "path": "gpui_kit::navigation::carousel",
      "source": "crates/gpui-kit/src/navigation/carousel.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn active (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Carousel"
    },
    {
      "id": "gpui_kit::navigation::carousel::Carousel::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::carousel",
      "path": "gpui_kit::navigation::carousel",
      "source": "crates/gpui-kit/src/navigation/carousel.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn items (mut self, items : impl IntoIterator<Item = CarouselItem>) -> Self",
      "cfg": [],
      "target": "Carousel"
    },
    {
      "id": "gpui_kit::navigation::carousel::Carousel::looped",
      "name": "looped",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::carousel",
      "path": "gpui_kit::navigation::carousel",
      "source": "crates/gpui-kit/src/navigation/carousel.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn looped (mut self, looped : bool) -> Self",
      "cfg": [],
      "target": "Carousel"
    },
    {
      "id": "gpui_kit::navigation::carousel::Carousel::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::carousel",
      "path": "gpui_kit::navigation::carousel",
      "source": "crates/gpui-kit/src/navigation/carousel.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Carousel"
    },
    {
      "id": "gpui_kit::navigation::carousel::Carousel::on_event",
      "name": "on_event",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::carousel",
      "path": "gpui_kit::navigation::carousel",
      "source": "crates/gpui-kit/src/navigation/carousel.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_event (mut self, handler : impl Fn (CarouselEvent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Carousel"
    },
    {
      "id": "gpui_kit::navigation::carousel::Carousel::phase",
      "name": "phase",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::carousel",
      "path": "gpui_kit::navigation::carousel",
      "source": "crates/gpui-kit/src/navigation/carousel.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn phase (mut self, phase : Phase) -> Self",
      "cfg": [],
      "target": "Carousel"
    },
    {
      "id": "gpui_kit::navigation::carousel::Carousel::reason",
      "name": "reason",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::carousel",
      "path": "gpui_kit::navigation::carousel",
      "source": "crates/gpui-kit/src/navigation/carousel.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn reason (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Carousel"
    },
    {
      "id": "gpui_kit::navigation::carousel::Carousel::stale",
      "name": "stale",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::carousel",
      "path": "gpui_kit::navigation::carousel",
      "source": "crates/gpui-kit/src/navigation/carousel.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn stale (mut self, stale : bool) -> Self",
      "cfg": [],
      "target": "Carousel"
    },
    {
      "id": "gpui_kit::navigation::carousel::CarouselEvent",
      "name": "CarouselEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::carousel",
      "path": "gpui_kit::navigation::carousel",
      "source": "crates/gpui-kit/src/navigation/carousel.rs",
      "summary": "What a carousel reports. The caller changes the active item or phase.",
      "documentation": "What a carousel reports. The caller changes the active item or phase.",
      "signature": "# [doc = \" What a carousel reports. The caller changes the active item or phase.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum CarouselEvent { Previous, Next, Selected (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::carousel::CarouselItem",
      "name": "CarouselItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::carousel",
      "path": "gpui_kit::navigation::carousel",
      "source": "crates/gpui-kit/src/navigation/carousel.rs",
      "summary": "One page in a [`Carousel`].",
      "documentation": "One page in a [`Carousel`].",
      "signature": "# [doc = \" One page in a [`Carousel`].\"] pub struct CarouselItem { pub id : SharedString, pub label : SharedString, pub content : gpui::AnyElement, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::carousel::CarouselItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::carousel",
      "path": "gpui_kit::navigation::carousel",
      "source": "crates/gpui-kit/src/navigation/carousel.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>, content : impl IntoElement,) -> Self",
      "cfg": [],
      "target": "CarouselItem"
    },
    {
      "id": "gpui_kit::navigation::collapsible::Collapsible",
      "name": "Collapsible",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::collapsible",
      "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.",
      "documentation": "A single region behind a header that opens and shuts it.",
      "signature": "# [doc = \" A single region behind a header that opens and shuts it.\"] # [derive (IntoElement)] pub struct Collapsible { ident : Ident, title : SharedString, description : Option<SharedString>, open : bool, disabled : bool, size : ControlSize, body : Option<AnyElement>, on_toggle : Option<ToggleHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::collapsible::Collapsible::body",
      "name": "body",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::collapsible",
      "path": "gpui_kit::navigation::collapsible",
      "source": "crates/gpui-kit/src/navigation/collapsible.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn body (mut self, body : impl IntoElement) -> Self",
      "cfg": [],
      "target": "Collapsible"
    },
    {
      "id": "gpui_kit::navigation::collapsible::Collapsible::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::collapsible",
      "path": "gpui_kit::navigation::collapsible",
      "source": "crates/gpui-kit/src/navigation/collapsible.rs",
      "summary": "Secondary text in the header, readable while the region is shut.",
      "documentation": "Secondary text in the header, readable while the region is shut.",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Collapsible"
    },
    {
      "id": "gpui_kit::navigation::collapsible::Collapsible::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::collapsible",
      "path": "gpui_kit::navigation::collapsible",
      "source": "crates/gpui-kit/src/navigation/collapsible.rs",
      "summary": "Refuses the header. A refused collapsible installs no handler.",
      "documentation": "Refuses the header. A refused collapsible installs no handler.",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "Collapsible"
    },
    {
      "id": "gpui_kit::navigation::collapsible::Collapsible::header_id",
      "name": "header_id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::collapsible",
      "path": "gpui_kit::navigation::collapsible",
      "source": "crates/gpui-kit/src/navigation/collapsible.rs",
      "summary": "The id of the header a test clicks and a reader announces.",
      "documentation": "The id of the header a test clicks and a reader announces.",
      "signature": "pub fn header_id (ident : & Ident) -> SharedString",
      "cfg": [],
      "target": "Collapsible"
    },
    {
      "id": "gpui_kit::navigation::collapsible::Collapsible::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::collapsible",
      "path": "gpui_kit::navigation::collapsible",
      "source": "crates/gpui-kit/src/navigation/collapsible.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Collapsible"
    },
    {
      "id": "gpui_kit::navigation::collapsible::Collapsible::on_toggle",
      "name": "on_toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::collapsible",
      "path": "gpui_kit::navigation::collapsible",
      "source": "crates/gpui-kit/src/navigation/collapsible.rs",
      "summary": "Reports the state activating the header asks for.",
      "documentation": "Reports the state activating the header asks for.",
      "signature": "pub fn on_toggle (mut self, handler : impl Fn (bool, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Collapsible"
    },
    {
      "id": "gpui_kit::navigation::collapsible::Collapsible::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::collapsible",
      "path": "gpui_kit::navigation::collapsible",
      "source": "crates/gpui-kit/src/navigation/collapsible.rs",
      "summary": "Whether the region is open. The caller's answer, not the component's.",
      "documentation": "Whether the region is open. The caller's answer, not the component's.",
      "signature": "pub fn open (mut self, open : bool) -> Self",
      "cfg": [],
      "target": "Collapsible"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::BackTransition",
      "name": "BackTransition",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "A cancellable back preview bound to the exact history it began with. Platform gesture recognition and completion thresholds belong to the host. Cancellation drops this transient value; history and focus remain unchanged.",
      "documentation": "A cancellable back preview bound to the exact history it began with.\nPlatform gesture recognition and completion thresholds belong to the host.\nCancellation drops this transient value; history and focus remain unchanged.",
      "signature": "# [doc = \" A cancellable back preview bound to the exact history it began with.\"] # [doc = \" Platform gesture recognition and completion thresholds belong to the host.\"] # [doc = \" Cancellation drops this transient value; history and focus remain unchanged.\"] # [derive (Debug, Clone, PartialEq)] pub struct BackTransition { origin : NavHistory, progress : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::nav_stack::BackTransition::begin",
      "name": "begin",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "Root cannot begin a back preview.",
      "documentation": "Root cannot begin a back preview.",
      "signature": "pub fn begin (history : & NavHistory) -> Option<Self>",
      "cfg": [],
      "target": "BackTransition"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::BackTransition::cancel",
      "name": "cancel",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "Roll back without touching caller history or focus.",
      "documentation": "Roll back without touching caller history or focus.",
      "signature": "pub fn cancel (self)",
      "cfg": [],
      "target": "BackTransition"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::BackTransition::commit",
      "name": "commit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "Call only after the host accepts back. No implicit completion threshold is imposed, allowing platform predictive-back decisions to stay native.",
      "documentation": "Call only after the host accepts back. No implicit completion threshold\nis imposed, allowing platform predictive-back decisions to stay native.",
      "signature": "pub fn commit (self, history : & mut NavHistory) -> bool",
      "cfg": [],
      "target": "BackTransition"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::BackTransition::is_current",
      "name": "is_current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "Refuse stale previews, including history changed away and back again.",
      "documentation": "Refuse stale previews, including history changed away and back again.",
      "signature": "pub fn is_current (& self, history : & NavHistory) -> bool",
      "cfg": [],
      "target": "BackTransition"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::BackTransition::progress",
      "name": "progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn progress (& self) -> f32",
      "cfg": [],
      "target": "BackTransition"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::BackTransition::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "Update visual progress only. Non-finite input is ignored.",
      "documentation": "Update visual progress only. Non-finite input is ignored.",
      "signature": "pub fn update (& mut self, progress : f32)",
      "cfg": [],
      "target": "BackTransition"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavHistory",
      "name": "NavHistory",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "Durable visit identities. Store this data at the call site, not in a component; serialization and route resolution belong to the host.",
      "documentation": "Durable visit identities. Store this data at the call site, not in a\ncomponent; serialization and route resolution belong to the host.",
      "signature": "# [doc = \" Durable visit identities. Store this data at the call site, not in a\"] # [doc = \" component; serialization and route resolution belong to the host.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct NavHistory { entries : Vec<SharedString>, cursor : usize, revision : u64, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavHistory::can_forward",
      "name": "can_forward",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn can_forward (& self) -> bool",
      "cfg": [],
      "target": "NavHistory"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavHistory::can_pop",
      "name": "can_pop",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn can_pop (& self) -> bool",
      "cfg": [],
      "target": "NavHistory"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavHistory::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (& self) -> & SharedString",
      "cfg": [],
      "target": "NavHistory"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavHistory::cursor",
      "name": "cursor",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cursor (& self) -> usize",
      "cfg": [],
      "target": "NavHistory"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavHistory::entries",
      "name": "entries",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn entries (& self) -> & [SharedString]",
      "cfg": [],
      "target": "NavHistory"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavHistory::forward",
      "name": "forward",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn forward (& mut self) -> bool",
      "cfg": [],
      "target": "NavHistory"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavHistory::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (root : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NavHistory"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavHistory::pop",
      "name": "pop",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "Back by one visit, retaining the forward branch. Root cannot be popped.",
      "documentation": "Back by one visit, retaining the forward branch. Root cannot be popped.",
      "signature": "pub fn pop (& mut self) -> bool",
      "cfg": [],
      "target": "NavHistory"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavHistory::push",
      "name": "push",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "Reject duplicate visit ids without modifying history. Pushing after back discards only the abandoned forward branch.",
      "documentation": "Reject duplicate visit ids without modifying history. Pushing after\nback discards only the abandoned forward branch.",
      "signature": "pub fn push (& mut self, visit : impl Into<SharedString>) -> bool",
      "cfg": [],
      "target": "NavHistory"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavHistory::replace",
      "name": "replace",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "Replace the current visit without discarding either history branch. The same id is a no-op; ids used by another visit are rejected.",
      "documentation": "Replace the current visit without discarding either history branch.\nThe same id is a no-op; ids used by another visit are rejected.",
      "signature": "pub fn replace (& mut self, visit : impl Into<SharedString>) -> bool",
      "cfg": [],
      "target": "NavHistory"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavHistory::restore",
      "name": "restore",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "Validate caller-restored history atomically. No page is invented when persisted state is empty, duplicated, or points outside the entries.",
      "documentation": "Validate caller-restored history atomically. No page is invented when\npersisted state is empty, duplicated, or points outside the entries.",
      "signature": "pub fn restore (entries : Vec<SharedString>, cursor : usize) -> Option<Self>",
      "cfg": [],
      "target": "NavHistory"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavStack",
      "name": "NavStack",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "Active navigation content. Inactive pages are not mounted, so their input handlers and accessibility nodes cannot remain active during a transition. Uses a token-backed fade on each accepted history change; reduced motion settles immediately. It restores the last focused descendant on revisits when focus was inside the outgoing page, and never steals external focus.",
      "documentation": "Active navigation content. Inactive pages are not mounted, so their input\nhandlers and accessibility nodes cannot remain active during a transition.\nUses a token-backed fade on each accepted history change; reduced motion\nsettles immediately. It restores the last focused descendant on revisits\nwhen focus was inside the outgoing page, and never steals external focus.",
      "signature": "# [doc = \" Active navigation content. Inactive pages are not mounted, so their input\"] # [doc = \" handlers and accessibility nodes cannot remain active during a transition.\"] # [doc = \" Uses a token-backed fade on each accepted history change; reduced motion\"] # [doc = \" settles immediately. It restores the last focused descendant on revisits\"] # [doc = \" when focus was inside the outgoing page, and never steals external focus.\"] # [derive (IntoElement)] pub struct NavStack { ident : Ident, history : NavHistory, label : SharedString, focus : FocusHandle, content : AnyElement, back : Option<BackTransition>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavStack::back_transition",
      "name": "back_transition",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "Show host-controlled back progress as a fade of the active page. The destination is not mounted until accepted; cancellation restores the existing page, including its focus and interaction state. Stale previews are ignored. This is not a screenshot/slide transition.",
      "documentation": "Show host-controlled back progress as a fade of the active page.\nThe destination is not mounted until accepted; cancellation restores\nthe existing page, including its focus and interaction state. Stale\npreviews are ignored. This is not a screenshot/slide transition.",
      "signature": "pub fn back_transition (mut self, transition : & BackTransition) -> Self",
      "cfg": [],
      "target": "NavStack"
    },
    {
      "id": "gpui_kit::navigation::nav_stack::NavStack::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::nav_stack",
      "path": "gpui_kit::navigation::nav_stack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "`focus` is the active page's initial focus target and remains owned by the caller. It must be stable while that visit is in history.",
      "documentation": "`focus` is the active page's initial focus target and remains owned by\nthe caller. It must be stable while that visit is in history.",
      "signature": "pub fn new (ident : impl Into<Ident>, history : & NavHistory, label : impl Into<SharedString>, focus : FocusHandle, content : impl IntoElement,) -> Self",
      "cfg": [],
      "target": "NavStack"
    },
    {
      "id": "gpui_kit::navigation::pagination::PageTotal",
      "name": "PageTotal",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::pagination",
      "path": "gpui_kit::navigation::pagination",
      "source": "crates/gpui-kit/src/navigation/pagination.rs",
      "summary": "How many pages the host knows about.",
      "documentation": "How many pages the host knows about.",
      "signature": "# [doc = \" How many pages the host knows about.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum PageTotal { # [doc = \" The host counted the pages.\"] Known (usize), # [doc = \" The host knows only whether one more page exists.\"] Unknown { has_next : bool }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::pagination::PageTotal::count",
      "name": "count",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::pagination",
      "path": "gpui_kit::navigation::pagination",
      "source": "crates/gpui-kit/src/navigation/pagination.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn count (self) -> Option<usize>",
      "cfg": [],
      "target": "PageTotal"
    },
    {
      "id": "gpui_kit::navigation::pagination::PageTotal::is_known",
      "name": "is_known",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::pagination",
      "path": "gpui_kit::navigation::pagination",
      "source": "crates/gpui-kit/src/navigation/pagination.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_known (self) -> bool",
      "cfg": [],
      "target": "PageTotal"
    },
    {
      "id": "gpui_kit::navigation::pagination::Pagination",
      "name": "Pagination",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::pagination",
      "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.",
      "documentation": "First, previous, next, and last, plus a numbered range when there is one.",
      "signature": "# [doc = \" First, previous, next, and last, plus a numbered range when there is one.\"] # [derive (IntoElement)] pub struct Pagination { ident : Ident, page : usize, total : PageTotal, siblings : usize, size : ControlSize, page_size : Option<Entity<Select>>, disabled : bool, on_select : Option<SelectHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::pagination::Pagination::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::pagination",
      "path": "gpui_kit::navigation::pagination",
      "source": "crates/gpui-kit/src/navigation/pagination.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Pagination"
    },
    {
      "id": "gpui_kit::navigation::pagination::Pagination::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::pagination",
      "path": "gpui_kit::navigation::pagination",
      "source": "crates/gpui-kit/src/navigation/pagination.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (usize, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Pagination"
    },
    {
      "id": "gpui_kit::navigation::pagination::Pagination::page",
      "name": "page",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::pagination",
      "path": "gpui_kit::navigation::pagination",
      "source": "crates/gpui-kit/src/navigation/pagination.rs",
      "summary": "The page the caller says is showing, counted from one.",
      "documentation": "The page the caller says is showing, counted from one.",
      "signature": "pub fn page (mut self, page : usize) -> Self",
      "cfg": [],
      "target": "Pagination"
    },
    {
      "id": "gpui_kit::navigation::pagination::Pagination::page_size",
      "name": "page_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::pagination",
      "path": "gpui_kit::navigation::pagination",
      "source": "crates/gpui-kit/src/navigation/pagination.rs",
      "summary": "The caller-owned control for how many rows a page holds.",
      "documentation": "The caller-owned control for how many rows a page holds.",
      "signature": "pub fn page_size (mut self, select : Entity<Select>) -> Self",
      "cfg": [],
      "target": "Pagination"
    },
    {
      "id": "gpui_kit::navigation::pagination::Pagination::siblings",
      "name": "siblings",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::pagination",
      "path": "gpui_kit::navigation::pagination",
      "source": "crates/gpui-kit/src/navigation/pagination.rs",
      "summary": "How many numbered pages sit either side of the current one before the range is elided.",
      "documentation": "How many numbered pages sit either side of the current one before the\nrange is elided.",
      "signature": "pub fn siblings (mut self, siblings : usize) -> Self",
      "cfg": [],
      "target": "Pagination"
    },
    {
      "id": "gpui_kit::navigation::pagination::Pagination::total",
      "name": "total",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::pagination",
      "path": "gpui_kit::navigation::pagination",
      "source": "crates/gpui-kit/src/navigation/pagination.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn total (mut self, total : PageTotal) -> Self",
      "cfg": [],
      "target": "Pagination"
    },
    {
      "id": "gpui_kit::navigation::pagination::Pagination::total_pages",
      "name": "total_pages",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::pagination",
      "path": "gpui_kit::navigation::pagination",
      "source": "crates/gpui-kit/src/navigation/pagination.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn total_pages (mut self, total : usize) -> Self",
      "cfg": [],
      "target": "Pagination"
    },
    {
      "id": "gpui_kit::navigation::pagination::Pagination::unknown_total",
      "name": "unknown_total",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::pagination",
      "path": "gpui_kit::navigation::pagination",
      "source": "crates/gpui-kit/src/navigation/pagination.rs",
      "summary": "Says only whether another page exists, for a host that cannot count.",
      "documentation": "Says only whether another page exists, for a host that cannot count.",
      "signature": "pub fn unknown_total (mut self, has_next : bool) -> Self",
      "cfg": [],
      "target": "Pagination"
    },
    {
      "id": "gpui_kit::navigation::reexport-1",
      "name": "accordion :: { Accordion , AccordionSection }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation",
      "path": "gpui_kit::navigation",
      "source": "crates/gpui-kit/src/navigation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use accordion::{ Accordion, AccordionSection };",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::reexport-10",
      "name": "tabs :: { SaveState , TabItem , Tabs }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation",
      "path": "gpui_kit::navigation",
      "source": "crates/gpui-kit/src/navigation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use tabs::{ SaveState, TabItem, Tabs };",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::reexport-11",
      "name": "undo_history :: { HistoryEntry , UndoHistory }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation",
      "path": "gpui_kit::navigation",
      "source": "crates/gpui-kit/src/navigation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use undo_history::{ HistoryEntry, UndoHistory };",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::reexport-12",
      "name": "wizard :: { StepStatus , Wizard , WizardIntent , WizardLayout , WizardStep }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation",
      "path": "gpui_kit::navigation",
      "source": "crates/gpui-kit/src/navigation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use wizard::{ StepStatus, Wizard, WizardIntent, WizardLayout, WizardStep };",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::reexport-2",
      "name": "anchor_list :: { Anchor , AnchorList }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation",
      "path": "gpui_kit::navigation",
      "source": "crates/gpui-kit/src/navigation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use anchor_list::{ Anchor, AnchorList };",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::reexport-3",
      "name": "bottom_navigation :: { BottomNavigation , NavigationItem }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation",
      "path": "gpui_kit::navigation",
      "source": "crates/gpui-kit/src/navigation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use bottom_navigation::{ BottomNavigation, NavigationItem };",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::reexport-4",
      "name": "breadcrumb :: { Breadcrumb , Crumb }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation",
      "path": "gpui_kit::navigation",
      "source": "crates/gpui-kit/src/navigation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use breadcrumb::{ Breadcrumb, Crumb };",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::reexport-5",
      "name": "carousel :: { Carousel , CarouselEvent , CarouselItem }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation",
      "path": "gpui_kit::navigation",
      "source": "crates/gpui-kit/src/navigation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use carousel::{ Carousel, CarouselEvent, CarouselItem };",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::reexport-6",
      "name": "collapsible :: Collapsible",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation",
      "path": "gpui_kit::navigation",
      "source": "crates/gpui-kit/src/navigation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use collapsible::Collapsible;",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::reexport-7",
      "name": "nav_stack :: { BackTransition , NavHistory , NavStack }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation",
      "path": "gpui_kit::navigation",
      "source": "crates/gpui-kit/src/navigation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use nav_stack::{ BackTransition, NavHistory, NavStack };",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::reexport-8",
      "name": "pagination :: { PageTotal , Pagination }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation",
      "path": "gpui_kit::navigation",
      "source": "crates/gpui-kit/src/navigation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use pagination::{ PageTotal, Pagination };",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::reexport-9",
      "name": "sidebar :: { Sidebar , SidebarItem , SidebarSection }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation",
      "path": "gpui_kit::navigation",
      "source": "crates/gpui-kit/src/navigation/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use sidebar::{ Sidebar, SidebarItem, SidebarSection };",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar",
      "name": "Sidebar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "A collapsible navigation rail.",
      "documentation": "A collapsible navigation rail.",
      "signature": "# [doc = \" A collapsible navigation rail.\"] # [derive (IntoElement)] pub struct Sidebar { ident : Ident, sections : Vec<SidebarSection>, active : Option<SharedString>, collapsed : bool, width : Option<f32>, fit_height : bool, expanded : Option<HashSet<SharedString>>, header : Option<AnyElement>, footer : Option<AnyElement>, disabled : bool, size : ControlSize, on_select : Option<SelectHandler>, on_toggle : Option<ToggleHandler>, on_collapse : Option<CollapseHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::active",
      "name": "active",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "The place the caller says is current. The sidebar marks it and never moves it.",
      "documentation": "The place the caller says is current. The sidebar marks it and never\nmoves it.",
      "signature": "pub fn active (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::collapsed",
      "name": "collapsed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "Draws glyphs only, with each label reachable as hover help.",
      "documentation": "Draws glyphs only, with each label reachable as hover help.",
      "signature": "pub fn collapsed (mut self, collapsed : bool) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::expanded_ids",
      "name": "expanded_ids",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "Controls branch expansion. Without this option branches start open and their expansion is transient local state. With it, toggles only report requests and a refused request leaves the branch unchanged.",
      "documentation": "Controls branch expansion. Without this option branches start open and\ntheir expansion is transient local state. With it, toggles only report\nrequests and a refused request leaves the branch unchanged.",
      "signature": "pub fn expanded_ids (mut self, ids : & [& str]) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::fill_width",
      "name": "fill_width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "Uses the parent's allocation while expanded, for example a `SplitPane`. The host owns resizing and persistence; the sidebar does not store them.",
      "documentation": "Uses the parent's allocation while expanded, for example a `SplitPane`.\nThe host owns resizing and persistence; the sidebar does not store them.",
      "signature": "pub fn fill_width (mut self) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::fit_height",
      "name": "fit_height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "Sizes to its destinations instead of filling a bounded pane. Use this in content-sized layouts, such as a settings page's sidebar slot. In this mode the enclosing page, not the rail, bounds vertical space.",
      "documentation": "Sizes to its destinations instead of filling a bounded pane. Use this\nin content-sized layouts, such as a settings page's sidebar slot.\nIn this mode the enclosing page, not the rail, bounds vertical space.",
      "signature": "pub fn fit_height (mut self) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::footer",
      "name": "footer",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "The slot at the bottom of the rail, kept in both widths.",
      "documentation": "The slot at the bottom of the rail, kept in both widths.",
      "signature": "pub fn footer (mut self, footer : impl IntoElement) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::header",
      "name": "header",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn header (mut self, header : impl IntoElement) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::on_collapse",
      "name": "on_collapse",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "Adds a collapse/expand control. This only requests a new `collapsed` value; the host decides whether to accept it.",
      "documentation": "Adds a collapse/expand control. This only requests a new `collapsed`\nvalue; the host decides whether to accept it.",
      "signature": "pub fn on_collapse (mut self, handler : impl Fn (bool, & mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::on_toggle",
      "name": "on_toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "Reports a branch expansion request, independently of page selection.",
      "documentation": "Reports a branch expansion request, independently of page selection.",
      "signature": "pub fn on_toggle (mut self, handler : impl Fn (SharedString, bool, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::section",
      "name": "section",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn section (mut self, section : SidebarSection) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::sections",
      "name": "sections",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sections (mut self, sections : impl IntoIterator<Item = SidebarSection>) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::Sidebar::width",
      "name": "width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "Expanded width in logical pixels. Collapsed width remains 52px.",
      "documentation": "Expanded width in logical pixels. Collapsed width remains 52px.",
      "signature": "pub fn width (mut self, width : f32) -> Self",
      "cfg": [],
      "target": "Sidebar"
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarItem",
      "name": "SidebarItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "One place in the rail.",
      "documentation": "One place in the rail.",
      "signature": "# [doc = \" One place in the rail.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct SidebarItem { id : SharedString, label : SharedString, leading : Option<SidebarLeading>, badge : Option<SharedString>, disabled : bool, children : Vec<SidebarItem>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarItem::badge",
      "name": "badge",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "A count or a state shown next to the label, such as how many runs a place holds.",
      "documentation": "A count or a state shown next to the label, such as how many runs a\nplace holds.",
      "signature": "pub fn badge (mut self, badge : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SidebarItem"
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarItem::children",
      "name": "children",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "Nested destinations. Every descendant is retained; use `Tree` instead for resource browsing rather than page navigation.",
      "documentation": "Nested destinations. Every descendant is retained; use `Tree` instead\nfor resource browsing rather than page navigation.",
      "signature": "pub fn children (mut self, children : impl IntoIterator<Item = SidebarItem>) -> Self",
      "cfg": [],
      "target": "SidebarItem"
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarItem::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "SidebarItem"
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarItem::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, glyph : Icon) -> Self",
      "cfg": [],
      "target": "SidebarItem"
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarItem::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "SidebarItem"
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarItem::image",
      "name": "image",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "A resource path or URI the asset source can resolve, same as [`Avatar::image`](crate::display::avatar::Avatar::image).",
      "documentation": "A resource path or URI the asset source can resolve, same as [`Avatar::image`](crate::display::avatar::Avatar::image).",
      "signature": "pub fn image (mut self, path : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SidebarItem"
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarItem::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "SidebarItem"
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SidebarItem"
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarSection",
      "name": "SidebarSection",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "A titled run of places.",
      "documentation": "A titled run of places.",
      "signature": "# [doc = \" A titled run of places.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct SidebarSection { id : SharedString, title : Option<SharedString>, items : Vec<SidebarItem>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarSection::item",
      "name": "item",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn item (mut self, item : SidebarItem) -> Self",
      "cfg": [],
      "target": "SidebarSection"
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarSection::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn items (mut self, items : impl IntoIterator<Item = SidebarItem>) -> Self",
      "cfg": [],
      "target": "SidebarSection"
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarSection::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SidebarSection"
    },
    {
      "id": "gpui_kit::navigation::sidebar::SidebarSection::title",
      "name": "title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::sidebar",
      "path": "gpui_kit::navigation::sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn title (mut self, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SidebarSection"
    },
    {
      "id": "gpui_kit::navigation::tabs::SaveState",
      "name": "SaveState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "Whether what a tab holds has been written down, and what happened when somebody tried.",
      "documentation": "Whether what a tab holds has been written down, and what happened when\nsomebody tried.\n\nThe three unclean variants are separate presentations, not one \"modified\"\nflag with a colour. A save that failed silently and then showed a clean tab\nwould tell the typist their work is safe when it is not, which is the exact\nfailure this library exists to avoid — so [`SaveState::Failed`] carries the\nhost's own reason and the tab publishes itself as invalid.",
      "signature": "# [doc = \" Whether what a tab holds has been written down, and what happened when\"] # [doc = \" somebody tried.\"] # [doc = \"\"] # [doc = \" The three unclean variants are separate presentations, not one \\\"modified\\\"\"] # [doc = \" flag with a colour. A save that failed silently and then showed a clean tab\"] # [doc = \" would tell the typist their work is safe when it is not, which is the exact\"] # [doc = \" failure this library exists to avoid — so [`SaveState::Failed`] carries the\"] # [doc = \" host's own reason and the tab publishes itself as invalid.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum SaveState { # [doc = \" Everything in this tab is written down.\"] # [default] Clean, # [doc = \" There are changes nobody has written down yet.\"] Dirty, # [doc = \" A save is in flight. Not clean: it has not landed.\"] Saving, # [doc = \" A save was attempted and did not land, in the host's own words.\"] Failed { reason : SharedString }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::tabs::SaveState::is_clean",
      "name": "is_clean",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_clean (& self) -> bool",
      "cfg": [],
      "target": "SaveState"
    },
    {
      "id": "gpui_kit::navigation::tabs::SaveState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "The name the semantic tree publishes, so a test tells the three apart without reading a colour.",
      "documentation": "The name the semantic tree publishes, so a test tells the three apart\nwithout reading a colour.",
      "signature": "pub fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "SaveState"
    },
    {
      "id": "gpui_kit::navigation::tabs::TabItem",
      "name": "TabItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "One tab, identified by business identity rather than by position.",
      "documentation": "One tab, identified by business identity rather than by position.",
      "signature": "# [doc = \" One tab, identified by business identity rather than by position.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct TabItem { pub id : SharedString, pub label : SharedString, pub icon : Option<Icon>, pub badge : Option<SharedString>, pub tint : Option<Hsla>, pub disabled : bool, pub save_state : SaveState, pub closable : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::tabs::TabItem::badge",
      "name": "badge",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "A count shown next to the label, such as how many items the tab holds.",
      "documentation": "A count shown next to the label, such as how many items the tab holds.",
      "signature": "pub fn badge (mut self, badge : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TabItem"
    },
    {
      "id": "gpui_kit::navigation::tabs::TabItem::closable",
      "name": "closable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "Whether this tab carries a close affordance.",
      "documentation": "Whether this tab carries a close affordance.\n\nClosing is reported through [`Tabs::on_close`]; a strip with no such\nhandler draws no close control however many tabs claim to be closable.",
      "signature": "pub fn closable (mut self, closable : bool) -> Self",
      "cfg": [],
      "target": "TabItem"
    },
    {
      "id": "gpui_kit::navigation::tabs::TabItem::dirty",
      "name": "dirty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "There are changes nobody has written down yet.",
      "documentation": "There are changes nobody has written down yet.",
      "signature": "pub fn dirty (self) -> Self",
      "cfg": [],
      "target": "TabItem"
    },
    {
      "id": "gpui_kit::navigation::tabs::TabItem::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "TabItem"
    },
    {
      "id": "gpui_kit::navigation::tabs::TabItem::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, icon : Icon) -> Self",
      "cfg": [],
      "target": "TabItem"
    },
    {
      "id": "gpui_kit::navigation::tabs::TabItem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TabItem"
    },
    {
      "id": "gpui_kit::navigation::tabs::TabItem::save_failed",
      "name": "save_failed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "A save was attempted and did not land, in the host's own words.",
      "documentation": "A save was attempted and did not land, in the host's own words.",
      "signature": "pub fn save_failed (self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "TabItem"
    },
    {
      "id": "gpui_kit::navigation::tabs::TabItem::save_state",
      "name": "save_state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "Whether what this tab holds has been written down.",
      "documentation": "Whether what this tab holds has been written down.",
      "signature": "pub fn save_state (mut self, state : SaveState) -> Self",
      "cfg": [],
      "target": "TabItem"
    },
    {
      "id": "gpui_kit::navigation::tabs::TabItem::saving",
      "name": "saving",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "A save is in flight. Distinct from clean, because it has not landed.",
      "documentation": "A save is in flight. Distinct from clean, because it has not landed.",
      "signature": "pub fn saving (self) -> Self",
      "cfg": [],
      "target": "TabItem"
    },
    {
      "id": "gpui_kit::navigation::tabs::TabItem::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "The colour this tab is known by, in place of nothing.",
      "documentation": "The colour this tab is known by, in place of nothing.\n\nFor a strip whose tabs are colour-identified things — a Studio, a\nbranch, an environment — where each one already has a colour the\nreader knows it by, and a row of otherwise identical capsules is\notherwise read by name alone. The tint is worn by the glyph and, on\nthe current tab, by the fill that says it is current: the tint's wash\nreplaces the neutral selected fill rather than sitting beside it, so a\nselected tab is still one fill and not two. Everything else — the\nlabel, hover, the focus ring, the badge, the save mark, the close\ncontrol, the drag ghost, and what the node publishes — is what an\nuntinted tab has, so a colour cannot turn one tab into a second tab\nshape. A refused tab is refused first: it wears the disabled colour,\nbecause \"you cannot have this\" outranks \"this is which one\".",
      "signature": "pub fn tint (mut self, tint : Hsla) -> Self",
      "cfg": [],
      "target": "TabItem"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs",
      "name": "Tabs",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "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.",
      "documentation": "A row of tabs. The strip publishes one [`Role::Tab`] node per tab.",
      "signature": "# [doc = \" A row of tabs. The strip publishes one [`Role::Tab`] node per tab.\"] # [derive (IntoElement)] pub struct Tabs { ident : Ident, tabs : Vec<TabItem>, selected : Option<SharedString>, size : ControlSize, disabled : bool, on_select : Option<SelectHandler>, on_close : Option<CloseHandler>, reorderable : bool, accepts : Option<Accepts>, deferred_acceptance : Option<(dnd::DeferredDrop, u64)>, on_reorder : Option<ReorderHandler>, overflow : Overflow, overflow_menu : Option<Entity<Menu>>, capsules : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::accepts",
      "name": "accepts",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "Whether this strip takes a payload, and where. Without one, it takes its own tabs and nothing else.",
      "documentation": "Whether this strip takes a payload, and where. Without one, it takes\nits own tabs and nothing else.",
      "signature": "pub fn accepts (mut self, predicate : impl Fn (& DragItem, & DropPosition) -> bool + 'static,) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::capsules",
      "name": "capsules",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "Draw each tab as its own Regular Liquid pill.",
      "documentation": "Draw each tab as its own Regular Liquid pill.\n\nA document strip stays a row of selected fills. A strip of named\nplaces — projects, spaces — is a row of capsules: every item has an\nmaterial-owned blurred face. The current item's [`TabItem::tint`]\nis a translucent selected fill, not a second opaque surface.\nOverflow, scrolling, reorder and the keyboard stay what they were.",
      "signature": "pub fn capsules (mut self) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::deferred_acceptance",
      "name": "deferred_acceptance",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "Defers release acceptance without holding the drag. Advance revision whenever caller-owned data or policy changes; the live validator checks current source identity and owner grants again before committing.",
      "documentation": "Defers release acceptance without holding the drag. Advance revision\nwhenever caller-owned data or policy changes; the live validator checks\ncurrent source identity and owner grants again before committing.",
      "signature": "pub fn deferred_acceptance (mut self, controller : dnd::DeferredDrop, revision : u64) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::on_close",
      "name": "on_close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "Reports the tab that should be put away. The strip closes nothing.",
      "documentation": "Reports the tab that should be put away. The strip closes nothing.\n\nOnly a tab marked [`TabItem::closable`] gets a control, and the control\nis a target of its own: it swallows the click that reaches it, so the\ngesture that means \"switch to this tab\" cannot land on it by accident.\nA middle click anywhere on a closable tab reports the same thing, which\nis the platform convention wherever a pointer has three buttons.",
      "signature": "pub fn on_close (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::on_reorder",
      "name": "on_reorder",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "Reports where a dropped tab should go. The strip does not move it.",
      "documentation": "Reports where a dropped tab should go. The strip does not move it.",
      "signature": "pub fn on_reorder (mut self, handler : impl Fn (& DropIntent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::overflow_after",
      "name": "overflow_after",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "Keeps the first `count` tabs in the strip and moves the rest into the overflow menu.",
      "documentation": "Keeps the first `count` tabs in the strip and moves the rest into the\noverflow menu.\n\nThe cut is declared rather than measured, for the reason\n[`Toolbar::overflow_after`](crate::layout::Toolbar::overflow_after)\nstates: GPUI measures after the element tree exists, so a strip cannot\nfind out what fits and then still move a tab somewhere else.\n\nA menu keeps every hidden tab named, listed, and carrying its own save\nstate, which is what makes it the right answer for document tabs: the\nname is how the reader thinks of the thing, so a list of names is a\nbetter index than a row you travel along. Where position is part of\nwhat identifies a tab, [`Tabs::scrolling`] is the other answer.\n\nEither way the keyboard reaches a hidden tab directly: arrow, home and\nend step over **every** tab the caller declared, hidden or not, and\nreport the one they land on.\n\nThis and [`Tabs::scrolling`] are the same setting, so the later call\nreplaces the earlier one rather than the two combining into a strip\nthat both scrolls and hides.",
      "signature": "pub fn overflow_after (mut self, count : usize) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::overflow_menu",
      "name": "overflow_menu",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "The menu the overflowed tabs are moved into.",
      "documentation": "The menu the overflowed tabs are moved into.\n\nCaller-owned, because whether it is open outlives a frame. The menu\nreports the tab that was taken as [`MenuEvent::Invoked`](crate::overlay::MenuEvent),\ncarrying the same id the strip would have reported.",
      "signature": "pub fn overflow_menu (mut self, menu : Entity<Menu>) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::reorderable",
      "name": "reorderable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "Lets a tab be dragged to another place in the strip.",
      "documentation": "Lets a tab be dragged to another place in the strip.",
      "signature": "pub fn reorderable (mut self, reorderable : bool) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::scrolling",
      "name": "scrolling",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "Lets the strip scroll sideways instead of wrapping or hiding.",
      "documentation": "Lets the strip scroll sideways instead of wrapping or hiding.\n\nScrolling costs something a menu does not: a tab that is off screen has\nno position the reader can point at. The strip pays that back two ways.\nThe keyboard still steps over every tab, and a step that lands on one\nwhich is not on screen scrolls it into view — so nothing is reachable\nonly by dragging a strip about. And the edge with more behind it fades,\nso \"there are further tabs this way\" is on screen rather than something\nyou find by trying.\n\nBringing the selection into view happens when the selection *changes*,\nnot while it stays put. A strip that re-centred the current tab every\nframe would haul itself back the instant the reader scrolled off to\nlook at something else, which is the failure that makes people stop\nscrolling these strips at all.\n\nThis and [`Tabs::overflow_after`] are the same setting, so the later\ncall replaces the earlier one.",
      "signature": "pub fn scrolling (mut self) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::tab",
      "name": "tab",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tab (mut self, tab : TabItem) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::tabs::Tabs::tabs",
      "name": "tabs",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::tabs",
      "path": "gpui_kit::navigation::tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tabs (mut self, tabs : impl IntoIterator<Item = TabItem>) -> Self",
      "cfg": [],
      "target": "Tabs"
    },
    {
      "id": "gpui_kit::navigation::undo_history::HistoryEntry",
      "name": "HistoryEntry",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "One caller-owned point in an undo history.",
      "documentation": "One caller-owned point in an undo history.",
      "signature": "# [doc = \" One caller-owned point in an undo history.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct HistoryEntry { id : SharedString, label : SharedString, description : Option<SharedString>, time : Option<SharedString>, source : Option<SharedString>, unavailable : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::undo_history::HistoryEntry::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "HistoryEntry"
    },
    {
      "id": "gpui_kit::navigation::undo_history::HistoryEntry::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "HistoryEntry"
    },
    {
      "id": "gpui_kit::navigation::undo_history::HistoryEntry::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "HistoryEntry"
    },
    {
      "id": "gpui_kit::navigation::undo_history::HistoryEntry::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "`id` is the entry's durable business identity, never its list position.",
      "documentation": "`id` is the entry's durable business identity, never its list position.",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "HistoryEntry"
    },
    {
      "id": "gpui_kit::navigation::undo_history::HistoryEntry::source",
      "name": "source",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "Who or what produced the entry, in the caller's own words.",
      "documentation": "Who or what produced the entry, in the caller's own words.",
      "signature": "pub fn source (mut self, source : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "HistoryEntry"
    },
    {
      "id": "gpui_kit::navigation::undo_history::HistoryEntry::time",
      "name": "time",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "A time already formatted in the caller's locale and time zone.",
      "documentation": "A time already formatted in the caller's locale and time zone.",
      "signature": "pub fn time (mut self, time : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "HistoryEntry"
    },
    {
      "id": "gpui_kit::navigation::undo_history::HistoryEntry::unavailable",
      "name": "unavailable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "Keeps the entry visible while stating why it cannot be restored.",
      "documentation": "Keeps the entry visible while stating why it cannot be restored.",
      "signature": "pub fn unavailable (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "HistoryEntry"
    },
    {
      "id": "gpui_kit::navigation::undo_history::UndoHistory",
      "name": "UndoHistory",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "A history list that reports jump intents and changes no document state.",
      "documentation": "A history list that reports jump intents and changes no document state.",
      "signature": "# [doc = \" A history list that reports jump intents and changes no document state.\"] # [derive (IntoElement)] pub struct UndoHistory { ident : Ident, label : SharedString, entries : Vec<HistoryEntry>, current : Option<SharedString>, disabled : bool, on_jump : Option<JumpHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::undo_history::UndoHistory::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "The entry the caller says the document currently holds.",
      "documentation": "The entry the caller says the document currently holds.",
      "signature": "pub fn current (mut self, id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "UndoHistory"
    },
    {
      "id": "gpui_kit::navigation::undo_history::UndoHistory::entries",
      "name": "entries",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn entries (mut self, entries : impl IntoIterator<Item = HistoryEntry>) -> Self",
      "cfg": [],
      "target": "UndoHistory"
    },
    {
      "id": "gpui_kit::navigation::undo_history::UndoHistory::entry",
      "name": "entry",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn entry (mut self, entry : HistoryEntry) -> Self",
      "cfg": [],
      "target": "UndoHistory"
    },
    {
      "id": "gpui_kit::navigation::undo_history::UndoHistory::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "UndoHistory"
    },
    {
      "id": "gpui_kit::navigation::undo_history::UndoHistory::on_jump",
      "name": "on_jump",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::undo_history",
      "path": "gpui_kit::navigation::undo_history",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_jump (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "UndoHistory"
    },
    {
      "id": "gpui_kit::navigation::wizard::StepStatus",
      "name": "StepStatus",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "Where a step stands, as the caller reports it.",
      "documentation": "Where a step stands, as the caller reports it.\n\nThe wizard never derives this from position: a step is only current, done,\nor refused because the host says so.",
      "signature": "# [doc = \" Where a step stands, as the caller reports it.\"] # [doc = \"\"] # [doc = \" The wizard never derives this from position: a step is only current, done,\"] # [doc = \" or refused because the host says so.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum StepStatus { Complete, Current, Upcoming, # [doc = \" Something has to happen elsewhere first, and this is what.\"] Blocked (SharedString), # [doc = \" The step was attempted and did not succeed, in the host's own words.\"] Failed (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::wizard::StepStatus::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "The name a semantic node publishes, so a test asserts the state a step reported rather than the glyph it drew.",
      "documentation": "The name a semantic node publishes, so a test asserts the state a step\nreported rather than the glyph it drew.",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "StepStatus"
    },
    {
      "id": "gpui_kit::navigation::wizard::StepStatus::reason",
      "name": "reason",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "Why the step cannot be taken, when that is a thing the host said.",
      "documentation": "Why the step cannot be taken, when that is a thing the host said.",
      "signature": "pub fn reason (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "StepStatus"
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard",
      "name": "Wizard",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "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.",
      "documentation": "A multi-step flow: the steps, the current step's body, and the way on.",
      "signature": "# [doc = \" A multi-step flow: the steps, the current step's body, and the way on.\"] # [derive (IntoElement)] pub struct Wizard { ident : Ident, steps : Vec<WizardStep>, layout : WizardLayout, body : Option<AnyElement>, back_to : Option<SharedString>, finish : bool, can_advance : bool, back_label : Option<SharedString>, next_label : Option<SharedString>, finish_label : Option<SharedString>, size : ControlSize, disabled : bool, on_navigate : Option<NavigateHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard::back_label",
      "name": "back_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn back_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Wizard"
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard::back_to",
      "name": "back_to",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "The earlier step the caller says may be returned to. Without one there is no back control at all.",
      "documentation": "The earlier step the caller says may be returned to. Without one there\nis no back control at all.",
      "signature": "pub fn back_to (mut self, step : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Wizard"
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard::body",
      "name": "body",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "The current step's content, which belongs entirely to the caller.",
      "documentation": "The current step's content, which belongs entirely to the caller.",
      "signature": "pub fn body (mut self, body : impl IntoElement) -> Self",
      "cfg": [],
      "target": "Wizard"
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard::can_advance",
      "name": "can_advance",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "Whether the flow may move on from the current step at all.",
      "documentation": "Whether the flow may move on from the current step at all.",
      "signature": "pub fn can_advance (mut self, can_advance : bool) -> Self",
      "cfg": [],
      "target": "Wizard"
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard::finish",
      "name": "finish",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "Whether moving on from here ends the flow. Finishing is a different report from advancing, so it is a different control.",
      "documentation": "Whether moving on from here ends the flow. Finishing is a different\nreport from advancing, so it is a different control.",
      "signature": "pub fn finish (mut self, finish : bool) -> Self",
      "cfg": [],
      "target": "Wizard"
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard::finish_label",
      "name": "finish_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn finish_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Wizard"
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard::layout",
      "name": "layout",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn layout (mut self, layout : WizardLayout) -> Self",
      "cfg": [],
      "target": "Wizard"
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Wizard"
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard::next_label",
      "name": "next_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn next_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Wizard"
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard::on_navigate",
      "name": "on_navigate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_navigate (mut self, handler : impl Fn (& WizardIntent, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Wizard"
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard::step",
      "name": "step",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn step (mut self, step : WizardStep) -> Self",
      "cfg": [],
      "target": "Wizard"
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard::steps",
      "name": "steps",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn steps (mut self, steps : impl IntoIterator<Item = WizardStep>) -> Self",
      "cfg": [],
      "target": "Wizard"
    },
    {
      "id": "gpui_kit::navigation::wizard::Wizard::vertical",
      "name": "vertical",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn vertical (self) -> Self",
      "cfg": [],
      "target": "Wizard"
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardIntent",
      "name": "WizardIntent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "What a gesture asked the flow to do. The wizard applies none of it.",
      "documentation": "What a gesture asked the flow to do. The wizard applies none of it.",
      "signature": "# [doc = \" What a gesture asked the flow to do. The wizard applies none of it.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum WizardIntent { # [doc = \" Go straight to a named step.\"] Step (SharedString), # [doc = \" Return to the step the caller named as revisitable.\"] Back, # [doc = \" Move on from the current step.\"] Next, # [doc = \" End the flow, which is a different thing from moving on.\"] Finish, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardIntent::as_str",
      "name": "as_str",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_str (& self) -> & 'static str",
      "cfg": [],
      "target": "WizardIntent"
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardLayout",
      "name": "WizardLayout",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "Which way the steps are laid out.",
      "documentation": "Which way the steps are laid out.",
      "signature": "# [doc = \" Which way the steps are laid out.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum WizardLayout { # [default] Horizontal, Vertical, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardStep",
      "name": "WizardStep",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "One step of a flow, identified by what it is rather than where it sits.",
      "documentation": "One step of a flow, identified by what it is rather than where it sits.",
      "signature": "# [doc = \" One step of a flow, identified by what it is rather than where it sits.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct WizardStep { id : SharedString, title : SharedString, description : Option<SharedString>, status : StepStatus, # [doc = \" Whether the caller says this step may be jumped to. Unset means a\"] # [doc = \" completed step may be revisited and nothing else may be entered early.\"] reachable : Option<bool>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardStep::blocked",
      "name": "blocked",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn blocked (self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "WizardStep"
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardStep::complete",
      "name": "complete",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn complete (self) -> Self",
      "cfg": [],
      "target": "WizardStep"
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardStep::current",
      "name": "current",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn current (self) -> Self",
      "cfg": [],
      "target": "WizardStep"
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardStep::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "WizardStep"
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardStep::failed",
      "name": "failed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn failed (self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "WizardStep"
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardStep::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "WizardStep"
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardStep::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "WizardStep"
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardStep::reachable",
      "name": "reachable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "Whether the typist may jump straight to this step.",
      "documentation": "Whether the typist may jump straight to this step.\n\nLeft unsaid, a completed step may be revisited and every other step may\nnot, because a step nobody has reached is not a place the flow can\nhonestly offer.",
      "signature": "pub fn reachable (mut self, reachable : bool) -> Self",
      "cfg": [],
      "target": "WizardStep"
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardStep::status",
      "name": "status",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn status (mut self, status : StepStatus) -> Self",
      "cfg": [],
      "target": "WizardStep"
    },
    {
      "id": "gpui_kit::navigation::wizard::WizardStep::upcoming",
      "name": "upcoming",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "navigation::wizard",
      "path": "gpui_kit::navigation::wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn upcoming (self) -> Self",
      "cfg": [],
      "target": "WizardStep"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog",
      "name": "Dialog",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "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.",
      "documentation": "A composed modal: scrim, focus trap, title, body, and up to two actions.",
      "signature": "# [doc = \" A composed modal: scrim, focus trap, title, body, and up to two actions.\"] pub struct Dialog { ident : Ident, focus_handle : FocusHandle, confirm_focus : FocusHandle, cancel_focus : FocusHandle, title : SharedString, description : Option<SharedString>, body : Option<Body>, confirm_label : Option<SharedString>, cancel_label : Option<SharedString>, dismissable : bool, destructive : bool, open : bool, # [doc = \" Set by `open`, cleared by the first frame that can act on it.\"] pending_focus : bool, trap : FocusTrap, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::cancel",
      "name": "cancel",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cancel (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::cancel_label",
      "name": "cancel_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cancel_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "Closes without an outcome. The window is required because closing gives the keyboard back to whatever held it before the dialog opened.",
      "documentation": "Closes without an outcome. The window is required because closing gives\nthe keyboard back to whatever held it before the dialog opened.",
      "signature": "pub fn close (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::confirm",
      "name": "confirm",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn confirm (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::confirm_label",
      "name": "confirm_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn confirm_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::content",
      "name": "content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "Supplies the body, rebuilt on every frame the dialog is open.",
      "documentation": "Supplies the body, rebuilt on every frame the dialog is open.",
      "signature": "pub fn content (mut self, body : impl Fn (& mut Window, & mut App) -> AnyElement + 'static) -> Self",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::destructive",
      "name": "destructive",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "Marks the primary action as one that destroys something.",
      "documentation": "Marks the primary action as one that destroys something.",
      "signature": "pub fn destructive (mut self, destructive : bool) -> Self",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::dismiss",
      "name": "dismiss",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "Reports a wave-away. A dialog that is not dismissable cannot be waved away even by a host calling this directly.",
      "documentation": "Reports a wave-away. A dialog that is not dismissable cannot be waved\naway even by a host calling this directly.",
      "signature": "pub fn dismiss (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::dismissable",
      "name": "dismissable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "Whether escape and the scrim close the dialog. A dialog that is not dismissable installs neither handler.",
      "documentation": "Whether escape and the scrim close the dialog. A dialog that is not\ndismissable installs neither handler.",
      "signature": "pub fn dismissable (mut self, dismissable : bool) -> Self",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::is_dismissable",
      "name": "is_dismissable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_dismissable (& self) -> bool",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self) -> bool",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, _window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn open (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::set_cancel_label",
      "name": "set_cancel_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_cancel_label (& mut self, label : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::set_confirm_label",
      "name": "set_confirm_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_confirm_label (& mut self, label : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::set_content",
      "name": "set_content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "Replaces the per-frame body factory without reopening the modal. `None` removes the body; focus and modal-stack membership are retained.",
      "documentation": "Replaces the per-frame body factory without reopening the modal.\n`None` removes the body; focus and modal-stack membership are retained.",
      "signature": "pub fn set_content (& mut self, content : Option<Body>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::set_description",
      "name": "set_description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_description (& mut self, description : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::set_destructive",
      "name": "set_destructive",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "Changes action styling without moving focus. Initial focus policy is applied only when the dialog is next opened.",
      "documentation": "Changes action styling without moving focus. Initial focus policy is\napplied only when the dialog is next opened.",
      "signature": "pub fn set_destructive (& mut self, destructive : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::set_dismissable",
      "name": "set_dismissable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "Changes user dismissal policy without closing the modal.",
      "documentation": "Changes user dismissal policy without closing the modal.",
      "signature": "pub fn set_dismissable (& mut self, dismissable : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::set_title",
      "name": "set_title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_title (& mut self, title : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::Dialog::title",
      "name": "title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn title (mut self, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Dialog"
    },
    {
      "id": "gpui_kit::overlay::dialog::DialogEvent",
      "name": "DialogEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::dialog",
      "path": "gpui_kit::overlay::dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "What the dialog reports. The owner decides what any of it means.",
      "documentation": "What the dialog reports. The owner decides what any of it means.\n\nAn outcome is always followed by [`DialogEvent::Closed`], so a subscriber\nthat only cares that the dialog went away has one event to watch.",
      "signature": "# [doc = \" What the dialog reports. The owner decides what any of it means.\"] # [doc = \"\"] # [doc = \" An outcome is always followed by [`DialogEvent::Closed`], so a subscriber\"] # [doc = \" that only cares that the dialog went away has one event to watch.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum DialogEvent { Opened, # [doc = \" The primary action was taken.\"] Confirmed, # [doc = \" The cancel action was taken.\"] Cancelled, # [doc = \" The dialog was waved away, by escape or by the scrim.\"] Dismissed, Closed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer",
      "name": "Drawer",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "A panel anchored to one side of the window.",
      "documentation": "A panel anchored to one side of the window.",
      "signature": "# [doc = \" A panel anchored to one side of the window.\"] pub struct Drawer { ident : Ident, focus_handle : FocusHandle, close_focus : FocusHandle, edge : Edge, size : f32, title : SharedString, description : Option<SharedString>, body : Option<Body>, footer : Option<Body>, dismissable : bool, resizable : bool, avoid_insets : bool, close_size : ControlSize, body_padding_x : Space, # [doc = \" A size the pointer is holding, which is transient visual state until\"] # [doc = \" the host applies [`DrawerEvent::ResizeRequested`].\"] preview : Option<f32>, drag : Option<(f32, f32)>, open : bool, # [doc = \" Set by `open`, cleared by the first frame that can act on it.\"] pending_focus : bool, presence : Option<Presence>, progress : f32, stops : Vec<FocusHandle>, trap : FocusTrap, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::avoid_insets",
      "name": "avoid_insets",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "Fits the entire surface, including its header and dismissal control, inside the window's residual safe-area/IME insets. Enable when mounted outside a page that already consumes those insets. Defaults to false.",
      "documentation": "Fits the entire surface, including its header and dismissal control,\ninside the window's residual safe-area/IME insets. Enable when mounted\noutside a page that already consumes those insets. Defaults to false.",
      "signature": "pub fn avoid_insets (mut self, avoid : bool) -> Self",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::body_padding_x",
      "name": "body_padding_x",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "Horizontal body inset. A touch calendar can use Xs to retain its grid target widths in a narrow viewport; the header keeps its normal inset.",
      "documentation": "Horizontal body inset. A touch calendar can use Xs to retain its grid\ntarget widths in a narrow viewport; the header keeps its normal inset.",
      "signature": "pub fn body_padding_x (mut self, padding : Space) -> Self",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "Starts the slide out and releases modal keyboard ownership. The drawer stays on screen until the exit finishes, without restoring focus again.",
      "documentation": "Starts the slide out and releases modal keyboard ownership. The drawer\nstays on screen until the exit finishes, without restoring focus again.",
      "signature": "pub fn close (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::close_control_size",
      "name": "close_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "The visible dismissal target; use Touch for a finger-sized surface.",
      "documentation": "The visible dismissal target; use Touch for a finger-sized surface.",
      "signature": "pub fn close_control_size (mut self, size : ControlSize) -> Self",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::content",
      "name": "content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "Supplies the body, rebuilt on every frame the drawer is on screen.",
      "documentation": "Supplies the body, rebuilt on every frame the drawer is on screen.",
      "signature": "pub fn content (mut self, body : impl Fn (& mut Window, & mut App) -> AnyElement + 'static) -> Self",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::dismiss",
      "name": "dismiss",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "Reports a wave-away. A drawer that is not dismissable cannot be waved away even by a host calling this directly.",
      "documentation": "Reports a wave-away. A drawer that is not dismissable cannot be waved\naway even by a host calling this directly.",
      "signature": "pub fn dismiss (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::dismissable",
      "name": "dismissable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "Whether escape and the scrim close the drawer. A drawer that is not dismissable installs neither handler.",
      "documentation": "Whether escape and the scrim close the drawer. A drawer that is not\ndismissable installs neither handler.",
      "signature": "pub fn dismissable (mut self, dismissable : bool) -> Self",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::edge",
      "name": "edge",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "Which side the panel hangs from and slides in from.",
      "documentation": "Which side the panel hangs from and slides in from.",
      "signature": "pub fn edge (mut self, edge : Edge) -> Self",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::focus_stops",
      "name": "focus_stops",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "The controls tab walks between while the drawer is open.",
      "documentation": "The controls tab walks between while the drawer is open.\n\nThe body is the caller's, so the caller is the only one that knows\nwhich of its handles are focus stops.",
      "signature": "pub fn focus_stops (mut self, stops : impl IntoIterator<Item = FocusHandle>) -> Self",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::footer",
      "name": "footer",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "Supplies the footer, rebuilt on every frame the drawer is on screen.",
      "documentation": "Supplies the footer, rebuilt on every frame the drawer is on screen.",
      "signature": "pub fn footer (mut self, footer : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::is_dismissable",
      "name": "is_dismissable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_dismissable (& self) -> bool",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self) -> bool",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::is_rendered",
      "name": "is_rendered",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "True while the panel must stay in the tree, including for the whole slide out.",
      "documentation": "True while the panel must stay in the tree, including for the whole\nslide out.",
      "signature": "pub fn is_rendered (& self) -> bool",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, _window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn open (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::resizable",
      "name": "resizable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "Puts a grab handle on the free edge. A drag reports [`DrawerEvent::ResizeRequested`] and applies nothing.",
      "documentation": "Puts a grab handle on the free edge. A drag reports\n[`DrawerEvent::ResizeRequested`] and applies nothing.",
      "signature": "pub fn resizable (mut self, resizable : bool) -> Self",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::set_avoid_insets",
      "name": "set_avoid_insets",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_avoid_insets (& mut self, avoid : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::set_content",
      "name": "set_content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_content (& mut self, body : Option<Body>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::set_description",
      "name": "set_description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_description (& mut self, description : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::set_dismissable",
      "name": "set_dismissable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_dismissable (& mut self, dismissable : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::set_edge",
      "name": "set_edge",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "Moves the existing drawer without replacing its focus trap or presence.",
      "documentation": "Moves the existing drawer without replacing its focus trap or presence.",
      "signature": "pub fn set_edge (& mut self, edge : Edge, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::set_focus_stops",
      "name": "set_focus_stops",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_focus_stops (& mut self, stops : impl IntoIterator<Item = FocusHandle>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::set_footer",
      "name": "set_footer",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_footer (& mut self, footer : Option<Body>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::set_resizable",
      "name": "set_resizable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "Revoking resize also cancels a drag preview; no resize is committed.",
      "documentation": "Revoking resize also cancels a drag preview; no resize is committed.",
      "signature": "pub fn set_resizable (& mut self, resizable : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::set_size",
      "name": "set_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_size (& mut self, size : f32, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::set_title",
      "name": "set_title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_title (& mut self, title : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::settle",
      "name": "settle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "Finishes the slide that is running, for a host that wants the panel where it is going without the frames in between.",
      "documentation": "Finishes the slide that is running, for a host that wants the panel\nwhere it is going without the frames in between.",
      "signature": "pub fn settle (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::size",
      "name": "size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "The width of a left or right drawer, or the height of a top or bottom one.",
      "documentation": "The width of a left or right drawer, or the height of a top or bottom\none.",
      "signature": "pub fn size (mut self, size : f32) -> Self",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::Drawer::title",
      "name": "title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn title (mut self, title : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Drawer"
    },
    {
      "id": "gpui_kit::overlay::drawer::DrawerEvent",
      "name": "DrawerEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::drawer",
      "path": "gpui_kit::overlay::drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "What the drawer reports. The owner decides what any of it means.",
      "documentation": "What the drawer reports. The owner decides what any of it means.\n\n[`DrawerEvent::Closed`] arrives when the panel has finished sliding out,\nnot when closing was asked for, so a subscriber that tears down state on\nclose does not tear it down mid-animation.",
      "signature": "# [doc = \" What the drawer reports. The owner decides what any of it means.\"] # [doc = \"\"] # [doc = \" [`DrawerEvent::Closed`] arrives when the panel has finished sliding out,\"] # [doc = \" not when closing was asked for, so a subscriber that tears down state on\"] # [doc = \" close does not tear it down mid-animation.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub enum DrawerEvent { Opened, # [doc = \" The drawer was waved away, by escape or by the scrim.\"] Dismissed, Closed, # [doc = \" The free edge was dragged to this size. The drawer does not apply it.\"] ResizeRequested (f32), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::focus::FocusTrap",
      "name": "FocusTrap",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::focus",
      "path": "gpui_kit::overlay::focus",
      "source": "crates/gpui-kit/src/overlay/focus.rs",
      "summary": "The focus stops of one open overlay, in tab order.",
      "documentation": "The focus stops of one open overlay, in tab order.\n\nContent re-registers its stops on every render, because the set changes\nwith the content itself.",
      "signature": "# [doc = \" The focus stops of one open overlay, in tab order.\"] # [doc = \"\"] # [doc = \" Content re-registers its stops on every render, because the set changes\"] # [doc = \" with the content itself.\"] # [derive (Debug, Clone, Default)] pub struct FocusTrap { stops : Vec<FocusHandle>, restore : Option<FocusHandle>, engaged : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::focus::FocusTrap::begin_frame",
      "name": "begin_frame",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::focus",
      "path": "gpui_kit::overlay::focus",
      "source": "crates/gpui-kit/src/overlay/focus.rs",
      "summary": "Clears the registered stops before a render republishes them.",
      "documentation": "Clears the registered stops before a render republishes them.",
      "signature": "pub fn begin_frame (& mut self)",
      "cfg": [],
      "target": "FocusTrap"
    },
    {
      "id": "gpui_kit::overlay::focus::FocusTrap::contains_focus",
      "name": "contains_focus",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::focus",
      "path": "gpui_kit::overlay::focus",
      "source": "crates/gpui-kit/src/overlay/focus.rs",
      "summary": "True while focus is inside the overlay.",
      "documentation": "True while focus is inside the overlay.",
      "signature": "pub fn contains_focus (& self, window : & Window, cx : & App) -> bool",
      "cfg": [],
      "target": "FocusTrap"
    },
    {
      "id": "gpui_kit::overlay::focus::FocusTrap::engage",
      "name": "engage",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::focus",
      "path": "gpui_kit::overlay::focus",
      "source": "crates/gpui-kit/src/overlay/focus.rs",
      "summary": "Records what was focused before the overlay opened, so the same element can be focused again when it closes.",
      "documentation": "Records what was focused before the overlay opened, so the same element\ncan be focused again when it closes.",
      "signature": "pub fn engage (& mut self, window : & Window, cx : & App)",
      "cfg": [],
      "target": "FocusTrap"
    },
    {
      "id": "gpui_kit::overlay::focus::FocusTrap::focus_first",
      "name": "focus_first",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::focus",
      "path": "gpui_kit::overlay::focus",
      "source": "crates/gpui-kit/src/overlay/focus.rs",
      "summary": "Focuses the first stop, which is what opening an overlay should do.",
      "documentation": "Focuses the first stop, which is what opening an overlay should do.",
      "signature": "pub fn focus_first (& self, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "FocusTrap"
    },
    {
      "id": "gpui_kit::overlay::focus::FocusTrap::focus_next",
      "name": "focus_next",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::focus",
      "path": "gpui_kit::overlay::focus",
      "source": "crates/gpui-kit/src/overlay/focus.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn focus_next (& self, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "FocusTrap"
    },
    {
      "id": "gpui_kit::overlay::focus::FocusTrap::focus_prev",
      "name": "focus_prev",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::focus",
      "path": "gpui_kit::overlay::focus",
      "source": "crates/gpui-kit/src/overlay/focus.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn focus_prev (& self, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "FocusTrap"
    },
    {
      "id": "gpui_kit::overlay::focus::FocusTrap::is_engaged",
      "name": "is_engaged",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::focus",
      "path": "gpui_kit::overlay::focus",
      "source": "crates/gpui-kit/src/overlay/focus.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_engaged (& self) -> bool",
      "cfg": [],
      "target": "FocusTrap"
    },
    {
      "id": "gpui_kit::overlay::focus::FocusTrap::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::focus",
      "path": "gpui_kit::overlay::focus",
      "source": "crates/gpui-kit/src/overlay/focus.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "FocusTrap"
    },
    {
      "id": "gpui_kit::overlay::focus::FocusTrap::register",
      "name": "register",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::focus",
      "path": "gpui_kit::overlay::focus",
      "source": "crates/gpui-kit/src/overlay/focus.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn register (& mut self, handle : FocusHandle)",
      "cfg": [],
      "target": "FocusTrap"
    },
    {
      "id": "gpui_kit::overlay::focus::FocusTrap::release",
      "name": "release",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::focus",
      "path": "gpui_kit::overlay::focus",
      "source": "crates/gpui-kit/src/overlay/focus.rs",
      "summary": "Restores the previously focused element. Nothing is focused when the element that had focus is gone, rather than guessing at a replacement.",
      "documentation": "Restores the previously focused element. Nothing is focused when the\nelement that had focus is gone, rather than guessing at a replacement.",
      "signature": "pub fn release (& mut self, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "FocusTrap"
    },
    {
      "id": "gpui_kit::overlay::focus::FocusTrap::stops",
      "name": "stops",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::focus",
      "path": "gpui_kit::overlay::focus",
      "source": "crates/gpui-kit/src/overlay/focus.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn stops (& self) -> & [FocusHandle]",
      "cfg": [],
      "target": "FocusTrap"
    },
    {
      "id": "gpui_kit::overlay::frost::Frost",
      "name": "Frost",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::frost",
      "path": "gpui_kit::overlay::frost",
      "source": "crates/gpui-kit/src/overlay/frost.rs",
      "summary": "A frosted-glass surface: blurred backdrop, tinted fill, caller's content.",
      "documentation": "A frosted-glass surface: blurred backdrop, tinted fill, caller's content.",
      "signature": "# [doc = \" A frosted-glass surface: blurred backdrop, tinted fill, caller's content.\"] # [derive (IntoElement)] pub struct Frost { inner : Glass, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::frost::Frost::blur",
      "name": "blur",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::frost",
      "path": "gpui_kit::overlay::frost",
      "source": "crates/gpui-kit/src/overlay/frost.rs",
      "summary": "How far the backdrop is blurred, in pixels, overriding `effect.glassFrostBlur` for this surface.",
      "documentation": "How far the backdrop is blurred, in pixels, overriding\n`effect.glassFrostBlur` for this surface.",
      "signature": "pub fn blur (mut self, blur : f32) -> Self",
      "cfg": [],
      "target": "Frost"
    },
    {
      "id": "gpui_kit::overlay::frost::Frost::child",
      "name": "child",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::frost",
      "path": "gpui_kit::overlay::frost",
      "source": "crates/gpui-kit/src/overlay/frost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn child (mut self, child : impl IntoElement) -> Self",
      "cfg": [],
      "target": "Frost"
    },
    {
      "id": "gpui_kit::overlay::frost::Frost::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::frost",
      "path": "gpui_kit::overlay::frost",
      "source": "crates/gpui-kit/src/overlay/frost.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Frost"
    },
    {
      "id": "gpui_kit::overlay::frost::Frost::radius",
      "name": "radius",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::frost",
      "path": "gpui_kit::overlay::frost",
      "source": "crates/gpui-kit/src/overlay/frost.rs",
      "summary": "The rounding of the glass. It clips the blur as well as the fill, so a caller rounding the card inside must say the same thing here or the blur will show past the corners.",
      "documentation": "The rounding of the glass. It clips the blur as well as the fill, so a\ncaller rounding the card inside must say the same thing here or the\nblur will show past the corners.",
      "signature": "pub fn radius (mut self, radius : Radius) -> Self",
      "cfg": [],
      "target": "Frost"
    },
    {
      "id": "gpui_kit::overlay::frost::Frost::surface",
      "name": "surface",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::frost",
      "path": "gpui_kit::overlay::frost",
      "source": "crates/gpui-kit/src/overlay/frost.rs",
      "summary": "Which surface colour is laid over the blur. The overlay surface is the default because that is what a floating thing is made of.",
      "documentation": "Which surface colour is laid over the blur. The overlay surface is the\ndefault because that is what a floating thing is made of.",
      "signature": "pub fn surface (mut self, surface : Surface) -> Self",
      "cfg": [],
      "target": "Frost"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass",
      "name": "Glass",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "A glass surface: optionally scattered and bent backdrop, optional fill, and caller-owned content.",
      "documentation": "A glass surface: optionally scattered and bent backdrop, optional fill,\nand caller-owned content.",
      "signature": "# [doc = \" A glass surface: optionally scattered and bent backdrop, optional fill,\"] # [doc = \" and caller-owned content.\"] # [derive (IntoElement)] pub struct Glass { ident : Ident, surface : Surface, elevation : Elevation, radius : Radius, radius_px : Option<f32>, blur : Option<f32>, preset : GlassPreset, thickness : Option<f32>, refractive_index : Option<f32>, backdrop_depth : Option<f32>, refraction : Option<f32>, dispersion : Option<f32>, specular : Option<f32>, light_angle : Option<f32>, track_pointer : bool, pressable : bool, adaptive : bool, adaptive_appearance : bool, dimmed : bool, focused : bool, protect_text : bool, tint : Option<Hsla>, edge_mask : Option<(GlassEdge, f32)>, children : Vec<AnyElement>, frame : Option<gpui::Stateful<gpui::Div>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::adaptive",
      "name": "adaptive",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Let small controls flip their material and content appearance from backdrop probes. Large surfaces never flip. Before a probe resolves, the window theme supplies the direction; no extra fill is painted.",
      "documentation": "Let small controls flip their material and content appearance from\nbackdrop probes. Large surfaces never flip. Before a probe resolves,\nthe window theme supplies the direction; no extra fill is painted.",
      "signature": "pub fn adaptive (mut self, adaptive : bool) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::adaptive_appearance",
      "name": "adaptive_appearance",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Flip this surface, and the subtree it holds, to the counterpart appearance when the backdrop luminance opposes the current theme.",
      "documentation": "Flip this surface, and the subtree it holds, to the counterpart\nappearance when the backdrop luminance opposes the current theme.\n\nUses the same probe and hysteresis as [`Self::adaptive`]. A product\nthat registered only one appearance never flips.",
      "signature": "pub fn adaptive_appearance (mut self, adaptive : bool) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::backdrop_depth",
      "name": "backdrop_depth",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Effective distance in pixels through the refracted medium to the 2D source plane, overriding `effect.glassBackdropDepth`. Clamped nonnegative; this is not a physical air gap behind the glass.",
      "documentation": "Effective distance in pixels through the refracted medium to the 2D\nsource plane, overriding `effect.glassBackdropDepth`. Clamped\nnonnegative; this is not a physical air gap behind the glass.",
      "signature": "pub fn backdrop_depth (mut self, backdrop_depth : f32) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::blur",
      "name": "blur",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "How far the backdrop is blurred, in pixels, overriding the preset. Clear and Lens default to zero; Regular Liquid includes scattering.",
      "documentation": "How far the backdrop is blurred, in pixels, overriding the preset.\nClear and Lens default to zero; Regular Liquid includes scattering.",
      "signature": "pub fn blur (mut self, blur : f32) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::child",
      "name": "child",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn child (mut self, child : impl IntoElement) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::dimmed",
      "name": "dimmed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Dim the media behind Clear glass by `effect.glassDimming`. Attenuates transmission before optical lift and highlights, independent of foreground primitive batching. Other presets ignore this setting.",
      "documentation": "Dim the media behind Clear glass by `effect.glassDimming`.\nAttenuates transmission before optical lift and highlights, independent\nof foreground primitive batching.\nOther presets ignore this setting.",
      "signature": "pub fn dimmed (mut self, dimmed : bool) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::dispersion",
      "name": "dispersion",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "How far the edge splits the backdrop into colour, overriding `effect.glassDispersion`.",
      "documentation": "How far the edge splits the backdrop into colour, overriding\n`effect.glassDispersion`.",
      "signature": "pub fn dispersion (mut self, dispersion : f32) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::edge_mask",
      "name": "edge_mask",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Fade the optics from `edge` over `band` pixels, for a scroll-edge ramp. The inner side of the band is the content itself.",
      "documentation": "Fade the optics from `edge` over `band` pixels, for a scroll-edge\nramp. The inner side of the band is the content itself.",
      "signature": "pub fn edge_mask (mut self, edge : GlassEdge, band : f32) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::elevation",
      "name": "elevation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Token shadow appropriate to this surface's elevation. The shadow is clipped outside the glass, never captured as a dark interior fill.",
      "documentation": "Token shadow appropriate to this surface's elevation. The shadow is\nclipped outside the glass, never captured as a dark interior fill.",
      "signature": "pub fn elevation (mut self, elevation : Elevation) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::focused",
      "name": "focused",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Report caller-owned focus with `interactive.focus` inside this surface's fitted rounded edge, at `effect.focusRingWidth`. Replaces the optical hairline; does not install a focus handler or add an external halo. Use this instead of applying `Theme::focus_ring_on` to glass.",
      "documentation": "Report caller-owned focus with `interactive.focus` inside this surface's\nfitted rounded edge, at `effect.focusRingWidth`. Replaces the optical\nhairline; does not install a focus handler or add an external halo.\nUse this instead of applying `Theme::focus_ring_on` to glass.",
      "signature": "pub fn focused (mut self, focused : bool) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::light_angle",
      "name": "light_angle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Where the light is, in radians clockwise from straight up, overriding `effect.glassLightAngle`.",
      "documentation": "Where the light is, in radians clockwise from straight up, overriding\n`effect.glassLightAngle`.",
      "signature": "pub fn light_angle (mut self, radians : f32) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::preset",
      "name": "preset",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Which combination of optics the surface asks for.",
      "documentation": "Which combination of optics the surface asks for.",
      "signature": "pub fn preset (mut self, preset : GlassPreset) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::pressable",
      "name": "pressable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Deepen the refraction while the surface is pressed, by `effect.glassPressDepth`, and scale foreground by `effect.glassPressScale` without changing layout or the surface outline, springing back on release. Reduced motion suppresses foreground scaling. This is a purely visual response: the surface publishes no action and installs no handler beyond the press tracking itself.",
      "documentation": "Deepen the refraction while the surface is pressed, by\n`effect.glassPressDepth`, and scale foreground by `effect.glassPressScale`\nwithout changing layout or the surface outline, springing back on release.\nReduced motion suppresses foreground scaling. This is a purely\nvisual response: the surface publishes no action and installs no\nhandler beyond the press tracking itself.",
      "signature": "pub fn pressable (mut self, pressable : bool) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::protect_text_contrast",
      "name": "protect_text_contrast",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Preserve the default worst-neutral-backdrop 4.5:1 body-text protection for untinted Regular glass. Disable only when the caller owns foreground legibility: the material then retains its token wash rather than darkening or whitening the entire surface for the theme's body text. Other presets and reduced transparency retain their own policies.",
      "documentation": "Preserve the default worst-neutral-backdrop 4.5:1 body-text protection\nfor untinted Regular glass. Disable only when the caller owns foreground\nlegibility: the material then retains its token wash rather than\ndarkening or whitening the entire surface for the theme's body text.\nOther presets and reduced transparency retain their own policies.",
      "signature": "pub fn protect_text_contrast (mut self, protect : bool) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::radius",
      "name": "radius",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "The rounding of the glass. It clips the blur as well as the fill, so a caller rounding the card inside must say the same thing here or the blur will show past the corners.",
      "documentation": "The rounding of the glass. It clips the blur as well as the fill, so a\ncaller rounding the card inside must say the same thing here or the\nblur will show past the corners.",
      "signature": "pub fn radius (mut self, radius : Radius) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::radius_px",
      "name": "radius_px",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "The rounding of the glass in pixels, overriding the role.",
      "documentation": "The rounding of the glass in pixels, overriding the role.\n\nA canvas draws its cards at a zoom the theme knows nothing about, so\nthe card inside is rounded at a scaled radius while the role resolves\nto its unscaled one. Since the glass clips the blur as well as the\nfill, resolving the role again here would show the backdrop past the\ncard's corners at every zoom but one. A caller that already scaled the\nradius hands over the number it used rather than the role it came from.",
      "signature": "pub fn radius_px (mut self, radius : f32) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::refraction",
      "name": "refraction",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Signed thickness multiplier controlling optical height and normal, overriding `effect.glassRefraction`.",
      "documentation": "Signed thickness multiplier controlling optical height and normal,\noverriding `effect.glassRefraction`.",
      "signature": "pub fn refraction (mut self, refraction : f32) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::refractive_index",
      "name": "refractive_index",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Refractive index, overriding `effect.glassRefractiveIndex`, clamped to 1..=2.5. One does not bend light.",
      "documentation": "Refractive index, overriding `effect.glassRefractiveIndex`, clamped to\n1..=2.5. One does not bend light.",
      "signature": "pub fn refractive_index (mut self, refractive_index : f32) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::specular",
      "name": "specular",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "How bright the rim highlight is, overriding `effect.glassSpecular`.",
      "documentation": "How bright the rim highlight is, overriding `effect.glassSpecular`.",
      "signature": "pub fn specular (mut self, specular : f32) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::surface",
      "name": "surface",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Which surface colour Frosted lays over the backdrop.",
      "documentation": "Which surface colour Frosted lays over the backdrop.",
      "signature": "pub fn surface (mut self, surface : Surface) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::thickness",
      "name": "thickness",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Profile height in pixels before the [`Self::refraction`] multiplier, overriding `effect.glassThickness`. Zero follows the bounded bevel. Use `refraction(1.0)` to make this the effective maximum thickness.",
      "documentation": "Profile height in pixels before the [`Self::refraction`] multiplier,\noverriding `effect.glassThickness`. Zero follows the bounded bevel.\nUse `refraction(1.0)` to make this the effective maximum thickness.",
      "signature": "pub fn thickness (mut self, thickness : f32) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Colour the optical material, before its rim and highlights. Alpha controls tint strength; zero preserves the preset, one replaces its transmitted colour. Frosted and opaque fallbacks use this as their fill. The caller owns foreground contrast when supplying a tint.",
      "documentation": "Colour the optical material, before its rim and highlights. Alpha\ncontrols tint strength; zero preserves the preset, one replaces its\ntransmitted colour. Frosted and opaque fallbacks use this as their fill.\nThe caller owns foreground contrast when supplying a tint.",
      "signature": "pub fn tint (mut self, tint : impl Into<Hsla>) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::Glass::track_pointer",
      "name": "track_pointer",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Move the rim highlight to the pointer's side of the surface while the pointer is over it, as if the pointer carried the light. The bounds the angle is computed against are the ones measured last frame, which is the same one-frame settling every measured control accepts.",
      "documentation": "Move the rim highlight to the pointer's side of the surface while the\npointer is over it, as if the pointer carried the light. The bounds the\nangle is computed against are the ones measured last frame, which is\nthe same one-frame settling every measured control accepts.",
      "signature": "pub fn track_pointer (mut self, track_pointer : bool) -> Self",
      "cfg": [],
      "target": "Glass"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassAppearance",
      "name": "GlassAppearance",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Which appearance a glass surface is currently painting.",
      "documentation": "Which appearance a glass surface is currently painting.\n\n`Inherited` is the window theme. `Light` and `Dark` are the counterpart\nthe surface resolved from its backdrop luminance when\n[`Glass::adaptive_appearance`] is on.",
      "signature": "# [doc = \" Which appearance a glass surface is currently painting.\"] # [doc = \"\"] # [doc = \" `Inherited` is the window theme. `Light` and `Dark` are the counterpart\"] # [doc = \" the surface resolved from its backdrop luminance when\"] # [doc = \" [`Glass::adaptive_appearance`] is on.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum GlassAppearance { # [doc = \" The window theme is in force.\"] # [default] Inherited, # [doc = \" The surface installed the light counterpart.\"] Light, # [doc = \" The surface installed the dark counterpart.\"] Dark, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup",
      "name": "GlassGroup",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Several glass panes fused into one body.",
      "documentation": "Several glass panes fused into one body.\n\nEach pane is a rounded rect lobe of a single glass surface; where two\npanes come within `effect.glassMergeDistance` of each other, the shape's\nsmooth minimum joins them into one outline, the way two drops of water\nmeet. The optics — bevel, refraction, dispersion, the highlight — follow\nthe fused outline rather than each pane's own.\n\nAt most [`MAX_GLASS_LOBES`] panes fuse. A larger group paints opaque\noverlay panes instead, preserving every pane's content without holes.",
      "signature": "# [doc = \" Several glass panes fused into one body.\"] # [doc = \"\"] # [doc = \" Each pane is a rounded rect lobe of a single glass surface; where two\"] # [doc = \" panes come within `effect.glassMergeDistance` of each other, the shape's\"] # [doc = \" smooth minimum joins them into one outline, the way two drops of water\"] # [doc = \" meet. The optics — bevel, refraction, dispersion, the highlight — follow\"] # [doc = \" the fused outline rather than each pane's own.\"] # [doc = \"\"] # [doc = \" At most [`MAX_GLASS_LOBES`] panes fuse. A larger group paints opaque\"] # [doc = \" overlay panes instead, preserving every pane's content without holes.\"] # [derive (IntoElement)] pub struct GlassGroup { ident : Ident, surface : Surface, radius : Radius, blur : Option<f32>, preset : GlassPreset, thickness : Option<f32>, refractive_index : Option<f32>, backdrop_depth : Option<f32>, merge : Option<f32>, gap : Option<f32>, pressable : bool, adaptive : bool, adaptive_appearance : bool, dimmed : bool, protect_text : bool, tint : Option<Hsla>, panes : Vec<(Ident, AnyElement)>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::adaptive",
      "name": "adaptive",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Let a small fused body flip appearance using [`Glass::adaptive`]'s probe, area limit, and hysteresis. Never adds a source-over wash.",
      "documentation": "Let a small fused body flip appearance using [`Glass::adaptive`]'s\nprobe, area limit, and hysteresis. Never adds a source-over wash.",
      "signature": "pub fn adaptive (mut self, adaptive : bool) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::adaptive_appearance",
      "name": "adaptive_appearance",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Flip this fused body, and the subtree it holds, to the counterpart appearance when the backdrop luminance opposes the current theme.",
      "documentation": "Flip this fused body, and the subtree it holds, to the counterpart\nappearance when the backdrop luminance opposes the current theme.",
      "signature": "pub fn adaptive_appearance (mut self, adaptive : bool) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::backdrop_depth",
      "name": "backdrop_depth",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Effective distance in pixels through the refracted medium to the 2D source plane, overriding `effect.glassBackdropDepth`. Clamped nonnegative; this is not a physical air gap behind the glass.",
      "documentation": "Effective distance in pixels through the refracted medium to the 2D\nsource plane, overriding `effect.glassBackdropDepth`. Clamped\nnonnegative; this is not a physical air gap behind the glass.",
      "signature": "pub fn backdrop_depth (mut self, backdrop_depth : f32) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::blur",
      "name": "blur",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "How far the backdrop is blurred, overriding the preset.",
      "documentation": "How far the backdrop is blurred, overriding the preset.",
      "signature": "pub fn blur (mut self, blur : f32) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::dimmed",
      "name": "dimmed",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Dim the media behind Clear glass by `effect.glassDimming`. Other presets ignore this setting; Clear retains it under reduced transparency.",
      "documentation": "Dim the media behind Clear glass by `effect.glassDimming`.\nOther presets ignore this setting; Clear retains it under reduced transparency.",
      "signature": "pub fn dimmed (mut self, dimmed : bool) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::gap",
      "name": "gap",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "The space between panes, in pixels. The default is the theme's small step, which sits inside the default merge distance so adjacent panes join out of the box.",
      "documentation": "The space between panes, in pixels. The default is the theme's small\nstep, which sits inside the default merge distance so adjacent panes\njoin out of the box.",
      "signature": "pub fn gap (mut self, gap : f32) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::merge",
      "name": "merge",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "How far apart two panes may sit and still join, in pixels, overriding `effect.glassMergeDistance`.",
      "documentation": "How far apart two panes may sit and still join, in pixels, overriding\n`effect.glassMergeDistance`.",
      "signature": "pub fn merge (mut self, merge : f32) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::pane",
      "name": "pane",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "One pane of the body: a lobe of the shape, a fill, and the caller's content.",
      "documentation": "One pane of the body: a lobe of the shape, a fill, and the caller's\ncontent.",
      "signature": "pub fn pane (mut self, ident : impl Into<Ident>, child : impl IntoElement) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::preset",
      "name": "preset",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Which combination of optics the fused surface asks for.",
      "documentation": "Which combination of optics the fused surface asks for.",
      "signature": "pub fn preset (mut self, preset : GlassPreset) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::pressable",
      "name": "pressable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Deepen the fused refraction while any pane is pressed, by `effect.glassPressDepth`. The response is optical only: the group publishes no action of its own.",
      "documentation": "Deepen the fused refraction while any pane is pressed, by\n`effect.glassPressDepth`. The response is optical only: the group\npublishes no action of its own.",
      "signature": "pub fn pressable (mut self, pressable : bool) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::protect_text_contrast",
      "name": "protect_text_contrast",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Apply [`Glass::protect_text_contrast`]'s body-text policy to the joined material. Enabled by default; disabling makes legibility caller-owned.",
      "documentation": "Apply [`Glass::protect_text_contrast`]'s body-text policy to the joined\nmaterial. Enabled by default; disabling makes legibility caller-owned.",
      "signature": "pub fn protect_text_contrast (mut self, protect : bool) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::radius",
      "name": "radius",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "The rounding of each pane's lobe and fill.",
      "documentation": "The rounding of each pane's lobe and fill.",
      "signature": "pub fn radius (mut self, radius : Radius) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::refractive_index",
      "name": "refractive_index",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Refractive index, overriding `effect.glassRefractiveIndex`, clamped to 1..=2.5. One does not bend light.",
      "documentation": "Refractive index, overriding `effect.glassRefractiveIndex`, clamped to\n1..=2.5. One does not bend light.",
      "signature": "pub fn refractive_index (mut self, refractive_index : f32) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::surface",
      "name": "surface",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Which surface colour each Frosted pane lays over the backdrop.",
      "documentation": "Which surface colour each Frosted pane lays over the backdrop.",
      "signature": "pub fn surface (mut self, surface : Surface) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::thickness",
      "name": "thickness",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Profile height in pixels before the theme's `effect.glassRefraction` multiplier, overriding `effect.glassThickness`. Zero follows the bevel.",
      "documentation": "Profile height in pixels before the theme's `effect.glassRefraction`\nmultiplier, overriding `effect.glassThickness`. Zero follows the bevel.",
      "signature": "pub fn thickness (mut self, thickness : f32) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassGroup::tint",
      "name": "tint",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Colour the joined optical material once, including its bridge, using [`Glass::tint`]'s alpha and foreground-contrast contract.",
      "documentation": "Colour the joined optical material once, including its bridge, using\n[`Glass::tint`]'s alpha and foreground-contrast contract.",
      "signature": "pub fn tint (mut self, tint : impl Into<Hsla>) -> Self",
      "cfg": [],
      "target": "GlassGroup"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassPreset",
      "name": "GlassPreset",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "How a glass surface responds to light.",
      "documentation": "How a glass surface responds to light.\n\nThe presets are named for what they are made of rather than for where they\nare used, because the same material carries a popover on one screen and a\nrail on another.",
      "signature": "# [doc = \" How a glass surface responds to light.\"] # [doc = \"\"] # [doc = \" The presets are named for what they are made of rather than for where they\"] # [doc = \" are used, because the same material carries a popover on one screen and a\"] # [doc = \" rail on another.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum GlassPreset { # [doc = \" Blurred and tinted, and nothing else. This is what [`super::Frost`]\"] # [doc = \" paints, and what every renderer that can blur at all can produce.\"] Frosted, # [doc = \" Regular Liquid Glass: blurred, saturation-adjusted backdrop with an\"] # [doc = \" achromatic wash, edge lensing and a highlighted rim.\"] # [default] Liquid, # [doc = \" Apple Clear variant, only above media, always with light content.\"] # [doc = \" Pair with `dimmed(true)`. Reduced transparency uses a dark Frosted body.\"] Clear, # [doc = \" The bend without the colour split or the highlight, for a surface that\"] # [doc = \" sits over text that the dispersion would otherwise fringe.\"] Lens, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::glass::GlassPreset::material",
      "name": "material",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "The material this preset asks the renderer for, at this theme.",
      "documentation": "The material this preset asks the renderer for, at this theme.\n\nEvery value comes from a token: a preset names a combination, it does\nnot carry numbers of its own.",
      "signature": "pub fn material (self, theme : & Theme) -> GlassMaterial<Pixels>",
      "cfg": [],
      "target": "GlassPreset"
    },
    {
      "id": "gpui_kit::overlay::glass::GlassPreset::tint_alpha",
      "name": "tint_alpha",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::glass",
      "path": "gpui_kit::overlay::glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "How much ordinary source-over fill the surface paints, at this theme.",
      "documentation": "How much ordinary source-over fill the surface paints, at this theme.\n\nA frosted surface uses `effect.glassAlpha` to separate its scattered\nbackdrop from surrounding content. Liquid and Lens use shader-owned\noptics instead; their wash belongs to the material, not this fill.",
      "signature": "pub fn tint_alpha (self, theme : & Theme) -> f32",
      "cfg": [],
      "target": "GlassPreset"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard",
      "name": "HoverCard",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "A preview surface that opens on hover and can be pointed at.",
      "documentation": "A preview surface that opens on hover and can be pointed at.",
      "signature": "# [doc = \" A preview surface that opens on hover and can be pointed at.\"] pub struct HoverCard { ident : Ident, focus_handle : FocusHandle, trigger_focus : FocusHandle, trigger : Option<Content>, # [doc = \" What the trigger is called, for a reader who has only the tree.\"] name : Option<SharedString>, content : Option<Content>, placement : Placement, hang : Hang, open_delay : Duration, grace : Duration, over_trigger : bool, over_card : bool, open : bool, # [doc = \" The phase in flight and how much of it is left.\"] countdown : Option<(Phase, Duration)>, # [doc = \" When the last frame that spent the countdown happened.\"] last_tick : Option<Instant>, # [doc = \" Set by opening, cleared by the first frame that can act on it.\"] pending_focus : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "Closes the card without giving the keyboard back, which is what a pointer leaving should do: the keyboard was never here.",
      "documentation": "Closes the card without giving the keyboard back, which is what a\npointer leaving should do: the keyboard was never here.",
      "signature": "pub fn close (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::content",
      "name": "content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "Supplies the card body, rebuilt on every frame the card is open.",
      "documentation": "Supplies the card body, rebuilt on every frame the card is open.",
      "signature": "pub fn content (mut self, content : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::dismiss",
      "name": "dismiss",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "Closes and hands the keyboard back to the trigger, which is what escape should do.",
      "documentation": "Closes and hands the keyboard back to the trigger, which is what escape\nshould do.",
      "signature": "pub fn dismiss (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::grace",
      "name": "grace",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "How long the card survives the pointer being over neither surface.",
      "documentation": "How long the card survives the pointer being over neither surface.",
      "signature": "pub fn grace (mut self, grace : Duration) -> Self",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::grace_period",
      "name": "grace_period",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn grace_period (& self) -> Duration",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::hang",
      "name": "hang",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "Which of the trigger's edges the surface hangs from.",
      "documentation": "Which of the trigger's edges the surface hangs from.\n\nA trigger near the trailing edge of the window wants [`Hang::End`]: the\nsurface then grows back across the page instead of being slid sideways\noff its trigger to stay inside the window.",
      "signature": "pub fn hang (mut self, hang : Hang) -> Self",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::is_leaving",
      "name": "is_leaving",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "True while the card is on screen with the pointer over neither surface, which is the window during which the trip can still be completed.",
      "documentation": "True while the card is on screen with the pointer over neither surface,\nwhich is the window during which the trip can still be completed.",
      "signature": "pub fn is_leaving (& self) -> bool",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self) -> bool",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "Names the trigger. A preview hanging off a picture or an avatar has no words of its own, and a control nobody can name is one nobody can reach.",
      "documentation": "Names the trigger. A preview hanging off a picture or an avatar has no\nwords of its own, and a control nobody can name is one nobody can\nreach.",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, _window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn open (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::open_delay",
      "name": "open_delay",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "How long the pointer rests before the card opens. Zero opens at once.",
      "documentation": "How long the pointer rests before the card opens. Zero opens at once.",
      "signature": "pub fn open_delay (mut self, delay : Duration) -> Self",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::placement",
      "name": "placement",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placement (mut self, placement : Placement) -> Self",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::set_content",
      "name": "set_content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_content (& mut self, content : Option<Content>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::set_grace",
      "name": "set_grace",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "A changed grace restarts a pending departure without moving focus.",
      "documentation": "A changed grace restarts a pending departure without moving focus.",
      "signature": "pub fn set_grace (& mut self, grace : Duration, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::set_hang",
      "name": "set_hang",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_hang (& mut self, hang : Hang, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::set_name",
      "name": "set_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_name (& mut self, name : Option<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::set_open_delay",
      "name": "set_open_delay",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "A changed delay restarts a pending opening, not an already open card.",
      "documentation": "A changed delay restarts a pending opening, not an already open card.",
      "signature": "pub fn set_open_delay (& mut self, delay : Duration, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::set_placement",
      "name": "set_placement",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_placement (& mut self, placement : Placement, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::set_trigger",
      "name": "set_trigger",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_trigger (& mut self, trigger : Option<Content>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCard::trigger",
      "name": "trigger",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "Supplies what is hovered, rebuilt on every frame.",
      "documentation": "Supplies what is hovered, rebuilt on every frame.",
      "signature": "pub fn trigger (mut self, trigger : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "HoverCard"
    },
    {
      "id": "gpui_kit::overlay::hover_card::HoverCardEvent",
      "name": "HoverCardEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::hover_card",
      "path": "gpui_kit::overlay::hover_card",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "What a hover card reports. The owner decides what any of it means.",
      "documentation": "What a hover card reports. The owner decides what any of it means.",
      "signature": "# [doc = \" What a hover card reports. The owner decides what any of it means.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum HoverCardEvent { Opened, Closed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::kbd::Kbd",
      "name": "Kbd",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::kbd",
      "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.",
      "documentation": "A keyboard shortcut, written the way the current platform writes it.\n\nmacOS composes modifiers into one glyph run, while other platforms spell\nthem out and join with `+`, matching what users read elsewhere in their\nsystem.",
      "signature": "# [doc = \" A keyboard shortcut, written the way the current platform writes it.\"] # [doc = \"\"] # [doc = \" macOS composes modifiers into one glyph run, while other platforms spell\"] # [doc = \" them out and join with `+`, matching what users read elsewhere in their\"] # [doc = \" system.\"] # [derive (Debug, Clone, IntoElement)] pub struct Kbd { keystroke : SharedString, ident : Option<Ident>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::kbd::Kbd::caps",
      "name": "caps",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::kbd",
      "path": "gpui_kit::overlay::kbd",
      "source": "crates/gpui-kit/src/overlay/kbd.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn caps (& self, cx : & App) -> Vec<SharedString>",
      "cfg": [],
      "target": "Kbd"
    },
    {
      "id": "gpui_kit::overlay::kbd::Kbd::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::kbd",
      "path": "gpui_kit::overlay::kbd",
      "source": "crates/gpui-kit/src/overlay/kbd.rs",
      "summary": "Publishes the shortcut, for hints a test needs to assert. A shortcut shown next to the action it belongs to is decorative and needs no id.",
      "documentation": "Publishes the shortcut, for hints a test needs to assert. A shortcut\nshown next to the action it belongs to is decorative and needs no id.",
      "signature": "pub fn id (mut self, ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Kbd"
    },
    {
      "id": "gpui_kit::overlay::kbd::Kbd::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::kbd",
      "path": "gpui_kit::overlay::kbd",
      "source": "crates/gpui-kit/src/overlay/kbd.rs",
      "summary": "Takes a GPUI keystroke such as `cmd-shift-p`.",
      "documentation": "Takes a GPUI keystroke such as `cmd-shift-p`.",
      "signature": "pub fn new (keystroke : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Kbd"
    },
    {
      "id": "gpui_kit::overlay::kbd::caps",
      "name": "caps",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::kbd",
      "path": "gpui_kit::overlay::kbd",
      "source": "crates/gpui-kit/src/overlay/kbd.rs",
      "summary": "Splits a keystroke into the caps to draw.",
      "documentation": "Splits a keystroke into the caps to draw.\n\nWritten as a free function so the platform choice can be tested on any host.",
      "signature": "pub fn caps (keystroke : & str, macos : bool, strings : & Strings) -> Vec<SharedString>",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::layer::Edge",
      "name": "Edge",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "One side of the window.",
      "documentation": "One side of the window.",
      "signature": "# [doc = \" One side of the window.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum Edge { Left, Right, Top, Bottom, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::layer::Edge::is_horizontal",
      "name": "is_horizontal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "True when the surface stretches vertically and is pinned horizontally.",
      "documentation": "True when the surface stretches vertically and is pinned horizontally.",
      "signature": "pub fn is_horizontal (self) -> bool",
      "cfg": [],
      "target": "Edge"
    },
    {
      "id": "gpui_kit::overlay::layer::Edge::is_leading",
      "name": "is_leading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "True when the surface hangs off the low end of its axis.",
      "documentation": "True when the surface hangs off the low end of its axis.",
      "signature": "pub fn is_leading (self) -> bool",
      "cfg": [],
      "target": "Edge"
    },
    {
      "id": "gpui_kit::overlay::layer::GlassSurface",
      "name": "GlassSurface",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "A styleable overlay body whose sole material authority is [`surface`].",
      "documentation": "A styleable overlay body whose sole material authority is [`surface`].",
      "signature": "# [doc = \" A styleable overlay body whose sole material authority is [`surface`].\"] pub struct GlassSurface { ident : Ident, recipe : OverlaySurface, theme : Theme, focused : bool, children : Vec<AnyElement>, inner : Stateful<Div>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::layer::GlassSurface::focused",
      "name": "focused",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "Report focus inside the material edge, replacing its hairline. This forwards [`super::Glass::focused`]; do not add a focus halo.",
      "documentation": "Report focus inside the material edge, replacing its hairline.\nThis forwards [`super::Glass::focused`]; do not add a focus halo.",
      "signature": "pub fn focused (mut self, focused : bool) -> Self",
      "cfg": [],
      "target": "GlassSurface"
    },
    {
      "id": "gpui_kit::overlay::layer::GlassSurface::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "Preserve the material wrapper while assigning the content identity.",
      "documentation": "Preserve the material wrapper while assigning the content identity.",
      "signature": "pub fn id (mut self, id : impl Into<ElementId>) -> Self",
      "cfg": [],
      "target": "GlassSurface"
    },
    {
      "id": "gpui_kit::overlay::layer::Hang",
      "name": "Hang",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "Which of its anchor's edges a floating surface hangs from.",
      "documentation": "Which of its anchor's edges a floating surface hangs from.\n\n[`Placement`] says whether a menu opens up or down; this says which way it\ngrows across the page. They are separate because a trigger near the\ntrailing edge of a window needs the second answer and not the first: the\nmenu still opens downward, it just has to grow back toward the middle\ninstead of off the edge.",
      "signature": "# [doc = \" Which of its anchor's edges a floating surface hangs from.\"] # [doc = \"\"] # [doc = \" [`Placement`] says whether a menu opens up or down; this says which way it\"] # [doc = \" grows across the page. They are separate because a trigger near the\"] # [doc = \" trailing edge of a window needs the second answer and not the first: the\"] # [doc = \" menu still opens downward, it just has to grow back toward the middle\"] # [doc = \" instead of off the edge.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum Hang { # [doc = \" Leading edges together, which is where a menu goes unless it cannot.\"] # [default] Start, # [doc = \" Trailing edges together, so a surface wider than its trigger grows back\"] # [doc = \" across the page rather than off it.\"] End, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::layer::Hang::opposite",
      "name": "opposite",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "The edge a surface lines up with when this one leaves the window.",
      "documentation": "The edge a surface lines up with when this one leaves the window.",
      "signature": "pub fn opposite (self) -> Self",
      "cfg": [],
      "target": "Hang"
    },
    {
      "id": "gpui_kit::overlay::layer::Overlay",
      "name": "Overlay",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "A floating surface.",
      "documentation": "A floating surface.\n\nThe caller owns whether the overlay exists at all; this type owns only\nwhere it paints, what sits behind it, and how a dismissal is reported.",
      "signature": "# [doc = \" A floating surface.\"] # [doc = \"\"] # [doc = \" The caller owns whether the overlay exists at all; this type owns only\"] # [doc = \" where it paints, what sits behind it, and how a dismissal is reported.\"] # [derive (IntoElement)] pub struct Overlay { ident : Ident, layer : Layer, # [doc = \" How many modal surfaces sit under this one. Added to the token layer\"] # [doc = \" so a nested dialog paints above the one that opened it.\"] stack : usize, placement : Placement, hang : Hang, window_snap_margin : Option<Pixels>, scrim : bool, # [doc = \" How far through its arrival the surface is. A scrim that snapped off\"] # [doc = \" while the surface it belongs to was still leaving would report the\"] # [doc = \" content behind as reachable a whole exit before it is.\"] progress : f32, content : Option<AnyElement>, on_dismiss : Option<DismissHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::layer::Overlay::child",
      "name": "child",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn child (mut self, content : impl IntoElement) -> Self",
      "cfg": [],
      "target": "Overlay"
    },
    {
      "id": "gpui_kit::overlay::layer::Overlay::edge",
      "name": "edge",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "A drawer: pinned to one side of the window, on the modal layer, behind a scrim.",
      "documentation": "A drawer: pinned to one side of the window, on the modal layer, behind\na scrim.",
      "signature": "pub fn edge (ident : impl Into<Ident>, edge : Edge) -> Self",
      "cfg": [],
      "target": "Overlay"
    },
    {
      "id": "gpui_kit::overlay::layer::Overlay::hang",
      "name": "hang",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "Which of the anchor's edges the surface hangs from.",
      "documentation": "Which of the anchor's edges the surface hangs from.\n\nThe caller has to put the anchor slot on the same edge, which\n[`crate::overlay::popover::anchored_slot`] does.",
      "signature": "pub fn hang (mut self, hang : Hang) -> Self",
      "cfg": [],
      "target": "Overlay"
    },
    {
      "id": "gpui_kit::overlay::layer::Overlay::layer",
      "name": "layer",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn layer (mut self, layer : Layer) -> Self",
      "cfg": [],
      "target": "Overlay"
    },
    {
      "id": "gpui_kit::overlay::layer::Overlay::modal",
      "name": "modal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "A dialog: centered, on the modal layer, behind a scrim.",
      "documentation": "A dialog: centered, on the modal layer, behind a scrim.",
      "signature": "pub fn modal (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Overlay"
    },
    {
      "id": "gpui_kit::overlay::layer::Overlay::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>) -> Self",
      "cfg": [],
      "target": "Overlay"
    },
    {
      "id": "gpui_kit::overlay::layer::Overlay::on_dismiss",
      "name": "on_dismiss",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "Reports a click on the scrim. Escape is the caller's to bind, because only the caller knows which action closing should dispatch.",
      "documentation": "Reports a click on the scrim. Escape is the caller's to bind, because\nonly the caller knows which action closing should dispatch.",
      "signature": "pub fn on_dismiss (mut self, handler : impl Fn (& mut Window, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Overlay"
    },
    {
      "id": "gpui_kit::overlay::layer::Overlay::placement",
      "name": "placement",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placement (mut self, placement : Placement) -> Self",
      "cfg": [],
      "target": "Overlay"
    },
    {
      "id": "gpui_kit::overlay::layer::Overlay::progress",
      "name": "progress",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "How far through its arrival the surface is, from [`Presenting::progress`](crate::motion::Presenting::progress).",
      "documentation": "How far through its arrival the surface is, from\n[`Presenting::progress`](crate::motion::Presenting::progress).\n\nOnly the scrim reads it: the surface's own appearance is the caller's,\nbecause only the caller knows which element inside the overlay is the\none that should move. What the overlay owns is that the veil behind a\ndeparting surface goes with it. Left unset the overlay is fully\narrived, which is what a caller with no lifecycle of its own means.",
      "signature": "pub fn progress (mut self, progress : f32) -> Self",
      "cfg": [],
      "target": "Overlay"
    },
    {
      "id": "gpui_kit::overlay::layer::Overlay::scrim",
      "name": "scrim",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "Dims and blocks the content behind the overlay.",
      "documentation": "Dims and blocks the content behind the overlay.",
      "signature": "pub fn scrim (mut self, scrim : bool) -> Self",
      "cfg": [],
      "target": "Overlay"
    },
    {
      "id": "gpui_kit::overlay::layer::Overlay::stack",
      "name": "stack",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "Paints this surface `depth` steps above others on the same token layer.",
      "documentation": "Paints this surface `depth` steps above others on the same token layer.",
      "signature": "pub fn stack (mut self, depth : usize) -> Self",
      "cfg": [],
      "target": "Overlay"
    },
    {
      "id": "gpui_kit::overlay::layer::Overlay::window_snap_margin",
      "name": "window_snap_margin",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "Keeps an already side-resolved anchored surface inside the window.",
      "documentation": "Keeps an already side-resolved anchored surface inside the window.\n\nChoosing above or below remains the caller's policy because only the\ncaller knows the surface's effective height. This is the final collision\nguard for the window edges.",
      "signature": "pub fn window_snap_margin (mut self, margin : Pixels) -> Self",
      "cfg": [],
      "target": "Overlay"
    },
    {
      "id": "gpui_kit::overlay::layer::OverlaySurface",
      "name": "OverlaySurface",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "The complete token recipe for an overlay entity.",
      "documentation": "The complete token recipe for an overlay entity.\n\nPlacement and elevation are not enough to infer shape: a dialog and a\ndrawer are both modal, but the dialog is detached while the drawer is a\nwindow plane pinned to an edge. These recipes keep radius and elevation\ntogether without copying either value into each component.",
      "signature": "# [doc = \" The complete token recipe for an overlay entity.\"] # [doc = \"\"] # [doc = \" Placement and elevation are not enough to infer shape: a dialog and a\"] # [doc = \" drawer are both modal, but the dialog is detached while the drawer is a\"] # [doc = \" window plane pinned to an edge. These recipes keep radius and elevation\"] # [doc = \" together without copying either value into each component.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct OverlaySurface { radius : Option<Radius>, elevation : Elevation, preset : super::GlassPreset, dimmed : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::layer::Placement",
      "name": "Placement",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "Where a floating surface sits.",
      "documentation": "Where a floating surface sits.",
      "signature": "# [doc = \" Where a floating surface sits.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub enum Placement { # [doc = \" Below the anchor element, left edges aligned.\"] Below, # [doc = \" Above the anchor element, left edges aligned.\"] Above, # [doc = \" At an absolute window position, such as a cursor. A surface that would\"] # [doc = \" leave the viewport flips to the other side of that position.\"] At (Point<Pixels>), # [doc = \" Centered in the window.\"] Center, # [doc = \" Pinned to one side of the window and stretched along it.\"] Edge (Edge), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::layer::priority",
      "name": "priority",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "Maps a token layer onto GPUI's deferred paint priority.",
      "documentation": "Maps a token layer onto GPUI's deferred paint priority.",
      "signature": "pub fn priority (theme : & Theme, layer : Layer) -> usize",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::layer::surface",
      "name": "surface",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::layer",
      "path": "gpui_kit::overlay::layer",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "An overlay entity built from one complete Regular Liquid recipe. All style and interaction builders target the content div; material is installed exactly once after those builders finish.",
      "documentation": "An overlay entity built from one complete Regular Liquid recipe.\nAll style and interaction builders target the content div; material is\ninstalled exactly once after those builders finish.",
      "signature": "pub fn surface (ident : impl Into<Ident>, theme : & Theme, recipe : impl Into<OverlaySurface>,) -> GlassSurface",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu",
      "name": "ContextMenu",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "The same menu, opened at the pointer over a region rather than from a trigger.",
      "documentation": "The same menu, opened at the pointer over a region rather than from a\ntrigger.",
      "signature": "# [doc = \" The same menu, opened at the pointer over a region rather than from a\"] # [doc = \" trigger.\"] pub struct ContextMenu { ident : Ident, focus_handle : FocusHandle, name : SharedString, target : Option<SharedString>, items : Vec<MenuItem>, content : Option<Content>, presentation : ContextMenuPresentation, open : bool, native_open : bool, native_session : Option<NativeMenuSessionId>, native_reopen : bool, native_dismiss_requested : bool, position : Point<Pixels>, pending_focus : bool, state : MenuState, trap : FocusTrap, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn close (& mut self, window : & mut Window, cx : & mut Context<Self>,) -> Result<(), NativeMenuError>",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::content",
      "name": "content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Supplies the wrapped region, rebuilt on every frame.",
      "documentation": "Supplies the wrapped region, rebuilt on every frame.",
      "signature": "pub fn content (mut self, content : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::dismiss",
      "name": "dismiss",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn dismiss (& mut self, window : & mut Window, cx : & mut Context<Self>,) -> Result<(), NativeMenuError>",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self) -> bool",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::menu",
      "name": "menu",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn menu (mut self, items : impl IntoIterator<Item = MenuItem>) -> Self",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Names the command surface independently of the region under it.",
      "documentation": "Names the command surface independently of the region under it.",
      "signature": "pub fn name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::open_at",
      "name": "open_at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Opens at a window position. Reports the target and nothing else: what is selected stays the host's answer.",
      "documentation": "Opens at a window position. Reports the target and nothing else: what\nis selected stays the host's answer.",
      "signature": "pub fn open_at (& mut self, position : Point<Pixels>, window : & mut Window, cx : & mut Context<Self>,) -> Result<(), NativeMenuError>",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::position",
      "name": "position",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn position (& self) -> Point<Pixels>",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::presentation",
      "name": "presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Chooses native presentation or forces the GPUI-drawn menu.",
      "documentation": "Chooses native presentation or forces the GPUI-drawn menu.",
      "signature": "pub fn presentation (mut self, presentation : ContextMenuPresentation) -> Self",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::set_content",
      "name": "set_content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_content (& mut self, content : Option<Content>, window : & mut Window, cx : & mut Context<Self>,) -> Result<(), NativeMenuError>",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::set_items",
      "name": "set_items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_items (& mut self, items : Vec<MenuItem>, window : & mut Window, cx : & mut Context<Self>,) -> Result<(), NativeMenuError>",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::set_name",
      "name": "set_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_name (& mut self, name : impl Into<SharedString>, window : & mut Window, cx : & mut Context<Self>,) -> Result<(), NativeMenuError>",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::set_presentation",
      "name": "set_presentation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Sets the presentation used the next time the surface opens.",
      "documentation": "Sets the presentation used the next time the surface opens.",
      "signature": "pub fn set_presentation (& mut self, presentation : ContextMenuPresentation, window : & mut Window, cx : & mut Context<Self>,) -> Result<(), NativeMenuError>",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::set_target",
      "name": "set_target",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_target (& mut self, target : Option<SharedString>, window : & mut Window, cx : & mut Context<Self>,) -> Result<(), NativeMenuError>",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenu::target",
      "name": "target",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "What the wrapped region stands for. Reported when the menu opens, so a host can decide whether to select it. Defaults to the menu's own id.",
      "documentation": "What the wrapped region stands for. Reported when the menu opens, so a\nhost can decide whether to select it. Defaults to the menu's own id.",
      "signature": "pub fn target (mut self, target : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ContextMenu"
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenuEvent",
      "name": "ContextMenuEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "What a context menu reports.",
      "documentation": "What a context menu reports.",
      "signature": "# [doc = \" What a context menu reports.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum ContextMenuEvent { # [doc = \" The region was right-clicked. The payload names what was pointed at;\"] # [doc = \" the host decides what that means for its selection, because opening a\"] # [doc = \" menu is not choosing anything.\"] Opened (SharedString), Invoked (SharedString), Dismissed, Closed, # [doc = \" Native presentation or cancellation was refused; this is not dismissal.\"] Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::menu::ContextMenuPresentation",
      "name": "ContextMenuPresentation",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Where a [`ContextMenu`] is presented.",
      "documentation": "Where a [`ContextMenu`] is presented.",
      "signature": "# [doc = \" Where a [`ContextMenu`] is presented.\"] # [derive (Copy, Clone, Debug, Default, PartialEq, Eq)] pub enum ContextMenuPresentation { # [doc = \" Prefer the operating-system menu on platforms that provide one and use\"] # [doc = \" the ordinary GPUI surface everywhere else.\"] # [default] Native, # [doc = \" Always draw the menu in the GPUI window.\"] InWindow, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::menu::Menu",
      "name": "Menu",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "A list of commands, opened from a trigger.",
      "documentation": "A list of commands, opened from a trigger.",
      "signature": "# [doc = \" A list of commands, opened from a trigger.\"] pub struct Menu { ident : Ident, focus_handle : FocusHandle, trigger_focus : FocusHandle, trigger : SharedString, trigger_icon : Option<Icon>, # [doc = \" What the trigger is called when it carries a glyph instead of a label.\"] trigger_name : Option<SharedString>, trigger_variant : ButtonVariant, trigger_join : ButtonJoin, trigger_size : ControlSize, items : Vec<MenuItem>, placement : Placement, hang : Hang, open : bool, # [doc = \" Set when opening, cleared by the first frame that can act on it.\"] pending_focus : bool, state : MenuState, trap : FocusTrap, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Closes the menu and every submenu under it, and gives the keyboard back to the trigger.",
      "documentation": "Closes the menu and every submenu under it, and gives the keyboard back\nto the trigger.",
      "signature": "pub fn close (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::dismiss",
      "name": "dismiss",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn dismiss (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::hang",
      "name": "hang",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Which of the trigger's edges the surface hangs from.",
      "documentation": "Which of the trigger's edges the surface hangs from.\n\nA trigger near the trailing edge of the window wants [`Hang::End`]: the\nsurface then grows back across the page instead of being slid sideways\noff its trigger to stay inside the window.",
      "signature": "pub fn hang (mut self, hang : Hang) -> Self",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self) -> bool",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn items (mut self, items : impl IntoIterator<Item = MenuItem>) -> Self",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, _window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::offered",
      "name": "offered",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "The rows the menu currently offers, so an owner that maintains them can tell whether a replacement would change anything.",
      "documentation": "The rows the menu currently offers, so an owner that maintains them can\ntell whether a replacement would change anything.",
      "signature": "pub fn offered (& self) -> & [MenuItem]",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn open (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::open_submenu",
      "name": "open_submenu",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Opens the menu with the submenu carrying `id` already expanded, and reports whether such a submenu exists.",
      "documentation": "Opens the menu with the submenu carrying `id` already expanded, and\nreports whether such a submenu exists.",
      "signature": "pub fn open_submenu (& mut self, id : & str, window : & mut Window, cx : & mut Context<Self>) -> bool",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::placement",
      "name": "placement",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placement (mut self, placement : Placement) -> Self",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::set_hang",
      "name": "set_hang",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_hang (& mut self, hang : Hang, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::set_items",
      "name": "set_items",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Replaces the items from the host side, dropping a cursor that pointed into what is no longer offered.",
      "documentation": "Replaces the items from the host side, dropping a cursor that pointed\ninto what is no longer offered.",
      "signature": "pub fn set_items (& mut self, items : Vec<MenuItem>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::set_placement",
      "name": "set_placement",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_placement (& mut self, placement : Placement, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::set_trigger",
      "name": "set_trigger",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_trigger (& mut self, label : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::set_trigger_icon",
      "name": "set_trigger_icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_trigger_icon (& mut self, icon : Option<Icon>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::set_trigger_join",
      "name": "set_trigger_join",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_trigger_join (& mut self, join : ButtonJoin, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::set_trigger_name",
      "name": "set_trigger_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_trigger_name (& mut self, name : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::set_trigger_style",
      "name": "set_trigger_style",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Repaints the trigger for an owner whose own paint is decided after the menu is built.",
      "documentation": "Repaints the trigger for an owner whose own paint is decided after the\nmenu is built.",
      "signature": "pub fn set_trigger_style (& mut self, variant : ButtonVariant, size : ControlSize, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::toggle",
      "name": "toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn toggle (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::trigger",
      "name": "trigger",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "The label of the control that opens the menu.",
      "documentation": "The label of the control that opens the menu.",
      "signature": "pub fn trigger (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::trigger_icon",
      "name": "trigger_icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn trigger_icon (mut self, glyph : Icon) -> Self",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::trigger_join",
      "name": "trigger_join",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Where the trigger sits in a joined run of buttons.",
      "documentation": "Where the trigger sits in a joined run of buttons.",
      "signature": "pub fn trigger_join (mut self, join : ButtonJoin) -> Self",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::trigger_name",
      "name": "trigger_name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "What the trigger is called when it has no label of its own, for a menu opened from a glyph such as the arrow of a split button.",
      "documentation": "What the trigger is called when it has no label of its own, for a menu\nopened from a glyph such as the arrow of a split button.",
      "signature": "pub fn trigger_name (mut self, name : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::Menu::trigger_variant",
      "name": "trigger_variant",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "How the trigger is painted, for a menu that sits inside another control and has to look like part of it.",
      "documentation": "How the trigger is painted, for a menu that sits inside another\ncontrol and has to look like part of it.",
      "signature": "pub fn trigger_variant (mut self, variant : ButtonVariant) -> Self",
      "cfg": [],
      "target": "Menu"
    },
    {
      "id": "gpui_kit::overlay::menu::MenuEvent",
      "name": "MenuEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "What a menu reports. The owner decides what any of it means.",
      "documentation": "What a menu reports. The owner decides what any of it means.",
      "signature": "# [doc = \" What a menu reports. The owner decides what any of it means.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum MenuEvent { Opened, # [doc = \" A command or a checkable row was taken. For a checkable row this is the\"] # [doc = \" intent to change it, which the menu does not act on itself.\"] Invoked (SharedString), # [doc = \" The menu was waved away, by escape or by a click outside it.\"] Dismissed, Closed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem",
      "name": "MenuItem",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "One entry in a menu, identified by business identity rather than position.",
      "documentation": "One entry in a menu, identified by business identity rather than position.\n\nAn id is unique within its menu, including across submenus, because it is\nwhat the menu reports and what a test addresses.",
      "signature": "# [doc = \" One entry in a menu, identified by business identity rather than position.\"] # [doc = \"\"] # [doc = \" An id is unique within its menu, including across submenus, because it is\"] # [doc = \" what the menu reports and what a test addresses.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct MenuItem { id : SharedString, label : SharedString, kind : MenuItemKind, shortcut : Option<SharedString>, icon : Option<Icon>, disabled : bool, # [doc = \" A command that destroys something. Painted in danger so a delete row\"] # [doc = \" is not just another line of body text.\"] destructive : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem::check",
      "name": "check",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Something that is on or off. The menu draws `checked` and reports the intent to change it; it never changes it itself.",
      "documentation": "Something that is on or off. The menu draws `checked` and reports the\nintent to change it; it never changes it itself.",
      "signature": "pub fn check (id : impl Into<SharedString>, label : impl Into<SharedString>, checked : bool,) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem::command",
      "name": "command",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Something to do, reported as [`MenuEvent::Invoked`] when taken.",
      "documentation": "Something to do, reported as [`MenuEvent::Invoked`] when taken.",
      "signature": "pub fn command (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem::destructive",
      "name": "destructive",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Marks the item as one that destroys something. The row still reports [`MenuEvent::Invoked`]; the host decides what that means.",
      "documentation": "Marks the item as one that destroys something. The row still reports\n[`MenuEvent::Invoked`]; the host decides what that means.",
      "signature": "pub fn destructive (mut self, destructive : bool) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "Refuses the item. A refused item installs no handler at all.",
      "documentation": "Refuses the item. A refused item installs no handler at all.",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem::icon",
      "name": "icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (mut self, glyph : Icon) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem::is_destructive",
      "name": "is_destructive",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_destructive (& self) -> bool",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem::section",
      "name": "section",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "A caption naming the group that follows. Not something to act on.",
      "documentation": "A caption naming the group that follows. Not something to act on.",
      "signature": "pub fn section (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem::separator",
      "name": "separator",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "A rule between groups. It carries an id because it is published, and the keyboard steps over it.",
      "documentation": "A rule between groups. It carries an id because it is published, and\nthe keyboard steps over it.",
      "signature": "pub fn separator (id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem::shortcut",
      "name": "shortcut",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "The keystroke that does the same thing without the menu.",
      "documentation": "The keystroke that does the same thing without the menu.",
      "signature": "pub fn shortcut (mut self, keystroke : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui_kit::overlay::menu::MenuItem::submenu",
      "name": "submenu",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menu",
      "path": "gpui_kit::overlay::menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "A nested menu, opening to the side.",
      "documentation": "A nested menu, opening to the side.",
      "signature": "pub fn submenu (id : impl Into<SharedString>, label : impl Into<SharedString>, items : impl IntoIterator<Item = MenuItem>,) -> Self",
      "cfg": [],
      "target": "MenuItem"
    },
    {
      "id": "gpui_kit::overlay::menubar::Menubar",
      "name": "Menubar",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "A row of menus, at most one of them open.",
      "documentation": "A row of menus, at most one of them open.",
      "signature": "# [doc = \" A row of menus, at most one of them open.\"] pub struct Menubar { ident : Ident, menus : Vec<MenubarMenu>, # [doc = \" One view per title, absent for a title the host refused: a refused\"] # [doc = \" title is a plain disabled button with no menu behind it at all.\"] views : Vec<Option<Entity<Menu>>>, open : Option<SharedString>, size : ControlSize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::menubar::Menubar::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn close (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menubar"
    },
    {
      "id": "gpui_kit::overlay::menubar::Menubar::control_size",
      "name": "control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn control_size (mut self, size : ControlSize) -> Self",
      "cfg": [],
      "target": "Menubar"
    },
    {
      "id": "gpui_kit::overlay::menubar::Menubar::menus",
      "name": "menus",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn menus (& self) -> & [MenubarMenu]",
      "cfg": [],
      "target": "Menubar"
    },
    {
      "id": "gpui_kit::overlay::menubar::Menubar::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, menus : impl IntoIterator<Item = MenubarMenu>, window : & mut Window, cx : & mut Context<Self>,) -> Self",
      "cfg": [],
      "target": "Menubar"
    },
    {
      "id": "gpui_kit::overlay::menubar::Menubar::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "Opens one title, closing whatever stood open. A title the host refused has no menu and opens nothing.",
      "documentation": "Opens one title, closing whatever stood open. A title the host refused\nhas no menu and opens nothing.\n\nThe old menu is closed before the new one opens rather than in reaction\nto it, because closing hands the keyboard back to its own trigger, and\ndoing that after the new menu had taken focus would pull the keyboard\nback out of the menu the typist just opened.",
      "signature": "pub fn open (& mut self, id : & str, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menubar"
    },
    {
      "id": "gpui_kit::overlay::menubar::Menubar::open_menu",
      "name": "open_menu",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "The menu standing open, if any.",
      "documentation": "The menu standing open, if any.",
      "signature": "pub fn open_menu (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "Menubar"
    },
    {
      "id": "gpui_kit::overlay::menubar::Menubar::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Menubar"
    },
    {
      "id": "gpui_kit::overlay::menubar::Menubar::set_menus",
      "name": "set_menus",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "Reconciles by menu identity. A still-offered menu retains its native entity, open state and focus; removing or disabling it closes it first.",
      "documentation": "Reconciles by menu identity. A still-offered menu retains its native\nentity, open state and focus; removing or disabling it closes it first.",
      "signature": "pub fn set_menus (& mut self, menus : Vec<MenubarMenu>, window : & mut Window, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "Menubar"
    },
    {
      "id": "gpui_kit::overlay::menubar::MenubarEvent",
      "name": "MenubarEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "What a menubar reports. The owner decides what any of it means.",
      "documentation": "What a menubar reports. The owner decides what any of it means.",
      "signature": "# [doc = \" What a menubar reports. The owner decides what any of it means.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum MenubarEvent { Opened (SharedString), # [doc = \" A row was taken, named together with the menu it came from, because two\"] # [doc = \" menus may offer the same command and the host may care which one asked.\"] Invoked { menu : SharedString, item : SharedString, }, Closed (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::menubar::MenubarMenu",
      "name": "MenubarMenu",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "One title in the bar and the commands under it.",
      "documentation": "One title in the bar and the commands under it.",
      "signature": "# [doc = \" One title in the bar and the commands under it.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct MenubarMenu { id : SharedString, label : SharedString, items : Vec<MenuItem>, disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::menubar::MenubarMenu::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "Refuses the whole title. A refused title installs no handler, opens on no hover, and the arrows step over it.",
      "documentation": "Refuses the whole title. A refused title installs no handler, opens on\nno hover, and the arrows step over it.",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "MenubarMenu"
    },
    {
      "id": "gpui_kit::overlay::menubar::MenubarMenu::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "MenubarMenu"
    },
    {
      "id": "gpui_kit::overlay::menubar::MenubarMenu::is_disabled",
      "name": "is_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_disabled (& self) -> bool",
      "cfg": [],
      "target": "MenubarMenu"
    },
    {
      "id": "gpui_kit::overlay::menubar::MenubarMenu::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "MenubarMenu"
    },
    {
      "id": "gpui_kit::overlay::menubar::MenubarMenu::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::menubar",
      "path": "gpui_kit::overlay::menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>, items : impl IntoIterator<Item = MenuItem>,) -> Self",
      "cfg": [],
      "target": "MenubarMenu"
    },
    {
      "id": "gpui_kit::overlay::notification_center::Notification",
      "name": "Notification",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "One thing that happened, whether or not a toast ever showed it.",
      "documentation": "One thing that happened, whether or not a toast ever showed it.\n\nThe severity is the library's existing [`Tone`] vocabulary rather than a\nsecond severity scale, so a notification reads the same in the centre as\nthe toast of it read on screen.",
      "signature": "# [doc = \" One thing that happened, whether or not a toast ever showed it.\"] # [doc = \"\"] # [doc = \" The severity is the library's existing [`Tone`] vocabulary rather than a\"] # [doc = \" second severity scale, so a notification reads the same in the centre as\"] # [doc = \" the toast of it read on screen.\"] pub struct Notification { ident : Ident, message : SharedString, detail : Option<SharedString>, tone : Tone, # [doc = \" When it happened, as a string the host already put into words. The\"] # [doc = \" reasoning is `Timeline`'s: this crate owns no clock and no locale.\"] at : Option<SharedString>, read : bool, action : Option<(SharedString, ActionHandler)>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::notification_center::Notification::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "The one thing that can be done about it, as on a toast.",
      "documentation": "The one thing that can be done about it, as on a toast.",
      "signature": "pub fn action (mut self, label : impl Into<SharedString>, handler : impl Fn (& mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Notification"
    },
    {
      "id": "gpui_kit::overlay::notification_center::Notification::at",
      "name": "at",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "When it happened, already worded by the host.",
      "documentation": "When it happened, already worded by the host.",
      "signature": "pub fn at (mut self, at : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Notification"
    },
    {
      "id": "gpui_kit::overlay::notification_center::Notification::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Notification"
    },
    {
      "id": "gpui_kit::overlay::notification_center::Notification::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> SharedString",
      "cfg": [],
      "target": "Notification"
    },
    {
      "id": "gpui_kit::overlay::notification_center::Notification::is_read",
      "name": "is_read",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_read (& self) -> bool",
      "cfg": [],
      "target": "Notification"
    },
    {
      "id": "gpui_kit::overlay::notification_center::Notification::message",
      "name": "message",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn message (& self) -> & SharedString",
      "cfg": [],
      "target": "Notification"
    },
    {
      "id": "gpui_kit::overlay::notification_center::Notification::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, message : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Notification"
    },
    {
      "id": "gpui_kit::overlay::notification_center::Notification::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "Files it as already read, for a report the typist has plainly seen.",
      "documentation": "Files it as already read, for a report the typist has plainly seen.",
      "signature": "pub fn read (mut self, read : bool) -> Self",
      "cfg": [],
      "target": "Notification"
    },
    {
      "id": "gpui_kit::overlay::notification_center::Notification::toast",
      "name": "toast",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "The transient showing of this same record.",
      "documentation": "The transient showing of this same record.\n\nOne record, two surfaces: the toast carries the same id, so dismissing\nthe toast and finding the notification afterwards are the same thing\nseen twice rather than two things that happen to look alike.",
      "signature": "pub fn toast (& self) -> Toast",
      "cfg": [],
      "target": "Notification"
    },
    {
      "id": "gpui_kit::overlay::notification_center::Notification::tone",
      "name": "tone",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tone (mut self, tone : Tone) -> Self",
      "cfg": [],
      "target": "Notification"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter",
      "name": "NotificationCenter",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "The list of notifications a window has accumulated.",
      "documentation": "The list of notifications a window has accumulated.",
      "signature": "# [doc = \" The list of notifications a window has accumulated.\"] pub struct NotificationCenter { ident : Ident, focus_handle : FocusHandle, notifications : Vec<Notification>, capacity : usize, # [doc = \" Whether anything has been dropped to make room. Once this is true the\"] # [doc = \" centre stops claiming an exact unread count, because it cannot know\"] # [doc = \" whether what it dropped had been read.\"] dropped : bool, size : ControlSize, slots : Slots, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::capacity",
      "name": "capacity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "How many records the centre holds before it drops the oldest. A capacity below one is raised to one.",
      "documentation": "How many records the centre holds before it drops the oldest. A\ncapacity below one is raised to one.",
      "signature": "pub fn capacity (mut self, capacity : usize) -> Self",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "Takes every notification out.",
      "documentation": "Takes every notification out.\n\nDismissing one and clearing them all are separate reports, because\nclearing is the gesture that loses reports nobody has read and a host\nmay well want to ask about it.",
      "signature": "pub fn clear (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::dismiss",
      "name": "dismiss",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "Takes one notification out, reporting whether it was here.",
      "documentation": "Takes one notification out, reporting whether it was here.",
      "signature": "pub fn dismiss (& mut self, id : & str, cx : & mut Context<Self>) -> bool",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::holds",
      "name": "holds",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "Whether the centre still holds this notification.",
      "documentation": "Whether the centre still holds this notification.",
      "signature": "pub fn holds (& self, id : & str) -> bool",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::is_read",
      "name": "is_read",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "Whether one notification has been read, or `None` when it is not here.",
      "documentation": "Whether one notification has been read, or `None` when it is not here.",
      "signature": "pub fn is_read (& self, id : & str) -> Option<bool>",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::mark_all_read",
      "name": "mark_all_read",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn mark_all_read (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::mark_read",
      "name": "mark_read",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn mark_read (& mut self, id : & str, cx : & mut Context<Self>) -> bool",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::record",
      "name": "record",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "Files a notification without showing a toast of it.",
      "documentation": "Files a notification without showing a toast of it.\n\nA repeat of an id already held replaces it, the way a repeated toast\nrefreshes rather than stacking: one identity is one notification.",
      "signature": "pub fn record (& mut self, notification : Notification, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::set_capacity",
      "name": "set_capacity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "Applies the same oldest-first retention as `record`, preserving read state and the truthful lower-bound unread count after any eviction.",
      "documentation": "Applies the same oldest-first retention as `record`, preserving read\nstate and the truthful lower-bound unread count after any eviction.",
      "signature": "pub fn set_capacity (& mut self, capacity : usize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::set_control_size",
      "name": "set_control_size",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_control_size (& mut self, size : ControlSize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::show",
      "name": "show",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "Files a notification and shows a toast of it, reporting whether the toast was delivered.",
      "documentation": "Files a notification and shows a toast of it, reporting whether the\ntoast was delivered.\n\nFalse means no [`ToastLayer`](crate::overlay::ToastLayer) is mounted,\nso nothing floated on screen — but the record is filed either way,\nwhich is exactly the point of the centre.",
      "signature": "pub fn show (& mut self, notification : Notification, window : & Window, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenter::unread",
      "name": "unread",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn unread (& self) -> UnreadCount",
      "cfg": [],
      "target": "NotificationCenter"
    },
    {
      "id": "gpui_kit::overlay::notification_center::NotificationCenterEvent",
      "name": "NotificationCenterEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "What the centre reports. It files records; it decides nothing else.",
      "documentation": "What the centre reports. It files records; it decides nothing else.",
      "signature": "# [doc = \" What the centre reports. It files records; it decides nothing else.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum NotificationCenterEvent { # [doc = \" One notification was marked read, by being opened or by the control.\"] Read (SharedString), # [doc = \" One notification was taken out of the centre.\"] Dismissed (SharedString), # [doc = \" Every notification was taken out.\"] Cleared, # [doc = \" A notification's own action was taken. The handler has already run.\"] ActionTaken (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::notification_center::UnreadCount",
      "name": "UnreadCount",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "How many unread notifications there are, or how many there are at least.",
      "documentation": "How many unread notifications there are, or how many there are at least.\n\nA badge that shows a number it cannot stand behind is worse than one that\nsays \"more than this\", so the second variant exists and is rendered\ndifferently.",
      "signature": "# [doc = \" How many unread notifications there are, or how many there are at least.\"] # [doc = \"\"] # [doc = \" A badge that shows a number it cannot stand behind is worse than one that\"] # [doc = \" says \\\"more than this\\\", so the second variant exists and is rendered\"] # [doc = \" differently.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum UnreadCount { Exact (usize), # [doc = \" The centre has dropped records it no longer holds, so it can only speak\"] # [doc = \" for the ones it still has.\"] AtLeast (usize), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::notification_center::UnreadCount::is_zero",
      "name": "is_zero",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_zero (self) -> bool",
      "cfg": [],
      "target": "UnreadCount"
    },
    {
      "id": "gpui_kit::overlay::notification_center::UnreadCount::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "UnreadCount"
    },
    {
      "id": "gpui_kit::overlay::notification_center::UnreadCount::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::notification_center",
      "path": "gpui_kit::overlay::notification_center",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn value (self) -> usize",
      "cfg": [],
      "target": "UnreadCount"
    },
    {
      "id": "gpui_kit::overlay::palette::Command",
      "name": "Command",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "One thing the application can do.",
      "documentation": "One thing the application can do.",
      "signature": "# [doc = \" One thing the application can do.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct Command { id : SharedString, label : SharedString, section : Option<SharedString>, shortcut : Option<SharedString>, # [doc = \" Why the host will not run this now. `None` means it will.\"] unavailable : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::palette::Command::id",
      "name": "id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn id (& self) -> & SharedString",
      "cfg": [],
      "target": "Command"
    },
    {
      "id": "gpui_kit::overlay::palette::Command::is_available",
      "name": "is_available",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_available (& self) -> bool",
      "cfg": [],
      "target": "Command"
    },
    {
      "id": "gpui_kit::overlay::palette::Command::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn label (& self) -> & SharedString",
      "cfg": [],
      "target": "Command"
    },
    {
      "id": "gpui_kit::overlay::palette::Command::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Command"
    },
    {
      "id": "gpui_kit::overlay::palette::Command::reason",
      "name": "reason",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn reason (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "Command"
    },
    {
      "id": "gpui_kit::overlay::palette::Command::section",
      "name": "section",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "The group this command belongs to. Sections stay contiguous, ordered by the best match inside them.",
      "documentation": "The group this command belongs to. Sections stay contiguous, ordered by\nthe best match inside them.",
      "signature": "pub fn section (mut self, section : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Command"
    },
    {
      "id": "gpui_kit::overlay::palette::Command::shortcut",
      "name": "shortcut",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "The keystroke that runs it without the palette.",
      "documentation": "The keystroke that runs it without the palette.",
      "signature": "pub fn shortcut (mut self, keystroke : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Command"
    },
    {
      "id": "gpui_kit::overlay::palette::Command::unavailable",
      "name": "unavailable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "Marks the command as one the host will not run now, in the host's own words. It is still listed: hiding a command a typist knows exists is a lie about the application.",
      "documentation": "Marks the command as one the host will not run now, in the host's own\nwords. It is still listed: hiding a command a typist knows exists is a\nlie about the application.",
      "signature": "pub fn unavailable (mut self, reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Command"
    },
    {
      "id": "gpui_kit::overlay::palette::CommandPalette",
      "name": "CommandPalette",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "A query field over a list of commands.",
      "documentation": "A query field over a list of commands.\n\nThe palette owns the query and where the keyboard is; the command list and\nwhether the palette is on screen at all belong to the host.",
      "signature": "# [doc = \" A query field over a list of commands.\"] # [doc = \"\"] # [doc = \" The palette owns the query and where the keyboard is; the command list and\"] # [doc = \" whether the palette is on screen at all belong to the host.\"] pub struct CommandPalette { ident : Ident, focus_handle : FocusHandle, query : Entity<TextInput>, commands : Vec<Command>, # [doc = \" The highlighted command, by identity, so filtering does not move the\"] # [doc = \" highlight onto whatever happens to sit at the same position.\"] active : Option<SharedString>, slots : Slots, # [doc = \" Held so the query subscription lives as long as the palette does.\"] _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::palette::CommandPalette::active_id",
      "name": "active_id",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "The command the keyboard is on, or `None` when nothing can be taken.",
      "documentation": "The command the keyboard is on, or `None` when nothing can be taken.",
      "signature": "pub fn active_id (& self, cx : & App) -> Option<SharedString>",
      "cfg": [],
      "target": "CommandPalette"
    },
    {
      "id": "gpui_kit::overlay::palette::CommandPalette::commands",
      "name": "commands",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn commands (mut self, commands : impl IntoIterator<Item = Command>) -> Self",
      "cfg": [],
      "target": "CommandPalette"
    },
    {
      "id": "gpui_kit::overlay::palette::CommandPalette::focus_query",
      "name": "focus_query",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "Moves the keyboard into the query field.",
      "documentation": "Moves the keyboard into the query field.",
      "signature": "pub fn focus_query (& self, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "CommandPalette"
    },
    {
      "id": "gpui_kit::overlay::palette::CommandPalette::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "CommandPalette"
    },
    {
      "id": "gpui_kit::overlay::palette::CommandPalette::query",
      "name": "query",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn query (& self, cx : & App) -> SharedString",
      "cfg": [],
      "target": "CommandPalette"
    },
    {
      "id": "gpui_kit::overlay::palette::CommandPalette::query_input",
      "name": "query_input",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn query_input (& self) -> & Entity<TextInput>",
      "cfg": [],
      "target": "CommandPalette"
    },
    {
      "id": "gpui_kit::overlay::palette::CommandPalette::set_commands",
      "name": "set_commands",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_commands (& mut self, commands : Vec<Command>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "CommandPalette"
    },
    {
      "id": "gpui_kit::overlay::palette::CommandPalette::set_query",
      "name": "set_query",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "Replaces the query from the host side, for example when the palette is opened with something already typed.",
      "documentation": "Replaces the query from the host side, for example when the palette is\nopened with something already typed.",
      "signature": "pub fn set_query (& mut self, query : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "CommandPalette"
    },
    {
      "id": "gpui_kit::overlay::palette::CommandPaletteEvent",
      "name": "CommandPaletteEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::palette",
      "path": "gpui_kit::overlay::palette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "What the palette reports. The owner decides what any of it means.",
      "documentation": "What the palette reports. The owner decides what any of it means.",
      "signature": "# [doc = \" What the palette reports. The owner decides what any of it means.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum CommandPaletteEvent { QueryChanged (SharedString), # [doc = \" The highlighted command was taken.\"] Invoked (SharedString), # [doc = \" The palette was waved away with escape. The host owns whether it stays\"] # [doc = \" on screen, so the palette only reports the intent.\"] Dismissed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::panel::Body",
      "name": "Body",
      "kind": "type",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::panel",
      "path": "gpui_kit::overlay::panel",
      "source": "crates/gpui-kit/src/overlay/panel.rs",
      "summary": "Builds a surface body for one frame.",
      "documentation": "Builds a surface body for one frame.\n\nAn `AnyElement` can be consumed once, while an open surface re-renders for\nas long as it stays open, so the caller supplies a builder instead.",
      "signature": "# [doc = \" Builds a surface body for one frame.\"] # [doc = \"\"] # [doc = \" An `AnyElement` can be consumed once, while an open surface re-renders for\"] # [doc = \" as long as it stays open, so the caller supplies a builder instead.\"] pub type Body = Rc<dyn Fn (& mut Window, & mut App) -> AnyElement>;",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::panel::band",
      "name": "band",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::panel",
      "path": "gpui_kit::overlay::panel",
      "source": "crates/gpui-kit/src/overlay/panel.rs",
      "summary": "The band a modal surface's title, body, or actions sit in.",
      "documentation": "The band a modal surface's title, body, or actions sit in.\n\nOne inset for all three, so the title, the body and the buttons of a\ndialog and of a drawer line up on the same left edge. Their own padding and\nplacement separate the bands without drawing full-width seams between\ncontent that already reads in order.",
      "signature": "pub fn band (theme : & Theme) -> Div",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::panel::description",
      "name": "description",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::panel",
      "path": "gpui_kit::overlay::panel",
      "source": "crates/gpui-kit/src/overlay/panel.rs",
      "summary": "Secondary copy under the title.",
      "documentation": "Secondary copy under the title.",
      "signature": "pub fn description (ident : & Ident, theme : & Theme, description : SharedString, cx : & App,) -> gpui::Stateful<gpui::Div>",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::panel::heading",
      "name": "heading",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::panel",
      "path": "gpui_kit::overlay::panel",
      "source": "crates/gpui-kit/src/overlay/panel.rs",
      "summary": "The title of a surface, published as its first-level heading.",
      "documentation": "The title of a surface, published as its first-level heading.",
      "signature": "pub fn heading (ident : & Ident, theme : & Theme, title : SharedString, cx : & App,) -> gpui::Stateful<gpui::Div>",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::Content",
      "name": "Content",
      "kind": "type",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Builds the popover body for one frame.",
      "documentation": "Builds the popover body for one frame.",
      "signature": "# [doc = \" Builds the popover body for one frame.\"] pub type Content = Rc<dyn Fn (& mut Window, & mut App) -> AnyElement>;",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::MenuKey",
      "name": "MenuKey",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "What a keystroke means to a menu-like surface, once the platform's modifier conventions have been applied.",
      "documentation": "What a keystroke means to a menu-like surface, once the platform's\nmodifier conventions have been applied.",
      "signature": "# [doc = \" What a keystroke means to a menu-like surface, once the platform's\"] # [doc = \" modifier conventions have been applied.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum MenuKey { Up, Down, # [doc = \" Enters a submenu, which is the leading edge on a left-to-right layout.\"] Right, # [doc = \" Leaves a submenu.\"] Left, Enter, ModifiedEnter, Escape, Backspace, Other, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::PickerPresentation",
      "name": "PickerPresentation",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "How an existing picker presents its choices. The caller chooses from its measured layout; this policy never guesses an operating system or viewport.",
      "documentation": "How an existing picker presents its choices. The caller chooses from its\nmeasured layout; this policy never guesses an operating system or viewport.",
      "signature": "# [doc = \" How an existing picker presents its choices. The caller chooses from its\"] # [doc = \" measured layout; this policy never guesses an operating system or viewport.\"] # [derive (Debug, Clone, Copy, Default, PartialEq, Eq)] pub enum PickerPresentation { # [default] Anchored, # [doc = \" A retained bottom modal, with the shared drawer's focus restoration,\"] # [doc = \" dismissal and modal stack. This is not a native system picker.\"] Bottom, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::PickerSheet::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new<V : 'static> (ident : Ident, title : SharedString, stops : Vec<FocusHandle>, body : impl Fn (& mut Window, & mut App) -> AnyElement + 'static, dismissed : impl Fn (& mut V, & mut Context<V>) + 'static, window : & mut Window, cx : & mut Context<V>,) -> Self",
      "cfg": [],
      "target": "PickerSheet"
    },
    {
      "id": "gpui_kit::overlay::popover::PickerSheet::sync",
      "name": "sync",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sync (& self, open : bool, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "PickerSheet"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover",
      "name": "Popover",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "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.",
      "documentation": "A surface anchored to a trigger, holding whatever the caller puts in it.\n\nOpen state and the element that had the keyboard before opening both\noutlive a frame, so a popover is a view rather than a builder. The body is\na callback instead of a stored element because an `AnyElement` can be\nconsumed once, while an open popover re-renders for as long as it stays\nopen.",
      "signature": "# [doc = \" A surface anchored to a trigger, holding whatever the caller puts in it.\"] # [doc = \"\"] # [doc = \" Open state and the element that had the keyboard before opening both\"] # [doc = \" outlive a frame, so a popover is a view rather than a builder. The body is\"] # [doc = \" a callback instead of a stored element because an `AnyElement` can be\"] # [doc = \" consumed once, while an open popover re-renders for as long as it stays\"] # [doc = \" open.\"] pub struct Popover { ident : Ident, focus_handle : FocusHandle, trigger_focus : FocusHandle, trigger : SharedString, trigger_icon : Option<Icon>, content : Option<Content>, placement : Placement, hang : Hang, dismissable : bool, # [doc = \" The surface's arrival and departure, or `None` while it has never been\"] # [doc = \" opened. Kept rather than a bare `open` flag because an element cannot\"] # [doc = \" animate out after it has been dropped from the tree: the popover has to\"] # [doc = \" keep rendering through the exit, and this is what says when it may stop.\"] presenting : Option<Presenting>, # [doc = \" Set by `open`, cleared by the first frame that can act on it.\"] pending_focus : bool, trap : FocusTrap, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Closes the surface and gives the keyboard back to the trigger. Starts the departure and gives the keyboard back to the trigger. The surface stays on screen until the exit finishes, and [`PopoverEvent::Closed`] is reported then rather than now — a report that the surface is gone while it is still on screen is the one thing a host would act on immediately.",
      "documentation": "Closes the surface and gives the keyboard back to the trigger.\nStarts the departure and gives the keyboard back to the trigger. The\nsurface stays on screen until the exit finishes, and\n[`PopoverEvent::Closed`] is reported then rather than now — a report\nthat the surface is gone while it is still on screen is the one thing a\nhost would act on immediately.",
      "signature": "pub fn close (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::content",
      "name": "content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Supplies the body, rebuilt on every frame the popover is open.",
      "documentation": "Supplies the body, rebuilt on every frame the popover is open.",
      "signature": "pub fn content (mut self, content : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::dismiss",
      "name": "dismiss",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Reports a wave-away. A popover that is not dismissable cannot be waved away even by a host calling this directly.",
      "documentation": "Reports a wave-away. A popover that is not dismissable cannot be waved\naway even by a host calling this directly.",
      "signature": "pub fn dismiss (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::dismissable",
      "name": "dismissable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Whether escape and a click outside close the surface. A popover that is not dismissable installs neither handler.",
      "documentation": "Whether escape and a click outside close the surface. A popover that is\nnot dismissable installs neither handler.",
      "signature": "pub fn dismissable (mut self, dismissable : bool) -> Self",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::hang",
      "name": "hang",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Which of the trigger's edges the surface hangs from.",
      "documentation": "Which of the trigger's edges the surface hangs from.\n\nA trigger near the trailing edge of the window wants [`Hang::End`]: the\nsurface then grows back across the page instead of being slid sideways\noff its trigger to stay inside the window.",
      "signature": "pub fn hang (mut self, hang : Hang) -> Self",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::is_dismissable",
      "name": "is_dismissable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_dismissable (& self) -> bool",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "True while the surface is here or on its way here.",
      "documentation": "True while the surface is here or on its way here.\n\nA surface still playing its exit is not open: it takes no keyboard,\nanswers no dismissal, and is on screen only because a departure needs\nsomewhere to run.",
      "signature": "pub fn is_open (& self) -> bool",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, _window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn open (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::placement",
      "name": "placement",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placement (mut self, placement : Placement) -> Self",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::set_content",
      "name": "set_content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Replaces the per-frame body factory; `None` removes the body. Open state, animation, and the current focus are retained.",
      "documentation": "Replaces the per-frame body factory; `None` removes the body.\nOpen state, animation, and the current focus are retained.",
      "signature": "pub fn set_content (& mut self, content : Option<Content>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::set_dismissable",
      "name": "set_dismissable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Changes user dismissal policy without opening or closing the surface.",
      "documentation": "Changes user dismissal policy without opening or closing the surface.",
      "signature": "pub fn set_dismissable (& mut self, dismissable : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::set_hang",
      "name": "set_hang",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_hang (& mut self, hang : Hang, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::set_placement",
      "name": "set_placement",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_placement (& mut self, placement : Placement, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::set_trigger",
      "name": "set_trigger",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Changes the trigger without replacing its focus handle or open surface.",
      "documentation": "Changes the trigger without replacing its focus handle or open surface.",
      "signature": "pub fn set_trigger (& mut self, label : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::set_trigger_icon",
      "name": "set_trigger_icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_trigger_icon (& mut self, icon : Option<Icon>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::toggle",
      "name": "toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn toggle (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::trigger",
      "name": "trigger",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The label of the control that opens the surface.",
      "documentation": "The label of the control that opens the surface.",
      "signature": "pub fn trigger (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::Popover::trigger_icon",
      "name": "trigger_icon",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn trigger_icon (mut self, icon : Icon) -> Self",
      "cfg": [],
      "target": "Popover"
    },
    {
      "id": "gpui_kit::overlay::popover::PopoverEvent",
      "name": "PopoverEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "What a popover reports. The owner decides what any of it means.",
      "documentation": "What a popover reports. The owner decides what any of it means.\n\nA dismissal is always followed by [`PopoverEvent::Closed`], so a subscriber\nthat only cares that the surface went away has one event to watch.",
      "signature": "# [doc = \" What a popover reports. The owner decides what any of it means.\"] # [doc = \"\"] # [doc = \" A dismissal is always followed by [`PopoverEvent::Closed`], so a subscriber\"] # [doc = \" that only cares that the surface went away has one event to watch.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum PopoverEvent { Opened, # [doc = \" The surface was waved away, by escape or by a click outside it.\"] Dismissed, Closed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::anchored",
      "name": "anchored",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Places `content` beside the slot it is mounted in, on the stated side and hanging from the stated edge.",
      "documentation": "Places `content` beside the slot it is mounted in, on the stated side and\nhanging from the stated edge.\n\nThe gap is on the side the surface came from, so the surface clears its\ntrigger by the same air whichever way it opened.",
      "signature": "pub fn anchored (id : impl Into<ElementId>, theme : & Theme, placement : Placement, hang : Hang, content : AnyElement,) -> AnyElement",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::anchored_above",
      "name": "anchored_above",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Places `content` over `anchor`, flipping below when there is no room.",
      "documentation": "Places `content` over `anchor`, flipping below when there is no room.",
      "signature": "pub fn anchored_above (id : impl Into<ElementId>, theme : & Theme, hang : Hang, content : AnyElement,) -> AnyElement",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::anchored_below",
      "name": "anchored_below",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Places `content` under `anchor`, flipping above when there is no room.",
      "documentation": "Places `content` under `anchor`, flipping above when there is no room.",
      "signature": "pub fn anchored_below (id : impl Into<ElementId>, theme : & Theme, hang : Hang, content : AnyElement,) -> AnyElement",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::anchored_slot",
      "name": "anchored_slot",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Lays a trigger out with the slot an anchored overlay hangs from.",
      "documentation": "Lays a trigger out with the slot an anchored overlay hangs from.\n\nA surface anchors to where its slot sits, so the slot goes under the\ntrigger for a surface that opens downwards and above it for one that opens\nupwards, and on the trigger's trailing edge for one that grows back across\nthe page. The slot takes no space of its own.",
      "signature": "pub fn anchored_slot (placement : Placement, hang : Hang, trigger : AnyElement, overlay : Option<AnyElement>,) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::at",
      "name": "at",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Places `content` at a point, which is what a context menu needs.",
      "documentation": "Places `content` at a point, which is what a context menu needs.",
      "signature": "pub fn at (id : impl Into<ElementId>, theme : & Theme, position : Point<Pixels>, content : AnyElement,) -> AnyElement",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::card",
      "name": "card",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The elevated surface every anchored overlay draws.",
      "documentation": "The elevated surface every anchored overlay draws.",
      "signature": "pub fn card (ident : impl Into<Ident>, theme : & Theme) -> super::layer::GlassSurface",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::card_flush",
      "name": "card_flush",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "[`card`] without the inner padding, for a surface that draws its own rows edge to edge.",
      "documentation": "[`card`] without the inner padding, for a surface that draws its own rows\nedge to edge.",
      "signature": "pub fn card_flush (ident : impl Into<Ident>, theme : & Theme) -> super::layer::GlassSurface",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::classify_key",
      "name": "classify_key",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Reads one keystroke as a menu intent, so every menu-like surface answers the same keys the same way.",
      "documentation": "Reads one keystroke as a menu intent, so every menu-like surface answers\nthe same keys the same way.",
      "signature": "pub fn classify_key (key : & str, command : bool, control : bool) -> MenuKey",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::dialog_body",
      "name": "dialog_body",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The detail under a modal's question.",
      "documentation": "The detail under a modal's question.",
      "signature": "pub fn dialog_body (theme : & Theme, body : impl Into<SharedString>) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::dialog_card",
      "name": "dialog_card",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The surface a modal draws itself on.",
      "documentation": "The surface a modal draws itself on.",
      "signature": "pub fn dialog_card (ident : impl Into<Ident>, theme : & Theme) -> super::layer::GlassSurface",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::dialog_title",
      "name": "dialog_title",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The one question a modal is asking.",
      "documentation": "The one question a modal is asking.",
      "signature": "pub fn dialog_title (theme : & Theme, title : impl Into<SharedString>) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::filter_indices",
      "name": "filter_indices",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The indices of the labels `query` answers, best answer first, using the English matcher compiled into this crate.",
      "documentation": "The indices of the labels `query` answers, best answer first, using the\nEnglish matcher compiled into this crate.",
      "signature": "pub fn filter_indices<S : AsRef<str>> (query : & str, labels : & [S]) -> Vec<usize>",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::filter_indices_for",
      "name": "filter_indices_for",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The installed host matcher, or English when the host supplied none.",
      "documentation": "The installed host matcher, or English when the host supplied none.",
      "signature": "pub fn filter_indices_for<S : AsRef<str>> (cx : & App, query : & str, labels : & [S]) -> Vec<usize>",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::filter_indices_with",
      "name": "filter_indices_with",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The same ranking through a caller-supplied matcher.",
      "documentation": "The same ranking through a caller-supplied matcher.",
      "signature": "pub fn filter_indices_with<S : AsRef<str>> (query : & str, labels : & [S], matcher : & dyn SearchMatcher,) -> Vec<usize>",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::heading",
      "name": "heading",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "A section label inside a menu-like surface.",
      "documentation": "A section label inside a menu-like surface.",
      "signature": "pub fn heading (theme : & Theme, label : & str) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::jump_to",
      "name": "jump_to",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The next entry whose label starts with `letter`, searching forward from the cursor and wrapping. `None` in `labels` marks an entry that cannot be jumped to, such as a separator or a refused row.",
      "documentation": "The next entry whose label starts with `letter`, searching forward from the\ncursor and wrapping. `None` in `labels` marks an entry that cannot be\njumped to, such as a separator or a refused row.",
      "signature": "pub fn jump_to<S : AsRef<str>> (labels : & [Option<S>], from : Option<usize>, letter : char,) -> Option<usize>",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::key_cap",
      "name": "key_cap",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The shortcut cap a menu row carries on its trailing edge.",
      "documentation": "The shortcut cap a menu row carries on its trailing edge.",
      "signature": "pub fn key_cap (theme : & Theme, label : impl Into<SharedString>) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::match_rank",
      "name": "match_rank",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "How well `label` answers `query`, lower being better, or `None` when it does not answer it at all.",
      "documentation": "How well `label` answers `query`, lower being better, or `None` when it\ndoes not answer it at all.\n\nA typist who knows what they are looking for types its beginning, so a\nprefix outranks the start of a later word, which outranks a match in the\nmiddle of one, which outranks letters merely occurring in order.",
      "signature": "pub fn match_rank (query : & str, label : & str) -> Option<usize>",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::menu_heading_height",
      "name": "menu_heading_height",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "How tall a section heading is, including its air.",
      "documentation": "How tall a section heading is, including its air.",
      "signature": "pub fn menu_heading_height (theme : & Theme) -> f32",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::menu_label",
      "name": "menu_label",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "A menu row's visible label, including the foreground transition for a pointer anywhere over the row rather than only over the glyphs themselves.",
      "documentation": "A menu row's visible label, including the foreground transition for a\npointer anywhere over the row rather than only over the glyphs themselves.",
      "signature": "pub fn menu_label (theme : & Theme, label : impl Into<SharedString>, selected : bool, highlighted : bool, hover_group : SharedString,) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::menu_row",
      "name": "menu_row",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "One row of a menu-like surface, with the shared height, hover wash, and refusal treatment.",
      "documentation": "One row of a menu-like surface, with the shared height, hover wash, and\nrefusal treatment.",
      "signature": "pub fn menu_row (theme : & Theme, selected : bool, highlighted : bool) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::menu_row_height",
      "name": "menu_row_height",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "How tall a menu row is.",
      "documentation": "How tall a menu row is.\n\nA menu that opens a submenu beside the row it came from has to know this\nbefore anything is painted, so the height is a function of the tokens\nrather than something the layout discovers.",
      "signature": "pub fn menu_row_height (theme : & Theme) -> f32",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::menu_separator_height",
      "name": "menu_separator_height",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "How tall a separator is, including its air.",
      "documentation": "How tall a separator is, including its air.",
      "signature": "pub fn menu_separator_height (theme : & Theme) -> f32",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::modal",
      "name": "modal",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Places `content` in the middle of the window, over a scrim.",
      "documentation": "Places `content` in the middle of the window, over a scrim.",
      "signature": "pub fn modal (id : impl Into<ElementId>, theme : & Theme, viewport : gpui::Size<Pixels>, content : AnyElement,) -> AnyElement",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::separator",
      "name": "separator",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The air between two groups of menu rows.",
      "documentation": "The air between two groups of menu rows.\n\nThe semantic separator remains addressable, but spacing already says that\none run ended and another began; painting a line would say it twice.",
      "signature": "pub fn separator (theme : & Theme) -> gpui::Div",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::step",
      "name": "step",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The index `delta` steps from `active`, wrapping at the ends.",
      "documentation": "The index `delta` steps from `active`, wrapping at the ends.\n\nA menu wraps where a strip stops: the list is short, the whole of it is on\nscreen, and arrowing off the bottom onto the top is how a menu has always\nbehaved. A strip stops instead, which `foundation::stepping` handles.",
      "signature": "pub fn step (active : Option<usize>, count : usize, delta : isize) -> Option<usize>",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::tracked_upper",
      "name": "tracked_upper",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "Upper-cases a section label and opens its letter spacing, which is the one place in the library that shouts.",
      "documentation": "Upper-cases a section label and opens its letter spacing, which is the one\nplace in the library that shouts.",
      "signature": "pub fn tracked_upper (label : & str) -> String",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::trigger_gap",
      "name": "trigger_gap",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The air between a trigger and the surface it opened.",
      "documentation": "The air between a trigger and the surface it opened.\n\nOne value for every anchored surface in the library, so a popover, a menu\nand a select all clear their trigger by the same gap and none of them\nmerges into the control it came from.",
      "signature": "pub fn trigger_gap (theme : & Theme) -> f32",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::popover::typed_letter",
      "name": "typed_letter",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::popover",
      "path": "gpui_kit::overlay::popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "The letter a keystroke types, for a menu that jumps on it.",
      "documentation": "The letter a keystroke types, for a menu that jumps on it.\n\nOnly a bare letter counts: a modified keystroke is a shortcut, and treating\nit as type-ahead would move the cursor while the typist meant to act.",
      "signature": "pub fn typed_letter (key : & str, modifiers : gpui::Modifiers) -> Option<char>",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::positioner::Positioner",
      "name": "Positioner",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::positioner",
      "path": "gpui_kit::overlay::positioner",
      "source": "crates/gpui-kit/src/overlay/positioner.rs",
      "summary": "What a surface asked for.",
      "documentation": "What a surface asked for.",
      "signature": "# [doc = \" What a surface asked for.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Positioner { # [doc = \" Where it would rather be.\"] pub side : Side, # [doc = \" Which of the trigger's edges it would rather hang from.\"] pub hang : Hang, # [doc = \" How tall it would be if nothing stopped it.\"] pub height : f32, # [doc = \" The narrowest it is worth drawing. A surface is at least this wide even\"] # [doc = \" when its trigger is narrower, because a menu the width of a small\"] # [doc = \" button is a column of cut-off words.\"] pub min_width : f32, # [doc = \" How far it stays from the window's edge.\"] pub margin : f32, # [doc = \" How far it stays from the trigger.\"] pub gap : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::positioner::Positioner::below",
      "name": "below",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::positioner",
      "path": "gpui_kit::overlay::positioner",
      "source": "crates/gpui-kit/src/overlay/positioner.rs",
      "summary": "A surface `height` tall that would rather be below its trigger.",
      "documentation": "A surface `height` tall that would rather be below its trigger.",
      "signature": "pub fn below (height : f32) -> Self",
      "cfg": [],
      "target": "Positioner"
    },
    {
      "id": "gpui_kit::overlay::positioner::Positioner::hang",
      "name": "hang",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::positioner",
      "path": "gpui_kit::overlay::positioner",
      "source": "crates/gpui-kit/src/overlay/positioner.rs",
      "summary": "Which of the trigger's edges the surface would rather hang from. It keeps that edge when there is room for it there.",
      "documentation": "Which of the trigger's edges the surface would rather hang from. It\nkeeps that edge when there is room for it there.",
      "signature": "pub fn hang (mut self, hang : Hang) -> Self",
      "cfg": [],
      "target": "Positioner"
    },
    {
      "id": "gpui_kit::overlay::positioner::Positioner::min_width",
      "name": "min_width",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::positioner",
      "path": "gpui_kit::overlay::positioner",
      "source": "crates/gpui-kit/src/overlay/positioner.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn min_width (mut self, width : f32) -> Self",
      "cfg": [],
      "target": "Positioner"
    },
    {
      "id": "gpui_kit::overlay::positioner::Positioner::resolve",
      "name": "resolve",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::positioner",
      "path": "gpui_kit::overlay::positioner",
      "source": "crates/gpui-kit/src/overlay/positioner.rs",
      "summary": "Resolves against the window the trigger was measured in.",
      "documentation": "Resolves against the window the trigger was measured in.",
      "signature": "pub fn resolve (self, window : & Window, trigger : Bounds<Pixels>) -> Room",
      "cfg": [],
      "target": "Positioner"
    },
    {
      "id": "gpui_kit::overlay::positioner::Positioner::resolve_in",
      "name": "resolve_in",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::positioner",
      "path": "gpui_kit::overlay::positioner",
      "source": "crates/gpui-kit/src/overlay/positioner.rs",
      "summary": "The same decision against a stated window, which is what makes it testable without one.",
      "documentation": "The same decision against a stated window, which is what makes it\ntestable without one.",
      "signature": "pub fn resolve_in (self, width : f32, height : f32, trigger : Bounds<Pixels>) -> Room",
      "cfg": [],
      "target": "Positioner"
    },
    {
      "id": "gpui_kit::overlay::positioner::Positioner::side",
      "name": "side",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::positioner",
      "path": "gpui_kit::overlay::positioner",
      "source": "crates/gpui-kit/src/overlay/positioner.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn side (mut self, side : Side) -> Self",
      "cfg": [],
      "target": "Positioner"
    },
    {
      "id": "gpui_kit::overlay::positioner::Positioner::spacing",
      "name": "spacing",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::positioner",
      "path": "gpui_kit::overlay::positioner",
      "source": "crates/gpui-kit/src/overlay/positioner.rs",
      "summary": "How far the surface stays from the window edge and from its trigger.",
      "documentation": "How far the surface stays from the window edge and from its trigger.",
      "signature": "pub fn spacing (mut self, margin : f32, gap : f32) -> Self",
      "cfg": [],
      "target": "Positioner"
    },
    {
      "id": "gpui_kit::overlay::positioner::Room",
      "name": "Room",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::positioner",
      "path": "gpui_kit::overlay::positioner",
      "source": "crates/gpui-kit/src/overlay/positioner.rs",
      "summary": "Where a surface goes and how much of it there can be.",
      "documentation": "Where a surface goes and how much of it there can be.",
      "signature": "# [doc = \" Where a surface goes and how much of it there can be.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Room { # [doc = \" The side it actually lands on.\"] pub side : Side, # [doc = \" The trigger edge it actually hangs from.\"] pub hang : Hang, # [doc = \" How wide it is drawn.\"] pub width : f32, # [doc = \" The tallest it may be without leaving the window.\"] pub height : f32, # [doc = \" Whether the trigger had been laid out when this was decided. A surface\"] # [doc = \" placed against an unmeasured trigger is provisional: it is bounded by\"] # [doc = \" the window rather than by a side, and the next frame corrects it.\"] pub measured : bool, # [doc = \" Whether it had to leave the side it asked for.\"] pub flipped : bool, # [doc = \" Whether it had to move to the trigger's other edge to stay in the\"] # [doc = \" window.\"] pub rehung : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::positioner::Side",
      "name": "Side",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::positioner",
      "path": "gpui_kit::overlay::positioner",
      "source": "crates/gpui-kit/src/overlay/positioner.rs",
      "summary": "Which side of the trigger a surface is asked to go on.",
      "documentation": "Which side of the trigger a surface is asked to go on.",
      "signature": "# [doc = \" Which side of the trigger a surface is asked to go on.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum Side { # [doc = \" Under the trigger, which is where a menu goes unless it cannot.\"] # [default] Below, # [doc = \" Over it.\"] Above, # [doc = \" To the trigger's leading edge, for a submenu.\"] Before, # [doc = \" To its trailing edge.\"] After, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::positioner::Side::is_vertical",
      "name": "is_vertical",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::positioner",
      "path": "gpui_kit::overlay::positioner",
      "source": "crates/gpui-kit/src/overlay/positioner.rs",
      "summary": "Whether the surface is stacked with the trigger rather than beside it.",
      "documentation": "Whether the surface is stacked with the trigger rather than beside it.",
      "signature": "pub fn is_vertical (self) -> bool",
      "cfg": [],
      "target": "Side"
    },
    {
      "id": "gpui_kit::overlay::positioner::Side::opposite",
      "name": "opposite",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::positioner",
      "path": "gpui_kit::overlay::positioner",
      "source": "crates/gpui-kit/src/overlay/positioner.rs",
      "summary": "The side a surface flips to when this one does not fit.",
      "documentation": "The side a surface flips to when this one does not fit.",
      "signature": "pub fn opposite (self) -> Self",
      "cfg": [],
      "target": "Side"
    },
    {
      "id": "gpui_kit::overlay::reexport-1",
      "name": "dialog :: { Dialog , DialogEvent }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use dialog::{ Dialog, DialogEvent };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-10",
      "name": "menubar :: { Menubar , MenubarEvent , MenubarMenu }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use menubar::{ Menubar, MenubarEvent, MenubarMenu };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-11",
      "name": "notification_center :: { Notification , NotificationCenter , NotificationCenterEvent , UnreadCount , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use notification_center::{ Notification, NotificationCenter, NotificationCenterEvent, UnreadCount, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-12",
      "name": "palette :: { Command , CommandPalette , CommandPaletteEvent }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use palette::{ Command, CommandPalette, CommandPaletteEvent };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-13",
      "name": "popover :: { PickerPresentation , Popover , PopoverEvent }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use popover::{ PickerPresentation, Popover, PopoverEvent };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-14",
      "name": "positioner :: { Positioner , Room , Side }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use positioner::{ Positioner, Room, Side };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-15",
      "name": "sheet :: { ActionSheet , ActionSheetEvent , BottomSheet , BottomSheetEvent , SheetAction , SheetActionState , SheetDetent , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use sheet::{ ActionSheet, ActionSheetEvent, BottomSheet, BottomSheetEvent, SheetAction, SheetActionState, SheetDetent, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-16",
      "name": "stack :: ModalScope",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use stack::ModalScope;",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-17",
      "name": "tail :: { TailSide , tail }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use tail::{ TailSide, tail };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-18",
      "name": "toast :: { Toast , ToastCorner , ToastLayer }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use toast::{ Toast, ToastCorner, ToastLayer };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-19",
      "name": "tooltip :: { Tooltip , Tooltipped }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use tooltip::{ Tooltip, Tooltipped };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-2",
      "name": "drawer :: { Drawer , DrawerEvent }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use drawer::{ Drawer, DrawerEvent };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-3",
      "name": "focus :: FocusTrap",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use focus::FocusTrap;",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-4",
      "name": "frost :: Frost",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use frost::Frost;",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-5",
      "name": "glass :: { Glass , GlassAppearance , GlassGroup , GlassPreset }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use glass::{ Glass, GlassAppearance, GlassGroup, GlassPreset };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-6",
      "name": "hover_card :: { HoverCard , HoverCardEvent }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use hover_card::{ HoverCard, HoverCardEvent };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-7",
      "name": "kbd :: { Kbd , caps }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use kbd::{ Kbd, caps };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-8",
      "name": "layer :: { Edge , GlassSurface , Hang , Overlay , OverlaySurface , Placement , priority , surface }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use layer::{ Edge, GlassSurface, Hang, Overlay, OverlaySurface, Placement, priority, surface };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::reexport-9",
      "name": "menu :: { ContextMenu , ContextMenuEvent , ContextMenuPresentation , Menu , MenuEvent , MenuItem }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay",
      "path": "gpui_kit::overlay",
      "source": "crates/gpui-kit/src/overlay/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use menu::{ ContextMenu, ContextMenuEvent, ContextMenuPresentation, Menu, MenuEvent, MenuItem };",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::sheet::ActionSheet",
      "name": "ActionSheet",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "A sheet of caller-owned actions. Choosing a row does not close the sheet or assume success; the caller supplies pending/loading/error and closes it.",
      "documentation": "A sheet of caller-owned actions. Choosing a row does not close the sheet or\nassume success; the caller supplies pending/loading/error and closes it.",
      "signature": "# [doc = \" A sheet of caller-owned actions. Choosing a row does not close the sheet or\"] # [doc = \" assume success; the caller supplies pending/loading/error and closes it.\"] pub struct ActionSheet { sheet : Entity<BottomSheet>, actions : Vec<SheetAction>, focus : Vec<(SharedString, FocusHandle)>, state : SheetActionState, interactive : bool, _subscription : Subscription, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::sheet::ActionSheet::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn close (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ActionSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::ActionSheet::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "ActionSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::ActionSheet::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn open (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ActionSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::ActionSheet::set_actions",
      "name": "set_actions",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_actions (& mut self, actions : Vec<SheetAction>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ActionSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::ActionSheet::set_state",
      "name": "set_state",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_state (& mut self, state : SheetActionState, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ActionSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::ActionSheet::sheet",
      "name": "sheet",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "Access to the same sheet, for title, detents, focus stops and dismissal.",
      "documentation": "Access to the same sheet, for title, detents, focus stops and dismissal.",
      "signature": "pub fn sheet (& self) -> Entity<BottomSheet>",
      "cfg": [],
      "target": "ActionSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::ActionSheetEvent",
      "name": "ActionSheetEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, PartialEq)] pub enum ActionSheetEvent { ActionRequested (SharedString), Sheet (BottomSheetEvent), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet",
      "name": "BottomSheet",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "A retained bottom Drawer with explicit detents and cancellable drag preview.",
      "documentation": "A retained bottom Drawer with explicit detents and cancellable drag preview.",
      "signature": "# [doc = \" A retained bottom Drawer with explicit detents and cancellable drag preview.\"] pub struct BottomSheet { ident : Ident, drawer : Entity<Drawer>, detents : Vec<SheetDetent>, selected : SharedString, preview : Option<f32>, drag_from : Option<f32>, scroll : Option<ScrollHandle>, content : Option<Body>, content_focus : Vec<FocusHandle>, detent_focus : Vec<(SharedString, FocusHandle)>, _subscription : Subscription, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn close (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "BottomSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self, cx : & App) -> bool",
      "cfg": [],
      "target": "BottomSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, window : & mut Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "BottomSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn open (& mut self, window : & mut Window, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "BottomSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet::selected_detent",
      "name": "selected_detent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected_detent (& self) -> & SharedString",
      "cfg": [],
      "target": "BottomSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet::set_content",
      "name": "set_content",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_content (& mut self, content : Option<Body>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "BottomSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet::set_detent",
      "name": "set_detent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "Applies caller selection, also interrupting any visual drag preview.",
      "documentation": "Applies caller selection, also interrupting any visual drag preview.",
      "signature": "pub fn set_detent (& mut self, id : impl Into<SharedString>, cx : & mut Context<Self>) -> bool",
      "cfg": [],
      "target": "BottomSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet::set_detents",
      "name": "set_detents",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "Replaces the detent set atomically. Empty, duplicate, nonfinite or nonpositive heights and a missing selected identity leave it unchanged.",
      "documentation": "Replaces the detent set atomically. Empty, duplicate, nonfinite or\nnonpositive heights and a missing selected identity leave it unchanged.",
      "signature": "pub fn set_detents (& mut self, detents : Vec<SheetDetent>, selected : impl Into<SharedString>, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "BottomSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet::set_dismissable",
      "name": "set_dismissable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_dismissable (& mut self, dismissable : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "BottomSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet::set_focus_stops",
      "name": "set_focus_stops",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_focus_stops (& mut self, stops : impl IntoIterator<Item = FocusHandle>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "BottomSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet::set_scroll_handle",
      "name": "set_scroll_handle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "The actual scrolling body handle. Downward motion at its start shrinks the sheet; upward motion expands a nonmaximum sheet before scrolling. Without a handle only the explicit grip acquires sheet drags.",
      "documentation": "The actual scrolling body handle. Downward motion at its start shrinks\nthe sheet; upward motion expands a nonmaximum sheet before scrolling.\nWithout a handle only the explicit grip acquires sheet drags.",
      "signature": "pub fn set_scroll_handle (& mut self, scroll : Option<ScrollHandle>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "BottomSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet::set_title",
      "name": "set_title",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_title (& mut self, title : impl Into<SharedString>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "BottomSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheet::settle",
      "name": "settle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn settle (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "BottomSheet"
    },
    {
      "id": "gpui_kit::overlay::sheet::BottomSheetEvent",
      "name": "BottomSheetEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "Sheet lifecycle plus a request that never changes caller selection itself.",
      "documentation": "Sheet lifecycle plus a request that never changes caller selection itself.",
      "signature": "# [doc = \" Sheet lifecycle plus a request that never changes caller selection itself.\"] # [derive (Debug, Clone, PartialEq)] pub enum BottomSheetEvent { Opened, Dismissed, Closed, DetentRequested (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::sheet::SheetAction",
      "name": "SheetAction",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "Stable caller identity and presentation for one action; no business action.",
      "documentation": "Stable caller identity and presentation for one action; no business action.",
      "signature": "# [doc = \" Stable caller identity and presentation for one action; no business action.\"] # [derive (Debug, Clone)] pub struct SheetAction { pub id : SharedString, pub label : SharedString, pub destructive : bool, pub disabled : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::sheet::SheetAction::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SheetAction"
    },
    {
      "id": "gpui_kit::overlay::sheet::SheetActionState",
      "name": "SheetActionState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "Caller-owned availability of an action group. Failure never removes rows.",
      "documentation": "Caller-owned availability of an action group. Failure never removes rows.",
      "signature": "# [doc = \" Caller-owned availability of an action group. Failure never removes rows.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum SheetActionState { # [default] Ready, Pending (SharedString), Loading (SharedString), Error (SharedString), Unavailable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::sheet::SheetDetent",
      "name": "SheetDetent",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "A stable detent identity and its desired surface height in logical pixels.",
      "documentation": "A stable detent identity and its desired surface height in logical pixels.",
      "signature": "# [doc = \" A stable detent identity and its desired surface height in logical pixels.\"] # [derive (Debug, Clone, PartialEq)] pub struct SheetDetent { pub id : SharedString, pub height : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::sheet::SheetDetent::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::sheet",
      "path": "gpui_kit::overlay::sheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, height : f32) -> Self",
      "cfg": [],
      "target": "SheetDetent"
    },
    {
      "id": "gpui_kit::overlay::stack::ModalScope",
      "name": "ModalScope",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::stack",
      "path": "gpui_kit::overlay::stack",
      "source": "crates/gpui-kit/src/overlay/stack.rs",
      "summary": "A custom modal's membership in the same per-window stack as [`super::Dialog`] and [`super::Drawer`]. This handle owns no content or input policy.",
      "documentation": "A custom modal's membership in the same per-window stack as [`super::Dialog`]\nand [`super::Drawer`]. This handle owns no content or input policy.\n\nCall `open` before moving focus into the surface and `close` on every removal\npath (after an exit animation, if any). Repeated calls are harmless. The id\nmust be unique among modal surfaces in a window. Gate Escape, scrim and Tab\nhandlers with `is_top`, and pass `depth` to [`super::Overlay::stack`]. Register\ncustom Tab stops with [`super::FocusTrap`], but do not engage/release its\nindependent restoration lifecycle: this stack owns focus restoration.",
      "signature": "# [doc = \" A custom modal's membership in the same per-window stack as [`super::Dialog`]\"] # [doc = \" and [`super::Drawer`]. This handle owns no content or input policy.\"] # [doc = \"\"] # [doc = \" Call `open` before moving focus into the surface and `close` on every removal\"] # [doc = \" path (after an exit animation, if any). Repeated calls are harmless. The id\"] # [doc = \" must be unique among modal surfaces in a window. Gate Escape, scrim and Tab\"] # [doc = \" handlers with `is_top`, and pass `depth` to [`super::Overlay::stack`]. Register\"] # [doc = \" custom Tab stops with [`super::FocusTrap`], but do not engage/release its\"] # [doc = \" independent restoration lifecycle: this stack owns focus restoration.\"] # [derive (Debug, Clone)] pub struct ModalScope { id : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::stack::ModalScope::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::stack",
      "path": "gpui_kit::overlay::stack",
      "source": "crates/gpui-kit/src/overlay/stack.rs",
      "summary": "Removes this surface. Only closing the top restores focus; removing a covered surface splices the return chain without moving focus.",
      "documentation": "Removes this surface. Only closing the top restores focus; removing a\ncovered surface splices the return chain without moving focus.",
      "signature": "pub fn close (& self, window : & mut Window, cx : & mut App)",
      "cfg": [],
      "target": "ModalScope"
    },
    {
      "id": "gpui_kit::overlay::stack::ModalScope::depth",
      "name": "depth",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::stack",
      "path": "gpui_kit::overlay::stack",
      "source": "crates/gpui-kit/src/overlay/stack.rs",
      "summary": "Zero-based paint depth, or zero when this surface is closed.",
      "documentation": "Zero-based paint depth, or zero when this surface is closed.",
      "signature": "pub fn depth (& self, window : & Window, cx : & App) -> usize",
      "cfg": [],
      "target": "ModalScope"
    },
    {
      "id": "gpui_kit::overlay::stack::ModalScope::is_open",
      "name": "is_open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::stack",
      "path": "gpui_kit::overlay::stack",
      "source": "crates/gpui-kit/src/overlay/stack.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_open (& self, window : & Window, cx : & App) -> bool",
      "cfg": [],
      "target": "ModalScope"
    },
    {
      "id": "gpui_kit::overlay::stack::ModalScope::is_top",
      "name": "is_top",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::stack",
      "path": "gpui_kit::overlay::stack",
      "source": "crates/gpui-kit/src/overlay/stack.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_top (& self, window : & Window, cx : & App) -> bool",
      "cfg": [],
      "target": "ModalScope"
    },
    {
      "id": "gpui_kit::overlay::stack::ModalScope::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::stack",
      "path": "gpui_kit::overlay::stack",
      "source": "crates/gpui-kit/src/overlay/stack.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ModalScope"
    },
    {
      "id": "gpui_kit::overlay::stack::ModalScope::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::stack",
      "path": "gpui_kit::overlay::stack",
      "source": "crates/gpui-kit/src/overlay/stack.rs",
      "summary": "Captures the current focus once, before the surface receives focus.",
      "documentation": "Captures the current focus once, before the surface receives focus.",
      "signature": "pub fn open (& self, window : & Window, cx : & mut App)",
      "cfg": [],
      "target": "ModalScope"
    },
    {
      "id": "gpui_kit::overlay::stack::depth",
      "name": "depth",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::stack",
      "path": "gpui_kit::overlay::stack",
      "source": "crates/gpui-kit/src/overlay/stack.rs",
      "summary": "How many modal surfaces sit under this one, which is also how far above the modal layer it paints.",
      "documentation": "How many modal surfaces sit under this one, which is also how far above\nthe modal layer it paints.",
      "signature": "pub fn depth (id : & SharedString, window : & Window, cx : & App) -> usize",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::stack::is_top",
      "name": "is_top",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::stack",
      "path": "gpui_kit::overlay::stack",
      "source": "crates/gpui-kit/src/overlay/stack.rs",
      "summary": "Whether escape and the scrim belong to this surface.",
      "documentation": "Whether escape and the scrim belong to this surface.",
      "signature": "pub fn is_top (id : & SharedString, window : & Window, cx : & App) -> bool",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::stack::pop",
      "name": "pop",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::stack",
      "path": "gpui_kit::overlay::stack",
      "source": "crates/gpui-kit/src/overlay/stack.rs",
      "summary": "Forgets a closed surface and splices its restoration chain. Closing a covered modal never steals focus; its successor inherits the return target so closing that successor cannot restore focus into the closed surface.",
      "documentation": "Forgets a closed surface and splices its restoration chain. Closing a\ncovered modal never steals focus; its successor inherits the return target\nso closing that successor cannot restore focus into the closed surface.",
      "signature": "pub fn pop (id : & SharedString, window : & mut Window, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::stack::push",
      "name": "push",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::stack",
      "path": "gpui_kit::overlay::stack",
      "source": "crates/gpui-kit/src/overlay/stack.rs",
      "summary": "Records that this surface is now the top of the modal stack.",
      "documentation": "Records that this surface is now the top of the modal stack.",
      "signature": "pub fn push (id : SharedString, window : & Window, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::tail::TailSide",
      "name": "TailSide",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::tail",
      "path": "gpui_kit::overlay::tail",
      "source": "crates/gpui-kit/src/overlay/tail.rs",
      "summary": "Which way the point faces, which is the side of the surface it hangs off.",
      "documentation": "Which way the point faces, which is the side of the surface it hangs off.",
      "signature": "# [doc = \" Which way the point faces, which is the side of the surface it hangs off.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum TailSide { # [doc = \" Above the surface, pointing up at the trigger over it.\"] Up, # [doc = \" Below the surface, pointing down at the trigger under it.\"] Down, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::tail::inset",
      "name": "inset",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::tail",
      "path": "gpui_kit::overlay::tail",
      "source": "crates/gpui-kit/src/overlay/tail.rs",
      "summary": "How far in from the surface's leading edge the tail sits.",
      "documentation": "How far in from the surface's leading edge the tail sits.\n\nFar enough in that the point is not on the corner radius, and no further,\nso the tail still reads as coming from the edge the trigger is on.",
      "signature": "pub fn inset (theme : & Theme) -> f32",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::tail::tail",
      "name": "tail",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::tail",
      "path": "gpui_kit::overlay::tail",
      "source": "crates/gpui-kit/src/overlay/tail.rs",
      "summary": "A tail in `color`, sized from the spacing scale so it stays in proportion to the surface's own padding at every density.",
      "documentation": "A tail in `color`, sized from the spacing scale so it stays in proportion\nto the surface's own padding at every density.",
      "signature": "pub fn tail (theme : & Theme, side : TailSide, color : Hsla) -> impl IntoElement",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::toast::Toast",
      "name": "Toast",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "One notification: what happened, how bad it is, and at most one thing to do about it.",
      "documentation": "One notification: what happened, how bad it is, and at most one thing to do\nabout it.",
      "signature": "# [doc = \" One notification: what happened, how bad it is, and at most one thing to do\"] # [doc = \" about it.\"] pub struct Toast { ident : Ident, message : SharedString, detail : Option<SharedString>, tone : Tone, action : Option<Action>, dismissable : bool, lifetime : Lifetime, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::toast::Toast::action",
      "name": "action",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "The one thing that can be done about this. A later call replaces an earlier one, because a notification with two answers is a dialog.",
      "documentation": "The one thing that can be done about this. A later call replaces an\nearlier one, because a notification with two answers is a dialog.",
      "signature": "pub fn action (mut self, label : impl Into<SharedString>, handler : impl Fn (& mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "Toast"
    },
    {
      "id": "gpui_kit::overlay::toast::Toast::detail",
      "name": "detail",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "A second line, for the part of the report that does not fit in one.",
      "documentation": "A second line, for the part of the report that does not fit in one.",
      "signature": "pub fn detail (mut self, detail : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Toast"
    },
    {
      "id": "gpui_kit::overlay::toast::Toast::dismissable",
      "name": "dismissable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Whether the toast carries a dismiss control. A toast that cannot be dismissed renders no such control and installs no handler for it.",
      "documentation": "Whether the toast carries a dismiss control. A toast that cannot be\ndismissed renders no such control and installs no handler for it.",
      "signature": "pub fn dismissable (mut self, dismissable : bool) -> Self",
      "cfg": [],
      "target": "Toast"
    },
    {
      "id": "gpui_kit::overlay::toast::Toast::ident",
      "name": "ident",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ident (& self) -> & Ident",
      "cfg": [],
      "target": "Toast"
    },
    {
      "id": "gpui_kit::overlay::toast::Toast::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, message : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Toast"
    },
    {
      "id": "gpui_kit::overlay::toast::Toast::persistent",
      "name": "persistent",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Stays until it is dismissed.",
      "documentation": "Stays until it is dismissed.",
      "signature": "pub fn persistent (mut self) -> Self",
      "cfg": [],
      "target": "Toast"
    },
    {
      "id": "gpui_kit::overlay::toast::Toast::timeout",
      "name": "timeout",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Leaves on its own after `timeout`, whatever the tone says.",
      "documentation": "Leaves on its own after `timeout`, whatever the tone says.",
      "signature": "pub fn timeout (mut self, timeout : Duration) -> Self",
      "cfg": [],
      "target": "Toast"
    },
    {
      "id": "gpui_kit::overlay::toast::Toast::tone",
      "name": "tone",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tone (mut self, tone : Tone) -> Self",
      "cfg": [],
      "target": "Toast"
    },
    {
      "id": "gpui_kit::overlay::toast::ToastCorner",
      "name": "ToastCorner",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Which corner the stack grows from.",
      "documentation": "Which corner the stack grows from.",
      "signature": "# [doc = \" Which corner the stack grows from.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum ToastCorner { TopLeft, TopRight, BottomLeft, # [default] BottomRight, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer",
      "name": "ToastLayer",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "The stack of notifications for one window.",
      "documentation": "The stack of notifications for one window.\n\nThe host mounts one of these where it wants toasts drawn; mounting is also\nwhat makes [`push`] deliverable.",
      "signature": "# [doc = \" The stack of notifications for one window.\"] # [doc = \"\"] # [doc = \" The host mounts one of these where it wants toasts drawn; mounting is also\"] # [doc = \" what makes [`push`] deliverable.\"] pub struct ToastLayer { corner : ToastCorner, capacity : usize, reserved_edges : Edges<Pixels>, entries : Vec<Entry>, # [doc = \" When the last frame that advanced a timer happened.\"] last_tick : Option<Instant>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer::capacity",
      "name": "capacity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "How many toasts stand at once. A capacity below one is raised to one.",
      "documentation": "How many toasts stand at once. A capacity below one is raised to one.",
      "signature": "pub fn capacity (mut self, capacity : usize) -> Self",
      "cfg": [],
      "target": "ToastLayer"
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clear (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ToastLayer"
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer::corner",
      "name": "corner",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn corner (mut self, corner : ToastCorner) -> Self",
      "cfg": [],
      "target": "ToastLayer"
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer::dismiss",
      "name": "dismiss",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Starts the exit of one toast. The element stays in the tree until the exit finishes.",
      "documentation": "Starts the exit of one toast. The element stays in the tree until the\nexit finishes.",
      "signature": "pub fn dismiss (& mut self, ident : & str, cx : & mut Context<Self>) -> bool",
      "cfg": [],
      "target": "ToastLayer"
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "ToastLayer"
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "ToastLayer"
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Mounts a layer as the notification destination for `window`.",
      "documentation": "Mounts a layer as the notification destination for `window`.",
      "signature": "pub fn new (window : & Window, cx : & mut Context<Self>) -> Self",
      "cfg": [],
      "target": "ToastLayer"
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer::phase",
      "name": "phase",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "The lifecycle phase of one toast, or `None` when it is not in the tree.",
      "documentation": "The lifecycle phase of one toast, or `None` when it is not in the tree.",
      "signature": "pub fn phase (& self, ident : & str) -> Option<Phase>",
      "cfg": [],
      "target": "ToastLayer"
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer::push",
      "name": "push",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Adds a toast, or refreshes the one that already carries this identity.",
      "documentation": "Adds a toast, or refreshes the one that already carries this identity.",
      "signature": "pub fn push (& mut self, toast : Toast, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ToastLayer"
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer::reserved_edges",
      "name": "reserved_edges",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Window edges already occupied by host chrome, in addition to the layer's own breathing room.",
      "documentation": "Window edges already occupied by host chrome, in addition to the\nlayer's own breathing room.",
      "signature": "pub fn reserved_edges (mut self, edges : impl Into<Edges<Pixels>>) -> Self",
      "cfg": [],
      "target": "ToastLayer"
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer::set_capacity",
      "name": "set_capacity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Shrinking capacity starts the usual exit for excess evictable toasts; it does not reset the timers of the ones that remain.",
      "documentation": "Shrinking capacity starts the usual exit for excess evictable toasts;\nit does not reset the timers of the ones that remain.",
      "signature": "pub fn set_capacity (& mut self, capacity : usize, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ToastLayer"
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer::set_corner",
      "name": "set_corner",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_corner (& mut self, corner : ToastCorner, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ToastLayer"
    },
    {
      "id": "gpui_kit::overlay::toast::ToastLayer::set_reserved_edges",
      "name": "set_reserved_edges",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_reserved_edges (& mut self, edges : impl Into<Edges<Pixels>>, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "ToastLayer"
    },
    {
      "id": "gpui_kit::overlay::toast::clear",
      "name": "clear",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Starts the exit of every toast on screen.",
      "documentation": "Starts the exit of every toast on screen.",
      "signature": "pub fn clear (window : & Window, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::toast::dismiss",
      "name": "dismiss",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Starts the exit of one toast, reporting whether it was on screen.",
      "documentation": "Starts the exit of one toast, reporting whether it was on screen.",
      "signature": "pub fn dismiss (window : & Window, cx : & mut App, ident : & str) -> bool",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::toast::install",
      "name": "install",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Prepares the process for toasts. Idempotent, and called by [`crate::install`].",
      "documentation": "Prepares the process for toasts. Idempotent, and called by\n[`crate::install`].",
      "signature": "pub fn install (_cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::toast::is_mounted",
      "name": "is_mounted",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Whether a layer is mounted and can therefore show a notification.",
      "documentation": "Whether a layer is mounted and can therefore show a notification.",
      "signature": "pub fn is_mounted (window : & Window, cx : & App) -> bool",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::toast::push",
      "name": "push",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::toast",
      "path": "gpui_kit::overlay::toast",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "Shows a toast, reporting whether it was delivered.",
      "documentation": "Shows a toast, reporting whether it was delivered.\n\nFalse means no layer is mounted. The library will not pick a window it was\nnot given, so the caller learns the notification went nowhere rather than\nbelieving something was shown.",
      "signature": "pub fn push (window : & Window, cx : & mut App, toast : Toast) -> bool",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::tooltip::Tooltip",
      "name": "Tooltip",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::tooltip",
      "path": "gpui_kit::overlay::tooltip",
      "source": "crates/gpui-kit/src/overlay/tooltip.rs",
      "summary": "A themed help surface.",
      "documentation": "A themed help surface.",
      "signature": "# [doc = \" A themed help surface.\"] # [derive (Debug, Clone, IntoElement)] pub struct Tooltip { ident : Ident, text : SharedString, describes : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::overlay::tooltip::Tooltip::describes",
      "name": "describes",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::tooltip",
      "path": "gpui_kit::overlay::tooltip",
      "source": "crates/gpui-kit/src/overlay/tooltip.rs",
      "summary": "Associates this help with its role-bearing control in deterministic snapshots and GPUI's native accessibility tree.",
      "documentation": "Associates this help with its role-bearing control in deterministic\nsnapshots and GPUI's native accessibility tree.",
      "signature": "pub fn describes (mut self, control : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Tooltip"
    },
    {
      "id": "gpui_kit::overlay::tooltip::Tooltip::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::tooltip",
      "path": "gpui_kit::overlay::tooltip",
      "source": "crates/gpui-kit/src/overlay/tooltip.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "Tooltip"
    },
    {
      "id": "gpui_kit::overlay::tooltip::Tooltip::view",
      "name": "view",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::tooltip",
      "path": "gpui_kit::overlay::tooltip",
      "source": "crates/gpui-kit/src/overlay/tooltip.rs",
      "summary": "Wraps the surface in the view GPUI's hover machinery renders.",
      "documentation": "Wraps the surface in the view GPUI's hover machinery renders.",
      "signature": "pub fn view (self, cx : & mut App) -> AnyView",
      "cfg": [],
      "target": "Tooltip"
    },
    {
      "id": "gpui_kit::overlay::tooltip::Tooltipped",
      "name": "Tooltipped",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "overlay::tooltip",
      "path": "gpui_kit::overlay::tooltip",
      "source": "crates/gpui-kit/src/overlay/tooltip.rs",
      "summary": "Attaches hover help to a control.",
      "documentation": "Attaches hover help to a control.\n\nHover tracking needs an element identity, so the element must already carry\nan id.",
      "signature": "# [doc = \" Attaches hover help to a control.\"] # [doc = \"\"] # [doc = \" Hover tracking needs an element identity, so the element must already carry\"] # [doc = \" an id.\"] pub trait Tooltipped : gpui::StatefulInteractiveElement + Sized { # [doc = \" Shows `text` after GPUI's hover delay, published as help for the\"] # [doc = \" control identified by `control` in deterministic semantic snapshots.\"] fn tip (self, control : impl Into<Ident>, text : impl Into<SharedString>) -> Self { let control = control . into (); let text = text . into (); self . tooltip (move | _window, cx | { Tooltip::new (control . child (\"tooltip\"), text . clone ()) . describes (control . semantic_id ()) . view (cx) }) } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::reactive::form::Form",
      "name": "Form",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "A set of named text fields and the rules that judge them.",
      "documentation": "A set of named text fields and the rules that judge them.\n\nThe caller builds one, keeps it, and hands each field's signal to whatever\ncontrol edits it. The form never renders and never decides what a failed\nsubmission looks like: it records a [`ValidationState`] per field and the\ncaller draws it.\n\n```no_run\n# use gpui::App;\n# use gpui_kit::reactive::{Form, validators};\n# fn example(cx: &mut App) {\nlet form = Form::new()\n.field(cx, \"email\", \"\")\n.field(cx, \"password\", \"\")\n.field(cx, \"confirm\", \"\")\n.rule(\"email\", validators::required())\n.rule(\"email\", validators::email())\n.rule(\"password\", validators::min_len(12))\n.rule(\"confirm\", validators::equals_field(\"password\"));\n\nif let Some(values) = form.submit(cx) {\nlet _ = values;\n}\n# }\n```",
      "signature": "# [doc = \" A set of named text fields and the rules that judge them.\"] # [doc = \"\"] # [doc = \" The caller builds one, keeps it, and hands each field's signal to whatever\"] # [doc = \" control edits it. The form never renders and never decides what a failed\"] # [doc = \" submission looks like: it records a [`ValidationState`] per field and the\"] # [doc = \" caller draws it.\"] # [doc = \"\"] # [doc = \" ```no_run\"] # [doc = \" # use gpui::App;\"] # [doc = \" # use gpui_kit::reactive::{Form, validators};\"] # [doc = \" # fn example(cx: &mut App) {\"] # [doc = \" let form = Form::new()\"] # [doc = \" .field(cx, \\\"email\\\", \\\"\\\")\"] # [doc = \" .field(cx, \\\"password\\\", \\\"\\\")\"] # [doc = \" .field(cx, \\\"confirm\\\", \\\"\\\")\"] # [doc = \" .rule(\\\"email\\\", validators::required())\"] # [doc = \" .rule(\\\"email\\\", validators::email())\"] # [doc = \" .rule(\\\"password\\\", validators::min_len(12))\"] # [doc = \" .rule(\\\"confirm\\\", validators::equals_field(\\\"password\\\"));\"] # [doc = \"\"] # [doc = \" if let Some(values) = form.submit(cx) {\"] # [doc = \" let _ = values;\"] # [doc = \" }\"] # [doc = \" # }\"] # [doc = \" ```\"] # [derive (Clone, Default)] pub struct Form { inner : Rc<RefCell<Fields>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::reactive::form::Form::field",
      "name": "field",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "Adds a field with its starting text.",
      "documentation": "Adds a field with its starting text.\n\nAdding a name that is already there replaces nothing: the existing\nfield and everything already bound to it stay as they are.",
      "signature": "pub fn field (self, cx : & mut App, name : impl Into<SharedString>, initial : impl Into<String>,) -> Self",
      "cfg": [],
      "target": "Form"
    },
    {
      "id": "gpui_kit::reactive::form::Form::names",
      "name": "names",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "Every field name, in the order the fields were added.",
      "documentation": "Every field name, in the order the fields were added.",
      "signature": "pub fn names (& self) -> Vec<SharedString>",
      "cfg": [],
      "target": "Form"
    },
    {
      "id": "gpui_kit::reactive::form::Form::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "Form"
    },
    {
      "id": "gpui_kit::reactive::form::Form::rule",
      "name": "rule",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "Attaches one rule to one field. A field may carry several, and they are run in the order they were attached.",
      "documentation": "Attaches one rule to one field. A field may carry several, and they\nare run in the order they were attached.\n\nA rule named against a field that does not exist is dropped, because\nthere is nothing for it to judge.",
      "signature": "pub fn rule (self, name : & str, rule : impl Fn (& str, & FormValues, & App) -> Result<(), SharedString> + 'static,) -> Self",
      "cfg": [],
      "target": "Form"
    },
    {
      "id": "gpui_kit::reactive::form::Form::set_validation",
      "name": "set_validation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "Records a state the host decided, such as [`ValidationState::Validating`] while a check is in flight.",
      "documentation": "Records a state the host decided, such as\n[`ValidationState::Validating`] while a check is in flight.\n\nA field left in `Validating` is never overwritten by a rule: the host\nowns it until the host says otherwise.",
      "signature": "pub fn set_validation (& self, cx : & mut App, name : & str, state : ValidationState)",
      "cfg": [],
      "target": "Form"
    },
    {
      "id": "gpui_kit::reactive::form::Form::signal",
      "name": "signal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "The signal holding one field's text, which is what a control binds to.",
      "documentation": "The signal holding one field's text, which is what a control binds to.",
      "signature": "pub fn signal (& self, name : & str) -> Option<Signal<String>>",
      "cfg": [],
      "target": "Form"
    },
    {
      "id": "gpui_kit::reactive::form::Form::submit",
      "name": "submit",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "Validates, and answers with the values only when every field passed.",
      "documentation": "Validates, and answers with the values only when every field passed.\n\nAfter a submission, every judged field is re-validated as it is\nedited, so a reason a reader has fixed disappears without another\nsubmission.",
      "signature": "pub fn submit (& self, cx : & mut App) -> Option<BTreeMap<String, String>>",
      "cfg": [],
      "target": "Form"
    },
    {
      "id": "gpui_kit::reactive::form::Form::validate",
      "name": "validate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "Runs every rule and records what each field is now known to be.",
      "documentation": "Runs every rule and records what each field is now known to be.\n\nReturns whether every field came out [`ValidationState::Valid`]. A\nfield the host left `Validating` is not valid and is not invalid: it\nis unfinished, so the answer is `false` and nothing about it changes.",
      "signature": "pub fn validate (& self, cx : & mut App) -> bool",
      "cfg": [],
      "target": "Form"
    },
    {
      "id": "gpui_kit::reactive::form::Form::validation",
      "name": "validation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "What is currently known about one field. A field nobody has judged, and a name that is not a field, are both [`ValidationState::Pending`].",
      "documentation": "What is currently known about one field. A field nobody has judged,\nand a name that is not a field, are both\n[`ValidationState::Pending`].",
      "signature": "pub fn validation (& self, name : & str, cx : & App) -> ValidationState",
      "cfg": [],
      "target": "Form"
    },
    {
      "id": "gpui_kit::reactive::form::Form::validation_signal",
      "name": "validation_signal",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "The signal holding one field's validation state, for a view that wants to watch it directly.",
      "documentation": "The signal holding one field's validation state, for a view that wants\nto watch it directly.",
      "signature": "pub fn validation_signal (& self, name : & str) -> Option<Signal<ValidationState>>",
      "cfg": [],
      "target": "Form"
    },
    {
      "id": "gpui_kit::reactive::form::Form::values",
      "name": "values",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn values (& self, cx : & App) -> FormValues",
      "cfg": [],
      "target": "Form"
    },
    {
      "id": "gpui_kit::reactive::form::Form::watch",
      "name": "watch",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "Re-renders the watching view whenever any field's text or validation state changes.",
      "documentation": "Re-renders the watching view whenever any field's text or validation\nstate changes.\n\nThe returned subscriptions are the watch: a view keeps them for as\nlong as it draws the form.",
      "signature": "pub fn watch<V : 'static> (& self, cx : & mut Context<V>) -> Vec<Subscription>",
      "cfg": [],
      "target": "Form"
    },
    {
      "id": "gpui_kit::reactive::form::FormValues",
      "name": "FormValues",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "Every field's current text, by name.",
      "documentation": "Every field's current text, by name.",
      "signature": "# [doc = \" Every field's current text, by name.\"] # [derive (Clone, Default, PartialEq, Eq)] pub struct FormValues { values : BTreeMap<SharedString, String>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::reactive::form::FormValues::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (& self, name : & str) -> Option<& str>",
      "cfg": [],
      "target": "FormValues"
    },
    {
      "id": "gpui_kit::reactive::form::FormValues::into_map",
      "name": "into_map",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "The same values, in the plain map a host submits.",
      "documentation": "The same values, in the plain map a host submits.",
      "signature": "pub fn into_map (self) -> BTreeMap<String, String>",
      "cfg": [],
      "target": "FormValues"
    },
    {
      "id": "gpui_kit::reactive::form::FormValues::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "FormValues"
    },
    {
      "id": "gpui_kit::reactive::form::FormValues::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "FormValues"
    },
    {
      "id": "gpui_kit::reactive::form::FormValues::names",
      "name": "names",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn names (& self) -> impl Iterator<Item = & SharedString>",
      "cfg": [],
      "target": "FormValues"
    },
    {
      "id": "gpui_kit::reactive::form::FormValues::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "The text of a field, and the empty string for one that is not there.",
      "documentation": "The text of a field, and the empty string for one that is not there.",
      "signature": "pub fn value (& self, name : & str) -> & str",
      "cfg": [],
      "target": "FormValues"
    },
    {
      "id": "gpui_kit::reactive::form::Rule",
      "name": "Rule",
      "kind": "type",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::form",
      "path": "gpui_kit::reactive::form",
      "source": "crates/gpui-kit/src/reactive/form.rs",
      "summary": "What a rule is given and what it may answer.",
      "documentation": "What a rule is given and what it may answer.\n\nThe field's own text arrives first, the whole form second, so a rule that\nonly looks at one field ignores the second argument and a rule that\ncompares two fields does not need a second mechanism. `&App` is there\nbecause the reason a rule gives is text a reader reads, and every word\nthis library shows comes from the installed\n[`Strings`](crate::strings::Strings) catalogue.",
      "signature": "# [doc = \" What a rule is given and what it may answer.\"] # [doc = \"\"] # [doc = \" The field's own text arrives first, the whole form second, so a rule that\"] # [doc = \" only looks at one field ignores the second argument and a rule that\"] # [doc = \" compares two fields does not need a second mechanism. `&App` is there\"] # [doc = \" because the reason a rule gives is text a reader reads, and every word\"] # [doc = \" this library shows comes from the installed\"] # [doc = \" [`Strings`](crate::strings::Strings) catalogue.\"] pub type Rule = Rc<dyn Fn (& str, & FormValues, & App) -> Result<(), SharedString>>;",
      "cfg": []
    },
    {
      "id": "gpui_kit::reactive::history::History",
      "name": "History",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::history",
      "path": "gpui_kit::reactive::history",
      "source": "crates/gpui-kit/src/reactive/history.rs",
      "summary": "A bounded stack of caller-owned reversible records.",
      "documentation": "A bounded stack of caller-owned reversible records.",
      "signature": "# [doc = \" A bounded stack of caller-owned reversible records.\"] # [derive (Clone, Debug)] pub struct History<T> { capacity : usize, undo : VecDeque<T>, redo : VecDeque<T>, ignoring : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::reactive::history::History::can_redo",
      "name": "can_redo",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::history",
      "path": "gpui_kit::reactive::history",
      "source": "crates/gpui-kit/src/reactive/history.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn can_redo (& self) -> bool",
      "cfg": [],
      "target": "History<T>"
    },
    {
      "id": "gpui_kit::reactive::history::History::can_undo",
      "name": "can_undo",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::history",
      "path": "gpui_kit::reactive::history",
      "source": "crates/gpui-kit/src/reactive/history.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn can_undo (& self) -> bool",
      "cfg": [],
      "target": "History<T>"
    },
    {
      "id": "gpui_kit::reactive::history::History::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::history",
      "path": "gpui_kit::reactive::history",
      "source": "crates/gpui-kit/src/reactive/history.rs",
      "summary": "Forgets both branches without changing whether recording is ignored.",
      "documentation": "Forgets both branches without changing whether recording is ignored.",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "History<T>"
    },
    {
      "id": "gpui_kit::reactive::history::History::is_ignoring",
      "name": "is_ignoring",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::history",
      "path": "gpui_kit::reactive::history",
      "source": "crates/gpui-kit/src/reactive/history.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_ignoring (& self) -> bool",
      "cfg": [],
      "target": "History<T>"
    },
    {
      "id": "gpui_kit::reactive::history::History::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::history",
      "path": "gpui_kit::reactive::history",
      "source": "crates/gpui-kit/src/reactive/history.rs",
      "summary": "Creates an empty history holding at most `capacity` records per stack.",
      "documentation": "Creates an empty history holding at most `capacity` records per stack.",
      "signature": "pub fn new (capacity : usize) -> Self",
      "cfg": [],
      "target": "History<T>"
    },
    {
      "id": "gpui_kit::reactive::history::History::push",
      "name": "push",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::history",
      "path": "gpui_kit::reactive::history",
      "source": "crates/gpui-kit/src/reactive/history.rs",
      "summary": "Records one reversible change.",
      "documentation": "Records one reversible change.\n\nA recorded change starts a new branch and therefore clears redo. While\nignoring, the record is refused and the existing branch is untouched.\nReturns whether the record was kept.",
      "signature": "pub fn push (& mut self, record : T) -> bool",
      "cfg": [],
      "target": "History<T>"
    },
    {
      "id": "gpui_kit::reactive::history::History::redo",
      "name": "redo",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::history",
      "path": "gpui_kit::reactive::history",
      "source": "crates/gpui-kit/src/reactive/history.rs",
      "summary": "Moves the newest redo record back to undo and returns it for the caller to reapply.",
      "documentation": "Moves the newest redo record back to undo and returns it for the caller\nto reapply.",
      "signature": "pub fn redo (& mut self) -> Option<T> where T : Clone,",
      "cfg": [],
      "target": "History<T>"
    },
    {
      "id": "gpui_kit::reactive::history::History::redo_len",
      "name": "redo_len",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::history",
      "path": "gpui_kit::reactive::history",
      "source": "crates/gpui-kit/src/reactive/history.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn redo_len (& self) -> usize",
      "cfg": [],
      "target": "History<T>"
    },
    {
      "id": "gpui_kit::reactive::history::History::set_ignoring",
      "name": "set_ignoring",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::history",
      "path": "gpui_kit::reactive::history",
      "source": "crates/gpui-kit/src/reactive/history.rs",
      "summary": "Temporarily refuses new records. Undo and redo remain available.",
      "documentation": "Temporarily refuses new records. Undo and redo remain available.",
      "signature": "pub fn set_ignoring (& mut self, ignoring : bool)",
      "cfg": [],
      "target": "History<T>"
    },
    {
      "id": "gpui_kit::reactive::history::History::undo",
      "name": "undo",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::history",
      "path": "gpui_kit::reactive::history",
      "source": "crates/gpui-kit/src/reactive/history.rs",
      "summary": "Moves the newest undo record to redo and returns it for the caller to apply in reverse.",
      "documentation": "Moves the newest undo record to redo and returns it for the caller to\napply in reverse.",
      "signature": "pub fn undo (& mut self) -> Option<T> where T : Clone,",
      "cfg": [],
      "target": "History<T>"
    },
    {
      "id": "gpui_kit::reactive::history::History::undo_len",
      "name": "undo_len",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::history",
      "path": "gpui_kit::reactive::history",
      "source": "crates/gpui-kit/src/reactive/history.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn undo_len (& self) -> usize",
      "cfg": [],
      "target": "History<T>"
    },
    {
      "id": "gpui_kit::reactive::reexport-1",
      "name": "form :: { Form , FormValues , Rule , validators }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive",
      "path": "gpui_kit::reactive",
      "source": "crates/gpui-kit/src/reactive/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use form::{ Form, FormValues, Rule, validators };",
      "cfg": []
    },
    {
      "id": "gpui_kit::reactive::reexport-2",
      "name": "history :: History",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive",
      "path": "gpui_kit::reactive",
      "source": "crates/gpui-kit/src/reactive/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use history::History;",
      "cfg": []
    },
    {
      "id": "gpui_kit::reactive::reexport-3",
      "name": "signal :: { Binding , Signal }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive",
      "path": "gpui_kit::reactive",
      "source": "crates/gpui-kit/src/reactive/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use signal::{ Binding, Signal };",
      "cfg": []
    },
    {
      "id": "gpui_kit::reactive::signal::Binding",
      "name": "Binding",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "A read and a write of one value, without saying where the value lives.",
      "documentation": "A read and a write of one value, without saying where the value lives.\n\nA binding is a pipe, not storage. It is what a control is handed so it can\ndraw the caller's current value and report a new one back to the same\nplace, and it is deliberately the only thing a control is given: a control\nthat held the [`Signal`] could keep the value, and then the value would be\nthe control's.",
      "signature": "# [doc = \" A read and a write of one value, without saying where the value lives.\"] # [doc = \"\"] # [doc = \" A binding is a pipe, not storage. It is what a control is handed so it can\"] # [doc = \" draw the caller's current value and report a new one back to the same\"] # [doc = \" place, and it is deliberately the only thing a control is given: a control\"] # [doc = \" that held the [`Signal`] could keep the value, and then the value would be\"] # [doc = \" the control's.\"] pub struct Binding<T : 'static> { get : ReadValue<T>, set : WriteValue<T>, # [doc = \" Set while this binding's own write is running. A control that reports\"] # [doc = \" the value it was just given would otherwise write it back through the\"] # [doc = \" same pipe it arrived on.\"] writing : Rc<Cell<bool>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::reactive::signal::Binding::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (& self, cx : & App) -> T",
      "cfg": [],
      "target": "Binding<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Binding::map",
      "name": "map",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "The same value in another type, converted in both directions.",
      "documentation": "The same value in another type, converted in both directions.\n\n`from` is what the control should see; `into` writes what the control\nreported back onto the value the caller owns.",
      "signature": "pub fn map<U : 'static> (& self, from : impl Fn (& T) -> U + 'static, into : impl Fn (& mut T, U) + 'static,) -> Binding<U>",
      "cfg": [],
      "target": "Binding<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Binding::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (get : impl Fn (& App) -> T + 'static, set : impl Fn (T, & mut App) + 'static) -> Self",
      "cfg": [],
      "target": "Binding<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Binding::set",
      "name": "set",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set (& self, cx : & mut App, value : T)",
      "cfg": [],
      "target": "Binding<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Signal",
      "name": "Signal",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "One caller-owned value that anything watching it is told about.",
      "documentation": "One caller-owned value that anything watching it is told about.\n\nA signal is an [`Entity`] with a narrower contract: it holds a value, it\nnotifies when the value changes, and it does not render. Components never\ncreate one — the caller does, keeps it, and passes a [`Binding`] or the\nsignal itself to whichever control should read and write it. That is what\nkeeps a bound control a reader of caller data rather than the owner of it.",
      "signature": "# [doc = \" One caller-owned value that anything watching it is told about.\"] # [doc = \"\"] # [doc = \" A signal is an [`Entity`] with a narrower contract: it holds a value, it\"] # [doc = \" notifies when the value changes, and it does not render. Components never\"] # [doc = \" create one — the caller does, keeps it, and passes a [`Binding`] or the\"] # [doc = \" signal itself to whichever control should read and write it. That is what\"] # [doc = \" keeps a bound control a reader of caller data rather than the owner of it.\"] pub struct Signal<T : 'static> { entity : Entity<T>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::reactive::signal::Signal::binding",
      "name": "binding",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "The whole value, as something a control can read and write.",
      "documentation": "The whole value, as something a control can read and write.",
      "signature": "pub fn binding (& self) -> Binding<T>",
      "cfg": [],
      "target": "Signal<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Signal::entity",
      "name": "entity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "The entity underneath, for a caller that needs GPUI's own machinery.",
      "documentation": "The entity underneath, for a caller that needs GPUI's own machinery.",
      "signature": "pub fn entity (& self) -> & Entity<T>",
      "cfg": [],
      "target": "Signal<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Signal::from_entity",
      "name": "from_entity",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "Adopts an entity the caller already has.",
      "documentation": "Adopts an entity the caller already has.",
      "signature": "pub fn from_entity (entity : Entity<T>) -> Self",
      "cfg": [],
      "target": "Signal<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Signal::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (& self, cx : & App) -> T where T : Clone,",
      "cfg": [],
      "target": "Signal<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Signal::lens",
      "name": "lens",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "One field of the value, as something a control can read and write.",
      "documentation": "One field of the value, as something a control can read and write.\n\nThe write path is a read-modify-write of the whole value, so it moves\nthe projected field and leaves every other field exactly as it was.",
      "signature": "pub fn lens<F> (& self, get : impl Fn (& T) -> & F + 'static, set : impl Fn (& mut T, F) + 'static,) -> Binding<F> where F : Clone + PartialEq + 'static,",
      "cfg": [],
      "target": "Signal<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Signal::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (cx : & mut App, value : T) -> Self",
      "cfg": [],
      "target": "Signal<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Signal::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn read<'a> (& 'a self, cx : & 'a App) -> & 'a T",
      "cfg": [],
      "target": "Signal<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Signal::replace",
      "name": "replace",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "Replaces the value and tells every watcher, whether or not it moved.",
      "documentation": "Replaces the value and tells every watcher, whether or not it moved.",
      "signature": "pub fn replace (& self, cx : & mut App, value : T)",
      "cfg": [],
      "target": "Signal<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Signal::set",
      "name": "set",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "Replaces the value, and says nothing when it did not move.",
      "documentation": "Replaces the value, and says nothing when it did not move.\n\nThis is the whole echo guard: a control that reports a change writes\nthe value it already has back into the signal, and a signal that\nnotified for it would push that same value back into the control.",
      "signature": "pub fn set (& self, cx : & mut App, value : T) where T : PartialEq,",
      "cfg": [],
      "target": "Signal<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Signal::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "Changes the value and tells every watcher, once.",
      "documentation": "Changes the value and tells every watcher, once.",
      "signature": "pub fn update (& self, cx : & mut App, change : impl FnOnce (& mut T))",
      "cfg": [],
      "target": "Signal<T>"
    },
    {
      "id": "gpui_kit::reactive::signal::Signal::watch",
      "name": "watch",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "reactive::signal",
      "path": "gpui_kit::reactive::signal",
      "source": "crates/gpui-kit/src/reactive/signal.rs",
      "summary": "Re-renders the watching view whenever this value changes.",
      "documentation": "Re-renders the watching view whenever this value changes.\n\nThe returned subscription is the watch: dropping it stops it, so a\nview keeps it for as long as it draws the value.",
      "signature": "pub fn watch<V : 'static> (& self, cx : & mut Context<V>) -> Subscription",
      "cfg": [],
      "target": "Signal<T>"
    },
    {
      "id": "gpui_kit::reexport-1",
      "name": "gpui_kit_assets as assets",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "",
      "path": "gpui_kit",
      "source": "crates/gpui-kit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui_kit_assets as assets;",
      "cfg": []
    },
    {
      "id": "gpui_kit::reexport-2",
      "name": "gpui_kit_semantics as semantics",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "",
      "path": "gpui_kit",
      "source": "crates/gpui-kit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui_kit_semantics as semantics;",
      "cfg": []
    },
    {
      "id": "gpui_kit::reexport-3",
      "name": "gpui_kit_theme as theme",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "",
      "path": "gpui_kit",
      "source": "crates/gpui-kit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui_kit_theme as theme;",
      "cfg": []
    },
    {
      "id": "gpui_kit::reexport-4",
      "name": "gpui_kit_tokens as tokens",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "",
      "path": "gpui_kit",
      "source": "crates/gpui-kit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui_kit_tokens as tokens;",
      "cfg": []
    },
    {
      "id": "gpui_kit::scenes::Scene",
      "name": "Scene",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "scenes",
      "path": "gpui_kit::scenes",
      "source": "crates/gpui-kit/src/scenes/mod.rs",
      "summary": "One canonical rendering, addressed by name.",
      "documentation": "One canonical rendering, addressed by name.",
      "signature": "# [doc = \" One canonical rendering, addressed by name.\"] pub struct Scene { pub name : & 'static str, pub build : fn (& mut Window, & mut App) -> AnyElement, # [doc = \" What this rendering is for, declared rather than inferred.\"] # [doc = \"\"] # [doc = \" It used to be read back out of the source by following every helper a\"] # [doc = \" scene called, which answered a different question — *what types does\"] # [doc = \" this code path touch* — and answered it as an upper bound. Three\"] # [doc = \" unrelated scenes that shared one fixture helper reported the same seven\"] # [doc = \" components, so \\\"which scene shows me\\\" was a claim no reader could rely\"] # [doc = \" on. Declaring it makes it exact, and `xtask api check` holds the\"] # [doc = \" declaration to what the source can actually reach.\"] pub shows : Shows, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::scenes::Shows",
      "name": "Shows",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "scenes",
      "path": "gpui_kit::scenes",
      "source": "crates/gpui-kit/src/scenes/mod.rs",
      "summary": "What a rendering exists to show.",
      "documentation": "What a rendering exists to show.\n\nThe distinction is the difference between reviewing a component and\nrecognising it. A component that has only ever been seen inside a shell has\nbeen recognised; nobody has looked at its states, and the catalog should\nnot claim otherwise, which is why only [`Shows::Subjects`] counts as\ncoverage.",
      "signature": "# [doc = \" What a rendering exists to show.\"] # [doc = \"\"] # [doc = \" The distinction is the difference between reviewing a component and\"] # [doc = \" recognising it. A component that has only ever been seen inside a shell has\"] # [doc = \" been recognised; nobody has looked at its states, and the catalog should\"] # [doc = \" not claim otherwise, which is why only [`Shows::Subjects`] counts as\"] # [doc = \" coverage.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum Shows { # [doc = \" The components this rendering is *about*. It arranges them so their\"] # [doc = \" states can be compared, and it is where a reader is sent to review\"] # [doc = \" them. Everything else it draws is scaffolding.\"] Subjects (& 'static [& 'static str]), # [doc = \" An arrangement the way a product would build one, kept because\"] # [doc = \" components interact in ways none of them shows alone. It is nobody's\"] # [doc = \" coverage: every component it draws is reviewed somewhere else.\"] Composition (& 'static [& 'static str]), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::scenes::Shows::components",
      "name": "components",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "scenes",
      "path": "gpui_kit::scenes",
      "source": "crates/gpui-kit/src/scenes/mod.rs",
      "summary": "Every component named, whichever kind this is.",
      "documentation": "Every component named, whichever kind this is.",
      "signature": "pub fn components (& self) -> & 'static [& 'static str]",
      "cfg": [],
      "target": "Shows"
    },
    {
      "id": "gpui_kit::scenes::Shows::subjects",
      "name": "subjects",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "scenes",
      "path": "gpui_kit::scenes",
      "source": "crates/gpui-kit/src/scenes/mod.rs",
      "summary": "The components this rendering is the review of, which is empty for a composition.",
      "documentation": "The components this rendering is the review of, which is empty for a\ncomposition.",
      "signature": "pub fn subjects (& self) -> & 'static [& 'static str]",
      "cfg": [],
      "target": "Shows"
    },
    {
      "id": "gpui_kit::scenes::catalog",
      "name": "catalog",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "scenes",
      "path": "gpui_kit::scenes",
      "source": "crates/gpui-kit/src/scenes/mod.rs",
      "summary": "Every scene, in a stable order.",
      "documentation": "Every scene, in a stable order.",
      "signature": "pub fn catalog () -> Vec<Scene>",
      "cfg": []
    },
    {
      "id": "gpui_kit::scenes::direction",
      "name": "direction",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "scenes",
      "path": "gpui_kit::scenes",
      "source": "crates/gpui-kit/src/scenes/mod.rs",
      "summary": "The reading direction a scene expects.",
      "documentation": "The reading direction a scene expects.\n\nThe direction is a global, like the theme, so a capture run that renders\nthe whole catalog into one process has to set it per scene the same way it\nactivates a theme per scene. A scene that changed it while rendering would\nleak into whichever scene came next, and the leak would show up as a\nchanged image somewhere else entirely.",
      "signature": "pub fn direction (name : & str) -> LayoutDirection",
      "cfg": []
    },
    {
      "id": "gpui_kit::scenes::find",
      "name": "find",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "scenes",
      "path": "gpui_kit::scenes",
      "source": "crates/gpui-kit/src/scenes/mod.rs",
      "summary": "The scene registered under `name`, or `None` when nothing is.",
      "documentation": "The scene registered under `name`, or `None` when nothing is.",
      "signature": "pub fn find (name : & str) -> Option<Scene>",
      "cfg": []
    },
    {
      "id": "gpui_kit::state::AsyncStatus",
      "name": "AsyncStatus",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "What is happening to an [`AsyncValue`] right now.",
      "documentation": "What is happening to an [`AsyncValue`] right now.",
      "signature": "# [doc = \" What is happening to an [`AsyncValue`] right now.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum AsyncStatus<E = String> { # [default] Idle, Loading, Refreshing, Ready, Empty, Unavailable (String), Error (E), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::state::AsyncValue",
      "name": "AsyncValue",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "A value and, separately, what is currently happening to it.",
      "documentation": "A value and, separately, what is currently happening to it.\n\nSplitting the two is what lets a failed refresh keep the last verified\nvalue on screen instead of replacing it with an error.",
      "signature": "# [doc = \" A value and, separately, what is currently happening to it.\"] # [doc = \"\"] # [doc = \" Splitting the two is what lets a failed refresh keep the last verified\"] # [doc = \" value on screen instead of replacing it with an error.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct AsyncValue<T, E = String> { pub value : Option<T>, pub status : AsyncStatus<E>, # [doc = \" How many times this has been asked for. A first load and a third retry\"] # [doc = \" are different facts.\"] pub attempts : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::state::AsyncValue::empty",
      "name": "empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn empty () -> Self",
      "cfg": [],
      "target": "AsyncValue<T, E>"
    },
    {
      "id": "gpui_kit::state::AsyncValue::error",
      "name": "error",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn error (error : E) -> Self",
      "cfg": [],
      "target": "AsyncValue<T, E>"
    },
    {
      "id": "gpui_kit::state::AsyncValue::fail_refresh",
      "name": "fail_refresh",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn fail_refresh (& mut self, error : E)",
      "cfg": [],
      "target": "AsyncValue<T, E>"
    },
    {
      "id": "gpui_kit::state::AsyncValue::idle",
      "name": "idle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn idle () -> Self",
      "cfg": [],
      "target": "AsyncValue<T, E>"
    },
    {
      "id": "gpui_kit::state::AsyncValue::is_stale",
      "name": "is_stale",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_stale (& self) -> bool",
      "cfg": [],
      "target": "AsyncValue<T, E>"
    },
    {
      "id": "gpui_kit::state::AsyncValue::loading",
      "name": "loading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn loading () -> Self",
      "cfg": [],
      "target": "AsyncValue<T, E>"
    },
    {
      "id": "gpui_kit::state::AsyncValue::ready",
      "name": "ready",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ready (value : T) -> Self",
      "cfg": [],
      "target": "AsyncValue<T, E>"
    },
    {
      "id": "gpui_kit::state::AsyncValue::record_attempt",
      "name": "record_attempt",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "Records one more attempt without changing the status.",
      "documentation": "Records one more attempt without changing the status.",
      "signature": "pub fn record_attempt (& mut self)",
      "cfg": [],
      "target": "AsyncValue<T, E>"
    },
    {
      "id": "gpui_kit::state::AsyncValue::refresh",
      "name": "refresh",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn refresh (& mut self)",
      "cfg": [],
      "target": "AsyncValue<T, E>"
    },
    {
      "id": "gpui_kit::state::AsyncValue::refused",
      "name": "refused",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "The host refused, in its own words.",
      "documentation": "The host refused, in its own words.",
      "signature": "pub fn refused (reason : impl Into<String>) -> Self",
      "cfg": [],
      "target": "AsyncValue<T, E>"
    },
    {
      "id": "gpui_kit::state::HasPhase",
      "name": "HasPhase",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "A surface that can say which [`Phase`] it is in.",
      "documentation": "A surface that can say which [`Phase`] it is in.",
      "signature": "# [doc = \" A surface that can say which [`Phase`] it is in.\"] pub trait HasPhase { fn phase (& self) -> Phase; # [doc = \" The host's own words. Never authored here.\"] fn reason (& self) -> Option<& str> { None } # [doc = \" A verified value remains on screen after a failed refresh.\"] fn is_stale (& self) -> bool { false } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::state::Loadable",
      "name": "Loadable",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "The states a value a host is fetching can be in.",
      "documentation": "The states a value a host is fetching can be in.\n\nEmpty, unavailable, and failed are separate variants on purpose: a refusal\nrendered as an absence of data is a lie about the host.",
      "signature": "# [doc = \" The states a value a host is fetching can be in.\"] # [doc = \"\"] # [doc = \" Empty, unavailable, and failed are separate variants on purpose: a refusal\"] # [doc = \" rendered as an absence of data is a lie about the host.\"] # [derive (Debug, Clone, PartialEq, Eq, Default)] pub enum Loadable<T, E = String> { # [default] Idle, Loading, Ready (T), Empty, Unavailable (String), Error (E), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::state::Loadable::into_async",
      "name": "into_async",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "The same facts, split so a later refresh can keep the verified value.",
      "documentation": "The same facts, split so a later refresh can keep the verified value.",
      "signature": "pub fn into_async (self) -> AsyncValue<T, E>",
      "cfg": [],
      "target": "Loadable<T, E>"
    },
    {
      "id": "gpui_kit::state::Loadable::is_loading",
      "name": "is_loading",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_loading (& self) -> bool",
      "cfg": [],
      "target": "Loadable<T, E>"
    },
    {
      "id": "gpui_kit::state::Loadable::map",
      "name": "map",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn map<U> (self, map : impl FnOnce (T) -> U) -> Loadable<U, E>",
      "cfg": [],
      "target": "Loadable<T, E>"
    },
    {
      "id": "gpui_kit::state::Loadable::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn value (& self) -> Option<& T>",
      "cfg": [],
      "target": "Loadable<T, E>"
    },
    {
      "id": "gpui_kit::state::Phase",
      "name": "Phase",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "What a surface knows about its own content.",
      "documentation": "What a surface knows about its own content.\n\nThis is not a description of activity. A transport that is playing and one\nthat is paused are both [`Phase::Ready`]: the difference belongs to the\ntransport, not to the ladder.",
      "signature": "# [doc = \" What a surface knows about its own content.\"] # [doc = \"\"] # [doc = \" This is not a description of activity. A transport that is playing and one\"] # [doc = \" that is paused are both [`Phase::Ready`]: the difference belongs to the\"] # [doc = \" transport, not to the ladder.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Hash, Default)] pub enum Phase { # [doc = \" Never requested.\"] # [default] Idle, # [doc = \" Accepted, and not yet started.\"] Queued, # [doc = \" Waiting for an answer (approval, credentials).\"] Blocked, # [doc = \" In flight, with no verified value.\"] Loading, # [doc = \" In flight, keeping a verified value on screen.\"] Refreshing, # [doc = \" A verified value.\"] Ready, # [doc = \" A successful result with nothing in it.\"] Empty, # [doc = \" A refusal, or a capability that does not exist.\"] Unavailable, # [doc = \" The attempt failed.\"] Error, # [doc = \" Withdrawn.\"] Cancelled, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::state::Phase::is_busy",
      "name": "is_busy",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "Whether this phase is still waiting on something.",
      "documentation": "Whether this phase is still waiting on something.",
      "signature": "pub const fn is_busy (self) -> bool",
      "cfg": [],
      "target": "Phase"
    },
    {
      "id": "gpui_kit::state::Phase::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "The name a semantic node publishes for the phase itself.",
      "documentation": "The name a semantic node publishes for the phase itself.",
      "signature": "pub const fn name (self) -> & 'static str",
      "cfg": [],
      "target": "Phase"
    },
    {
      "id": "gpui_kit::state::ValidationState",
      "name": "ValidationState",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "What a caller currently knows about one validation target.",
      "documentation": "What a caller currently knows about one validation target.\n\nThe target can be a field or a whole form. Keeping both on the same ladder\nprevents an in-flight check from being painted as a failure and prevents a\nform-level refusal from being copied onto every field. The caller advances\nthe state; the Kit owns neither validation rules nor timing.",
      "signature": "# [doc = \" What a caller currently knows about one validation target.\"] # [doc = \"\"] # [doc = \" The target can be a field or a whole form. Keeping both on the same ladder\"] # [doc = \" prevents an in-flight check from being painted as a failure and prevents a\"] # [doc = \" form-level refusal from being copied onto every field. The caller advances\"] # [doc = \" the state; the Kit owns neither validation rules nor timing.\"] # [derive (Debug, Clone, Default, PartialEq, Eq)] pub enum ValidationState { # [doc = \" No check has completed yet.\"] # [default] Pending, # [doc = \" A check is in flight. This is busy, never invalid.\"] Validating, # [doc = \" The check completed with the caller's reason.\"] Invalid { reason : SharedString }, # [doc = \" The check completed successfully.\"] Valid, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::state::ValidationState::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "Builds an invalid state without making callers spell the storage type.",
      "documentation": "Builds an invalid state without making callers spell the storage type.",
      "signature": "pub fn invalid (reason : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "ValidationState"
    },
    {
      "id": "gpui_kit::state::ValidationState::is_busy",
      "name": "is_busy",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn is_busy (& self) -> bool",
      "cfg": [],
      "target": "ValidationState"
    },
    {
      "id": "gpui_kit::state::ValidationState::is_invalid",
      "name": "is_invalid",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn is_invalid (& self) -> bool",
      "cfg": [],
      "target": "ValidationState"
    },
    {
      "id": "gpui_kit::state::ValidationState::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "The stable state name used by semantic diagnostics.",
      "documentation": "The stable state name used by semantic diagnostics.",
      "signature": "pub const fn name (& self) -> & 'static str",
      "cfg": [],
      "target": "ValidationState"
    },
    {
      "id": "gpui_kit::state::ValidationState::reason",
      "name": "reason",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "state",
      "path": "gpui_kit::state",
      "source": "crates/gpui-kit/src/state.rs",
      "summary": "The caller's reason, only when validation failed.",
      "documentation": "The caller's reason, only when validation failed.",
      "signature": "pub fn reason (& self) -> Option<& SharedString>",
      "cfg": [],
      "target": "ValidationState"
    },
    {
      "id": "gpui_kit::strings::ActiveNumbers",
      "name": "ActiveNumbers",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Reads the installed number adapter, falling back to English.",
      "documentation": "Reads the installed number adapter, falling back to English.",
      "signature": "# [doc = \" Reads the installed number adapter, falling back to English.\"] pub trait ActiveNumbers { fn numbers (& self) -> SharedNumberAdapter; }",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::ActiveSearch",
      "name": "ActiveSearch",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Reads the installed search matcher, falling back to English.",
      "documentation": "Reads the installed search matcher, falling back to English.",
      "signature": "# [doc = \" Reads the installed search matcher, falling back to English.\"] pub trait ActiveSearch { fn search (& self) -> SharedSearchMatcher; }",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::ActiveStrings",
      "name": "ActiveStrings",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Reads the installed catalogue from any context that dereferences to [`App`], mirroring [`ActiveTheme`](gpui_kit_theme::ActiveTheme).",
      "documentation": "Reads the installed catalogue from any context that dereferences to\n[`App`], mirroring [`ActiveTheme`](gpui_kit_theme::ActiveTheme).",
      "signature": "# [doc = \" Reads the installed catalogue from any context that dereferences to\"] # [doc = \" [`App`], mirroring [`ActiveTheme`](gpui_kit_theme::ActiveTheme).\"] pub trait ActiveStrings { fn strings (& self) -> & Strings; }",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::EnglishNumbers",
      "name": "EnglishNumbers",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "English digits and English plurals. Installed when a host supplies none.",
      "documentation": "English digits and English plurals. Installed when a host supplies none.",
      "signature": "# [doc = \" English digits and English plurals. Installed when a host supplies none.\"] # [derive (Debug, Default, Clone, Copy)] pub struct EnglishNumbers;",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::EnglishSearch",
      "name": "EnglishSearch",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "English prefix, word-start, containment, then subsequence.",
      "documentation": "English prefix, word-start, containment, then subsequence.",
      "signature": "# [doc = \" English prefix, word-start, containment, then subsequence.\"] # [derive (Debug, Default, Clone, Copy)] pub struct EnglishSearch;",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::NumberAdapter",
      "name": "NumberAdapter",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Everything the components are not allowed to decide about a number.",
      "documentation": "Everything the components are not allowed to decide about a number.",
      "signature": "# [doc = \" Everything the components are not allowed to decide about a number.\"] pub trait NumberAdapter { # [doc = \" The digits for a count, already grouped the way the host writes them.\"] fn count (& self, value : usize) -> SharedString; # [doc = \" The digits for an unsigned document number that is not constrained by\"] # [doc = \" the platform pointer width, such as a Markdown ordered-list start.\"] fn integer (& self, value : u64) -> SharedString { usize::try_from (value) . map (| value | self . count (value)) . unwrap_or_else (| _ | SharedString::from (value . to_string ())) } # [doc = \" Which plural form `value` takes.\"] fn plural (& self, value : usize) -> Plural; # [doc = \" A finished quantity such as `3 of 12`. The component supplies the two\"] # [doc = \" counts; the adapter supplies the wording, the digits, and the order.\"] fn count_of_total (& self, done : usize, total : usize) -> SharedString; # [doc = \" A percentage the host has already decided how to mark.\"] fn percent (& self, value : f32) -> SharedString; # [doc = \" A quantity with a fractional part, already grouped the way the host\"] # [doc = \" writes it. The component supplies the value and the decimal count;\"] # [doc = \" the adapter supplies the digits, the grouping, and the separator.\"] fn decimal (& self, value : f64, precision : usize) -> SharedString; # [doc = \" A compact numeric readout whose precision is inherent in the value.\"] # [doc = \" This serves animated counters; fixed-precision fields use\"] # [doc = \" [`NumberAdapter::decimal`] instead.\"] fn number (& self, value : f64) -> SharedString { let rendered = value . to_string (); if ! value . is_finite () || rendered . contains (['e', 'E']) { return SharedString::from (rendered); } let precision = rendered . split_once ('.') . map_or (0, | (_, fraction) | fraction . len ()); self . decimal (value, precision) } # [doc = \" Reads an editable decimal written in the host's number system. Parsing\"] # [doc = \" and formatting are one contract so `NumberInput` never shows localized\"] # [doc = \" digits it cannot accept back from the typist.\"] fn parse_decimal (& self, text : & str) -> Option<f64> { text . trim () . parse () . ok () } # [doc = \" Places caller-owned affixes around an already formatted number. The\"] # [doc = \" adapter owns order and spacing; the caller owns what the affixes mean.\"] fn decorate (& self, number : & str, prefix : Option<& str>, unit : Option<& str>) -> SharedString { match (prefix, unit) { (Some (prefix), Some (unit)) => SharedString::from (format ! (\"{prefix}{number} {unit}\")), (Some (prefix), None) => SharedString::from (format ! (\"{prefix}{number}\")), (None, Some (unit)) => SharedString::from (format ! (\"{number} {unit}\")), (None, None) => SharedString::from (number . to_owned ()), } } # [doc = \" A lower bound such as `1,000+`. The adapter owns the mark and which\"] # [doc = \" side of the digits it occupies.\"] fn at_least (& self, value : usize) -> SharedString { SharedString::from (format ! (\"{}+\", self . count (value))) } # [doc = \" A count next to caller-owned words or a unit. The adapter owns their\"] # [doc = \" order and spacing; the caller remains responsible for supplying the\"] # [doc = \" right localized word for the quantity.\"] fn quantity (& self, value : usize, unit : & str) -> SharedString { SharedString::from (format ! (\"{} {unit}\", self . count (value))) } # [doc = \" A caller-owned label followed by a count, as used by reaction chips.\"] # [doc = \" This remains separate from [`NumberAdapter::quantity`] because the\"] # [doc = \" label's leading position is part of that control's visual meaning.\"] fn labelled_count (& self, label : & str, value : usize) -> SharedString { SharedString::from (format ! (\"{label} {}\", self . count (value))) } # [doc = \" Two dimensions as one localized measurement. The adapter owns the\"] # [doc = \" multiplication mark, spacing, and reading order.\"] fn dimensions (& self, width : usize, height : usize) -> SharedString { SharedString::from (format ! (\"{} × {}\", self . count (width), self . count (height))) } # [doc = \" An ordered-list marker. The adapter owns the digits, punctuation, and\"] # [doc = \" their order so document rendering does not assume an English marker.\"] fn ordinal (& self, value : u64) -> SharedString { SharedString::from (format ! (\"{}.\", self . integer (value))) } # [doc = \" A signed count used for deltas. Positive values carry a plus and\"] # [doc = \" negative values use the mathematical minus rather than an ASCII dash.\"] fn signed_count (& self, value : isize) -> SharedString { match value . cmp (& 0) { std::cmp::Ordering::Less => self . negative_count (value . unsigned_abs ()), std::cmp::Ordering::Equal => self . count (0), std::cmp::Ordering::Greater => self . positive_count (value as usize), } } # [doc = \" A non-negative count explicitly marked as an increase.\"] fn positive_count (& self, value : usize) -> SharedString { SharedString::from (format ! (\"+{}\", self . count (value))) } # [doc = \" A non-negative count explicitly marked as a decrease.\"] fn negative_count (& self, value : usize) -> SharedString { SharedString::from (format ! (\"−{}\", self . count (value))) } # [doc = \" A playback multiplier such as `1.5×`. The adapter owns the decimal\"] # [doc = \" separator, multiplier mark, and their order.\"] fn multiplier (& self, value : f64, precision : usize) -> SharedString { SharedString::from (format ! (\"{}×\", self . decimal (value, precision))) } }",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::Plural",
      "name": "Plural",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Which plural form a count takes in the host's language.",
      "documentation": "Which plural form a count takes in the host's language.\n\nEnglish only distinguishes one and other. A host with dual or few forms\nreturns those exact categories and installs their phrase variants through\n[`Strings::set_plural`]; components never branch on `count == 1`.",
      "signature": "# [doc = \" Which plural form a count takes in the host's language.\"] # [doc = \"\"] # [doc = \" English only distinguishes one and other. A host with dual or few forms\"] # [doc = \" returns those exact categories and installs their phrase variants through\"] # [doc = \" [`Strings::set_plural`]; components never branch on `count == 1`.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] pub enum Plural { Zero, One, Two, Few, Many, Other, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::SearchMatcher",
      "name": "SearchMatcher",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "How well a label answers a query. The default is English prefix, word, and subsequence ranking. A host that needs pinyin initials or another tokenizer installs its own matcher; this crate does not take that dependency.",
      "documentation": "How well a label answers a query. The default is English prefix, word, and\nsubsequence ranking. A host that needs pinyin initials or another\ntokenizer installs its own matcher; this crate does not take that\ndependency.",
      "signature": "# [doc = \" How well a label answers a query. The default is English prefix, word, and\"] # [doc = \" subsequence ranking. A host that needs pinyin initials or another\"] # [doc = \" tokenizer installs its own matcher; this crate does not take that\"] # [doc = \" dependency.\"] pub trait SearchMatcher { # [doc = \" Lower is a better answer. `None` means the label does not answer the\"] # [doc = \" query at all.\"] fn rank (& self, query : & str, label : & str) -> Option<usize>; }",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::SharedNumberAdapter",
      "name": "SharedNumberAdapter",
      "kind": "type",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "The adapter as the components hold it.",
      "documentation": "The adapter as the components hold it.",
      "signature": "# [doc = \" The adapter as the components hold it.\"] pub type SharedNumberAdapter = Rc<dyn NumberAdapter>;",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::SharedSearchMatcher",
      "name": "SharedSearchMatcher",
      "kind": "type",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "The matcher as the components hold it.",
      "documentation": "The matcher as the components hold it.",
      "signature": "# [doc = \" The matcher as the components hold it.\"] pub type SharedSearchMatcher = Rc<dyn SearchMatcher>;",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::Strings",
      "name": "Strings",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "The catalogue a host installs, and the one components read.",
      "documentation": "The catalogue a host installs, and the one components read.\n\nIt holds only the entries a host replaced. An absent entry is not a gap to\nbe filled at runtime; it means the English default stands, which is why a\npartial catalogue is a legitimate thing to install rather than a mistake.",
      "signature": "# [doc = \" The catalogue a host installs, and the one components read.\"] # [doc = \"\"] # [doc = \" It holds only the entries a host replaced. An absent entry is not a gap to\"] # [doc = \" be filled at runtime; it means the English default stands, which is why a\"] # [doc = \" partial catalogue is a legitimate thing to install rather than a mistake.\"] # [derive (Debug, Clone, Default)] pub struct Strings { overrides : BTreeMap<StringKey, SharedString>, plural_overrides : BTreeMap<(StringKey, Plural), SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::Strings::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Restores the English for one entry.",
      "documentation": "Restores the English for one entry.",
      "signature": "pub fn clear (& mut self, key : StringKey) -> & mut Self",
      "cfg": [],
      "target": "Strings"
    },
    {
      "id": "gpui_kit::strings::Strings::clear_all",
      "name": "clear_all",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Restores the English for every entry.",
      "documentation": "Restores the English for every entry.",
      "signature": "pub fn clear_all (& mut self) -> & mut Self",
      "cfg": [],
      "target": "Strings"
    },
    {
      "id": "gpui_kit::strings::Strings::clear_plural",
      "name": "clear_plural",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Restores the built-in fallback for one grammatical form.",
      "documentation": "Restores the built-in fallback for one grammatical form.",
      "signature": "pub fn clear_plural (& mut self, key : StringKey, form : Plural) -> & mut Self",
      "cfg": [],
      "target": "Strings"
    },
    {
      "id": "gpui_kit::strings::Strings::extend",
      "name": "extend",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Replaces many entries, leaving the rest alone.",
      "documentation": "Replaces many entries, leaving the rest alone.",
      "signature": "pub fn extend (& mut self, entries : impl IntoIterator<Item = (StringKey, SharedString)>,) -> & mut Self",
      "cfg": [],
      "target": "Strings"
    },
    {
      "id": "gpui_kit::strings::Strings::format",
      "name": "format",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "The text behind a key with `{0}`, `{1}`, … replaced in place.",
      "documentation": "The text behind a key with `{0}`, `{1}`, … replaced in place.\n\nA placeholder with no argument is left standing rather than removed, so\na wrong translation reads as an obvious mistake instead of a sentence\nthat quietly lost a fact.",
      "signature": "pub fn format (& self, key : StringKey, args : & [& str]) -> SharedString",
      "cfg": [],
      "target": "Strings"
    },
    {
      "id": "gpui_kit::strings::Strings::format_plural",
      "name": "format_plural",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Formats a counted phrase without collapsing the host's plural system to English's one/other distinction.",
      "documentation": "Formats a counted phrase without collapsing the host's plural system\nto English's one/other distinction.\n\n`other` is the family key used for explicit zero/two/few/many/other\noverrides. With no override, English falls back to `one` only for\n[`Plural::One`] and to `other` for every remaining category.",
      "signature": "pub fn format_plural (& self, one : StringKey, other : StringKey, form : Plural, args : & [& str],) -> SharedString",
      "cfg": [],
      "target": "Strings"
    },
    {
      "id": "gpui_kit::strings::Strings::is_overridden",
      "name": "is_overridden",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Whether this key was replaced. A component never asks; a test does.",
      "documentation": "Whether this key was replaced. A component never asks; a test does.",
      "signature": "pub fn is_overridden (& self, key : StringKey) -> bool",
      "cfg": [],
      "target": "Strings"
    },
    {
      "id": "gpui_kit::strings::Strings::is_plural_overridden",
      "name": "is_plural_overridden",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Whether one grammatical form was replaced.",
      "documentation": "Whether one grammatical form was replaced.",
      "signature": "pub fn is_plural_overridden (& self, key : StringKey, form : Plural) -> bool",
      "cfg": [],
      "target": "Strings"
    },
    {
      "id": "gpui_kit::strings::Strings::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "An empty catalogue: every key answers with its English.",
      "documentation": "An empty catalogue: every key answers with its English.",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "Strings"
    },
    {
      "id": "gpui_kit::strings::Strings::set",
      "name": "set",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Replaces one entry.",
      "documentation": "Replaces one entry.",
      "signature": "pub fn set (& mut self, key : StringKey, text : impl Into<SharedString>) -> & mut Self",
      "cfg": [],
      "target": "Strings"
    },
    {
      "id": "gpui_kit::strings::Strings::set_plural",
      "name": "set_plural",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Replaces one grammatical form of a counted phrase. The `other` key of a one/other pair is the stable family identity; components still carry the English one-form separately as their built-in fallback.",
      "documentation": "Replaces one grammatical form of a counted phrase. The `other` key of\na one/other pair is the stable family identity; components still carry\nthe English one-form separately as their built-in fallback.",
      "signature": "pub fn set_plural (& mut self, key : StringKey, form : Plural, text : impl Into<SharedString>,) -> & mut Self",
      "cfg": [],
      "target": "Strings"
    },
    {
      "id": "gpui_kit::strings::Strings::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "The text behind a key, which is always something a reader can read.",
      "documentation": "The text behind a key, which is always something a reader can read.",
      "signature": "pub fn text (& self, key : StringKey) -> SharedString",
      "cfg": [],
      "target": "Strings"
    },
    {
      "id": "gpui_kit::strings::english_search_rank",
      "name": "english_search_rank",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "How well `label` answers `query` in English, lower being better.",
      "documentation": "How well `label` answers `query` in English, lower being better.",
      "signature": "pub fn english_search_rank (query : & str, label : & str) -> Option<usize>",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::install",
      "name": "install",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Installs the catalogue global. Idempotent, and never discards a catalogue a host already installed.",
      "documentation": "Installs the catalogue global. Idempotent, and never discards a catalogue a\nhost already installed.",
      "signature": "pub fn install (cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::packs::TranslationPack",
      "name": "TranslationPack",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings::packs",
      "path": "gpui_kit::strings::packs",
      "source": "crates/gpui-kit/src/strings/packs.rs",
      "summary": "Complete, bundled translations of Kit-owned labels. Caller content is never translated. Install `pack.strings()` with `cx.set_global`, then apply any application-specific overrides through the existing [`Strings`] interface. Number/date adapters, search matching and layout direction stay caller-owned.",
      "documentation": "Complete, bundled translations of Kit-owned labels. Caller content is never\ntranslated. Install `pack.strings()` with `cx.set_global`, then apply any\napplication-specific overrides through the existing [`Strings`] interface.\nNumber/date adapters, search matching and layout direction stay caller-owned.",
      "signature": "# [doc = \" Complete, bundled translations of Kit-owned labels. Caller content is never\"] # [doc = \" translated. Install `pack.strings()` with `cx.set_global`, then apply any\"] # [doc = \" application-specific overrides through the existing [`Strings`] interface.\"] # [doc = \" Number/date adapters, search matching and layout direction stay caller-owned.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum TranslationPack { English, SimplifiedChinese, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::packs::TranslationPack::language_tag",
      "name": "language_tag",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings::packs",
      "path": "gpui_kit::strings::packs",
      "source": "crates/gpui-kit/src/strings/packs.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn language_tag (self) -> & 'static str",
      "cfg": [],
      "target": "TranslationPack"
    },
    {
      "id": "gpui_kit::strings::packs::TranslationPack::strings",
      "name": "strings",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings::packs",
      "path": "gpui_kit::strings::packs",
      "source": "crates/gpui-kit/src/strings/packs.rs",
      "summary": "A fresh caller-owned catalogue; later overrides never mutate the pack.",
      "documentation": "A fresh caller-owned catalogue; later overrides never mutate the pack.",
      "signature": "pub fn strings (self) -> Strings",
      "cfg": [],
      "target": "TranslationPack"
    },
    {
      "id": "gpui_kit::strings::packs::TranslationPack::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings::packs",
      "path": "gpui_kit::strings::packs",
      "source": "crates/gpui-kit/src/strings/packs.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text (self, key : StringKey) -> & 'static str",
      "cfg": [],
      "target": "TranslationPack"
    },
    {
      "id": "gpui_kit::strings::reexport-1",
      "name": "packs :: TranslationPack",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use packs::TranslationPack;",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::reset_numbers",
      "name": "reset_numbers",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Restores the English fallback and repaints.",
      "documentation": "Restores the English fallback and repaints.",
      "signature": "pub fn reset_numbers (cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::reset_search",
      "name": "reset_search",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Restores the English fallback and repaints.",
      "documentation": "Restores the English fallback and repaints.",
      "signature": "pub fn reset_search (cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::reset_strings",
      "name": "reset_strings",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Restores the English for every entry and repaints every window.",
      "documentation": "Restores the English for every entry and repaints every window.",
      "signature": "pub fn reset_strings (cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::set_numbers",
      "name": "set_numbers",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Installs a host number adapter. Replaces any previous one and repaints.",
      "documentation": "Installs a host number adapter. Replaces any previous one and repaints.",
      "signature": "pub fn set_numbers (adapter : impl NumberAdapter + 'static, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::set_plural_strings",
      "name": "set_plural_strings",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Replaces grammatical forms and repaints every window. Each key is the `other` member of the phrase family passed to [`Strings::format_plural`].",
      "documentation": "Replaces grammatical forms and repaints every window. Each key is the\n`other` member of the phrase family passed to [`Strings::format_plural`].",
      "signature": "pub fn set_plural_strings (entries : impl IntoIterator<Item = (StringKey, Plural, SharedString)>, cx : & mut App,)",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::set_search",
      "name": "set_search",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Installs a host search matcher. Replaces any previous one and repaints.",
      "documentation": "Installs a host search matcher. Replaces any previous one and repaints.",
      "signature": "pub fn set_search (adapter : impl SearchMatcher + 'static, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::strings::set_strings",
      "name": "set_strings",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "strings",
      "path": "gpui_kit::strings",
      "source": "crates/gpui-kit/src/strings.rs",
      "summary": "Replaces entries and repaints every window, the way [`activate_theme`](gpui_kit_theme::activate_theme) does.",
      "documentation": "Replaces entries and repaints every window, the way\n[`activate_theme`](gpui_kit_theme::activate_theme) does.",
      "signature": "pub fn set_strings (entries : impl IntoIterator<Item = (StringKey, SharedString)>, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::json_view::JsonMember",
      "name": "JsonMember",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "One identified object member. IDs must be nonempty and unique among siblings. A key may repeat; the ID must survive reorder and value or key edits.",
      "documentation": "One identified object member. IDs must be nonempty and unique among siblings.\nA key may repeat; the ID must survive reorder and value or key edits.",
      "signature": "# [doc = \" One identified object member. IDs must be nonempty and unique among siblings.\"] # [doc = \" A key may repeat; the ID must survive reorder and value or key edits.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct JsonMember { pub id : SharedString, pub key : SharedString, pub value : JsonValue, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::json_view::JsonMember::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, key : impl Into<SharedString>, value : JsonValue,) -> Self",
      "cfg": [],
      "target": "JsonMember"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonValue",
      "name": "JsonValue",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "A JSON value, plus the one thing JSON cannot say: that a subtree is being withheld on purpose.",
      "documentation": "A JSON value, plus the one thing JSON cannot say: that a subtree is being\nwithheld on purpose.",
      "signature": "# [doc = \" A JSON value, plus the one thing JSON cannot say: that a subtree is being\"] # [doc = \" withheld on purpose.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum JsonValue { Null, Bool (bool), # [doc = \" The number exactly as the document wrote it.\"] Number (SharedString), String (SharedString), Array (Vec<JsonValue>), # [doc = \" Members in document order. A repeated key is kept, not collapsed.\"] # [doc = \" Rendering repeated keys requires [`Self::IdentifiedObject`]; without\"] # [doc = \" caller identities the view reports an identity error, retaining this data.\"] Object (Vec<(SharedString, JsonValue)>), # [doc = \" Ordered members with caller-owned identity independent of key and value.\"] IdentifiedObject (Vec<JsonMember>), # [doc = \" Present, and not shown. Carries a description of the shape and no part\"] # [doc = \" of the value.\"] Redacted (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::json_view::JsonValue::array",
      "name": "array",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn array (items : impl IntoIterator<Item = JsonValue>) -> Self",
      "cfg": [],
      "target": "JsonValue"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonValue::identified_object",
      "name": "identified_object",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "Identifies members by caller ID. Paths use the reserved `~2` prefix followed by an RFC 6901 escaped ID, e.g. `~2record~1a` for `record/a`. Ordinary keys escape every `~`, so legacy paths cannot collide with it.",
      "documentation": "Identifies members by caller ID. Paths use the reserved `~2` prefix\nfollowed by an RFC 6901 escaped ID, e.g. `~2record~1a` for `record/a`.\nOrdinary keys escape every `~`, so legacy paths cannot collide with it.",
      "signature": "pub fn identified_object (members : impl IntoIterator<Item = JsonMember>) -> Self",
      "cfg": [],
      "target": "JsonValue"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonValue::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn kind (& self) -> ValueKind",
      "cfg": [],
      "target": "JsonValue"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonValue::number",
      "name": "number",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn number (text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "JsonValue"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonValue::object",
      "name": "object",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn object (members : impl IntoIterator<Item = (impl Into<SharedString>, JsonValue)>) -> Self",
      "cfg": [],
      "target": "JsonValue"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonValue::redacted",
      "name": "redacted",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "Withholds a subtree, described by a shape the caller wrote.",
      "documentation": "Withholds a subtree, described by a shape the caller wrote.",
      "signature": "pub fn redacted (shape : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "JsonValue"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonValue::redacted_from",
      "name": "redacted_from",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "Measures a value and keeps only the measurement.",
      "documentation": "Measures a value and keeps only the measurement.\n\nThe value is consumed here and never stored, which is what makes this\nsafe to call with the secret itself: what comes back holds a sentence\nabout the shape and nothing of the content.",
      "signature": "pub fn redacted_from (value : & JsonValue, cx : & App) -> Self",
      "cfg": [],
      "target": "JsonValue"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonValue::string",
      "name": "string",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn string (text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "JsonValue"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonView",
      "name": "JsonView",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "A collapsible view of a structured value.",
      "documentation": "A collapsible view of a structured value.",
      "signature": "# [doc = \" A collapsible view of a structured value.\"] # [derive (IntoElement)] pub struct JsonView { ident : Ident, value : JsonValue, root_label : Option<SharedString>, expanded : Vec<SharedString>, selected : Option<SharedString>, visible_rows : Option<usize>, row_height : Option<f32>, size : ControlSize, disabled : bool, on_toggle : Option<ToggleHandler>, on_select : Option<SelectHandler>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::json_view::JsonView::disclosed_paths",
      "name": "disclosed_paths",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "The rows this view would disclose, as paths, in the order the keyboard walks them. A caller uses it to expand everything without knowing the shape of the document.",
      "documentation": "The rows this view would disclose, as paths, in the order the keyboard\nwalks them. A caller uses it to expand everything without knowing the\nshape of the document.",
      "signature": "pub fn disclosed_paths (& self, cx : & App) -> Vec<SharedString>",
      "cfg": [],
      "target": "JsonView"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonView::expanded",
      "name": "expanded",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "The paths whose members are disclosed. Everything else is shut, and nothing under a shut path is laid out or published.",
      "documentation": "The paths whose members are disclosed. Everything else is shut, and\nnothing under a shut path is laid out or published.",
      "signature": "pub fn expanded (mut self, paths : impl IntoIterator<Item = SharedString>) -> Self",
      "cfg": [],
      "target": "JsonView"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonView::expanded_paths",
      "name": "expanded_paths",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn expanded_paths<S : AsRef<str>> (mut self, paths : & [S]) -> Self",
      "cfg": [],
      "target": "JsonView"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonView::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, value : JsonValue) -> Self",
      "cfg": [],
      "target": "JsonView"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonView::on_select",
      "name": "on_select",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_select (mut self, handler : impl Fn (SharedString, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "JsonView"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonView::on_toggle",
      "name": "on_toggle",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "Reports a path and the disclosure state it should take. The view opens nothing itself.",
      "documentation": "Reports a path and the disclosure state it should take. The view opens\nnothing itself.",
      "signature": "pub fn on_toggle (mut self, handler : impl Fn (SharedString, bool, & mut Window, & mut App) + 'static,) -> Self",
      "cfg": [],
      "target": "JsonView"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonView::root_label",
      "name": "root_label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "What the single row of a document that is one scalar is called. A document that is an object or an array names its own members and never uses this.",
      "documentation": "What the single row of a document that is one scalar is called. A\ndocument that is an object or an array names its own members and never\nuses this.",
      "signature": "pub fn root_label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "JsonView"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonView::row_height",
      "name": "row_height",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn row_height (mut self, height : f32) -> Self",
      "cfg": [],
      "target": "JsonView"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonView::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, path : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "JsonView"
    },
    {
      "id": "gpui_kit::structured::json_view::JsonView::visible_rows",
      "name": "visible_rows",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "Bounds the viewport, which is what lets the view skip the rows it does not show. Without it the view sizes itself to its content and every disclosed row is laid out.",
      "documentation": "Bounds the viewport, which is what lets the view skip the rows it does\nnot show. Without it the view sizes itself to its content and every\ndisclosed row is laid out.",
      "signature": "pub fn visible_rows (mut self, rows : usize) -> Self",
      "cfg": [],
      "target": "JsonView"
    },
    {
      "id": "gpui_kit::structured::json_view::ValueKind",
      "name": "ValueKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::json_view",
      "path": "gpui_kit::structured::json_view",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "What kind of thing a row holds, which is the one fact its node publishes.",
      "documentation": "What kind of thing a row holds, which is the one fact its node publishes.",
      "signature": "# [doc = \" What kind of thing a row holds, which is the one fact its node publishes.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum ValueKind { Null, Bool, Number, String, Array, Object, Redacted, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::reexport-1",
      "name": "json_view :: { JsonMember , JsonValue , JsonView , ValueKind }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured",
      "path": "gpui_kit::structured",
      "source": "crates/gpui-kit/src/structured/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use json_view::{ JsonMember, JsonValue, JsonView, ValueKind };",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::reexport-2",
      "name": "schema_form :: { DefaultSchemaFilePolicy , FieldValue , FieldVisibility , HiddenSubmission , NumberBounds , Schema , SchemaChoice , SchemaField , SchemaFilePolicy , SchemaFileRequest , SchemaForm , SchemaFormEvent , SchemaKind , SharedSchemaFilePolicy , UnrenderableField , installed_schema_file_policy , reset_schema_file_policy , set_schema_file_policy , }",
      "kind": "reexport",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured",
      "path": "gpui_kit::structured",
      "source": "crates/gpui-kit/src/structured/mod.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use schema_form::{ DefaultSchemaFilePolicy, FieldValue, FieldVisibility, HiddenSubmission, NumberBounds, Schema, SchemaChoice, SchemaField, SchemaFilePolicy, SchemaFileRequest, SchemaForm, SchemaFormEvent, SchemaKind, SharedSchemaFilePolicy, UnrenderableField, installed_schema_file_policy, reset_schema_file_policy, set_schema_file_policy, };",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::DefaultSchemaFilePolicy",
      "name": "DefaultSchemaFilePolicy",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Opt-in policy for ordinary files with no host-specific restrictions.",
      "documentation": "Opt-in policy for ordinary files with no host-specific restrictions.\n\nInstalling this is an explicit statement that any file path the platform\nreturns is acceptable. Applications with workspace, extension, or access\npolicy install their own implementation instead.",
      "signature": "# [doc = \" Opt-in policy for ordinary files with no host-specific restrictions.\"] # [doc = \"\"] # [doc = \" Installing this is an explicit statement that any file path the platform\"] # [doc = \" returns is acceptable. Applications with workspace, extension, or access\"] # [doc = \" policy install their own implementation instead.\"] # [derive (Debug, Clone, Copy, Default)] pub struct DefaultSchemaFilePolicy;",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::FieldValue",
      "name": "FieldValue",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "What one field currently holds.",
      "documentation": "What one field currently holds.",
      "signature": "# [doc = \" What one field currently holds.\"] # [derive (Debug, Clone, PartialEq)] pub enum FieldValue { Text (SharedString), Number (f64), Boolean (bool), Choice (SharedString), List (Vec<SharedString>), # [doc = \" Paths the installed host policy accepted. Paths are returned to the\"] # [doc = \" caller but never copied into semantic snapshots.\"] Files (Vec<PathBuf>), # [doc = \" How many repeated sections the list currently holds. Their individual\"] # [doc = \" answers follow under paths such as `parent[0].child`.\"] ItemCount (usize), # [doc = \" A calendar day the host adapter already accepted.\"] Day (i64), # [doc = \" A time of day, as hour / minute / optional second.\"] Time { hour : u32, minute : u32, second : Option<u32>, }, # [doc = \" Two days, start then optional end.\"] Range { start : i64, end : Option<i64>, }, # [doc = \" Nothing was entered. Distinct from an empty string, which somebody\"] # [doc = \" typed on purpose.\"] Absent, # [doc = \" The form could not draw this field, so it holds nothing and never\"] # [doc = \" could. Reported rather than omitted.\"] Unrenderable, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::FieldVisibility",
      "name": "FieldVisibility",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Whether one schema field participates in this form presentation.",
      "documentation": "Whether one schema field participates in this form presentation.\n\nHidden fields are not rendered or field-validated. A hidden object or\nrepeating list applies its submission policy to the complete subtree, so a\ndescendant cannot accidentally reappear or use a contradictory policy.",
      "signature": "# [doc = \" Whether one schema field participates in this form presentation.\"] # [doc = \"\"] # [doc = \" Hidden fields are not rendered or field-validated. A hidden object or\"] # [doc = \" repeating list applies its submission policy to the complete subtree, so a\"] # [doc = \" descendant cannot accidentally reappear or use a contradictory policy.\"] # [derive (Debug, Clone, Copy, Default, PartialEq, Eq)] pub enum FieldVisibility { # [default] Visible, Hidden { submission : HiddenSubmission, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::HiddenSubmission",
      "name": "HiddenSubmission",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Whether a hidden field's held value belongs in the caller's submission.",
      "documentation": "Whether a hidden field's held value belongs in the caller's submission.",
      "signature": "# [doc = \" Whether a hidden field's held value belongs in the caller's submission.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum HiddenSubmission { # [doc = \" Leave the field and its subtree out of [`SchemaForm::submission_values`].\"] Omit, # [doc = \" Keep the field and its subtree in [`SchemaForm::submission_values`].\"] Include, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::NumberBounds",
      "name": "NumberBounds",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "What a number may be, as far as the schema said.",
      "documentation": "What a number may be, as far as the schema said.\n\nEvery bound is optional because a schema is allowed to state none of them,\nand a form that invented a range would refuse values the host accepts.",
      "signature": "# [doc = \" What a number may be, as far as the schema said.\"] # [doc = \"\"] # [doc = \" Every bound is optional because a schema is allowed to state none of them,\"] # [doc = \" and a form that invented a range would refuse values the host accepts.\"] # [derive (Debug, Clone, Copy, Default, PartialEq)] pub struct NumberBounds { pub min : Option<f64>, pub max : Option<f64>, pub step : Option<f64>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::NumberBounds::max",
      "name": "max",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn max (mut self, max : f64) -> Self",
      "cfg": [],
      "target": "NumberBounds"
    },
    {
      "id": "gpui_kit::structured::schema_form::NumberBounds::min",
      "name": "min",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn min (mut self, min : f64) -> Self",
      "cfg": [],
      "target": "NumberBounds"
    },
    {
      "id": "gpui_kit::structured::schema_form::NumberBounds::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "NumberBounds"
    },
    {
      "id": "gpui_kit::structured::schema_form::NumberBounds::step",
      "name": "step",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn step (mut self, step : f64) -> Self",
      "cfg": [],
      "target": "NumberBounds"
    },
    {
      "id": "gpui_kit::structured::schema_form::Schema",
      "name": "Schema",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "The arguments a call takes, in the order they should be filled in.",
      "documentation": "The arguments a call takes, in the order they should be filled in.",
      "signature": "# [doc = \" The arguments a call takes, in the order they should be filled in.\"] # [derive (Debug, Clone, Default, PartialEq)] pub struct Schema { fields : Vec<SchemaField>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::Schema::field",
      "name": "field",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn field (mut self, field : SchemaField) -> Self",
      "cfg": [],
      "target": "Schema"
    },
    {
      "id": "gpui_kit::structured::schema_form::Schema::fields",
      "name": "fields",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn fields (mut self, fields : impl IntoIterator<Item = SchemaField>) -> Self",
      "cfg": [],
      "target": "Schema"
    },
    {
      "id": "gpui_kit::structured::schema_form::Schema::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "Schema"
    },
    {
      "id": "gpui_kit::structured::schema_form::Schema::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "Schema"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaChoice",
      "name": "SchemaChoice",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "One option a closed or open choice offers.",
      "documentation": "One option a closed or open choice offers.",
      "signature": "# [doc = \" One option a closed or open choice offers.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct SchemaChoice { id : SharedString, label : SharedString, description : Option<SharedString>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaChoice::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SchemaChoice"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaChoice::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SchemaChoice"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaField",
      "name": "SchemaField",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "One argument.",
      "documentation": "One argument.",
      "signature": "# [doc = \" One argument.\"] # [derive (Debug, Clone, PartialEq)] pub struct SchemaField { name : SharedString, label : Option<SharedString>, description : Option<SharedString>, required : bool, kind : SchemaKind, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaField::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SchemaField"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaField::is_required",
      "name": "is_required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_required (& self) -> bool",
      "cfg": [],
      "target": "SchemaField"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaField::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn kind (& self) -> & SchemaKind",
      "cfg": [],
      "target": "SchemaField"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaField::label",
      "name": "label",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "What the reader sees. Without one the field's own name is shown, which is what a schema that named nothing else leaves to work with.",
      "documentation": "What the reader sees. Without one the field's own name is shown, which\nis what a schema that named nothing else leaves to work with.",
      "signature": "pub fn label (mut self, label : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "SchemaField"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaField::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (& self) -> & SharedString",
      "cfg": [],
      "target": "SchemaField"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaField::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (name : impl Into<SharedString>, kind : SchemaKind) -> Self",
      "cfg": [],
      "target": "SchemaField"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaField::required",
      "name": "required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn required (mut self, required : bool) -> Self",
      "cfg": [],
      "target": "SchemaField"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaFilePolicy",
      "name": "SchemaFilePolicy",
      "kind": "trait",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Host policy for schema file fields.",
      "documentation": "Host policy for schema file fields.\n\nThe form owns the drop target, selected-path rows, and schema maximum. The\nhost owns which paths may become answers and how one is named on screen. A\nbrowse action emits [`SchemaFormEvent::FilesRequested`]; the host opens its\npicker and returns paths with [`SchemaForm::set_files`].",
      "signature": "# [doc = \" Host policy for schema file fields.\"] # [doc = \"\"] # [doc = \" The form owns the drop target, selected-path rows, and schema maximum. The\"] # [doc = \" host owns which paths may become answers and how one is named on screen. A\"] # [doc = \" browse action emits [`SchemaFormEvent::FilesRequested`]; the host opens its\"] # [doc = \" picker and returns paths with [`SchemaForm::set_files`].\"] pub trait SchemaFilePolicy { # [doc = \" Accepts or refuses one complete candidate selection. A refusal is\"] # [doc = \" shown verbatim and changes none of the paths the form already holds.\"] fn accept (& self, _request : & SchemaFileRequest, _paths : & [PathBuf]) -> Result<(), SharedString> { Ok (()) } # [doc = \" Names a selected path on screen. The name is deliberately omitted from\"] # [doc = \" semantic snapshots because a pathname is user-generated content.\"] fn display_name (& self, path : & Path) -> SharedString; }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaFileRequest",
      "name": "SchemaFileRequest",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "The file field the form is asking the host to acquire paths for.",
      "documentation": "The file field the form is asking the host to acquire paths for.",
      "signature": "# [doc = \" The file field the form is asking the host to acquire paths for.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct SchemaFileRequest { pub path : SharedString, pub label : SharedString, pub max : Option<usize>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm",
      "name": "SchemaForm",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "A form built from a schema.",
      "documentation": "A form built from a schema.\n\nIt is a view rather than a builder because the fields it composes —\n[`TextInput`], [`NumberInput`], [`Select`], [`Combobox`], [`TagInput`] —\neach own a caret, an open menu, or a selection that has to survive a frame.",
      "signature": "# [doc = \" A form built from a schema.\"] # [doc = \"\"] # [doc = \" It is a view rather than a builder because the fields it composes —\"] # [doc = \" [`TextInput`], [`NumberInput`], [`Select`], [`Combobox`], [`TagInput`] —\"] # [doc = \" each own a caret, an open menu, or a selection that has to survive a frame.\"] pub struct SchemaForm { ident : Ident, # [doc = \" Positional answer prefix when this form is one stable repeated item.\"] # [doc = \" Reordering changes the prefix without changing any control identity.\"] export_prefix : SharedString, fields : Vec<Field>, # [doc = \" Validation the host owns, by field path. A missing entry means this\"] # [doc = \" field has no host-side validation contract; explicit Pending does.\"] field_validation : BTreeMap<SharedString, ValidationState>, # [doc = \" Validation about the submission as a whole, kept apart from fields.\"] validation : Option<ValidationState>, # [doc = \" Caller-owned conditional presentation, by local field path. Missing\"] # [doc = \" entries are visible; hidden object fields govern their whole subtree.\"] field_visibility : BTreeMap<SharedString, FieldVisibility>, # [doc = \" What the form worked out is missing, by path. Cleared by every edit to\"] # [doc = \" that field, so an answered complaint does not stay on screen.\"] derived_errors : BTreeMap<SharedString, SharedString>, unrenderable : Vec<UnrenderableField>, base_unrenderable : usize, size : ControlSize, disabled : bool, _subscriptions : Vec<Subscription>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::add_list_item",
      "name": "add_list_item",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Adds one repeated section. The section keeps its semantic identity across later reorders; only its caller-facing `parent[i].child` paths change with its position.",
      "documentation": "Adds one repeated section. The section keeps its semantic identity\nacross later reorders; only its caller-facing `parent[i].child` paths\nchange with its position.",
      "signature": "pub fn add_list_item (& mut self, path : impl Into<SharedString>, window : & mut Window, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::clear_field_validation",
      "name": "clear_field_validation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Removes caller-owned validation for one field. The form's own required and range checks remain independent.",
      "documentation": "Removes caller-owned validation for one field. The form's own required\nand range checks remain independent.",
      "signature": "pub fn clear_field_validation (& mut self, path : impl Into<SharedString>, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::clear_host_errors",
      "name": "clear_host_errors",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Withdraws every error the host reported. What the form worked out for itself is untouched, because the host did not put it there.",
      "documentation": "Withdraws every error the host reported. What the form worked out for\nitself is untouched, because the host did not put it there.",
      "signature": "pub fn clear_host_errors (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::clear_validation",
      "name": "clear_validation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Removes the whole-form validation contract.",
      "documentation": "Removes the whole-form validation contract.",
      "signature": "pub fn clear_validation (& mut self, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::field_validation",
      "name": "field_validation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "The caller-owned validation registered for one current field path.",
      "documentation": "The caller-owned validation registered for one current field path.\n\nRepeated item paths are resolved through their current position while\nthe state itself stays with the stable child form across reorders.",
      "signature": "pub fn field_validation (& self, path : & str, cx : & App) -> Option<ValidationState>",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::field_visibility",
      "name": "field_visibility",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Returns one current field path's effective visibility. A hidden object or repeating-list ancestor is returned for every descendant it governs. Repeated item paths resolve through the item's current position while their state stays with the stable child form across reorders.",
      "documentation": "Returns one current field path's effective visibility. A hidden object\nor repeating-list ancestor is returned for every descendant it governs.\nRepeated item paths resolve through the item's current position while\ntheir state stays with the stable child form across reorders.",
      "signature": "pub fn field_visibility (& self, path : & str, cx : & App) -> Option<FieldVisibility>",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::has_unrenderable_required",
      "name": "has_unrenderable_required",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Whether any field the form could not draw is one the call requires.",
      "documentation": "Whether any field the form could not draw is one the call requires.",
      "signature": "pub fn has_unrenderable_required (& self) -> bool",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::move_list_item",
      "name": "move_list_item",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Moves one repeated section to another current index.",
      "documentation": "Moves one repeated section to another current index.",
      "signature": "pub fn move_list_item (& mut self, path : impl Into<SharedString>, from : usize, to : usize, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (ident : impl Into<Ident>, schema : Schema, window : & mut Window, cx : & mut Context<Self>,) -> Self",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::remove_list_item",
      "name": "remove_list_item",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Removes one repeated section by its current index.",
      "documentation": "Removes one repeated section by its current index.",
      "signature": "pub fn remove_list_item (& mut self, path : impl Into<SharedString>, index : usize, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::set_disabled",
      "name": "set_disabled",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_disabled (& mut self, disabled : bool, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::set_error",
      "name": "set_error",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Shows an error the host returned, next to the field it is about.",
      "documentation": "Shows an error the host returned, next to the field it is about.\n\nThis is the compatibility shorthand for setting that field to\n[`ValidationState::Invalid`].",
      "signature": "pub fn set_error (& mut self, path : impl Into<SharedString>, message : impl Into<SharedString>, cx : & mut Context<Self>,)",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::set_field_validation",
      "name": "set_field_validation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Advances caller-owned validation for one field.",
      "documentation": "Advances caller-owned validation for one field.\n\nPending and Validating block submission but never draw invalid chrome.\nA repeated field path such as `items[0].name` is routed to that stable\nchild form.",
      "signature": "pub fn set_field_validation (& mut self, path : impl Into<SharedString>, validation : ValidationState, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::set_field_visibility",
      "name": "set_field_visibility",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Applies the caller's conditional-visibility result to one current field path. Returns `false` for a stale or unknown path.",
      "documentation": "Applies the caller's conditional-visibility result to one current\nfield path. Returns `false` for a stale or unknown path.\n\nA hidden field is never field-validated: an invalid control nobody can\nreach must not become an invisible submission blocker. Use whole-form\nvalidation when a hidden caller-owned value is itself refused. Hiding\nan object or repeating list governs its complete subtree.",
      "signature": "pub fn set_field_visibility (& mut self, path : impl Into<SharedString>, visibility : FieldVisibility, cx : & mut Context<Self>,) -> bool",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::set_files",
      "name": "set_files",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Replaces the paths in one file field after applying its installed host policy and schema maximum. Returns `Ok(false)` when the path does not name a file field.",
      "documentation": "Replaces the paths in one file field after applying its installed host\npolicy and schema maximum. Returns `Ok(false)` when the path does not\nname a file field.",
      "signature": "pub fn set_files (& mut self, path : impl Into<SharedString>, files : Vec<PathBuf>, cx : & mut Context<Self>,) -> Result<bool, SharedString>",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::set_validation",
      "name": "set_validation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Advances validation for the complete form. A form-level invalid reason is presented once and never copied onto individual fields.",
      "documentation": "Advances validation for the complete form. A form-level invalid reason\nis presented once and never copied onto individual fields.",
      "signature": "pub fn set_validation (& mut self, validation : ValidationState, cx : & mut Context<Self>)",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::submission_values",
      "name": "submission_values",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "The explicit submission set after applying caller-owned visibility.",
      "documentation": "The explicit submission set after applying caller-owned visibility.\n\nUnlike [`SchemaForm::values`], a hidden field with\n[`HiddenSubmission::Omit`] and its subtree are absent. A hidden field\nwith [`HiddenSubmission::Include`] preserves its complete held subtree.",
      "signature": "pub fn submission_values (& self, cx : & App) -> Vec<(SharedString, FieldValue)>",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::unrenderable",
      "name": "unrenderable",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "The fields that have to be filled in somewhere else.",
      "documentation": "The fields that have to be filled in somewhere else.",
      "signature": "pub fn unrenderable (& self) -> & [UnrenderableField]",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::validate",
      "name": "validate",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Marks every required field nobody filled in, and reports whether the form is answerable at all.",
      "documentation": "Marks every required field nobody filled in, and reports whether the\nform is answerable at all.\n\nA form holding a field it cannot draw is never answerable, whatever is\ntyped into the rest of it. Neither is one holding a number outside the\nrange the schema gave it: the control already draws that as wrong, and\na form that called it answerable anyway would be contradicting what is\non screen.",
      "signature": "pub fn validate (& mut self, cx : & mut Context<Self>) -> bool",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::validation",
      "name": "validation",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "The caller-owned validation registered for the complete form.",
      "documentation": "The caller-owned validation registered for the complete form.",
      "signature": "pub fn validation (& self) -> Option<& ValidationState>",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaForm::values",
      "name": "values",
      "kind": "method",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Every field and what it holds, including the ones the form could not draw. A caller that builds a call from this cannot lose a field without seeing it.",
      "documentation": "Every field and what it holds, including the ones the form could not\ndraw. A caller that builds a call from this cannot lose a field without\nseeing it.",
      "signature": "pub fn values (& self, cx : & App) -> Vec<(SharedString, FieldValue)>",
      "cfg": [],
      "target": "SchemaForm"
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaFormEvent",
      "name": "SchemaFormEvent",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "What the form reports.",
      "documentation": "What the form reports.",
      "signature": "# [doc = \" What the form reports.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum SchemaFormEvent { # [doc = \" The field at this path changed. The value is read from\"] # [doc = \" [`SchemaForm::values`], because a form has more than one of them.\"] Changed (SharedString), # [doc = \" The person asked to browse for this file field. The form deliberately\"] # [doc = \" opens no OS picker; the host acquires paths and returns them through\"] # [doc = \" [`SchemaForm::set_files`].\"] FilesRequested (SchemaFileRequest), # [doc = \" The primary key was pressed in a field. The form submits nothing.\"] Submitted, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::SchemaKind",
      "name": "SchemaKind",
      "kind": "enum",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "What a value is, and therefore which control edits it.",
      "documentation": "What a value is, and therefore which control edits it.",
      "signature": "# [doc = \" What a value is, and therefore which control edits it.\"] # [derive (Debug, Clone, PartialEq)] pub enum SchemaKind { Text { placeholder : Option<SharedString>, # [doc = \" Drawn as dots, and kept out of every snapshot.\"] secret : bool, }, Number (NumberBounds), # [doc = \" A number with no fractional part, which is a different control setting\"] # [doc = \" rather than a different control.\"] Integer (NumberBounds), Boolean, # [doc = \" One of these, and nothing else.\"] Enum (Vec<SchemaChoice>), # [doc = \" One of these, or something the reader types.\"] OpenEnum (Vec<SchemaChoice>), # [doc = \" A list of short values.\"] TextList { max : Option<usize>, }, # [doc = \" Fields under a name of their own.\"] Object (Vec<SchemaField>), # [doc = \" A calendar day, edited with [`crate::datetime::DateInput`] when the\"] # [doc = \" host has installed a date adapter. Without one the field stays\"] # [doc = \" unrenderable rather than inventing a calendar.\"] Date, # [doc = \" A time of day, edited with [`crate::datetime::TimeInput`] when a date\"] # [doc = \" adapter is present.\"] Time, # [doc = \" Two days, edited with [`crate::datetime::RangePicker`] when a date\"] # [doc = \" adapter is present.\"] DateRange, # [doc = \" Paths the host already holds, collected through [`Dropzone`].\"] Files { max : Option<usize>, }, # [doc = \" Repeating child objects. Each item is addressed as `parent[i].child`.\"] List { item : Box<SchemaField>, max : Option<usize>, }, # [doc = \" The host could not express this field, and said so rather than\"] # [doc = \" dropping it. The text is the host's reason and is shown verbatim.\"] Unrenderable (SharedString), }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::SharedSchemaFilePolicy",
      "name": "SharedSchemaFilePolicy",
      "kind": "type",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub type SharedSchemaFilePolicy = Rc<dyn SchemaFilePolicy>;",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::UnrenderableField",
      "name": "UnrenderableField",
      "kind": "struct",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "A field that has to be filled in somewhere other than this form.",
      "documentation": "A field that has to be filled in somewhere other than this form.",
      "signature": "# [doc = \" A field that has to be filled in somewhere other than this form.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct UnrenderableField { # [doc = \" The path the field would have had in the answer, slash-joined through\"] # [doc = \" any objects above it.\"] pub path : SharedString, pub label : SharedString, pub required : bool, # [doc = \" Why, in the words of whoever refused: the host's, or this library's\"] # [doc = \" when the form itself is the one refusing.\"] pub reason : SharedString, }",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::installed_schema_file_policy",
      "name": "installed_schema_file_policy",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Reads the file policy a host installed, if any.",
      "documentation": "Reads the file policy a host installed, if any.",
      "signature": "pub fn installed_schema_file_policy (cx : & App) -> Option<SharedSchemaFilePolicy>",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::reset_schema_file_policy",
      "name": "reset_schema_file_policy",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Removes the installed policy so schema file fields remain visibly unrenderable rather than silently accepting paths.",
      "documentation": "Removes the installed policy so schema file fields remain visibly\nunrenderable rather than silently accepting paths.",
      "signature": "pub fn reset_schema_file_policy (cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit::structured::schema_form::set_schema_file_policy",
      "name": "set_schema_file_policy",
      "kind": "function",
      "package": "gpui-box-kit",
      "crate": "gpui_kit",
      "module": "structured::schema_form",
      "path": "gpui_kit::structured::schema_form",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "Installs the policy schema file fields use. Replaces any previous policy.",
      "documentation": "Installs the policy schema file fields use. Replaces any previous policy.",
      "signature": "pub fn set_schema_file_policy (policy : impl SchemaFilePolicy + 'static, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::Assets",
      "name": "Assets",
      "kind": "struct",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "",
      "path": "gpui_kit_assets",
      "source": "crates/gpui-kit-assets/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug)] pub struct Assets;",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::IconAsset",
      "name": "IconAsset",
      "kind": "struct",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "",
      "path": "gpui_kit_assets",
      "source": "crates/gpui-kit-assets/src/lib.rs",
      "summary": "One compile-time selected glyph. Use [`icon_bundle!`] to avoid linking the full runtime icon lookup table into an application that needs only a subset.",
      "documentation": "One compile-time selected glyph. Use [`icon_bundle!`] to avoid linking the\nfull runtime icon lookup table into an application that needs only a subset.",
      "signature": "# [doc = \" One compile-time selected glyph. Use [`icon_bundle!`] to avoid linking the\"] # [doc = \" full runtime icon lookup table into an application that needs only a subset.\"] # [derive (Debug, Clone, Copy)] pub struct IconAsset { path : & 'static str, bytes : & 'static [u8], }",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::IconAssets",
      "name": "IconAssets",
      "kind": "struct",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "",
      "path": "gpui_kit_assets",
      "source": "crates/gpui-kit-assets/src/lib.rs",
      "summary": "An asset source containing only an explicit static selection. Missing paths return `None`; this never falls back to the full bundled catalogue. Include the icons used by Kit components as well as your own direct icons.",
      "documentation": "An asset source containing only an explicit static selection. Missing\npaths return `None`; this never falls back to the full bundled catalogue.\nInclude the icons used by Kit components as well as your own direct icons.",
      "signature": "# [doc = \" An asset source containing only an explicit static selection. Missing\"] # [doc = \" paths return `None`; this never falls back to the full bundled catalogue.\"] # [doc = \" Include the icons used by Kit components as well as your own direct icons.\"] # [derive (Debug, Clone, Copy)] pub struct IconAssets { selected : & 'static [IconAsset], }",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::IconAssets::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "",
      "path": "gpui_kit_assets",
      "source": "crates/gpui-kit-assets/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn new (selected : & 'static [IconAsset]) -> Self",
      "cfg": [],
      "target": "IconAssets"
    },
    {
      "id": "gpui_kit_assets::KEY_SYMBOLS_FAMILY",
      "name": "KEY_SYMBOLS_FAMILY",
      "kind": "constant",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "",
      "path": "gpui_kit_assets",
      "source": "crates/gpui-kit-assets/src/lib.rs",
      "summary": "The family the bundled keyboard-symbol face publishes.",
      "documentation": "The family the bundled keyboard-symbol face publishes.",
      "signature": "pub const KEY_SYMBOLS_FAMILY: & str",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::font_bytes",
      "name": "font_bytes",
      "kind": "function",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "",
      "path": "gpui_kit_assets",
      "source": "crates/gpui-kit-assets/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn font_bytes () -> [& 'static [u8]; 9]",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::icon",
      "name": "icon",
      "kind": "function",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "",
      "path": "gpui_kit_assets",
      "source": "crates/gpui-kit-assets/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn icon (icon : Icon) -> Svg",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::icon_bundle",
      "name": "icon_bundle",
      "kind": "macro",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "",
      "path": "gpui_kit_assets",
      "source": "crates/gpui-kit-assets/src/lib.rs",
      "summary": "Selects individual names and weights at compile time, letting the linker discard all other SVG bytes. Expressions must be const-evaluable.",
      "documentation": "Selects individual names and weights at compile time, letting the linker\ndiscard all other SVG bytes. Expressions must be const-evaluable.\n\n```\nuse gpui_kit_assets::{Icon, icon_bundle};\nlet assets = icon_bundle![Icon::Copy, Icon::Check.filled()];\n```\nFonts are registered separately by `register_fonts`; selection changes\nneither font coverage nor the existing full [`Assets`] default.",
      "signature": "macro_rules! icon_bundle",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::icons::Icon",
      "name": "Icon",
      "kind": "struct",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, PartialEq, Eq, Hash)] pub struct Icon { name : IconName, weight : IconWeight, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::icons::Icon::asset",
      "name": "asset",
      "kind": "method",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "A glyph record. Use icon_bundle! to evaluate selection at compile time.",
      "documentation": "A glyph record. Use icon_bundle! to evaluate selection at compile time.",
      "signature": "pub const fn asset (self) -> crate::IconAsset",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit_assets::icons::Icon::filled",
      "name": "filled",
      "kind": "method",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn filled (self) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit_assets::icons::Icon::mirroring",
      "name": "mirroring",
      "kind": "method",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn mirroring (self) -> Mirroring",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit_assets::icons::Icon::mirrors_in_rtl",
      "name": "mirrors_in_rtl",
      "kind": "method",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn mirrors_in_rtl (self) -> bool",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit_assets::icons::Icon::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn name (self) -> IconName",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit_assets::icons::Icon::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn new (name : IconName) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit_assets::icons::Icon::path",
      "name": "path",
      "kind": "method",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn path (self) -> & 'static str",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit_assets::icons::Icon::weight",
      "name": "weight",
      "kind": "method",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn weight (self) -> IconWeight",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit_assets::icons::Icon::with_weight",
      "name": "with_weight",
      "kind": "method",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn with_weight (self, weight : IconWeight) -> Self",
      "cfg": [],
      "target": "Icon"
    },
    {
      "id": "gpui_kit_assets::icons::IconName",
      "name": "IconName",
      "kind": "enum",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum IconName { AddCircle, AltArrowDown, AltArrowLeft, AltArrowRight, Archive, ArchiveUp, ArrowDown, ArrowLeft, ArrowRight, ArrowUp, Browser, Calendar, CalendarDots, Chat, Check, CheckboxChecked, CheckboxEmpty, CheckCircle, Checklist, ClockCountdown, Close, CloseCircle, Command, Copy, CornersIn, Danger, Document, DocumentAdd, DoubleArrowLeft, DoubleArrowRight, DragHandle, ExternalLink, Filter, Folder, Forbidden, FolderWithFiles, GitBranch, GitDiff, Global, Graph, Home, Image, Info, Key, Keyboard, Laptop, List, Logout, Magnifier, Minus, Monitor, Notebook, Paperclip, Pause, Pen, PenNew, Play, Plus, Refresh, Restart, Return, Settings, Sidebar, SidebarLeft, Smartphone, SortVertical, Sparkle, Spinner, Star, SoundWave, Stop, Terminal, Trash, Tuning, Video, Widget, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::icons::IconName::mirroring",
      "name": "mirroring",
      "kind": "method",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn mirroring (self) -> Mirroring",
      "cfg": [],
      "target": "IconName"
    },
    {
      "id": "gpui_kit_assets::icons::IconName::source_name",
      "name": "source_name",
      "kind": "method",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn source_name (self) -> & 'static str",
      "cfg": [],
      "target": "IconName"
    },
    {
      "id": "gpui_kit_assets::icons::IconWeight",
      "name": "IconWeight",
      "kind": "enum",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum IconWeight { Regular, Fill, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::icons::Mirroring",
      "name": "Mirroring",
      "kind": "enum",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum Mirroring { Directional, Fixed, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::icons::PHOSPHOR_REVISION",
      "name": "PHOSPHOR_REVISION",
      "kind": "constant",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const PHOSPHOR_REVISION: & str",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::icons::PHOSPHOR_VERSION",
      "name": "PHOSPHOR_VERSION",
      "kind": "constant",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "icons",
      "path": "gpui_kit_assets::icons",
      "source": "crates/gpui-kit-assets/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const PHOSPHOR_VERSION: & str",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::key_fallbacks",
      "name": "key_fallbacks",
      "kind": "function",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "",
      "path": "gpui_kit_assets",
      "source": "crates/gpui-kit-assets/src/lib.rs",
      "summary": "The fallbacks a keystroke needs on top of the script ones.",
      "documentation": "The fallbacks a keystroke needs on top of the script ones.\n\nThe bundled face is registered either way, but a face nobody names is a\nface the shaper never reaches: `⏎`, `⌫`, `⌦`, `⌘`, `⌃`, `⌥` and `␣` are\ndrawn by none of the Geist faces, so a keycap that does not carry this\nlist renders whichever of them the host machine happens to cover and a\nblank box for the rest.",
      "signature": "pub fn key_fallbacks () -> FontFallbacks",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::reexport-1",
      "name": "icons :: { Icon , IconName , IconWeight , Mirroring , PHOSPHOR_REVISION , PHOSPHOR_VERSION }",
      "kind": "reexport",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "",
      "path": "gpui_kit_assets",
      "source": "crates/gpui-kit-assets/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use icons::{ Icon, IconName, IconWeight, Mirroring, PHOSPHOR_REVISION, PHOSPHOR_VERSION };",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::register_fonts",
      "name": "register_fonts",
      "kind": "function",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "",
      "path": "gpui_kit_assets",
      "source": "crates/gpui-kit-assets/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn register_fonts (cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit_assets::text_fallbacks",
      "name": "text_fallbacks",
      "kind": "function",
      "package": "gpui-box-kit-assets",
      "crate": "gpui_kit_assets",
      "module": "",
      "path": "gpui_kit_assets",
      "source": "crates/gpui-kit-assets/src/lib.rs",
      "summary": "The deterministic script fallbacks carried by every Kit text style.",
      "documentation": "The deterministic script fallbacks carried by every Kit text style.",
      "signature": "pub fn text_fallbacks () -> FontFallbacks",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::DiagnosticArm",
      "name": "DiagnosticArm",
      "kind": "struct",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "Keeps installed diagnostic snapshots armed for one active consumer.",
      "documentation": "Keeps installed diagnostic snapshots armed for one active consumer.\n\nDropping the guard disarms that consumer. Native accessibility remains\nindependent and active regardless of diagnostic state.",
      "signature": "# [doc = \" Keeps installed diagnostic snapshots armed for one active consumer.\"] # [doc = \"\"] # [doc = \" Dropping the guard disarms that consumer. Native accessibility remains\"] # [doc = \" independent and active regardless of diagnostic state.\"] pub struct DiagnosticArm { state : Rc<CoordinatorState>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::LiveRegion",
      "name": "LiveRegion",
      "kind": "enum",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] # [serde (rename_all = \"kebab-case\")] pub enum LiveRegion { Polite, Assertive, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::Node",
      "name": "Node",
      "kind": "struct",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "A single assertion target published for one frame.",
      "documentation": "A single assertion target published for one frame.\n\nFields added after the initial protocol are omitted from serialized\nsnapshots unless a component sets them, so recorded baselines stay stable\nas new roles gain state.",
      "signature": "# [doc = \" A single assertion target published for one frame.\"] # [doc = \"\"] # [doc = \" Fields added after the initial protocol are omitted from serialized\"] # [doc = \" snapshots unless a component sets them, so recorded baselines stay stable\"] # [doc = \" as new roles gain state.\"] # [derive (Debug, Clone, Default, PartialEq, Serialize, Deserialize)] # [serde (default)] pub struct Node { pub id : SharedString, pub role : Role, pub parent : Option<SharedString>, # [doc = \" The control this node names, for a label that belongs to a field it is\"] # [doc = \" not the parent of. A test finds the field by reading its label; GPUI\"] # [doc = \" projects the same association to AccessKit when both ids resolve.\"] # [serde (skip_serializing_if = \"Option::is_none\")] pub labels : Option<SharedString>, # [doc = \" The diagnostic identity this node describes. This never changes tree\"] # [doc = \" parentage and becomes an AccessKit described-by relationship when both\"] # [doc = \" ids resolve in the active window.\"] # [serde (skip_serializing_if = \"Option::is_none\")] pub describes : Option<SharedString>, pub text : Option<SharedString>, # [serde (skip_serializing_if = \"Option::is_none\")] pub description : Option<SharedString>, pub bounds : Rect, pub visible : bool, pub focused : bool, pub disabled : bool, # [serde (skip_serializing_if = \"is_false\")] pub read_only : bool, pub selected : bool, pub hovered : bool, pub pressed : bool, # [serde (skip_serializing_if = \"Option::is_none\")] pub checked : Option<bool>, # [serde (skip_serializing_if = \"Option::is_none\")] pub expanded : Option<bool>, # [serde (skip_serializing_if = \"Option::is_none\")] pub value : Option<SharedString>, # [serde (skip_serializing_if = \"Option::is_none\")] pub placeholder : Option<SharedString>, # [serde (skip_serializing_if = \"Option::is_none\")] pub value_min : Option<f32>, # [serde (skip_serializing_if = \"Option::is_none\")] pub value_max : Option<f32>, # [serde (skip_serializing_if = \"Option::is_none\")] pub value_now : Option<f32>, # [serde (skip_serializing_if = \"Option::is_none\")] pub level : Option<u32>, # [serde (skip_serializing_if = \"is_false\")] pub busy : bool, # [serde (skip_serializing_if = \"is_false\")] pub invalid : bool, # [serde (skip_serializing_if = \"is_false\")] pub required : bool, # [serde (skip_serializing_if = \"Option::is_none\")] pub live : Option<LiveRegion>, # [serde (skip_serializing_if = \"is_false\")] pub live_atomic : bool, # [serde (skip_serializing_if = \"is_false\")] pub modal : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::NodeSpec",
      "name": "NodeSpec",
      "kind": "struct",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone)] pub struct NodeSpec { id : SharedString, role : Role, parent : Option<SharedString>, labels : Option<SharedString>, describes : Option<SharedString>, text : Option<SharedString>, description : Option<SharedString>, focus : Option<FocusHandle>, disabled : bool, read_only : bool, selected : bool, hovered : bool, pressed : bool, checked : Option<bool>, expanded : Option<bool>, value : Option<SharedString>, placeholder : Option<SharedString>, range : Option<(f32, f32, f32)>, orientation : Option<gpui::accesskit::Orientation>, level : Option<u32>, busy : bool, invalid : bool, required : bool, live : Option<LiveRegion>, live_atomic : bool, modal : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::busy",
      "name": "busy",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn busy (mut self, busy : bool) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::checked",
      "name": "checked",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn checked (mut self, checked : bool) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::describes",
      "name": "describes",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "Records which semantic node this node describes without changing actual tree topology. GPUI projects it to AccessKit when both ids resolve.",
      "documentation": "Records which semantic node this node describes without changing actual\ntree topology. GPUI projects it to AccessKit when both ids resolve.",
      "signature": "pub fn describes (mut self, control : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "Publishes supplementary literal help on the same native node.",
      "documentation": "Publishes supplementary literal help on the same native node.\n\nThis maps to AccessKit's description property. It does not claim a\ncross-tree described-by relationship.",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::disabled",
      "name": "disabled",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disabled (mut self, disabled : bool) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::expanded",
      "name": "expanded",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn expanded (mut self, expanded : bool) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::focus",
      "name": "focus",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn focus (mut self, focus : & FocusHandle) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::hovered",
      "name": "hovered",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn hovered (mut self, hovered : bool) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::invalid",
      "name": "invalid",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invalid (mut self, invalid : bool) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::labels",
      "name": "labels",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "Names the control this node labels.",
      "documentation": "Names the control this node labels.\n\nA label is rarely an ancestor of the field it names, so the\nassociation is published rather than inferred from the tree.",
      "signature": "pub fn labels (mut self, control : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::level",
      "name": "level",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn level (mut self, level : u32) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::live",
      "name": "live",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn live (mut self, live : LiveRegion) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::live_atomic",
      "name": "live_atomic",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn live_atomic (mut self, atomic : bool) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::modal",
      "name": "modal",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn modal (mut self, modal : bool) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, role : Role) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::orientation",
      "name": "orientation",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn orientation (mut self, orientation : gpui::accesskit::Orientation) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::parent",
      "name": "parent",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn parent (mut self, parent : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::placeholder",
      "name": "placeholder",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder (mut self, placeholder : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::pressed",
      "name": "pressed",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn pressed (mut self, pressed : bool) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::range",
      "name": "range",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn range (mut self, min : f32, max : f32, now : f32) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::read_only",
      "name": "read_only",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn read_only (mut self, read_only : bool) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::required",
      "name": "required",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn required (mut self, required : bool) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selected (mut self, selected : bool) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::tristate",
      "name": "tristate",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tristate (mut self, checked : Option<bool>) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::NodeSpec::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "Records the committed value of an editable control.",
      "documentation": "Records the committed value of an editable control.\n\nValues pass through [`redact_sensitive_text`] when a snapshot is read,\nso exported diagnostics never carry a credential typed by a user.",
      "signature": "pub fn value (mut self, value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "NodeSpec"
    },
    {
      "id": "gpui_kit_semantics::Rect",
      "name": "Rect",
      "kind": "struct",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, Default, PartialEq, Serialize, Deserialize)] pub struct Rect { pub x : f32, pub y : f32, pub width : f32, pub height : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::Rect::area",
      "name": "area",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn area (self) -> f32",
      "cfg": [],
      "target": "Rect"
    },
    {
      "id": "gpui_kit_semantics::Rect::center",
      "name": "center",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn center (self) -> (f32, f32)",
      "cfg": [],
      "target": "Rect"
    },
    {
      "id": "gpui_kit_semantics::Rect::overlaps",
      "name": "overlaps",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn overlaps (self, other : Self) -> bool",
      "cfg": [],
      "target": "Rect"
    },
    {
      "id": "gpui_kit_semantics::Role",
      "name": "Role",
      "kind": "enum",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)] # [serde (rename_all = \"kebab-case\")] pub enum Role { Window, # [default] Region, Group, List, Row, Button, Link, Tab, TabPanel, Input, MultilineInput, PasswordInput, Text, Heading, Dialog, Menu, MenuItem, Status, Checkbox, Radio, Switch, Slider, Table, TreeGrid, Cell, GridCell, Tree, TreeItem, Progress, Toast, Tooltip, Separator, Splitter, Toolbar, Scrollbar, Combobox, Option, Form, Field, Image, # [doc = \" A drag in flight: what is being carried, and where it would land.\"] Drag, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::Semantic",
      "name": "Semantic",
      "kind": "trait",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub trait Semantic : Sized { type Output; fn semantic (self, registry : & SemanticRegistry, spec : NodeSpec) -> Self::Output; # [doc = \" Registers into the current window's installed context. Platform\"] # [doc = \" accessibility remains active when a host opts out of diagnostic\"] # [doc = \" semantics.\"] fn semantic_in (self, cx : & App, spec : NodeSpec) -> Self::Output; }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::SemanticCoordinator",
      "name": "SemanticCoordinator",
      "kind": "struct",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "Routes semantic probes to a registry owned by the GPUI window they paint in.",
      "documentation": "Routes semantic probes to a registry owned by the GPUI window they paint in.\n\nComponents continue to publish through [`Semantic::semantic_in`]; only a\nwindow root opens a frame. Rendering one window therefore cannot clear,\ncollide with, or advance the semantic generation of another window.",
      "signature": "# [doc = \" Routes semantic probes to a registry owned by the GPUI window they paint in.\"] # [doc = \"\"] # [doc = \" Components continue to publish through [`Semantic::semantic_in`]; only a\"] # [doc = \" window root opens a frame. Rendering one window therefore cannot clear,\"] # [doc = \" collide with, or advance the semantic generation of another window.\"] # [derive (Clone, Default)] pub struct SemanticCoordinator { state : Rc<CoordinatorState>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::SemanticCoordinator::arm",
      "name": "arm",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "Arms diagnostic recording until the returned guard is dropped.",
      "documentation": "Arms diagnostic recording until the returned guard is dropped.\n\nKit installation does not arm diagnostics. Tests, inspectors, and\nautomation hosts opt in explicitly; platform accessibility does not\ndepend on this guard.",
      "signature": "pub fn arm (& self) -> DiagnosticArm",
      "cfg": [],
      "target": "SemanticCoordinator"
    },
    {
      "id": "gpui_kit_semantics::SemanticCoordinator::begin_frame",
      "name": "begin_frame",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn begin_frame (& self, window : & Window) -> WindowSemanticContext",
      "cfg": [],
      "target": "SemanticCoordinator"
    },
    {
      "id": "gpui_kit_semantics::SemanticCoordinator::begin_window_frame",
      "name": "begin_window_frame",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "Opens a frame when a host owns an [`gpui::AnyWindowHandle`] rather than a borrowed [`Window`]. Window roots should prefer [`Self::begin_frame`].",
      "documentation": "Opens a frame when a host owns an [`gpui::AnyWindowHandle`] rather than\na borrowed [`Window`]. Window roots should prefer [`Self::begin_frame`].",
      "signature": "pub fn begin_window_frame (& self, window_id : WindowId) -> WindowSemanticContext",
      "cfg": [],
      "target": "SemanticCoordinator"
    },
    {
      "id": "gpui_kit_semantics::SemanticCoordinator::context",
      "name": "context",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "Returns the stable semantic context for `window`; its first frame creates the backing generation buffers.",
      "documentation": "Returns the stable semantic context for `window`; its first frame\ncreates the backing generation buffers.",
      "signature": "pub fn context (& self, window : & Window) -> WindowSemanticContext",
      "cfg": [],
      "target": "SemanticCoordinator"
    },
    {
      "id": "gpui_kit_semantics::SemanticCoordinator::frame_clock",
      "name": "frame_clock",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "A compatibility clock for application-global transient visual state. Semantic generations themselves are always per-window.",
      "documentation": "A compatibility clock for application-global transient visual state.\nSemantic generations themselves are always per-window.",
      "signature": "pub fn frame_clock (& self) -> u64",
      "cfg": [],
      "target": "SemanticCoordinator"
    },
    {
      "id": "gpui_kit_semantics::SemanticCoordinator::generation",
      "name": "generation",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn generation (& self, window_id : WindowId) -> Option<u64>",
      "cfg": [],
      "target": "SemanticCoordinator"
    },
    {
      "id": "gpui_kit_semantics::SemanticCoordinator::global",
      "name": "global",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "The coordinator installed for this application.",
      "documentation": "The coordinator installed for this application.\n\nPanics when [`install`] has not run, because a missing coordinator would\notherwise silently produce empty snapshots that tests read as passes.",
      "signature": "pub fn global (cx : & App) -> Self",
      "cfg": [],
      "target": "SemanticCoordinator"
    },
    {
      "id": "gpui_kit_semantics::SemanticCoordinator::is_armed",
      "name": "is_armed",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_armed (& self) -> bool",
      "cfg": [],
      "target": "SemanticCoordinator"
    },
    {
      "id": "gpui_kit_semantics::SemanticCoordinator::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "SemanticCoordinator"
    },
    {
      "id": "gpui_kit_semantics::SemanticCoordinator::snapshot",
      "name": "snapshot",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "Returns the latest snapshot for a known live window.",
      "documentation": "Returns the latest snapshot for a known live window.",
      "signature": "pub fn snapshot (& self, window_id : WindowId) -> Option<Snapshot>",
      "cfg": [],
      "target": "SemanticCoordinator"
    },
    {
      "id": "gpui_kit_semantics::SemanticCoordinator::try_global",
      "name": "try_global",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn try_global (cx : & App) -> Option<Self>",
      "cfg": [],
      "target": "SemanticCoordinator"
    },
    {
      "id": "gpui_kit_semantics::SemanticRegistry",
      "name": "SemanticRegistry",
      "kind": "struct",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Default)] pub struct SemanticRegistry { inner : Rc<RefCell<WindowRegistry>>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::SemanticRegistry::begin_frame",
      "name": "begin_frame",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "Opens a frame, selecting and clearing the alternate recording buffer.",
      "documentation": "Opens a frame, selecting and clearing the alternate recording buffer.\n\nDouble buffering preserves reusable capacity without scanning the\nprevious tree. A frame that publishes nothing therefore reports an\nempty tree rather than stale nodes.",
      "signature": "pub fn begin_frame (& self)",
      "cfg": [],
      "target": "SemanticRegistry"
    },
    {
      "id": "gpui_kit_semantics::SemanticRegistry::generation",
      "name": "generation",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn generation (& self) -> u64",
      "cfg": [],
      "target": "SemanticRegistry"
    },
    {
      "id": "gpui_kit_semantics::SemanticRegistry::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "SemanticRegistry"
    },
    {
      "id": "gpui_kit_semantics::SemanticRegistry::snapshot",
      "name": "snapshot",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "The tree published by the most recent completed frame.",
      "documentation": "The tree published by the most recent completed frame.",
      "signature": "pub fn snapshot (& self) -> Snapshot",
      "cfg": [],
      "target": "SemanticRegistry"
    },
    {
      "id": "gpui_kit_semantics::Snapshot",
      "name": "Snapshot",
      "kind": "struct",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Default, PartialEq, Serialize, Deserialize)] pub struct Snapshot { pub generation : u64, pub nodes : Vec<Node>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::Snapshot::children_of",
      "name": "children_of",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn children_of (& self, parent : & str) -> Vec<& Node>",
      "cfg": [],
      "target": "Snapshot"
    },
    {
      "id": "gpui_kit_semantics::Snapshot::contains",
      "name": "contains",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn contains (& self, id : & str) -> bool",
      "cfg": [],
      "target": "Snapshot"
    },
    {
      "id": "gpui_kit_semantics::Snapshot::descendants_of",
      "name": "descendants_of",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn descendants_of (& self, parent : & str) -> Vec<& Node>",
      "cfg": [],
      "target": "Snapshot"
    },
    {
      "id": "gpui_kit_semantics::Snapshot::find",
      "name": "find",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn find (& self, id : & str) -> Option<& Node>",
      "cfg": [],
      "target": "Snapshot"
    },
    {
      "id": "gpui_kit_semantics::Snapshot::ids",
      "name": "ids",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ids (& self) -> Vec<& str>",
      "cfg": [],
      "target": "Snapshot"
    },
    {
      "id": "gpui_kit_semantics::Snapshot::redacted",
      "name": "redacted",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "Re-applies redaction.",
      "documentation": "Re-applies redaction.\n\nRegistry snapshots already apply this export-boundary operation; this\nalso covers nodes a host constructed directly, and is idempotent.",
      "signature": "pub fn redacted (mut self) -> Self",
      "cfg": [],
      "target": "Snapshot"
    },
    {
      "id": "gpui_kit_semantics::Snapshot::under",
      "name": "under",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn under (& self, prefix : & str) -> Vec<& Node>",
      "cfg": [],
      "target": "Snapshot"
    },
    {
      "id": "gpui_kit_semantics::WindowSemanticContext",
      "name": "WindowSemanticContext",
      "kind": "struct",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "One window's semantic frame and diagnostic tree.",
      "documentation": "One window's semantic frame and diagnostic tree.\n\nA context is stable for the lifetime of its GPUI window. It can be retained\nby a test or host without exposing the installed coordinator to components.",
      "signature": "# [doc = \" One window's semantic frame and diagnostic tree.\"] # [doc = \"\"] # [doc = \" A context is stable for the lifetime of its GPUI window. It can be retained\"] # [doc = \" by a test or host without exposing the installed coordinator to components.\"] # [derive (Clone)] pub struct WindowSemanticContext { window_id : WindowId, coordinator : SemanticCoordinator, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::WindowSemanticContext::generation",
      "name": "generation",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn generation (& self) -> u64",
      "cfg": [],
      "target": "WindowSemanticContext"
    },
    {
      "id": "gpui_kit_semantics::WindowSemanticContext::snapshot",
      "name": "snapshot",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn snapshot (& self) -> Snapshot",
      "cfg": [],
      "target": "WindowSemanticContext"
    },
    {
      "id": "gpui_kit_semantics::WindowSemanticContext::window_id",
      "name": "window_id",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn window_id (& self) -> WindowId",
      "cfg": [],
      "target": "WindowSemanticContext"
    },
    {
      "id": "gpui_kit_semantics::install",
      "name": "install",
      "kind": "function",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "Installs the process-wide coordinator that owns one registry per window.",
      "documentation": "Installs the process-wide coordinator that owns one registry per window.",
      "signature": "pub fn install (cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::measured::MeasuredLeaf",
      "name": "MeasuredLeaf",
      "kind": "struct",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "measured",
      "path": "gpui_kit_semantics::measured",
      "source": "crates/gpui-kit-semantics/src/measured.rs",
      "summary": "One noninteractive description of caller-measured geometry.",
      "documentation": "One noninteractive description of caller-measured geometry.\n\nConstruct inside a batch's prepaint callback. Bounds are current-frame,\nuntransformed logical **window** coordinates, not relative to the batch.\nThe caller owns visibility selection and geometry/viewport intersection;\nthe batch does not infer visibility from shapes, opacity or product data.\nBusiness-derived ids must be unique within the batch and diagnostic window.\nThis is intentionally not convertible from `NodeSpec`: unsupported focus,\nactions and relationships must not be accepted and silently discarded.\n\n```compile_fail\nuse gpui::{Bounds, Pixels};\nuse gpui_kit_semantics::{MeasuredLeaf, Role};\nlet control = MeasuredLeaf::new(\"control\", Role::Button, Bounds::<Pixels>::default());\n```",
      "signature": "# [doc = \" One noninteractive description of caller-measured geometry.\"] # [doc = \"\"] # [doc = \" Construct inside a batch's prepaint callback. Bounds are current-frame,\"] # [doc = \" untransformed logical **window** coordinates, not relative to the batch.\"] # [doc = \" The caller owns visibility selection and geometry/viewport intersection;\"] # [doc = \" the batch does not infer visibility from shapes, opacity or product data.\"] # [doc = \" Business-derived ids must be unique within the batch and diagnostic window.\"] # [doc = \" This is intentionally not convertible from `NodeSpec`: unsupported focus,\"] # [doc = \" actions and relationships must not be accepted and silently discarded.\"] # [doc = \"\"] # [doc = \" ```compile_fail\"] # [doc = \" use gpui::{Bounds, Pixels};\"] # [doc = \" use gpui_kit_semantics::{MeasuredLeaf, Role};\"] # [doc = \" let control = MeasuredLeaf::new(\\\"control\\\", Role::Button, Bounds::<Pixels>::default());\"] # [doc = \" ```\"] # [derive (Clone, Debug)] pub struct MeasuredLeaf { spec : NodeSpec, bounds : Bounds<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::measured::MeasuredLeaf::description",
      "name": "description",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "measured",
      "path": "gpui_kit_semantics::measured",
      "source": "crates/gpui-kit-semantics/src/measured.rs",
      "summary": "Literal supplementary description, not a described-by relationship.",
      "documentation": "Literal supplementary description, not a described-by relationship.",
      "signature": "pub fn description (mut self, description : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MeasuredLeaf"
    },
    {
      "id": "gpui_kit_semantics::measured::MeasuredLeaf::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "measured",
      "path": "gpui_kit_semantics::measured",
      "source": "crates/gpui-kit-semantics/src/measured.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : impl Into<SharedString>, role : MeasuredLeafRole, bounds : Bounds<Pixels>,) -> Self",
      "cfg": [],
      "target": "MeasuredLeaf"
    },
    {
      "id": "gpui_kit_semantics::measured::MeasuredLeaf::read_only",
      "name": "read_only",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "measured",
      "path": "gpui_kit_semantics::measured",
      "source": "crates/gpui-kit-semantics/src/measured.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn read_only (mut self, read_only : bool) -> Self",
      "cfg": [],
      "target": "MeasuredLeaf"
    },
    {
      "id": "gpui_kit_semantics::measured::MeasuredLeaf::selected",
      "name": "selected",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "measured",
      "path": "gpui_kit_semantics::measured",
      "source": "crates/gpui-kit-semantics/src/measured.rs",
      "summary": "Diagnostic selection only. Like ordinary Image/Text semantics, these native roles do not publish the selected property or a selection action.",
      "documentation": "Diagnostic selection only. Like ordinary Image/Text semantics, these\nnative roles do not publish the selected property or a selection action.",
      "signature": "pub fn selected (mut self, selected : bool) -> Self",
      "cfg": [],
      "target": "MeasuredLeaf"
    },
    {
      "id": "gpui_kit_semantics::measured::MeasuredLeaf::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "measured",
      "path": "gpui_kit_semantics::measured",
      "source": "crates/gpui-kit-semantics/src/measured.rs",
      "summary": "Accessible label; credential-shaped text is redacted in both outputs.",
      "documentation": "Accessible label; credential-shaped text is redacted in both outputs.",
      "signature": "pub fn text (mut self, text : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MeasuredLeaf"
    },
    {
      "id": "gpui_kit_semantics::measured::MeasuredLeaf::value",
      "name": "value",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "measured",
      "path": "gpui_kit_semantics::measured",
      "source": "crates/gpui-kit-semantics/src/measured.rs",
      "summary": "Readout value; credential-shaped text is redacted in both outputs.",
      "documentation": "Readout value; credential-shaped text is redacted in both outputs.",
      "signature": "pub fn value (mut self, value : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MeasuredLeaf"
    },
    {
      "id": "gpui_kit_semantics::measured::MeasuredLeafBatch",
      "name": "MeasuredLeafBatch",
      "kind": "struct",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "measured",
      "path": "gpui_kit_semantics::measured",
      "source": "crates/gpui-kit-semantics/src/measured.rs",
      "summary": "A single layout element publishing many measured, noninteractive leaves.",
      "documentation": "A single layout element publishing many measured, noninteractive leaves.\n\n`measure` runs at most once in the current prepaint, after layout, and is\nskipped when native accessibility and installed diagnostics are both off.\nIt must only describe geometry, not perform required painting or side effects.\nNo per-leaf element, layout, hitbox, focus handle or action handler is created.\n\nThe batch is a real native Group under its mounted accessibility ancestor;\nall synthetic leaves are its direct native children. Native ids derive from\nthe mounted batch identity plus each business id, never its list position.\nMoving the batch to a different native ancestry changes those ids.\nDiagnostic parentage is separate and opt-in via [`Self::diagnostic_parent`];\nthe batch itself does not add a diagnostic node.\n\nDiagnostics follow ordinary `Semantic` conventions: logical bounds mapped\nthrough the inherited visual transform, without ancestor clipping. Native\nbounds additionally use GPUI's physical-pixel conservative content/rounded\nclip. Fully clipped leaves remain native zero-area descriptions while their\nowner is published; a fully clipped nonempty owner suppresses its subtree.\nRounded clipping cannot encode curved edges or holes in AccessKit. Callers\nmust exclude invisible product geometry themselves. No retained leaf cache\nis used: replacement, omission or unmount removes old leaves next frame.",
      "signature": "# [doc = \" A single layout element publishing many measured, noninteractive leaves.\"] # [doc = \"\"] # [doc = \" `measure` runs at most once in the current prepaint, after layout, and is\"] # [doc = \" skipped when native accessibility and installed diagnostics are both off.\"] # [doc = \" It must only describe geometry, not perform required painting or side effects.\"] # [doc = \" No per-leaf element, layout, hitbox, focus handle or action handler is created.\"] # [doc = \"\"] # [doc = \" The batch is a real native Group under its mounted accessibility ancestor;\"] # [doc = \" all synthetic leaves are its direct native children. Native ids derive from\"] # [doc = \" the mounted batch identity plus each business id, never its list position.\"] # [doc = \" Moving the batch to a different native ancestry changes those ids.\"] # [doc = \" Diagnostic parentage is separate and opt-in via [`Self::diagnostic_parent`];\"] # [doc = \" the batch itself does not add a diagnostic node.\"] # [doc = \"\"] # [doc = \" Diagnostics follow ordinary `Semantic` conventions: logical bounds mapped\"] # [doc = \" through the inherited visual transform, without ancestor clipping. Native\"] # [doc = \" bounds additionally use GPUI's physical-pixel conservative content/rounded\"] # [doc = \" clip. Fully clipped leaves remain native zero-area descriptions while their\"] # [doc = \" owner is published; a fully clipped nonempty owner suppresses its subtree.\"] # [doc = \" Rounded clipping cannot encode curved edges or holes in AccessKit. Callers\"] # [doc = \" must exclude invisible product geometry themselves. No retained leaf cache\"] # [doc = \" is used: replacement, omission or unmount removes old leaves next frame.\"] pub struct MeasuredLeafBatch { id : SharedString, diagnostic_parent : Option<SharedString>, measure : Option<Box<Measure>>, style : StyleRefinement, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::measured::MeasuredLeafBatch::diagnostic_parent",
      "name": "diagnostic_parent",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "measured",
      "path": "gpui_kit_semantics::measured",
      "source": "crates/gpui-kit-semantics/src/measured.rs",
      "summary": "Declares the diagnostic parent for every leaf; does not reparent native nodes or create a native relationship. The host must publish that parent.",
      "documentation": "Declares the diagnostic parent for every leaf; does not reparent native\nnodes or create a native relationship. The host must publish that parent.",
      "signature": "pub fn diagnostic_parent (mut self, parent : impl Into<SharedString>) -> Self",
      "cfg": [],
      "target": "MeasuredLeafBatch"
    },
    {
      "id": "gpui_kit_semantics::measured::MeasuredLeafBatch::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "measured",
      "path": "gpui_kit_semantics::measured",
      "source": "crates/gpui-kit-semantics/src/measured.rs",
      "summary": "Construct a batch with a stable mounted identity and current-prepaint measurement callback. It allocates one layout node regardless of count.",
      "documentation": "Construct a batch with a stable mounted identity and current-prepaint\nmeasurement callback. It allocates one layout node regardless of count.",
      "signature": "pub fn new (id : impl Into<SharedString>, measure : impl FnOnce (Bounds<Pixels>, & mut Window, & mut App) -> Vec<MeasuredLeaf> + 'static,) -> Self",
      "cfg": [],
      "target": "MeasuredLeafBatch"
    },
    {
      "id": "gpui_kit_semantics::measured::MeasuredLeafBatchState",
      "name": "MeasuredLeafBatchState",
      "kind": "struct",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "measured",
      "path": "gpui_kit_semantics::measured",
      "source": "crates/gpui-kit-semantics/src/measured.rs",
      "summary": "Frame-local storage used by the batch's [`Element`] implementation.",
      "documentation": "Frame-local storage used by the batch's [`Element`] implementation.",
      "signature": "# [doc = \" Frame-local storage used by the batch's [`Element`] implementation.\"] # [doc (hidden)] pub struct MeasuredLeafBatchState { leaves : Vec<MeasuredLeaf>, scale : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::measured::MeasuredLeafRole",
      "name": "MeasuredLeafRole",
      "kind": "enum",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "measured",
      "path": "gpui_kit_semantics::measured",
      "source": "crates/gpui-kit-semantics/src/measured.rs",
      "summary": "Descriptive native roles supported by [`MeasuredLeafBatch`].",
      "documentation": "Descriptive native roles supported by [`MeasuredLeafBatch`].\n\nInteractive roles deliberately cannot be supplied. Use ordinary semantic\nelements for controls, focus, actions, ranges and accessibility relationships.",
      "signature": "# [doc = \" Descriptive native roles supported by [`MeasuredLeafBatch`].\"] # [doc = \"\"] # [doc = \" Interactive roles deliberately cannot be supplied. Use ordinary semantic\"] # [doc = \" elements for controls, focus, actions, ranges and accessibility relationships.\"] # [derive (Clone, Copy, Debug, PartialEq, Eq)] pub enum MeasuredLeafRole { Image, Text, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::redact_sensitive_text",
      "name": "redact_sensitive_text",
      "kind": "function",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn redact_sensitive_text (text : & str) -> String",
      "cfg": []
    },
    {
      "id": "gpui_kit_semantics::reexport-1",
      "name": "measured :: { MeasuredLeaf , MeasuredLeafBatch , MeasuredLeafRole }",
      "kind": "reexport",
      "package": "gpui-box-kit-semantics",
      "crate": "gpui_kit_semantics",
      "module": "",
      "path": "gpui_kit_semantics",
      "source": "crates/gpui-kit-semantics/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use measured::{ MeasuredLeaf, MeasuredLeafBatch, MeasuredLeafRole };",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::BaselineError",
      "name": "BaselineError",
      "kind": "enum",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Error)] pub enum BaselineError { # [error (\"visual baseline name `{0}` is invalid; use only ASCII letters, digits, `.`, `_`, and `-`\")] InvalidName (String), # [error (\"visual baseline `{name}` is missing at {}; capture it before checking\", path . display ())] Missing { name : String, path : PathBuf }, # [error (\"could not read visual baseline at {}: {source}\", path . display ())] Read { path : PathBuf, # [source] source : std::io::Error, }, # [error (\"could not decode visual baseline at {}: {message}\", path . display ())] Decode { path : PathBuf, message : String }, # [error (\"could not write visual baseline at {}: {source}\", path . display ())] Write { path : PathBuf, # [source] source : capture::CaptureError, }, # [error (\"could not compare visual baseline `{name}` at {}: {source}\", path . display ())] Compare { name : String, path : PathBuf, # [source] source : FrameDiffError, }, # [error (\"visual baseline `{name}` at {} changed: pixel count {} ({:.4}%), maximum channel delta {}, mean channel delta {:.4}; capture this name to accept the new frame\", path . display (), diff . changed_pixels, diff . changed_ratio * 100.0, diff . max_channel_delta, diff . mean_channel_delta)] Mismatch { name : String, path : PathBuf, diff : FrameDiff, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::FrameDiff",
      "name": "FrameDiff",
      "kind": "struct",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq)] pub struct FrameDiff { pub changed_pixels : usize, pub changed_ratio : f32, pub max_channel_delta : u8, pub mean_channel_delta : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::FrameDiffError",
      "name": "FrameDiffError",
      "kind": "enum",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Error, PartialEq, Eq)] pub enum FrameDiffError { # [error (\"frame dimensions differ: {left_width}×{left_height} vs {right_width}×{right_height}\")] Dimensions { left_width : u32, left_height : u32, right_width : u32, right_height : u32, }, # [error (\"frame byte length does not match RGBA dimensions\")] InvalidLength, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::SemanticAssertionError",
      "name": "SemanticAssertionError",
      "kind": "enum",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Error, PartialEq, Eq)] pub enum SemanticAssertionError { # [error (\"semantic node `{0}` is missing\")] Missing (String), # [error (\"semantic node `{0}` is not visible\")] Invisible (String), # [error (\"semantic node `{0}` is disabled\")] Disabled (String), # [error (\"semantic node `{id}` has text {actual:?}, expected {expected:?}\")] Text { id : String, expected : String, actual : Option<String>, }, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::VisualBaselines",
      "name": "VisualBaselines",
      "kind": "struct",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "A directory of PNG visual baselines addressed by stable fixture names.",
      "documentation": "A directory of PNG visual baselines addressed by stable fixture names.\n\nThe caller owns the directory and chooses its platform boundary. Keep\nmacOS and Windows in separate directories because native text and edge\nrasterization are platform output, not noise to hide with one tolerance.",
      "signature": "# [doc = \" A directory of PNG visual baselines addressed by stable fixture names.\"] # [doc = \"\"] # [doc = \" The caller owns the directory and chooses its platform boundary. Keep\"] # [doc = \" macOS and Windows in separate directories because native text and edge\"] # [doc = \" rasterization are platform output, not noise to hide with one tolerance.\"] # [derive (Debug, Clone)] pub struct VisualBaselines { directory : PathBuf, channel_tolerance : u8, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::VisualBaselines::capture",
      "name": "capture",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "Writes or replaces one explicitly named baseline.",
      "documentation": "Writes or replaces one explicitly named baseline.",
      "signature": "pub fn capture (& self, name : & str, frame : & capture::Frame) -> Result<PathBuf, BaselineError>",
      "cfg": [],
      "target": "VisualBaselines"
    },
    {
      "id": "gpui_kit_testkit::VisualBaselines::check",
      "name": "check",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "Compares a frame with its named baseline.",
      "documentation": "Compares a frame with its named baseline.\n\nA successful result includes the measured (possibly tolerated) diff.\nA failure names the baseline and reports dimensions or pixel-distance\nmetrics so a test log says what changed before images are inspected.",
      "signature": "pub fn check (& self, name : & str, frame : & capture::Frame) -> Result<FrameDiff, BaselineError>",
      "cfg": [],
      "target": "VisualBaselines"
    },
    {
      "id": "gpui_kit_testkit::VisualBaselines::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (directory : impl Into<PathBuf>) -> Self",
      "cfg": [],
      "target": "VisualBaselines"
    },
    {
      "id": "gpui_kit_testkit::VisualBaselines::with_channel_tolerance",
      "name": "with_channel_tolerance",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "Allows a per-channel delta no larger than `tolerance`.",
      "documentation": "Allows a per-channel delta no larger than `tolerance`.\n\nExact comparison is the default. Raise this only for a native renderer\nknown to move antialiased edges by a bounded amount on supported hosts.",
      "signature": "pub fn with_channel_tolerance (mut self, tolerance : u8) -> Self",
      "cfg": [],
      "target": "VisualBaselines"
    },
    {
      "id": "gpui_kit_testkit::actionable",
      "name": "actionable",
      "kind": "function",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn actionable<'a> (snapshot : & 'a Snapshot, id : & str,) -> Result<& 'a Node, SemanticAssertionError>",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::audit::AuditError",
      "name": "AuditError",
      "kind": "struct",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "audit",
      "path": "gpui_kit_testkit::audit",
      "source": "crates/gpui-kit-testkit/src/audit.rs",
      "summary": "A complete semantic audit failure, formatted for a test runner.",
      "documentation": "A complete semantic audit failure, formatted for a test runner.",
      "signature": "# [doc = \" A complete semantic audit failure, formatted for a test runner.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct AuditError { pub findings : Vec<Finding>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::audit::Finding",
      "name": "Finding",
      "kind": "struct",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "audit",
      "path": "gpui_kit_testkit::audit",
      "source": "crates/gpui-kit-testkit/src/audit.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, PartialEq, Eq)] pub struct Finding { pub id : String, pub problem : Problem, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::audit::Problem",
      "name": "Problem",
      "kind": "enum",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "audit",
      "path": "gpui_kit_testkit::audit",
      "source": "crates/gpui-kit-testkit/src/audit.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, PartialEq, Eq)] pub enum Problem { # [doc = \" An id that encodes list position breaks as soon as the list reorders.\"] PositionalId, EmptyId, DuplicateId, # [doc = \" An actionable control with nothing to announce.\"] Unnamed, # [doc = \" A control that reports a value outside the range it also reports.\"] ValueOutOfRange, # [doc = \" A range control that reports no bounds, while claiming a position.\"] MissingRange, # [doc = \" Text that survived redaction, which must never reach a snapshot.\"] UnredactedSecret, # [doc = \" A node that claims to be visible while occupying no space.\"] ZeroSized, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::audit::audit",
      "name": "audit",
      "kind": "function",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "audit",
      "path": "gpui_kit_testkit::audit",
      "source": "crates/gpui-kit-testkit/src/audit.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn audit (snapshot : & Snapshot) -> Vec<Finding>",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::audit::audit_or_error",
      "name": "audit_or_error",
      "kind": "function",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "audit",
      "path": "gpui_kit_testkit::audit",
      "source": "crates/gpui-kit-testkit/src/audit.rs",
      "summary": "Audits a snapshot and returns all findings in one actionable error.",
      "documentation": "Audits a snapshot and returns all findings in one actionable error.",
      "signature": "pub fn audit_or_error (snapshot : & Snapshot) -> Result<(), AuditError>",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::capture::CaptureError",
      "name": "CaptureError",
      "kind": "enum",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "capture",
      "path": "gpui_kit_testkit::capture",
      "source": "crates/gpui-kit-testkit/src/capture.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, thiserror::Error)] pub enum CaptureError { # [error (\"the window could not be identified to the window server: {0}\")] Window (String), # [error (\"the window server returned no image for this window; it may be minimised, off-screen, \\ or hidden behind a consent prompt\")] NoImage, # [error (\"the window server returned a frame in an unsupported pixel format: {0}\")] PixelFormat (String), # [error (\"the screenshot could not be written: {0}\")] Io (# [from] std::io::Error), # [error (\"the screenshot could not be encoded: {0}\")] Encode (String), # [error (\"the renderer could not read the frame back: {0}\")] Render (String), # [error (\"in-process window capture is implemented for macOS only\")] Unsupported, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::capture::Frame",
      "name": "Frame",
      "kind": "struct",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "capture",
      "path": "gpui_kit_testkit::capture",
      "source": "crates/gpui-kit-testkit/src/capture.rs",
      "summary": "One grabbed frame, in straight RGBA8.",
      "documentation": "One grabbed frame, in straight RGBA8.",
      "signature": "# [doc = \" One grabbed frame, in straight RGBA8.\"] # [derive (Debug, Clone, PartialEq)] pub struct Frame { # [doc = \" Device pixels.\"] pub width : u32, pub height : u32, # [doc = \" Device pixels per logical pixel, as the window reported it.\"] pub scale_factor : f32, # [doc = \" Logical content rectangle the crop was taken from (title bar excluded).\"] pub content_width : f32, pub content_height : f32, pub rgba : Vec<u8>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::capture::Frame::write_png",
      "name": "write_png",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "capture",
      "path": "gpui_kit_testkit::capture",
      "source": "crates/gpui-kit-testkit/src/capture.rs",
      "summary": "Writes the frame as a PNG and reports the file size.",
      "documentation": "Writes the frame as a PNG and reports the file size.",
      "signature": "pub fn write_png (& self, path : & Path) -> Result<u64, CaptureError>",
      "cfg": [],
      "target": "Frame"
    },
    {
      "id": "gpui_kit_testkit::capture::capture_window",
      "name": "capture_window",
      "kind": "function",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "capture",
      "path": "gpui_kit_testkit::capture",
      "source": "crates/gpui-kit-testkit/src/capture.rs",
      "summary": "Grabs the content area of `window`.",
      "documentation": "Grabs the content area of `window`.",
      "signature": "pub fn capture_window (window : & gpui::Window) -> Result<Frame, CaptureError>",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::capture::render_frame",
      "name": "render_frame",
      "kind": "function",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "capture",
      "path": "gpui_kit_testkit::capture",
      "source": "crates/gpui-kit-testkit/src/capture.rs",
      "summary": "Renders the window's last-drawn frame straight from the GPU and returns the pixels, without involving the window server.",
      "documentation": "Renders the window's last-drawn frame straight from the GPU and returns\nthe pixels, without involving the window server.\n\nWhere [`capture_window`] asks the compositor what it last put on screen,\nthis re-renders the scene GPUI drew into a fresh texture and reads it\nback. The window's position, occlusion, corner mask, and the compositor's\ncolor handling never touch the result, which is what makes the same scene\nproduce the same bytes on every run. This is the capture the visual\nregression gate uses; `capture_window` remains for grabbing what a real,\ncomposited product window shows.",
      "signature": "pub fn render_frame (window : & gpui::Window) -> Result<Frame, CaptureError>",
      "cfg": [
        "cfg (feature = \"test-support\")"
      ]
    },
    {
      "id": "gpui_kit_testkit::compare_frames",
      "name": "compare_frames",
      "kind": "function",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn compare_frames (left : & capture::Frame, right : & capture::Frame, channel_tolerance : u8,) -> Result<FrameDiff, FrameDiffError>",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::harness::Harness",
      "name": "Harness",
      "kind": "struct",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "One window under test.",
      "documentation": "One window under test.",
      "signature": "# [doc = \" One window under test.\"] pub struct Harness { cx : VisualTestContext, window : AnyWindowHandle, build : Rc<RefCell<Build>>, _diagnostics : DiagnosticArm, # [doc = \" Where the simulated pointer is, so a drag can be driven one step at a\"] # [doc = \" time without a test having to carry the position itself.\"] pointer : Point<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::accessibility_tree",
      "name": "accessibility_tree",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Draws and returns GPUI's deterministic AccessKit tree.",
      "documentation": "Draws and returns GPUI's deterministic AccessKit tree.",
      "signature": "pub fn accessibility_tree (& mut self) -> serde_json::Value",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::advance",
      "name": "advance",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn advance (& mut self, delta : Duration)",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::bounds",
      "name": "bounds",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bounds (& mut self, id : & str) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::cancel_drag",
      "name": "cancel_drag",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Abandons a drag in flight.",
      "documentation": "Abandons a drag in flight.",
      "signature": "pub fn cancel_drag (& mut self)",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::click",
      "name": "click",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Clicks the center of a semantic node.",
      "documentation": "Clicks the center of a semantic node.\n\nPanics when the node is missing, because a test that silently clicks\nnothing would report a false pass.",
      "signature": "pub fn click (& mut self, id : & str)",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::context",
      "name": "context",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn context (& mut self) -> & mut VisualTestContext",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::current_snapshot",
      "name": "current_snapshot",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Returns the diagnostic semantic tree from the most recently completed frame without scheduling another draw.",
      "documentation": "Returns the diagnostic semantic tree from the most recently completed\nframe without scheduling another draw.",
      "signature": "pub fn current_snapshot (& mut self) -> Snapshot",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::drag",
      "name": "drag",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "The whole gesture: press on `from`, travel to the middle of `to`, and let go.",
      "documentation": "The whole gesture: press on `from`, travel to the middle of `to`, and\nlet go.",
      "signature": "pub fn drag (& mut self, from : & str, to : & str)",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::drag_over",
      "name": "drag_over",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Moves the pointer to the middle of a node.",
      "documentation": "Moves the pointer to the middle of a node.",
      "signature": "pub fn drag_over (& mut self, id : & str)",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::drag_start",
      "name": "drag_start",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Presses on a node and travels far enough for the press to become a drag.",
      "documentation": "Presses on a node and travels far enough for the press to become a\ndrag.\n\nGPUI only calls a press a drag once it has moved past its own\nthreshold, so a test that pressed and released without moving would be\ntesting a click.",
      "signature": "pub fn drag_start (& mut self, id : & str)",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::drag_to",
      "name": "drag_to",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Moves the pointer, with the button still down.",
      "documentation": "Moves the pointer, with the button still down.",
      "signature": "pub fn drag_to (& mut self, position : Point<Pixels>)",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::drop_here",
      "name": "drop_here",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Releases wherever the pointer is.",
      "documentation": "Releases wherever the pointer is.",
      "signature": "pub fn drop_here (& mut self)",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::frame",
      "name": "frame",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Advances the simulated clock and delivers one animation frame.",
      "documentation": "Advances the simulated clock and delivers one animation frame.\n\nTests have no platform frame loop, so motion driven by\n`Window::request_animation_frame` only progresses when a test asks for\nthe next frame explicitly.\nDraws one frame without advancing the clock.\n\nMotion keyed by identity is measured and pruned while rendering, so a\ntest that asserts what a component learned from the last layout needs\nanother frame rather than more time.",
      "signature": "pub fn frame (& mut self)",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::frame_stats",
      "name": "frame_stats",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Returns GPUI's structural counters for the most recently completed frame without causing another draw.",
      "documentation": "Returns GPUI's structural counters for the most recently completed\nframe without causing another draw.",
      "signature": "pub fn frame_stats (& mut self) -> gpui::FrameStats",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::keystrokes",
      "name": "keystrokes",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn keystrokes (& mut self, keystrokes : & str)",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Opens a window rendering `build`.",
      "documentation": "Opens a window rendering `build`.\n\n`install` runs before the first frame; callers pass their library's\ninstall function so the theme and semantic registry exist.",
      "signature": "pub fn new (cx : & mut TestAppContext, install : impl FnOnce (& mut App) + 'static, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static,) -> Self",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::node",
      "name": "node",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn node (& mut self, id : & str) -> Option<Node>",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::point_across",
      "name": "point_across",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "A point `fraction` of the way across a node, vertically centred.",
      "documentation": "A point `fraction` of the way across a node, vertically centred.",
      "signature": "pub fn point_across (& mut self, id : & str, fraction : f32) -> Point<Pixels>",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::point_down",
      "name": "point_down",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "A point `fraction` of the way down a node, horizontally centred.",
      "documentation": "A point `fraction` of the way down a node, horizontally centred.\n\nA drop target offers different slots at different heights, so a test\nthat wants one of them has to aim at it.",
      "signature": "pub fn point_down (& mut self, id : & str, fraction : f32) -> Point<Pixels>",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::point_in",
      "name": "point_in",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn point_in (& mut self, id : & str) -> Point<Pixels>",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::pointer",
      "name": "pointer",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Where the simulated pointer currently is.",
      "documentation": "Where the simulated pointer currently is.",
      "signature": "pub fn pointer (& self) -> Point<Pixels>",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::remount",
      "name": "remount",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Replaces the tree this window is rendering, without opening another one.",
      "documentation": "Replaces the tree this window is rendering, without opening another one.\n\nCatalog audits walk every scene on one `TestAppContext`. Opening a\nwindow per scene repeats install work the first `new` already did.",
      "signature": "pub fn remount (& mut self, build : impl Fn (& mut Window, & mut App) -> AnyElement + 'static)",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::scroll",
      "name": "scroll",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Turns a wheel over the centre of a node. A positive `pixels` scrolls toward the end of the content, the way a reader moves down a list.",
      "documentation": "Turns a wheel over the centre of a node. A positive `pixels` scrolls\ntoward the end of the content, the way a reader moves down a list.\n\nA virtualized surface decides what to build from where it is scrolled\nto, so a test that wants to assert what is on screen has to move it the\nway a reader would rather than by reaching into the element.",
      "signature": "pub fn scroll (& mut self, id : & str, pixels : f32)",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::snapshot",
      "name": "snapshot",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Redraws and returns the semantic tree published by the latest frame.",
      "documentation": "Redraws and returns the semantic tree published by the latest frame.",
      "signature": "pub fn snapshot (& mut self) -> Snapshot",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "Mutates application state the way a host would, then settles the window so the next snapshot reflects the change.",
      "documentation": "Mutates application state the way a host would, then settles the window\nso the next snapshot reflects the change.",
      "signature": "pub fn update<R> (& mut self, update : impl FnOnce (& mut Window, & mut App) -> R) -> R",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::harness::Harness::window",
      "name": "window",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "harness",
      "path": "gpui_kit_testkit::harness",
      "source": "crates/gpui-kit-testkit/src/harness.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn window (& self) -> AnyWindowHandle",
      "cfg": [],
      "target": "Harness"
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceBudget",
      "name": "PerformanceBudget",
      "kind": "struct",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "Named deterministic limits for one component scenario.",
      "documentation": "Named deterministic limits for one component scenario.",
      "signature": "# [doc = \" Named deterministic limits for one component scenario.\"] # [derive (Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct PerformanceBudget { # [doc = \" Stable scenario name used in reports and CI diagnostics.\"] pub name : String, # [doc = \" Inclusive maximum values by metric.\"] pub limits : BTreeMap<PerformanceMetric, u64>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceBudget::enforce",
      "name": "enforce",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "Evaluates `sample`, returning a serializable report on success or carrying that same report in the error on failure.",
      "documentation": "Evaluates `sample`, returning a serializable report on success or\ncarrying that same report in the error on failure.",
      "signature": "pub fn enforce (& self, sample : PerformanceSample,) -> Result<PerformanceReport, PerformanceBudgetError>",
      "cfg": [],
      "target": "PerformanceBudget"
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceBudget::limit",
      "name": "limit",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "Adds or replaces one named metric limit.",
      "documentation": "Adds or replaces one named metric limit.",
      "signature": "pub fn limit (mut self, metric : PerformanceMetric, maximum : u64) -> Self",
      "cfg": [],
      "target": "PerformanceBudget"
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceBudget::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "Creates an empty named budget.",
      "documentation": "Creates an empty named budget.",
      "signature": "pub fn new (name : impl Into<String>) -> Self",
      "cfg": [],
      "target": "PerformanceBudget"
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceBudgetError",
      "name": "PerformanceBudgetError",
      "kind": "struct",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "A failed deterministic performance budget.",
      "documentation": "A failed deterministic performance budget.",
      "signature": "# [doc = \" A failed deterministic performance budget.\"] # [derive (Debug, Clone, PartialEq, Eq, Error)] # [error (\"performance budget `{}` failed: {}\", report . name, format_violations (& report . violations))] pub struct PerformanceBudgetError { # [doc = \" Full serializable result, including every violation. It is boxed so\"] # [doc = \" that the failing arm of every budget call does not widen the result\"] # [doc = \" every caller returns.\"] pub report : Box<PerformanceReport>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceLimit",
      "name": "PerformanceLimit",
      "kind": "struct",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "A named upper bound for one structural metric.",
      "documentation": "A named upper bound for one structural metric.",
      "signature": "# [doc = \" A named upper bound for one structural metric.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] pub struct PerformanceLimit { # [doc = \" Metric being constrained.\"] pub metric : PerformanceMetric, # [doc = \" Inclusive maximum accepted value.\"] pub maximum : u64, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceMetric",
      "name": "PerformanceMetric",
      "kind": "enum",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "One deterministic quantity that a [`PerformanceBudget`] can limit.",
      "documentation": "One deterministic quantity that a [`PerformanceBudget`] can limit.",
      "signature": "# [doc = \" One deterministic quantity that a [`PerformanceBudget`] can limit.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] # [serde (rename_all = \"snake_case\")] pub enum PerformanceMetric { # [doc = \" Reactive view entities rendered in the measured frame.\"] EntityRenders, # [doc = \" Element request-layout calls.\"] RequestLayoutCalls, # [doc = \" Element prepaint calls.\"] PrepaintCalls, # [doc = \" Element paint calls.\"] PaintCalls, # [doc = \" Invalidations coalesced into the measured frame.\"] Invalidations, # [doc = \" Product semantic nodes published in the frame.\"] SemanticNodes, # [doc = \" Native platform-view placements in the frame.\"] PlatformViewPlacements, # [doc = \" Retained allocator growth in bytes.\"] AllocatorDeltaBytes, # [doc = \" Heap allocation and reallocation calls made during the measured frame.\"] HeapAllocations, # [doc = \" Dataset items mounted by a virtualized builder.\"] MountedItems, # [doc = \" Calls to caller-owned item or block builders.\"] BuilderCalls, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceReport",
      "name": "PerformanceReport",
      "kind": "struct",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "Machine-readable result for one budget.",
      "documentation": "Machine-readable result for one budget.",
      "signature": "# [doc = \" Machine-readable result for one budget.\"] # [derive (Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct PerformanceReport { # [doc = \" Stable scenario name.\"] pub name : String, # [doc = \" Measurements that were checked.\"] pub sample : PerformanceSample, # [doc = \" Limits applied to the sample.\"] pub limits : Vec<PerformanceLimit>, # [doc = \" Whether every limit passed.\"] pub passed : bool, # [doc = \" Every exceeded or unavailable metric.\"] pub violations : Vec<PerformanceViolation>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceSample",
      "name": "PerformanceSample",
      "kind": "struct",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "Structural measurements from one completed frame and its caller-owned virtualized builders.",
      "documentation": "Structural measurements from one completed frame and its caller-owned\nvirtualized builders.",
      "signature": "# [doc = \" Structural measurements from one completed frame and its caller-owned\"] # [doc = \" virtualized builders.\"] # [derive (Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct PerformanceSample { # [doc = \" Framework-owned frame counters.\"] pub frame : FrameStats, # [doc = \" Heap allocation and reallocation calls during the measured frame.\"] pub heap_allocations : u64, # [doc = \" Dataset items mounted by the component during the frame.\"] pub mounted_items : u64, # [doc = \" Calls to caller-owned row or block builders during the frame.\"] pub builder_calls : u64, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceSample::builder_calls",
      "name": "builder_calls",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "Records calls to the caller-owned virtualized builder.",
      "documentation": "Records calls to the caller-owned virtualized builder.",
      "signature": "pub fn builder_calls (mut self, count : u64) -> Self",
      "cfg": [],
      "target": "PerformanceSample"
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceSample::heap_allocations",
      "name": "heap_allocations",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "Records heap allocation and reallocation calls in the frame.",
      "documentation": "Records heap allocation and reallocation calls in the frame.",
      "signature": "pub fn heap_allocations (mut self, count : u64) -> Self",
      "cfg": [],
      "target": "PerformanceSample"
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceSample::mounted_items",
      "name": "mounted_items",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "Records the number of dataset items mounted in the frame.",
      "documentation": "Records the number of dataset items mounted in the frame.",
      "signature": "pub fn mounted_items (mut self, count : u64) -> Self",
      "cfg": [],
      "target": "PerformanceSample"
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceSample::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "Starts a sample from GPUI's completed frame counters.",
      "documentation": "Starts a sample from GPUI's completed frame counters.",
      "signature": "pub fn new (frame : FrameStats) -> Self",
      "cfg": [],
      "target": "PerformanceSample"
    },
    {
      "id": "gpui_kit_testkit::performance::PerformanceViolation",
      "name": "PerformanceViolation",
      "kind": "struct",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "performance",
      "path": "gpui_kit_testkit::performance",
      "source": "crates/gpui-kit-testkit/src/performance.rs",
      "summary": "One exceeded or unavailable metric.",
      "documentation": "One exceeded or unavailable metric.",
      "signature": "# [doc = \" One exceeded or unavailable metric.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] pub struct PerformanceViolation { # [doc = \" Metric that failed.\"] pub metric : PerformanceMetric, # [doc = \" Inclusive configured maximum.\"] pub maximum : u64, # [doc = \" Measured value, or `None` when this build cannot measure the metric.\"] pub actual : Option<u64>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::present",
      "name": "present",
      "kind": "function",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn present<'a> (snapshot : & 'a Snapshot, id : & str) -> Result<& 'a Node, SemanticAssertionError>",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::reexport-1",
      "name": "audit :: { AuditError , Finding , Problem , audit , audit_or_error }",
      "kind": "reexport",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use audit::{ AuditError, Finding, Problem, audit, audit_or_error };",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::reexport-2",
      "name": "performance :: { PerformanceBudget , PerformanceBudgetError , PerformanceLimit , PerformanceMetric , PerformanceReport , PerformanceSample , PerformanceViolation , }",
      "kind": "reexport",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use performance::{ PerformanceBudget, PerformanceBudgetError, PerformanceLimit, PerformanceMetric, PerformanceReport, PerformanceSample, PerformanceViolation, };",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::text",
      "name": "text",
      "kind": "function",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text<'a> (snapshot : & 'a Snapshot, id : & str, expected : & str,) -> Result<& 'a Node, SemanticAssertionError>",
      "cfg": []
    },
    {
      "id": "gpui_kit_testkit::visible",
      "name": "visible",
      "kind": "function",
      "package": "gpui-box-kit-testkit",
      "crate": "gpui_kit_testkit",
      "module": "",
      "path": "gpui_kit_testkit",
      "source": "crates/gpui-kit-testkit/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn visible<'a> (snapshot : & 'a Snapshot, id : & str) -> Result<& 'a Node, SemanticAssertionError>",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::ActiveTheme",
      "name": "ActiveTheme",
      "kind": "trait",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Reads the active theme from any context that dereferences to [`App`].",
      "documentation": "Reads the active theme from any context that dereferences to [`App`].\n\nComponents take `&mut App` during render and pull the theme themselves, so\ncallers never thread a `&Theme` through builder arguments.",
      "signature": "# [doc = \" Reads the active theme from any context that dereferences to [`App`].\"] # [doc = \"\"] # [doc = \" Components take `&mut App` during render and pull the theme themselves, so\"] # [doc = \" callers never thread a `&Theme` through builder arguments.\"] pub trait ActiveTheme { fn theme (& self) -> & Theme; }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::AgentPalette",
      "name": "AgentPalette",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy)] pub struct AgentPalette { pub read : Hsla, pub network : Hsla, pub shell : Hsla, pub edit : Hsla, pub external : Hsla, pub evidence_wash : Hsla, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::AgentPalette::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (& self, role : AgentColor) -> Hsla",
      "cfg": [],
      "target": "AgentPalette"
    },
    {
      "id": "gpui_kit_theme::Borders",
      "name": "Borders",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq)] pub struct Borders { pub hairline : f32, pub thick : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::ColorChoice",
      "name": "ColorChoice",
      "kind": "enum",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The colour a variant is resolved against.",
      "documentation": "The colour a variant is resolved against.\n\nA palette group keeps the choice in the token document, so a retint or a\ntheme switch re-resolves it; a semantic role follows the theme's meaning;\nan explicit paint is the caller's own and travels unchanged.",
      "signature": "# [doc = \" The colour a variant is resolved against.\"] # [doc = \"\"] # [doc = \" A palette group keeps the choice in the token document, so a retint or a\"] # [doc = \" theme switch re-resolves it; a semantic role follows the theme's meaning;\"] # [doc = \" an explicit paint is the caller's own and travels unchanged.\"] # [derive (Debug, Clone, PartialEq)] pub enum ColorChoice { # [doc = \" A palette group by name, such as `\\\"indigo\\\"`; steps are chosen per\"] # [doc = \" appearance by the resolver.\"] Palette (SharedString), # [doc = \" One of the theme's semantic roles.\"] Semantic (SemanticColor), # [doc = \" An explicit caller-owned paint.\"] Custom (Hsla), }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::Colors",
      "name": "Colors",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone)] pub struct Colors { # [doc = \" Bordered in-content control material, never a backdrop glass surface.\"] pub control : Hsla, pub control_hover : Hsla, pub control_pressed : Hsla, pub control_hairline : Hsla, pub control_highlight : Hsla, # [doc = \" Appearance-independent reading roles for Clear glass above media.\"] pub on_media_foreground : Hsla, pub on_media_background : Hsla, pub on_media_hairline : Hsla, pub backdrop : Hsla, pub canvas : Hsla, pub sunken : Hsla, pub panel : Hsla, pub raised : Hsla, pub overlay : Hsla, # [doc = \" The modal veil, drawn over the page at `opacity.scrim`. Dark themes\"] # [doc = \" declare a cast the page does not have, because more black over a\"] # [doc = \" near-black backdrop is invisible.\"] pub scrim : Hsla, pub text : Hsla, pub text_muted : Hsla, pub text_faint : Hsla, pub text_placeholder : Hsla, pub text_disabled : Hsla, pub text_on_accent : Hsla, # [doc = \" The one filled control on a surface, and the label it carries.\"] # [doc = \"\"] # [doc = \" Its own role rather than `text` reused as a fill. A primary button\"] # [doc = \" painted in the theme's darkest ink is a decision a theme should be able\"] # [doc = \" to make or decline; borrowing the prose colour made it the only\"] # [doc = \" decision available. See `gpui_kit_tokens::InteractiveColor::PrimaryFill`.\"] pub primary_fill : Hsla, pub white_fill : Hsla, pub white_fill_hover : Hsla, pub white_fill_active : Hsla, pub text_on_primary_fill : Hsla, pub hover : Hsla, pub active : Hsla, pub selected : Hsla, pub hairline : Hsla, pub hairline_strong : Hsla, pub track : Hsla, pub divider : Hsla, pub focus : Hsla, pub accent : Hsla, pub accent_strong : Hsla, pub danger : Hsla, pub warning : Hsla, pub success : Hsla, pub info : Hsla, # [doc = \" The vocabulary of work in progress: the moving mark, the groove it\"] # [doc = \" travels, the shape of absent content, and the highlight that crosses\"] # [doc = \" it. The mark carries the theme's accent so the moving part is legible\"] # [doc = \" at any stroke; the quiet roles stay grey. Both are the token\"] # [doc = \" document's to change. See `gpui_kit_tokens::LoaderColors`.\"] pub loader_mark : Hsla, pub loader_track : Hsla, pub loader_placeholder : Hsla, pub loader_sheen : Hsla, # [doc = \" The categorical series scale, in order. Indexed by a chart and cycled\"] # [doc = \" past its end. See `gpui_kit_tokens::SequenceColors`.\"] pub sequence : SequenceScale, # [doc = \" The node canvas vocabulary: ports, edges, the label chip and the\"] # [doc = \" grid. See `gpui_kit_tokens::NodeColors`.\"] pub node : NodePalette, # [doc = \" Quiet tool-family tints and the wash behind expanded transcript\"] # [doc = \" evidence. See `gpui_kit_tokens::AgentColors`.\"] pub agent : AgentPalette, # [doc = \" The vocabulary code is painted in, wherever this library draws code.\"] # [doc = \" See `gpui_kit_tokens::SyntaxColors`.\"] pub syntax : SyntaxPalette, # [doc = \" The plane a terminal grid paints on, and the achromatic wash over its\"] # [doc = \" selected cells. See `gpui_kit_tokens::TerminalColors`.\"] pub terminal_background : Hsla, pub terminal_selection : Hsla, # [doc = \" ANSI slots 0-7 normal, 8-15 bright. Anything above 15 is the 6x6x6\"] # [doc = \" cube and the grey ramp, which are arithmetic rather than tokens.\"] pub terminal_ansi : [Hsla; 16], }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::ContrastTint",
      "name": "ContrastTint",
      "kind": "enum",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "How much primary text is mixed into decorative colour to keep it visible in both appearances.",
      "documentation": "How much primary text is mixed into decorative colour to keep it visible\nin both appearances.",
      "signature": "# [doc = \" How much primary text is mixed into decorative colour to keep it visible\"] # [doc = \" in both appearances.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum ContrastTint { Soft, Standard, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::Control",
      "name": "Control",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq)] pub struct Control { pub xs : ControlMetrics, pub sm : ControlMetrics, pub md : ControlMetrics, pub lg : ControlMetrics, pub touch : ControlMetrics, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::Control::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (& self, size : ControlSize) -> ControlMetrics",
      "cfg": [],
      "target": "Control"
    },
    {
      "id": "gpui_kit_theme::ControlMetrics",
      "name": "ControlMetrics",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq)] pub struct ControlMetrics { pub height : f32, pub padding_x : f32, pub gap : f32, pub font_size : f32, pub icon_size : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::Effects",
      "name": "Effects",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq)] pub struct Effects { pub field_focus : FieldFocus, pub edge_fade_band : f32, pub focus_ring_width : f32, pub focus_ring_alpha : f32, pub glow_alpha : f32, pub glow_blur : f32, # [doc = \" The bloom budget, negative: how far a state glow is pulled in before\"] # [doc = \" it is blurred, so it stays out of its neighbours' pixels.\"] pub glow_spread : f32, pub glass_alpha : f32, pub glass_frost_blur : f32, pub glass_saturation : f32, # [doc = \" Achromatic wash intensity; the theme appearance selects black or white.\"] pub glass_wash : f32, pub glass_bevel_ratio : f32, pub glass_bevel_min : f32, pub glass_bevel_max : f32, pub glass_dimming : f32, pub glass_flip_max_extent : f32, pub glass_shadow_min : f32, pub glass_shadow_max : f32, # [doc = \" Signed thickness multiplier controlling optical height and normal.\"] pub glass_refraction : f32, # [doc = \" Optical thickness in pixels; zero derives it from the optical bevel.\"] pub glass_thickness : f32, # [doc = \" Refractive index in 1..=2.5; one does not bend light.\"] pub glass_refractive_index : f32, # [doc = \" Nonnegative effective distance through the refracted medium to the 2D\"] # [doc = \" source plane, in pixels, not a physical air gap.\"] pub glass_backdrop_depth : f32, pub glass_dispersion : f32, pub glass_specular : f32, pub glass_transmission_gain : f32, pub glass_optical_lift : f32, pub glass_hairline : f32, pub glass_specular_sharpness : f32, pub glass_light_angle : f32, pub glass_merge_distance : f32, pub glass_contrast_flip_low : f32, pub glass_contrast_flip_high : f32, pub glass_press_depth : f32, # [doc = \" Foreground-only press scale; suppressed under reduced motion.\"] pub glass_press_scale : f32, pub scroll_edge_band : f32, pub scroll_edge_blur : f32, # [doc = \" How strongly a raised surface catches light along its top edge. The\"] # [doc = \" gradient itself is composed by the component, the way [`Theme::glow`]\"] # [doc = \" composes a bloom from a colour and an alpha.\"] pub sheen_alpha : f32, # [doc = \" The alpha an area fill starts at under a chart line, fading to nothing\"] # [doc = \" at the baseline.\"] pub area_wash_alpha : f32, # [doc = \" How strongly a node header band takes its category colour.\"] pub header_tint_alpha : f32, pub node_active_wash_alpha : f32, pub node_active_stroke_alpha : f32, pub node_traffic_alpha : f32, pub node_preview_alpha : f32, pub node_minimap_alpha : f32, pub node_overview_veil_alpha : f32, pub node_aura_resting_alpha : f32, pub node_aura_pulse_floor_alpha : f32, pub node_aura_pulse_peak_alpha : f32, pub node_aura_settle_peak_alpha : f32, pub node_aura_settle_expansion : f32, pub node_edge_hover_width_scale : f32, pub node_edge_selected_width_scale : f32, pub node_edge_glow_width_scale : f32, # [doc = \" How wide an identity rail is, in pixels: a node's category stripe or a\"] # [doc = \" callout's edge.\"] pub rail_width : f32, pub semantic_wash_faint_alpha : f32, pub semantic_wash_alpha : f32, pub semantic_wash_strong_alpha : f32, pub semantic_border_alpha : f32, pub accent_border_alpha : f32, pub accent_border_strong_alpha : f32, pub subtle_hover_alpha : f32, pub soft_contrast_alpha : f32, pub contrast_tint_alpha : f32, pub track_resting_alpha : f32, pub content_veil_alpha : f32, pub critical_fill_alpha : f32, pub critical_inactive_alpha : f32, pub variant_light_alpha : f32, pub variant_light_hover_alpha : f32, pub variant_light_active_alpha : f32, pub variant_subtle_hover_alpha : f32, pub variant_subtle_active_alpha : f32, pub primary_hover_opacity : f32, pub custom_color_readable_dark_floor : f32, pub custom_color_readable_light_ceiling : f32, pub custom_color_hover_lightness_delta : f32, pub custom_color_active_lightness_delta : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::Elevations",
      "name": "Elevations",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Shadows for each elevation step. Flat is intentionally empty rather than a transparent shadow, so a flat surface allocates no shadow work at all.",
      "documentation": "Shadows for each elevation step. Flat is intentionally empty rather than a\ntransparent shadow, so a flat surface allocates no shadow work at all.",
      "signature": "# [doc = \" Shadows for each elevation step. Flat is intentionally empty rather than a\"] # [doc = \" transparent shadow, so a flat surface allocates no shadow work at all.\"] # [derive (Debug, Clone, PartialEq)] pub struct Elevations { pub flat : Vec<BoxShadow>, pub raised : Vec<BoxShadow>, pub overlay : Vec<BoxShadow>, pub modal : Vec<BoxShadow>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::Elevations::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (& self, level : Elevation) -> & [BoxShadow]",
      "cfg": [],
      "target": "Elevations"
    },
    {
      "id": "gpui_kit_theme::Measures",
      "name": "Measures",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq)] pub struct Measures { pub settings_label : f32, pub readable_width : f32, pub dialog_width : f32, pub menu_min_width : f32, pub compact_menu_min_width : f32, pub menu_max_height : f32, pub compact_menu_max_height : f32, pub standalone_icon : f32, pub scrollbar_track : f32, pub scrollbar_thumb : f32, pub scrollbar_min_thumb : f32, pub caret_width : f32, pub text_decoration_width : f32, pub progress_track_height : f32, pub slider_track_height : f32, pub slider_vertical_height : f32, pub container_small : f32, pub container_medium : f32, pub container_large : f32, pub container_extra_large : f32, pub compact_overlay_width : f32, pub media_viewer_height : f32, pub timeline_rail_width : f32, pub status_mark : f32, pub node_edge_width : f32, pub node_edge_corner : f32, pub node_edge_lead : f32, pub node_edge_corridor : f32, pub node_edge_lane : f32, pub node_port : f32, pub node_progress : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::Motion",
      "name": "Motion",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq)] pub struct Motion { pub instant_ms : u64, pub quick_ms : u64, pub exit_ms : u64, pub menu_ms : u64, pub dialog_ms : u64, pub resize_ms : u64, pub entrance_ms : u64, pub spin_ms : u64, pub slow_ms : u64, # [doc = \" The gap between one member of a staggered group and the next.\"] pub stagger_step_ms : u64, pub stagger_max_items : usize, pub micro_bounce_ms : u64, pub micro_wobble_ms : u64, pub micro_pop_ms : u64, pub pulse_ms : u64, pub node_aura_pulse_ms : u64, pub node_flow_ms : u64, pub shimmer_ms : u64, pub toast_ms : u64, pub hover_card_open_ms : u64, pub hover_card_grace_ms : u64, pub feedback_ms : u64, pub celebration_ms : u64, pub confirmation_ms : u64, pub linear : [f32; 4], pub standard : [f32; 4], pub ease_in : [f32; 4], pub ease_out : [f32; 4], pub ease_in_out : [f32; 4], pub emphasized : [f32; 4], pub overshoot : [f32; 4], pub exit : [f32; 4], pub settle : [f32; 4], pub snappy : SpringTokens, pub smooth : SpringTokens, pub bouncy : SpringTokens, pub grab : SpringTokens, # [doc = \" How far a pressed control sinks, in pixels.\"] pub press_offset : f32, # [doc = \" How far a hovered control rises, in pixels.\"] pub hover_lift : f32, # [doc = \" The speed past which a released gesture is a flick, in pixels a second.\"] pub flick_velocity : f32, # [doc = \" How much of an overscroll is shown at the boundary.\"] pub rubber_band_tension : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::NodePalette",
      "name": "NodePalette",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The resolved node canvas vocabulary.",
      "documentation": "The resolved node canvas vocabulary.",
      "signature": "# [doc = \" The resolved node canvas vocabulary.\"] # [derive (Debug, Clone, Copy)] pub struct NodePalette { pub header_wash : Hsla, pub port_idle : Hsla, pub port_hover : Hsla, pub port_connected : Hsla, pub edge : Hsla, pub edge_target : Hsla, pub edge_active : Hsla, pub edge_flow_highlight : Hsla, pub edge_feedback : Hsla, pub edge_feedback_active : Hsla, pub aura_active : Hsla, pub aura_success : Hsla, pub aura_attention : Hsla, pub aura_danger : Hsla, pub label_wash : Hsla, pub grid : Hsla, pub grid_strong : Hsla, pub grid_axis : Hsla, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::NodePalette::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (& self, role : NodeColor) -> Hsla",
      "cfg": [],
      "target": "NodePalette"
    },
    {
      "id": "gpui_kit_theme::Opacity",
      "name": "Opacity",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq)] pub struct Opacity { pub disabled : f32, pub muted : f32, pub scrim : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::Radii",
      "name": "Radii",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq)] pub struct Radii { pub small : f32, pub control : f32, pub card : f32, pub dialog : f32, pub bubble : f32, pub pill : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::SemanticBorder",
      "name": "SemanticBorder",
      "kind": "enum",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Strengths of a semantic outline, from a report boundary through an active drop or canvas target.",
      "documentation": "Strengths of a semantic outline, from a report boundary through an active\ndrop or canvas target.",
      "signature": "# [doc = \" Strengths of a semantic outline, from a report boundary through an active\"] # [doc = \" drop or canvas target.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum SemanticBorder { Report, Selected, Target, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::SemanticWash",
      "name": "SemanticWash",
      "kind": "enum",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Strengths of a semantic colour used as a background wash.",
      "documentation": "Strengths of a semantic colour used as a background wash.",
      "signature": "# [doc = \" Strengths of a semantic colour used as a background wash.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum SemanticWash { Faint, Standard, Strong, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::SequenceScale",
      "name": "SequenceScale",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The resolved categorical series scale.",
      "documentation": "The resolved categorical series scale.\n\nA list rather than named fields, because a series is chosen by position:\nthe third slice is the third colour, and a caller with more series than\nthe scale has colours reads through [`Self::get`], which wraps.",
      "signature": "# [doc = \" The resolved categorical series scale.\"] # [doc = \"\"] # [doc = \" A list rather than named fields, because a series is chosen by position:\"] # [doc = \" the third slice is the third colour, and a caller with more series than\"] # [doc = \" the scale has colours reads through [`Self::get`], which wraps.\"] # [derive (Debug, Clone, PartialEq)] pub struct SequenceScale { pub categorical : Vec<Hsla>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::SequenceScale::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The colour of series `index`, cycling past the end of the scale.",
      "documentation": "The colour of series `index`, cycling past the end of the scale.",
      "signature": "pub fn get (& self, index : usize) -> Hsla",
      "cfg": [],
      "target": "SequenceScale"
    },
    {
      "id": "gpui_kit_theme::SequenceScale::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "SequenceScale"
    },
    {
      "id": "gpui_kit_theme::SequenceScale::len",
      "name": "len",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn len (& self) -> usize",
      "cfg": [],
      "target": "SequenceScale"
    },
    {
      "id": "gpui_kit_theme::Spacing",
      "name": "Spacing",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq)] pub struct Spacing { pub xxs : f32, pub xs : f32, pub sm : f32, pub md : f32, pub lg : f32, pub xl : f32, pub xxl : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::SyntaxPalette",
      "name": "SyntaxPalette",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The resolved paint classes of code.",
      "documentation": "The resolved paint classes of code.\n\nA struct rather than a lookup by name, so a renderer that asks for a class\nthis library does not have fails to compile instead of falling back to a\ncolour that happens to be there.",
      "signature": "# [doc = \" The resolved paint classes of code.\"] # [doc = \"\"] # [doc = \" A struct rather than a lookup by name, so a renderer that asks for a class\"] # [doc = \" this library does not have fails to compile instead of falling back to a\"] # [doc = \" colour that happens to be there.\"] # [derive (Debug, Clone, Copy)] pub struct SyntaxPalette { pub keyword : Hsla, pub string : Hsla, pub comment : Hsla, pub number : Hsla, pub inline : Hsla, pub inline_wash : Hsla, pub added : Hsla, pub added_wash : Hsla, pub removed : Hsla, pub removed_wash : Hsla, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::SyntaxPalette::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (& self, class : SyntaxColor) -> Hsla",
      "cfg": [],
      "target": "SyntaxPalette"
    },
    {
      "id": "gpui_kit_theme::Theme",
      "name": "Theme",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "A cheaply cloned handle to one complete resolved token document.",
      "documentation": "A cheaply cloned handle to one complete resolved token document.\n\nRender paths clone this handle without cloning the palette, shadows,\nstrings, or sequence scale behind it. Use [`Theme::modify`] to derive an\nadjusted theme while keeping the original unchanged.",
      "signature": "# [doc = \" A cheaply cloned handle to one complete resolved token document.\"] # [doc = \"\"] # [doc = \" Render paths clone this handle without cloning the palette, shadows,\"] # [doc = \" strings, or sequence scale behind it. Use [`Theme::modify`] to derive an\"] # [doc = \" adjusted theme while keeping the original unchanged.\"] # [derive (Debug, Clone)] pub struct Theme (Arc<ThemeData>);",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::Theme::color_border",
      "name": "color_border",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "A theme-owned boundary strength applied to a caller-owned colour.",
      "documentation": "A theme-owned boundary strength applied to a caller-owned colour.",
      "signature": "pub fn color_border (& self, color : Hsla, strength : SemanticBorder) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::color_wash",
      "name": "color_wash",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "A caller-owned colour used as a background without becoming a solid fill. The strength remains theme-owned even when the hue is not.",
      "documentation": "A caller-owned colour used as a background without becoming a solid\nfill. The strength remains theme-owned even when the hue is not.",
      "signature": "pub fn color_wash (& self, color : Hsla, strength : SemanticWash) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::content_veil",
      "name": "content_veil",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn content_veil (& self) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::contrast",
      "name": "contrast",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "How far apart two paints read, as the WCAG ratio, with any translucency in `foreground` composited onto `background` first.",
      "documentation": "How far apart two paints read, as the WCAG ratio, with any\ntranslucency in `foreground` composited onto `background` first.\n\nExposed so a host can hold its own colour choices to the same floors\nthis library holds its themes to — 4.5:1 for body text, 3:1 for\nanything that carries an identity without being read as prose —\ninstead of shipping a combination nobody measured.",
      "signature": "pub fn contrast (& self, foreground : Hsla, background : Hsla) -> f32",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::contrast_tint",
      "name": "contrast_tint",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn contrast_tint (& self, color : Hsla, strength : ContrastTint) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::control_shadows",
      "name": "control_shadows",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "In-content control lighting: the requested elevation plus a top inset highlight. Knobs use `Raised`; fields use `Flat`. Focus and invalid halos append to this list so they never erase the resting material.",
      "documentation": "In-content control lighting: the requested elevation plus a top inset\nhighlight. Knobs use `Raised`; fields use `Flat`. Focus and invalid\nhalos append to this list so they never erase the resting material.",
      "signature": "pub fn control_shadows (& self, level : Elevation) -> Vec<BoxShadow>",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::critical_window_fill",
      "name": "critical_window_fill",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn critical_window_fill (& self, active : bool) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::easing",
      "name": "easing",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn easing (& self, easing : MotionEasing) -> [f32; 4]",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::focus_ring",
      "name": "focus_ring",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The soft halo drawn around whichever control currently has the keyboard.",
      "documentation": "The soft halo drawn around whichever control currently has the keyboard.\n\nThe page ground is the default substrate. A control that paints a\ndifferent fill calls [`Self::focus_ring_on`] so the single focus colour\ncan switch to a readable pole instead of gaining a permanent counter\noutline.",
      "signature": "pub fn focus_ring (& self) -> Vec<BoxShadow>",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::focus_ring_on",
      "name": "focus_ring_on",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The focus halo resolved against the surface it will be drawn on.",
      "documentation": "The focus halo resolved against the surface it will be drawn on.\n\n`background` is what lies *behind* the control — the well a field sits\nin, the card a node stands on, the page. It is not the control's own\nfill. The halo is a ring, cast outside the element's shape, so the fill\nis the one surface it never touches; choosing a colour legible against\nthe fill picks for a surface the ring is never drawn on.\n\nA field is the case that reads as the exception and is not one. A field\npaints a well, so `theme.surface(Surface::Sunken)` is the obvious thing\nto hand this — and it is exactly the mistake above, because the well is\nthe fill and the ring is drawn outside it, on the form. Every field in\nthis library therefore takes [`Self::focus_ring`] and the page ground.\nReach for this one only when the ring will genuinely be cast onto\nsomething other than the page.\n\nThat distinction used to be academic, because the halo was a drop\nshadow painted under the element as well as around it. It stopped being\nacademic the moment the element was cut out of it: a primary button\nwhose fill is the accent asks this for a pole readable on accent, gets\nnear-black on a dark theme, and paints it onto a dark dialog.",
      "signature": "pub fn focus_ring_on (& self, background : Hsla) -> Vec<BoxShadow>",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::from_tokens",
      "name": "from_tokens",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Builds a theme from any validated token document at one density.",
      "documentation": "Builds a theme from any validated token document at one density.\n\nDensity scales spacing, control geometry and type independently, and\nrounds to whole pixels so compact layouts stay on the pixel grid.",
      "signature": "pub fn from_tokens (tokens : & TokenDocument, density : Density) -> Self",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The theme in force here, which is the innermost override if a subtree installed one and the registry's active theme otherwise.",
      "documentation": "The theme in force here, which is the innermost override if a subtree\ninstalled one and the registry's active theme otherwise.",
      "signature": "pub fn get (cx : & App) -> & Self",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::glow",
      "name": "glow",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The colour a surface in a named state bleeds into the pixels around it.",
      "documentation": "The colour a surface in a named state bleeds into the pixels around it.\n\nIt is the state itself made visible at the edge, which is what lets a\nsurface report \"running\" or \"failed\" without a border drawn round it.\nBlurred and unoffset, so nothing about it reads as a line.\n\nPulled in by the bloom budget before it is blurred: an unpulled glow\nputs its full alpha on the surface's own edge and reaches its whole\nblur past it, which is how a failed panel came to tint the panel\nbeside it.",
      "signature": "pub fn glow (& self, color : Hsla) -> Vec<BoxShadow>",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::install",
      "name": "install",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Installs the bundled theme registry. Idempotent.",
      "documentation": "Installs the bundled theme registry. Idempotent.",
      "signature": "pub fn install (cx : & mut App)",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::layer",
      "name": "layer",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn layer (& self, layer : Layer) -> i32",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::mix",
      "name": "mix",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Blends two paints perceptually, `0` returning `from` and `1` returning `to`.",
      "documentation": "Blends two paints perceptually, `0` returning `from` and `1` returning\n`to`.\n\nThis is what a crossfade between two *meanings* needs — a node that was\nrunning and is now failed, a chart series retinted, a state that\nchanged while the reader was looking at it. Blending in the channels a\npaint is stored in takes the midpoint through a darker, duller colour\nthan either end, because those channels are gamma-encoded rather than\nproportional to light; a crossfade between two saturated states dips\nthrough mud on the way, which reads as a third state nobody declared.\nIn OKLab the midpoint is the colour a reader would name as halfway.\n\nAlpha travels linearly, since it is a coverage and not a colour.",
      "signature": "pub fn mix (& self, from : Hsla, to : Hsla, amount : f32) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::modify",
      "name": "modify",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Derives a theme by mutating a copy-on-write view of its resolved data.",
      "documentation": "Derives a theme by mutating a copy-on-write view of its resolved data.\n\nCloning a theme is constant-time. The complete data is cloned only\nwhen this method adjusts a shared theme; the source handle and every\nother clone keep their original values. If the callback replaces or\ncopy-on-write mutates `palette`, its lookup tables are rebuilt before\nthe result is returned.",
      "signature": "pub fn modify (mut self, adjust : impl FnOnce (& mut ThemeData)) -> Self",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::palette_color",
      "name": "palette_color",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "A palette entry, addressed as `\"group.step\"`.",
      "documentation": "A palette entry, addressed as `\"group.step\"`.\n\nThe typed roles are the vocabulary components paint from, and a\ncomponent never reaches past them. This is for the application that\nhas paint the shared vocabulary does not model — a colour per person,\na syntax class, a diff sign — and wants it to live in the same token\ndocument, validated by the same parse and retinted by the same\nregistry, instead of as literals in views.\n\nAn entry the active document does not declare is `None`, never a\nguessed colour: a theme that has not named a scale has not agreed to\npaint it.",
      "signature": "pub fn palette_color (& self, path : & str) -> Option<Hsla>",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::radius",
      "name": "radius",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn radius (& self, step : Radius) -> f32",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::readable_on",
      "name": "readable_on",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The text pole that stays readable on `background`.",
      "documentation": "The text pole that stays readable on `background`.\n\n[`Self::variant_colors`] answers this for the tiers it resolves, and\nit was the only place that did. A caller drawing its own paint — a\nregion band, a chart series, a chip in a colour the host owns — had to\neither guess a pole or re-derive this from the contrast primitives,\nand the guess is wrong on exactly the themes whose surfaces sit near\nthe middle. This is the same choice, made once and available on its\nown.\n\nA translucent `background` is composited over the theme's canvas\nfirst, because a wash is read against the page it is drawn on rather\nthan against nothing.",
      "signature": "pub fn readable_on (& self, background : Hsla) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::readable_over",
      "name": "readable_over",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The same, against a caller-named substrate rather than the canvas.",
      "documentation": "The same, against a caller-named substrate rather than the canvas.\n\nA translucent paint on a raised card is read over the card, and\nanswering as though it were on the page would pick the wrong pole\nexactly when the two surfaces are far apart.",
      "signature": "pub fn readable_over (& self, background : Hsla, substrate : Hsla) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::resting_track",
      "name": "resting_track",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn resting_track (& self) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::scaled",
      "name": "scaled",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The same theme with every drawn measurement taken at `factor` of its size.",
      "documentation": "The same theme with every drawn measurement taken at `factor` of its\nsize.\n\nThis exists for one situation, and it is worth stating because the\nobvious reading — a density knob a product can turn — is the wrong one.\nDensity is that, it is an axis of the document, and it is discrete.\nThis is for a container that draws its own chrome at a scale of its own\nand then mounts content it did not build: a card on a zoomed canvas is\nthe case in this library. The card scales its type, its padding and its\nports; anything the caller seats in it is built from the theme in force\nand comes out at full size, so at three-quarter zoom a mounted slider\nis a third larger than the card's own controls. Handing the subtree a\nscaled theme through [`crate`-level `ThemeOverlay`] is how the two are\nmade to agree, because GPUI Box has no transform for an element subtree\n— `TransformationMatrix` reaches sprites alone — so the size has to be\nin the tokens the subtree reads rather than in a matrix over its\npixels.\n\nColour, opacity, motion, elevation and the effect alphas are untouched:\na control drawn smaller is the same control, and an animation does not\nrun at a different speed because the thing it moves shrank.\n\nThe measures that size overlays and page regions are untouched too. A\nmenu, dialog or popover opened from inside the subtree is drawn against\nthe window rather than against the card, so scaling it would answer the\nwrong question and produce a menu nobody can read.",
      "signature": "pub fn scaled (self, factor : f32) -> Self",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::semantic_border",
      "name": "semantic_border",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "A semantic boundary, with stronger tiers reserved for selected and actively targeted entities.",
      "documentation": "A semantic boundary, with stronger tiers reserved for selected and\nactively targeted entities.",
      "signature": "pub fn semantic_border (& self, color : SemanticColor, strength : SemanticBorder) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::semantic_color",
      "name": "semantic_color",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn semantic_color (& self, color : SemanticColor) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::semantic_wash",
      "name": "semantic_wash",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "A semantic colour used as a background without becoming a solid fill.",
      "documentation": "A semantic colour used as a background without becoming a solid fill.",
      "signature": "pub fn semantic_wash (& self, color : SemanticColor, strength : SemanticWash) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::shadow",
      "name": "shadow",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn shadow (& self, level : Elevation) -> & [BoxShadow]",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::space",
      "name": "space",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn space (& self, step : Space) -> f32",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::spring",
      "name": "spring",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn spring (& self, preset : SpringPreset) -> SpringTokens",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::studio_dark",
      "name": "studio_dark",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn studio_dark () -> Self",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::studio_light",
      "name": "studio_light",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn studio_light () -> Self",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::subtle_hover",
      "name": "subtle_hover",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn subtle_hover (& self) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::surface",
      "name": "surface",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn surface (& self, surface : Surface) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::text_color",
      "name": "text_color",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text_color (& self, tone : TextTone) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::type_style",
      "name": "type_style",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn type_style (& self, scale : TypeScale) -> TypeStyle",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::variant_colors",
      "name": "variant_colors",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Resolves the shared presentation tiers for one colour.",
      "documentation": "Resolves the shared presentation tiers for one colour.\n\nEvery coloured component reads the same seven tiers through this one\nresolver, so \"a light indigo chip\" and \"a light indigo button\" agree\non what light and indigo mean. The tier decides how loud the colour\nis; the colour itself is the caller's, named as a palette group, a\nsemantic role, or an explicit paint.",
      "signature": "pub fn variant_colors (& self, variant : Variant, color : & ColorChoice) -> VariantColors",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::washed_surface",
      "name": "washed_surface",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "A wash resolved against the surface it is tinting, as one opaque fill.",
      "documentation": "A wash resolved against the surface it is tinting, as one opaque fill.\n\nA wash is translucent by construction, so painting one *as* a surface\nleaves a hole rather than a tint: the page reads through it, and so\ndoes the drop shadow an elevated surface casts under its own footprint.\nA surface that means to lean towards a colour asks for this, and gets a\nsingle fill it can still be read against.",
      "signature": "pub fn washed_surface (& self, surface : Surface, wash : Hsla) -> Hsla",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::Theme::with_reduce_transparency",
      "name": "with_reduce_transparency",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Projects the host's Reduce transparency preference into this theme. Kit does not read platform settings. Glass and built-in overlays resolve to Frosted while this preference is enabled.",
      "documentation": "Projects the host's Reduce transparency preference into this theme.\nKit does not read platform settings. Glass and built-in overlays\nresolve to Frosted while this preference is enabled.",
      "signature": "pub fn with_reduce_transparency (self, reduce : bool) -> Self",
      "cfg": [],
      "target": "Theme"
    },
    {
      "id": "gpui_kit_theme::ThemeData",
      "name": "ThemeData",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The complete resolved data behind a [`Theme`].",
      "documentation": "The complete resolved data behind a [`Theme`].\n\nIts fields stay readable so existing component paint code remains direct.\nMutations go through [`Theme::modify`], which uses copy-on-write and keeps\nthe pre-resolved palette lookup tables coherent.",
      "signature": "# [doc = \" The complete resolved data behind a [`Theme`].\"] # [doc = \"\"] # [doc = \" Its fields stay readable so existing component paint code remains direct.\"] # [doc = \" Mutations go through [`Theme::modify`], which uses copy-on-write and keeps\"] # [doc = \" the pre-resolved palette lookup tables coherent.\"] # [derive (Debug, Clone)] pub struct ThemeData { pub id : SharedString, pub name : SharedString, pub appearance : Appearance, pub density : Density, # [doc = \" Reader preference projected by the host; never inferred from tokens.\"] pub reduce_transparency : bool, pub colors : Colors, pub typography : Typography, pub spacing : Spacing, pub measures : Measures, pub radii : Radii, pub control : Control, pub borders : Borders, pub opacity : Opacity, pub motion : Motion, pub elevation : Elevations, pub z_index : ZIndices, pub effects : Effects, # [doc = \" The active document's palette, carried so that paint the shared role\"] # [doc = \" vocabulary has no slot for still travels with the theme rather than\"] # [doc = \" being read from a second document the registry does not know about.\"] # [doc = \"\"] # [doc = \" Read it through [`Theme::palette_color`]. It remains separately shared\"] # [doc = \" so a rare copy-on-write theme adjustment need not clone the raw map.\"] pub palette : Arc<Palette>, palette_steps : PaletteSteps, resolved_palette : HashMap<SharedString, Hsla>, resolved_ramps : HashMap<SharedString, ResolvedRamp>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::ThemeOverrides",
      "name": "ThemeOverrides",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The stack of subtree theme overrides, innermost last.",
      "documentation": "The stack of subtree theme overrides, innermost last.\n\nA component reads [`Theme::get`] and cannot tell whether the theme it got\ncame from the registry or from an ancestor that overrode it, which is what\nmakes the escape hatch work without every component learning about it.",
      "signature": "# [doc = \" The stack of subtree theme overrides, innermost last.\"] # [doc = \"\"] # [doc = \" A component reads [`Theme::get`] and cannot tell whether the theme it got\"] # [doc = \" came from the registry or from an ancestor that overrode it, which is what\"] # [doc = \" makes the escape hatch work without every component learning about it.\"] # [derive (Default)] pub struct ThemeOverrides (Vec<Theme>);",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry",
      "name": "ThemeRegistry",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The set of themes an application can switch between at runtime.",
      "documentation": "The set of themes an application can switch between at runtime.",
      "signature": "# [doc = \" The set of themes an application can switch between at runtime.\"] # [derive (Debug)] pub struct ThemeRegistry { tokens : Vec<Arc<TokenDocument>>, active : usize, density : Density, reduce_transparency : bool, theme : Theme, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry::activate",
      "name": "activate",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn activate (& mut self, id : & str) -> bool",
      "cfg": [],
      "target": "ThemeRegistry"
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry::active",
      "name": "active",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn active (& self) -> & Theme",
      "cfg": [],
      "target": "ThemeRegistry"
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry::counterpart",
      "name": "counterpart",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Returns false when the id is not registered, leaving the active theme untouched rather than falling back to a default the caller did not ask for. The registered theme of the opposite appearance, if one exists.",
      "documentation": "Returns false when the id is not registered, leaving the active theme\nuntouched rather than falling back to a default the caller did not ask\nfor.\nThe registered theme of the opposite appearance, if one exists.\n\nPrefers an id that is this theme's id with `-dark` / `-light` swapped,\nthen any other document of the opposite appearance. A product that\nregistered only one appearance has no counterpart, which a glass\nsurface treats as \"do not flip\".",
      "signature": "pub fn counterpart (& self) -> Option<Theme>",
      "cfg": [],
      "target": "ThemeRegistry"
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry::counterpart_for",
      "name": "counterpart_for",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The opposite appearance of `theme`, resolved from this registry.",
      "documentation": "The opposite appearance of `theme`, resolved from this registry.",
      "signature": "pub fn counterpart_for (& self, theme : & Theme) -> Option<Theme>",
      "cfg": [],
      "target": "ThemeRegistry"
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry::density",
      "name": "density",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn density (& self) -> Density",
      "cfg": [],
      "target": "ThemeRegistry"
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry::global",
      "name": "global",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn global (cx : & App) -> & Self",
      "cfg": [],
      "target": "ThemeRegistry"
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry::ids",
      "name": "ids",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ids (& self) -> Vec<SharedString>",
      "cfg": [],
      "target": "ThemeRegistry"
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "ThemeRegistry"
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry::reduce_transparency",
      "name": "reduce_transparency",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The host-projected reader preference, preserved across theme changes.",
      "documentation": "The host-projected reader preference, preserved across theme changes.",
      "signature": "pub fn reduce_transparency (& self) -> bool",
      "cfg": [],
      "target": "ThemeRegistry"
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry::register",
      "name": "register",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Adds or replaces a theme. A registered id replaces the earlier document so an application can override a bundled theme without shadowing it.",
      "documentation": "Adds or replaces a theme. A registered id replaces the earlier document\nso an application can override a bundled theme without shadowing it.",
      "signature": "pub fn register (& mut self, tokens : TokenDocument)",
      "cfg": [],
      "target": "ThemeRegistry"
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry::register_json",
      "name": "register_json",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn register_json (& mut self, json : & str) -> Result<(), TokenError>",
      "cfg": [],
      "target": "ThemeRegistry"
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry::set_density",
      "name": "set_density",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_density (& mut self, density : Density)",
      "cfg": [],
      "target": "ThemeRegistry"
    },
    {
      "id": "gpui_kit_theme::ThemeRegistry::set_reduce_transparency",
      "name": "set_reduce_transparency",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Projects the host's preference into active and counterpart themes. Repeating the same value leaves the resolved theme unchanged.",
      "documentation": "Projects the host's preference into active and counterpart themes.\nRepeating the same value leaves the resolved theme unchanged.",
      "signature": "pub fn set_reduce_transparency (& mut self, reduce : bool)",
      "cfg": [],
      "target": "ThemeRegistry"
    },
    {
      "id": "gpui_kit_theme::TypeStyle",
      "name": "TypeStyle",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq)] pub struct TypeStyle { pub size : f32, pub line_height : f32, pub weight : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::Typography",
      "name": "Typography",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone)] pub struct Typography { pub sans : SharedString, pub sans_fallback : SharedString, pub mono : SharedString, pub mono_fallback : SharedString, pub readout_scale : f32, pub caption : TypeStyle, pub label : TypeStyle, pub body : TypeStyle, pub strong : TypeStyle, pub subtitle : TypeStyle, pub title : TypeStyle, pub code : TypeStyle, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::Variant",
      "name": "Variant",
      "kind": "enum",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The presentation tiers a coloured component can take, loudest first.",
      "documentation": "The presentation tiers a coloured component can take, loudest first.\n\nOne vocabulary for every coloured surface, resolved by\n[`Theme::variant_colors`] so components cannot each invent a private\nmeaning for \"light\". `Default` is the neutral tier: it reads the theme's\nown surface colours and ignores the colour choice entirely.",
      "signature": "# [doc = \" The presentation tiers a coloured component can take, loudest first.\"] # [doc = \"\"] # [doc = \" One vocabulary for every coloured surface, resolved by\"] # [doc = \" [`Theme::variant_colors`] so components cannot each invent a private\"] # [doc = \" meaning for \\\"light\\\". `Default` is the neutral tier: it reads the theme's\"] # [doc = \" own surface colours and ignores the colour choice entirely.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum Variant { # [doc = \" A solid block of the colour with whichever theme text pole stays\"] # [doc = \" readable across its resting and pressed paints.\"] Filled, # [doc = \" A wash of the colour under text in the colour.\"] Light, # [doc = \" Text in the colour that gains a wash only under the pointer.\"] Subtle, # [doc = \" The neutral control surface; the colour choice is not consulted.\"] # [default] Default, # [doc = \" Text in the colour with no surface of its own.\"] Transparent, # [doc = \" A white surface with text in the colour, for tinted backdrops.\"] White, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::Variant::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The stable name a semantic node publishes for the tier.",
      "documentation": "The stable name a semantic node publishes for the tier.",
      "signature": "pub const fn name (self) -> & 'static str",
      "cfg": [],
      "target": "Variant"
    },
    {
      "id": "gpui_kit_theme::VariantColors",
      "name": "VariantColors",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "The resolved paints of one variant tier in one colour.",
      "documentation": "The resolved paints of one variant tier in one colour.",
      "signature": "# [doc = \" The resolved paints of one variant tier in one colour.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct VariantColors { pub background : Hsla, pub background_hover : Hsla, pub background_active : Hsla, pub text : Hsla, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::ZIndices",
      "name": "ZIndices",
      "kind": "struct",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub struct ZIndices { pub content : i32, pub sticky : i32, pub dock : i32, pub popover : i32, pub tooltip : i32, pub modal : i32, pub toast : i32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::ZIndices::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (& self, layer : Layer) -> i32",
      "cfg": [],
      "target": "ZIndices"
    },
    {
      "id": "gpui_kit_theme::activate_theme",
      "name": "activate_theme",
      "kind": "function",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Switches the active theme and repaints every window.",
      "documentation": "Switches the active theme and repaints every window.",
      "signature": "pub fn activate_theme (id : & str, cx : & mut App) -> bool",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::pop_theme",
      "name": "pop_theme",
      "kind": "function",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Removes the innermost override installed by [`push_theme`].",
      "documentation": "Removes the innermost override installed by [`push_theme`].",
      "signature": "pub fn pop_theme (cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::push_theme",
      "name": "push_theme",
      "kind": "function",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Installs `theme` for everything rendered until the matching [`pop_theme`].",
      "documentation": "Installs `theme` for everything rendered until the matching [`pop_theme`].\n\nThis is the low half of the subtree escape hatch. Callers use\n`gpui_kit::ThemeOverlay`, which pairs the two around one child and cannot\nleak an override into a sibling.",
      "signature": "pub fn push_theme (cx : & mut App, theme : Theme)",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::reexport-1",
      "name": "gpui_kit_tokens :: { AgentColor , Appearance , ControlSize , Density , Elevation , FieldFocus , Layer , LoaderColor , MotionDuration , MotionEasing , NodeColor , Palette , Radius , SEQUENCE_LENGTH , SemanticColor , Space , SpringPreset , SpringTokens , Surface , SyntaxColor , TextTone , TypeScale , }",
      "kind": "reexport",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui_kit_tokens::{ AgentColor, Appearance, ControlSize, Density, Elevation, FieldFocus, Layer, LoaderColor, MotionDuration, MotionEasing, NodeColor, Palette, Radius, SEQUENCE_LENGTH, SemanticColor, Space, SpringPreset, SpringTokens, Surface, SyntaxColor, TextTone, TypeScale, };",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::set_density",
      "name": "set_density",
      "kind": "function",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Changes the density axis and repaints every window.",
      "documentation": "Changes the density axis and repaints every window.",
      "signature": "pub fn set_density (density : Density, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit_theme::set_reduce_transparency",
      "name": "set_reduce_transparency",
      "kind": "function",
      "package": "gpui-box-kit-theme",
      "crate": "gpui_kit_theme",
      "module": "",
      "path": "gpui_kit_theme",
      "source": "crates/gpui-kit-theme/src/lib.rs",
      "summary": "Projects the host's Reduce transparency setting and repaints every window. Kit does not read platform preferences; this persists across theme/density changes without requiring a scoped theme override around the application.",
      "documentation": "Projects the host's Reduce transparency setting and repaints every window.\nKit does not read platform preferences; this persists across theme/density\nchanges without requiring a scoped theme override around the application.",
      "signature": "pub fn set_reduce_transparency (reduce : bool, cx : & mut App)",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::AgentColor",
      "name": "AgentColor",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "Paint roles used by quiet evidence inside an agent transcript.",
      "documentation": "Paint roles used by quiet evidence inside an agent transcript.\n\nThe five families classify a tool without colouring the tool's arguments\nor result. `EvidenceWash` is the optional, deliberately faint plane under\nexpanded caller-owned text.",
      "signature": "# [doc = \" Paint roles used by quiet evidence inside an agent transcript.\"] # [doc = \"\"] # [doc = \" The five families classify a tool without colouring the tool's arguments\"] # [doc = \" or result. `EvidenceWash` is the optional, deliberately faint plane under\"] # [doc = \" expanded caller-owned text.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum AgentColor { Read, Network, Shell, Edit, External, EvidenceWash, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::AgentColor::path",
      "name": "path",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn path (self) -> & 'static str",
      "cfg": [],
      "target": "AgentColor"
    },
    {
      "id": "gpui_kit_tokens::AgentColors",
      "name": "AgentColors",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "Quiet classification paint for evidence in an agent transcript.",
      "documentation": "Quiet classification paint for evidence in an agent transcript.\n\nThese are not state severities. A failed shell call still uses danger for\nits failure mark; `shell` only identifies what kind of work the row did.",
      "signature": "# [doc = \" Quiet classification paint for evidence in an agent transcript.\"] # [doc = \"\"] # [doc = \" These are not state severities. A failed shell call still uses danger for\"] # [doc = \" its failure mark; `shell` only identifies what kind of work the row did.\"] # [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct AgentColors { pub read : String, pub network : String, pub shell : String, pub edit : String, pub external : String, pub evidence_wash : String, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::Appearance",
      "name": "Appearance",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] # [serde (rename_all = \"lowercase\")] pub enum Appearance { Light, Dark, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::BorderTokens",
      "name": "BorderTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct BorderTokens { pub hairline : f32, pub thick : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::BorderWeight",
      "name": "BorderWeight",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum BorderWeight { Hairline, Thick, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::ColorTokens",
      "name": "ColorTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct ColorTokens { pub on_media_foreground : String, pub on_media_background : String, pub on_media_hairline : String, pub palette : color::Palette, pub palette_steps : PaletteStepTokens, pub surface : SurfaceColors, pub text : TextColors, pub interactive : InteractiveColors, pub semantic : SemanticColors, pub sequence : SequenceColors, pub node : NodeColors, pub agent : AgentColors, pub loader : LoaderColors, pub syntax : SyntaxColors, pub terminal : TerminalColors, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::ControlSize",
      "name": "ControlSize",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "Explicit control sizing; input modality is never inferred from the OS.",
      "documentation": "Explicit control sizing; input modality is never inferred from the OS.",
      "signature": "# [doc = \" Explicit control sizing; input modality is never inferred from the OS.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default, Hash, PartialOrd, Ord)] pub enum ControlSize { Xs, Sm, # [default] Md, Lg, # [doc = \" Touch-oriented geometry, unaffected by compact density. Components must\"] # [doc = \" allocate the target in layout, hit testing and accessibility together;\"] # [doc = \" selecting this size alone does not certify an entire mobile interface.\"] Touch, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::ControlStep",
      "name": "ControlStep",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct ControlStep { pub height : f32, pub padding_x : f32, pub gap : f32, pub font_size : f32, pub icon_size : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::ControlTokens",
      "name": "ControlTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct ControlTokens { pub xs : ControlStep, pub sm : ControlStep, pub md : ControlStep, pub lg : ControlStep, pub touch : ControlStep, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::Density",
      "name": "Density",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The information-density axis applications expose as a preference.",
      "documentation": "The information-density axis applications expose as a preference.",
      "signature": "# [doc = \" The information-density axis applications expose as a preference.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default, Hash)] pub enum Density { Compact, # [default] Comfortable, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::DensityScale",
      "name": "DensityScale",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct DensityScale { pub space : f32, pub control : f32, pub font : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::DensityTokens",
      "name": "DensityTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct DensityTokens { pub compact : DensityScale, pub comfortable : DensityScale, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::DurationTokens",
      "name": "DurationTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct DurationTokens { pub instant : u64, pub quick : u64, # [doc = \" How long a surface takes to leave.\"] # [doc = \"\"] # [doc = \" Shorter than any arrival, because leaving is not information. An\"] # [doc = \" arrival has to be read — it says what has appeared and where it came\"] # [doc = \" from — while a departure has already been decided by the reader, and\"] # [doc = \" every millisecond of it is a millisecond they are waiting for the\"] # [doc = \" thing they asked to go to be gone.\"] pub exit : u64, pub menu : u64, pub dialog : u64, pub resize : u64, pub entrance : u64, # [doc = \" How long one full turn of a spinning mark takes.\"] pub spin : u64, # [doc = \" The longest step a user waits through deliberately: a panel taking a\"] # [doc = \" region over, or a graph laying itself out.\"] pub slow : u64, # [doc = \" The gap between one member of a staggered group and the next.\"] pub stagger_step : u64, # [doc = \" One-shot procedural reactions whose timing is distinct from general\"] # [doc = \" control response durations.\"] pub micro_bounce : u64, pub micro_wobble : u64, pub micro_pop : u64, pub pulse : u64, # [doc = \" One breath of a node aura that reports live work.\"] pub node_aura_pulse : u64, # [doc = \" One traversal of traffic from an edge's source to its destination.\"] pub node_flow : u64, # [doc = \" How long a loading placeholder's highlight takes to cross it.\"] pub shimmer : u64, pub toast : u64, pub hover_card_open : u64, pub hover_card_grace : u64, # [doc = \" A semantic one-shot response such as success, failure, or handoff.\"] pub feedback : u64, # [doc = \" A deliberately prominent one-shot response such as a reward.\"] pub celebration : u64, pub confirmation : u64, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::EasingTokens",
      "name": "EasingTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct EasingTokens { pub linear : [f32; 4], pub standard : [f32; 4], pub ease_in : [f32; 4], pub ease_out : [f32; 4], pub ease_in_out : [f32; 4], pub emphasized : [f32; 4], pub overshoot : [f32; 4], pub exit : [f32; 4], pub settle : [f32; 4], }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::EffectTokens",
      "name": "EffectTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct EffectTokens { pub field_focus : FieldFocus, pub edge_fade_band : f32, # [doc = \" How wide the ring around the focused control is drawn, in pixels.\"] pub focus_ring_width : f32, pub focus_ring_alpha : f32, # [doc = \" How strongly a surface that carries a state colour bleeds it into the\"] # [doc = \" pixels around its edge.\"] pub glow_alpha : f32, # [doc = \" How far that bleed reaches, in pixels.\"] pub glow_blur : f32, # [doc = \" The bloom budget: how far the glow is pulled in before it is blurred,\"] # [doc = \" in pixels. Negative by design.\"] # [doc = \"\"] # [doc = \" A blurred shadow at spread zero puts its full alpha at the surface's\"] # [doc = \" own edge and reaches `glowBlur` past it in every direction, which is\"] # [doc = \" how a failed card came to tint the card beside it and a running node\"] # [doc = \" came to be cut flat at the edge of its canvas. Pulling the shape in\"] # [doc = \" first keeps the state readable at the edge it belongs to and keeps it\"] # [doc = \" out of its neighbours' pixels. The validator holds `|glowSpread|`\"] # [doc = \" below `glowBlur`, because a bloom pulled in further than it is blurred\"] # [doc = \" is a glow nobody sees.\"] pub glow_spread : f32, # [doc = \" How opaque a frosted surface's own fill is over what it blurs. A theme\"] # [doc = \" that sets this to 1 declares itself opaque, and a frosted surface then\"] # [doc = \" paints no blur at all rather than blurring pixels nobody can see.\"] pub glass_alpha : f32, # [doc = \" How far Frosted and Regular Liquid scatter what is behind them, in pixels.\"] pub glass_frost_blur : f32, # [doc = \" Backdrop saturation multiplier before transmission gain. One is unchanged.\"] pub glass_saturation : f32, # [doc = \" Achromatic material wash intensity. Theme appearance chooses white for\"] # [doc = \" light and black for dark, avoiding two independently tunable directions\"] # [doc = \" that could disagree with the theme. This is not an element fill alpha.\"] pub glass_wash : f32, # [doc = \" Fraction of the control's short edge occupied by its optical profile.\"] pub glass_bevel_ratio : f32, # [doc = \" Lower and upper bounds for the responsive optical profile, in pixels.\"] pub glass_bevel_min : f32, pub glass_bevel_max : f32, # [doc = \" Media dimming opacity behind Clear glass.\"] pub glass_dimming : f32, # [doc = \" Square root of the largest control area permitted to flip appearance.\"] pub glass_flip_max_extent : f32, # [doc = \" Shadow alpha multipliers on bright and dark backdrops respectively.\"] pub glass_shadow_min : f32, pub glass_shadow_max : f32, # [doc = \" Signed thickness multiplier controlling both optical height and normal.\"] pub glass_refraction : f32, # [doc = \" Optical thickness in pixels; zero derives it from the optical bevel.\"] pub glass_thickness : f32, # [doc = \" Refractive index in the range 1..=2.5; one does not bend light.\"] pub glass_refractive_index : f32, # [doc = \" Nonnegative effective distance in pixels through the refracted medium\"] # [doc = \" to the 2D source plane. This is not a physical air gap.\"] pub glass_backdrop_depth : f32, # [doc = \" Fractional RGB variation of refractive index minus one.\"] pub glass_dispersion : f32, # [doc = \" Strength of Fresnel-weighted directional environment reflection.\"] pub glass_specular : f32, # [doc = \" Multiplicative light transmission through Liquid glass.\"] pub glass_transmission_gain : f32, # [doc = \" White additive lift applied inside the Liquid shader.\"] pub glass_optical_lift : f32, # [doc = \" Width of Liquid's measured lit edge, in pixels.\"] pub glass_hairline : f32, # [doc = \" How tight that highlight is. Larger is smaller and harder.\"] pub glass_specular_sharpness : f32, # [doc = \" Where the light that makes the highlight is, in radians clockwise from\"] # [doc = \" straight up. A surface that tracks the pointer starts here.\"] pub glass_light_angle : f32, # [doc = \" How close two glass surfaces in a group must be to join into one body,\"] # [doc = \" in pixels.\"] pub glass_merge_distance : f32, # [doc = \" Backdrop luminance below which a glass surface carries light content,\"] # [doc = \" and above which it carries dark. The two are apart rather than equal on\"] # [doc = \" purpose: a single threshold makes a surface over a backdrop sitting on\"] # [doc = \" it flip back and forth, and the gap is what stops that.\"] pub glass_contrast_flip_low : f32, pub glass_contrast_flip_high : f32, # [doc = \" How much thicker a pressable glass surface reads while pressed, as a\"] # [doc = \" factor on its refraction. 1 is a surface that does not deform.\"] pub glass_press_depth : f32, # [doc = \" Foreground-only visual scale while pressed; layout and the material\"] # [doc = \" outline stay fixed. A Kit policy, not a universal native constant.\"] # [doc = \" Reduced motion suppresses this transform.\"] pub glass_press_scale : f32, # [doc = \" How far a scroll-edge effect reaches from a floating surface into the\"] # [doc = \" scrolling content, in pixels.\"] pub scroll_edge_band : f32, # [doc = \" How far the soft scroll-edge effect scatters the content under that\"] # [doc = \" band, in pixels.\"] pub scroll_edge_blur : f32, # [doc = \" How strongly a raised surface catches light along its top edge.\"] # [doc = \"\"] # [doc = \" The scalar of a gradient rather than a gradient: this library composes\"] # [doc = \" one from a colour and an alpha ladder the way [`Self::glow_alpha`] is\"] # [doc = \" composed, so a theme sets how much light there is and the component\"] # [doc = \" decides which edge it falls on. Light themes carry less of it, because\"] # [doc = \" a white highlight on a near-white surface has nowhere to go and reads\"] # [doc = \" as a smudge rather than as a lit edge.\"] pub sheen_alpha : f32, # [doc = \" The alpha an area fill starts at under a chart line, fading to nothing\"] # [doc = \" at the baseline.\"] pub area_wash_alpha : f32, # [doc = \" How strongly a node's header band takes the node's category colour.\"] pub header_tint_alpha : f32, # [doc = \" Paint ladder for active routes, traffic marks, connection previews and\"] # [doc = \" minimap identities on a node canvas.\"] pub node_active_wash_alpha : f32, pub node_active_stroke_alpha : f32, pub node_traffic_alpha : f32, pub node_preview_alpha : f32, pub node_minimap_alpha : f32, # [doc = \" How far an overview pushes back the canvas the reader is not looking\"] # [doc = \" at.\"] # [doc = \"\"] # [doc = \" Strong enough that the two regions are plainly different and weak\"] # [doc = \" enough that the marks outside the view still read, because saying\"] # [doc = \" where the rest of the graph is, is the whole reason an overview exists.\"] pub node_overview_veil_alpha : f32, # [doc = \" The static and animated intensity ladder for state auras. Values scale\"] # [doc = \" the shared glow alpha; they never replace the semantic state colour.\"] pub node_aura_resting_alpha : f32, pub node_aura_pulse_floor_alpha : f32, pub node_aura_pulse_peak_alpha : f32, pub node_aura_settle_peak_alpha : f32, # [doc = \" How much wider a successful outcome begins before it contracts into\"] # [doc = \" the card and disappears, as a factor of the shared glow blur.\"] pub node_aura_settle_expansion : f32, # [doc = \" Width multipliers for route emphasis. Hover and selection stay\"] # [doc = \" distinct from traffic: they change geometry and bloom, not edge state.\"] pub node_edge_hover_width_scale : f32, pub node_edge_selected_width_scale : f32, pub node_edge_glow_width_scale : f32, # [doc = \" How wide an information-bearing identity mark is, in pixels.\"] pub rail_width : f32, # [doc = \" The weakest semantic-colour wash, used behind supporting prose.\"] pub semantic_wash_faint_alpha : f32, # [doc = \" The normal semantic-colour wash.\"] pub semantic_wash_alpha : f32, # [doc = \" The semantic-colour wash for a compact state that must remain visible.\"] pub semantic_wash_strong_alpha : f32, # [doc = \" A semantic report's outline over its wash.\"] pub semantic_border_alpha : f32, # [doc = \" Accent outlines for selected and actively targeted canvas entities.\"] pub accent_border_alpha : f32, pub accent_border_strong_alpha : f32, # [doc = \" A quiet hover when the base interactive hover role is intentionally\"] # [doc = \" reduced inside a dense collection.\"] pub subtle_hover_alpha : f32, # [doc = \" Text mixed into decorative colour so it survives both appearances.\"] pub soft_contrast_alpha : f32, pub contrast_tint_alpha : f32, # [doc = \" Resting strength of a scrollbar thumb before its region is hovered.\"] pub track_resting_alpha : f32, # [doc = \" Opaque-enough backing for copy laid over caller-owned media.\"] pub content_veil_alpha : f32, # [doc = \" Active and inactive strengths of the destructive window affordance.\"] pub critical_fill_alpha : f32, pub critical_inactive_alpha : f32, # [doc = \" Alpha ladder for the shared colour variant recipes.\"] pub variant_light_alpha : f32, pub variant_light_hover_alpha : f32, pub variant_light_active_alpha : f32, pub variant_subtle_hover_alpha : f32, pub variant_subtle_active_alpha : f32, pub primary_hover_opacity : f32, # [doc = \" Fallback recipes for caller-provided colours that do not have a named\"] # [doc = \" palette ramp. Palette-backed colours use their authored steps instead.\"] pub custom_color_readable_dark_floor : f32, pub custom_color_readable_light_ceiling : f32, pub custom_color_hover_lightness_delta : f32, pub custom_color_active_lightness_delta : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::Elevation",
      "name": "Elevation",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum Elevation { # [default] Flat, Raised, Overlay, Modal, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::ElevationLayer",
      "name": "ElevationLayer",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "One shadow in an elevation step.",
      "documentation": "One shadow in an elevation step.\n\nThere is no horizontal offset: a layer is a downward cast, and a close\ncontact shadow is `y` plus `blur`, not a sideways smear.",
      "signature": "# [doc = \" One shadow in an elevation step.\"] # [doc = \"\"] # [doc = \" There is no horizontal offset: a layer is a downward cast, and a close\"] # [doc = \" contact shadow is `y` plus `blur`, not a sideways smear.\"] # [derive (Debug, Clone, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct ElevationLayer { pub y : f32, pub blur : f32, pub spread : f32, pub color : String, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::ElevationTokens",
      "name": "ElevationTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct ElevationTokens { pub flat : Vec<ElevationLayer>, pub raised : Vec<ElevationLayer>, pub overlay : Vec<ElevationLayer>, pub modal : Vec<ElevationLayer>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::FieldFocus",
      "name": "FieldFocus",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "Focus treatment for editable field frames only. Other controls retain rings.",
      "documentation": "Focus treatment for editable field frames only. Other controls retain rings.",
      "signature": "# [doc = \" Focus treatment for editable field frames only. Other controls retain rings.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\")] pub enum FieldFocus { Ring, Fill, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::FontTokens",
      "name": "FontTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct FontTokens { pub family : String, pub fallback_macos : String, pub fallback_windows : String, pub fallback_linux : String, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::FontTokens::platform_fallback",
      "name": "platform_fallback",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn platform_fallback (& self) -> & str",
      "cfg": [],
      "target": "FontTokens"
    },
    {
      "id": "gpui_kit_tokens::InteractiveColor",
      "name": "InteractiveColor",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum InteractiveColor { Hover, Active, Selected, Hairline, HairlineStrong, Track, Divider, Focus, # [doc = \" The one filled control on a surface.\"] # [doc = \"\"] # [doc = \" Its own role rather than a reuse of `text.primary`, which is what it\"] # [doc = \" was: a fill and a body of prose are two facts, and a theme that wants\"] # [doc = \" a softer primary button than its darkest ink had nowhere to say so.\"] PrimaryFill, WhiteFill, WhiteFillHover, WhiteFillActive, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::InteractiveColors",
      "name": "InteractiveColors",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct InteractiveColors { pub control_hairline : String, pub control_highlight : String, pub hover : String, pub active : String, pub selected : String, pub hairline : String, pub hairline_strong : String, pub track : String, pub divider : String, pub focus : String, pub primary_fill : String, pub white_fill : String, pub white_fill_hover : String, pub white_fill_active : String, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::Layer",
      "name": "Layer",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "Painting order for floating surfaces.",
      "documentation": "Painting order for floating surfaces.",
      "signature": "# [doc = \" Painting order for floating surfaces.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] pub enum Layer { Content, Sticky, Dock, Popover, Tooltip, Modal, Toast, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::LoaderColor",
      "name": "LoaderColor",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The four paint roles of work in progress. See [`LoaderColors`].",
      "documentation": "The four paint roles of work in progress. See [`LoaderColors`].",
      "signature": "# [doc = \" The four paint roles of work in progress. See [`LoaderColors`].\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum LoaderColor { # [doc = \" The moving part: a bar's fill, a spinner's arc, a breathing dot.\"] Mark, # [doc = \" The groove the mark travels, quieter than the mark by construction.\"] Track, # [doc = \" The shape of content that is not there yet.\"] Placeholder, # [doc = \" The highlight that crosses a placeholder.\"] Sheen, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::LoaderColor::path",
      "name": "path",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn path (self) -> & 'static str",
      "cfg": [],
      "target": "LoaderColor"
    },
    {
      "id": "gpui_kit_tokens::LoaderColors",
      "name": "LoaderColors",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The vocabulary of work in progress.",
      "documentation": "The vocabulary of work in progress.\n\n`mark` is the moving part — a bar's fill, a spinner's arc, a breathing\ndot. Every theme points it at its accent so the moving part is legible at\nany stroke, and it is the only member held to a legibility floor; a\ncaller who means something beyond \"working\" still says so with its own\ntone. The quiet roles stay grey: waiting has one voice, not four.\n`track` is the groove that mark travels, quieter\nthan the mark by construction. `placeholder` is the shape of absent\ncontent, held *inside* a loudness band because a skeleton that outshouts\nreal content is a defect, not an emphasis. `sheen` is the highlight that\ncrosses a placeholder, measured against the placeholder it crosses.",
      "signature": "# [doc = \" The vocabulary of work in progress.\"] # [doc = \"\"] # [doc = \" `mark` is the moving part — a bar's fill, a spinner's arc, a breathing\"] # [doc = \" dot. Every theme points it at its accent so the moving part is legible at\"] # [doc = \" any stroke, and it is the only member held to a legibility floor; a\"] # [doc = \" caller who means something beyond \\\"working\\\" still says so with its own\"] # [doc = \" tone. The quiet roles stay grey: waiting has one voice, not four.\"] # [doc = \" `track` is the groove that mark travels, quieter\"] # [doc = \" than the mark by construction. `placeholder` is the shape of absent\"] # [doc = \" content, held *inside* a loudness band because a skeleton that outshouts\"] # [doc = \" real content is a defect, not an emphasis. `sheen` is the highlight that\"] # [doc = \" crosses a placeholder, measured against the placeholder it crosses.\"] # [derive (Debug, Clone, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct LoaderColors { pub mark : String, pub track : String, pub placeholder : String, pub sheen : String, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::MeasureTokens",
      "name": "MeasureTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "Reusable physical measures that are neither spacing nor the geometry of a single component.",
      "documentation": "Reusable physical measures that are neither spacing nor the geometry of a\nsingle component.\n\nMeasures stay unscaled unless their consumer explicitly combines them with\ndensity-aware spacing: a readable line and a painter hairline are physical\ncontracts, not whitespace.",
      "signature": "# [doc = \" Reusable physical measures that are neither spacing nor the geometry of a\"] # [doc = \" single component.\"] # [doc = \"\"] # [doc = \" Measures stay unscaled unless their consumer explicitly combines them with\"] # [doc = \" density-aware spacing: a readable line and a painter hairline are physical\"] # [doc = \" contracts, not whitespace.\"] # [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct MeasureTokens { # [doc = \" Shared settings label-column width before host overrides.\"] pub settings_label : f32, # [doc = \" Maximum width for explanatory copy in empty, unavailable and error\"] # [doc = \" states.\"] pub readable_width : f32, # [doc = \" Width of the library's compact modal question surface.\"] pub dialog_width : f32, # [doc = \" Minimum widths for normal option surfaces and compact field-anchored\"] # [doc = \" option surfaces.\"] pub menu_min_width : f32, pub compact_menu_min_width : f32, # [doc = \" Height at which a normal option menu starts scrolling.\"] pub menu_max_height : f32, # [doc = \" Height at which a compact, caret-anchored option menu starts scrolling.\"] pub compact_menu_max_height : f32, # [doc = \" An icon standing alone above explanatory copy.\"] pub standalone_icon : f32, pub scrollbar_track : f32, pub scrollbar_thumb : f32, pub scrollbar_min_thumb : f32, # [doc = \" Width used to paint insertion carets.\"] pub caret_width : f32, # [doc = \" Width used to paint underlines and strike-through decoration.\"] pub text_decoration_width : f32, # [doc = \" Shared physical measures for progress grooves and semantic status\"] # [doc = \" marks.\"] pub progress_track_height : f32, # [doc = \" Height of the numeric slider groove. It is deliberately independent\"] # [doc = \" from progress: one reports a reading, while the other must carry a\"] # [doc = \" handle and marks without disappearing underneath them.\"] pub slider_track_height : f32, # [doc = \" Default length of a vertical numeric slider.\"] pub slider_vertical_height : f32, # [doc = \" Widths at which a measured container may adopt the next grid layout.\"] # [doc = \" They are part of the theme document so a host can tune responsive\"] # [doc = \" behavior without changing component code.\"] pub container_small : f32, pub container_medium : f32, pub container_large : f32, pub container_extra_large : f32, # [doc = \" Width shared by compact floating surfaces such as previews,\"] # [doc = \" notifications, and rich suggestion menus.\"] pub compact_overlay_width : f32, # [doc = \" Default height of viewers whose caller did not choose a frame.\"] pub media_viewer_height : f32, # [doc = \" Width reserved for a chronology rail and its status marks.\"] pub timeline_rail_width : f32, pub status_mark : f32, # [doc = \" Stroke width of a node-graph connection.\"] pub node_edge_width : f32, # [doc = \" Corner radius of an orthogonal node-graph connection's bends.\"] pub node_edge_corner : f32, # [doc = \" Distance an orthogonal connection travels straight out of a port\"] # [doc = \" before its first bend.\"] pub node_edge_lead : f32, # [doc = \" Clearance an orthogonal connection keeps from a node while routing\"] # [doc = \" around it.\"] pub node_edge_corridor : f32, # [doc = \" Spacing between parallel orthogonal connections sharing a corridor.\"] pub node_edge_lane : f32, # [doc = \" Diameter of a node-graph port ring at unit zoom.\"] pub node_port : f32, # [doc = \" Thickness of a node's top-edge progress bar.\"] pub node_progress : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::Metadata",
      "name": "Metadata",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct Metadata { pub id : String, pub name : String, pub appearance : Appearance, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::MotionDuration",
      "name": "MotionDuration",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum MotionDuration { Instant, Quick, # [doc = \" How long a surface takes to leave. See [`DurationTokens::exit`].\"] Exit, Menu, Dialog, Resize, Entrance, # [doc = \" One turn of a mark that reports work nobody can size.\"] Spin, Slow, # [doc = \" The gap between one member of a staggered group and the next.\"] StaggerStep, MicroBounce, MicroWobble, MicroPop, Pulse, # [doc = \" One breath of a node aura that reports live work.\"] NodeAuraPulse, # [doc = \" One traversal of traffic from an edge's source to its destination.\"] NodeFlow, # [doc = \" How long a loading placeholder's highlight takes to cross it.\"] Shimmer, # [doc = \" How long a transient notification stays before it leaves on its own.\"] Toast, # [doc = \" How long a pointer rests before contextual detail opens.\"] HoverCardOpen, # [doc = \" How long contextual detail remains reachable while the pointer crosses\"] # [doc = \" the gap from its trigger.\"] HoverCardGrace, # [doc = \" How long a semantic one-shot response takes to report its event.\"] Feedback, # [doc = \" How long an intentionally prominent celebratory response takes.\"] Celebration, # [doc = \" How long a control reports that a short action, such as copying, held.\"] Confirmation, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::MotionEasing",
      "name": "MotionEasing",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum MotionEasing { Linear, Standard, EaseIn, EaseOut, EaseInOut, Emphasized, Overshoot, Exit, Settle, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::MotionEasing::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "MotionEasing"
    },
    {
      "id": "gpui_kit_tokens::MotionTokens",
      "name": "MotionTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct MotionTokens { pub duration_ms : DurationTokens, pub easing : EasingTokens, pub spring : SpringPresetTokens, # [doc = \" The most rows a stagger spans before its total window is compressed.\"] pub stagger_max_items : usize, # [doc = \" How far a control sinks while the pointer is held on it.\"] pub press_offset_px : f32, # [doc = \" How far a control rises under the pointer.\"] pub hover_lift_px : f32, # [doc = \" The speed, in pixels a second, past which a released gesture is a\"] # [doc = \" flick rather than a drag that happened to end.\"] pub flick_velocity_px_per_sec : f32, # [doc = \" The fraction of an overscroll that is shown at the boundary, before\"] # [doc = \" the band starts tightening.\"] pub rubber_band_tension : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::NodeColor",
      "name": "NodeColor",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "One paint role of the node canvas. See [`NodeColors`].",
      "documentation": "One paint role of the node canvas. See [`NodeColors`].",
      "signature": "# [doc = \" One paint role of the node canvas. See [`NodeColors`].\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum NodeColor { HeaderWash, PortIdle, PortHover, PortConnected, Edge, EdgeTarget, EdgeActive, EdgeFlowHighlight, EdgeFeedback, EdgeFeedbackActive, AuraActive, AuraSuccess, AuraAttention, AuraDanger, LabelWash, Grid, GridStrong, GridAxis, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::NodeColor::path",
      "name": "path",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn path (self) -> & 'static str",
      "cfg": [],
      "target": "NodeColor"
    },
    {
      "id": "gpui_kit_tokens::NodeColors",
      "name": "NodeColors",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The vocabulary a node canvas paints in.",
      "documentation": "The vocabulary a node canvas paints in.\n\nA graph is read by following its connections, so the parts that carry the\nconnection are roles rather than one grey borrowed from the control\nvocabulary: an idle port and a connected one are different facts, and a\nresting edge and a live one are different facts, and neither pair can be\ntold apart when both are `interactive.hairline`.",
      "signature": "# [doc = \" The vocabulary a node canvas paints in.\"] # [doc = \"\"] # [doc = \" A graph is read by following its connections, so the parts that carry the\"] # [doc = \" connection are roles rather than one grey borrowed from the control\"] # [doc = \" vocabulary: an idle port and a connected one are different facts, and a\"] # [doc = \" resting edge and a live one are different facts, and neither pair can be\"] # [doc = \" told apart when both are `interactive.hairline`.\"] # [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct NodeColors { # [doc = \" The tint behind a node's header band when the node declares no\"] # [doc = \" category colour of its own. A band on the node's own surface, not a\"] # [doc = \" second surface: it is held to the line floor rather than the surface\"] # [doc = \" separation one.\"] pub header_wash : String, # [doc = \" An unconnected port.\"] pub port_idle : String, # [doc = \" A port under the pointer, or one a connection gesture could legally\"] # [doc = \" land on. Its own role rather than `portConnected` reused: painting a\"] # [doc = \" hovered port in the connected paint says an edge is already attached,\"] # [doc = \" which is the one thing the reader is hovering to find out.\"] pub port_hover : String, # [doc = \" A port an edge lands on. Further from the canvas than `portIdle` by\"] # [doc = \" contract, because \\\"attached\\\" is the state a reader scans a graph for.\"] pub port_connected : String, # [doc = \" A resting connection. Quiet by design: a canvas is mostly edges, and\"] # [doc = \" an edge drawn at a control boundary's loudness turns the graph into a\"] # [doc = \" mesh.\"] pub edge : String, # [doc = \" The destination end of a resting connection. Its separation from\"] # [doc = \" `edge` gives even a still route a direction without claiming traffic.\"] pub edge_target : String, # [doc = \" A connection carrying traffic, or under the pointer.\"] pub edge_active : String, # [doc = \" The head of traffic moving from source to destination.\"] pub edge_flow_highlight : String, # [doc = \" A resting return path — work that came back to an earlier step.\"] # [doc = \"\"] # [doc = \" Its own role because a return is a fact about control flow and not a\"] # [doc = \" failure. Drawn in the danger paint, as it was, a retry loop claims the\"] # [doc = \" run is broken; a run that retried once and then succeeded has a red\"] # [doc = \" line through it forever.\"] pub edge_feedback : String, # [doc = \" A return path carrying traffic.\"] pub edge_feedback_active : String, # [doc = \" State colours that may bleed beyond a node card. These are canvas\"] # [doc = \" roles rather than aliases consumed directly from the semantic palette:\"] # [doc = \" a theme can tune a blurred colour independently from a text or glyph\"] # [doc = \" drawn in that semantic family.\"] pub aura_active : String, pub aura_success : String, pub aura_attention : String, pub aura_danger : String, # [doc = \" The chip behind an edge label. Nearly opaque, because the label sits\"] # [doc = \" on the canvas *and* on whatever edge passes under it.\"] pub label_wash : String, # [doc = \" The canvas dot grid, and its major interval. Barely visible on\"] # [doc = \" purpose, which is why both are held to the line floor: a grid typed at\"] # [doc = \" an alpha that rounds away is a canvas the author believes is ruled.\"] pub grid : String, pub grid_strong : String, # [doc = \" The two rules through the canvas origin.\"] # [doc = \"\"] # [doc = \" A dot grid says a canvas has a surface and how far it has been\"] # [doc = \" dragged; it does not say *where* the reader is, because every interval\"] # [doc = \" looks like every other one. The axes are the one place on the canvas\"] # [doc = \" that is somewhere in particular, which is what makes a pan legible as\"] # [doc = \" travel rather than as drift.\"] pub grid_axis : String, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::OpacityRole",
      "name": "OpacityRole",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum OpacityRole { Disabled, Muted, Scrim, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::OpacityTokens",
      "name": "OpacityTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct OpacityTokens { pub disabled : f32, pub muted : f32, pub scrim : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::PaletteStepTokens",
      "name": "PaletteStepTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "Preferred numbered steps for colour variants built from a caller-selected palette group. Each list is ordered, so a palette with a sparse ramp can fall back without moving the policy into the theme adapter.",
      "documentation": "Preferred numbered steps for colour variants built from a caller-selected\npalette group. Each list is ordered, so a palette with a sparse ramp can\nfall back without moving the policy into the theme adapter.",
      "signature": "# [doc = \" Preferred numbered steps for colour variants built from a caller-selected\"] # [doc = \" palette group. Each list is ordered, so a palette with a sparse ramp can\"] # [doc = \" fall back without moving the policy into the theme adapter.\"] # [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct PaletteStepTokens { pub filled : [String; 3], pub hover : [String; 3], pub active : [String; 3], pub readable_dark : [String; 3], pub readable_light : [String; 3], }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::Radius",
      "name": "Radius",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum Radius { Small, Control, Card, Dialog, Bubble, Pill, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::RadiusTokens",
      "name": "RadiusTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct RadiusTokens { pub small : f32, pub control : f32, pub card : f32, pub dialog : f32, pub bubble : f32, pub pill : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::ResolvedElevation",
      "name": "ResolvedElevation",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The resolved shadows one elevation step casts.",
      "documentation": "The resolved shadows one elevation step casts.\n\nAn empty set is a flat surface: it allocates no shadow work. `reach` is\nthe farthest any layer extends (`y + blur`), and is how the four steps\nare ordered.",
      "signature": "# [doc = \" The resolved shadows one elevation step casts.\"] # [doc = \"\"] # [doc = \" An empty set is a flat surface: it allocates no shadow work. `reach` is\"] # [doc = \" the farthest any layer extends (`y + blur`), and is how the four steps\"] # [doc = \" are ordered.\"] # [derive (Debug, Clone, PartialEq)] pub struct ResolvedElevation { pub layers : Vec<ResolvedElevationLayer>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::ResolvedElevation::reach",
      "name": "reach",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn reach (& self) -> f32",
      "cfg": [],
      "target": "ResolvedElevation"
    },
    {
      "id": "gpui_kit_tokens::ResolvedElevationLayer",
      "name": "ResolvedElevationLayer",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq)] pub struct ResolvedElevationLayer { pub y : f32, pub blur : f32, pub spread : f32, pub color : Color, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::SEQUENCE_LENGTH",
      "name": "SEQUENCE_LENGTH",
      "kind": "constant",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "How many colours a categorical series scale carries.",
      "documentation": "How many colours a categorical series scale carries.\n\nEight is a series a reader can hold at once and a legend can name. It is\nfixed rather than open so a chart that cycles the scale repeats a colour\nat a position both the theme and the caller can predict.",
      "signature": "pub const SEQUENCE_LENGTH: usize",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::SemanticColor",
      "name": "SemanticColor",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum SemanticColor { Accent, AccentStrong, Danger, Warning, Success, Info, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::SemanticColors",
      "name": "SemanticColors",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct SemanticColors { pub accent : String, pub accent_strong : String, pub danger : String, pub warning : String, pub success : String, pub info : String, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::SequenceColors",
      "name": "SequenceColors",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The categorical series scale: distinct hues in a fixed order.",
      "documentation": "The categorical series scale: distinct hues in a fixed order.\n\nThe hues differ rather than the lightnesses, which is the whole point. A\nchart drawn in four steps of one hue tells a reader that its four series\nare four degrees of one thing, and the four series of a donut are not\nordered at all. The order here is the order a series takes them in, so two\ncharts of the same data agree on which slice is which.",
      "signature": "# [doc = \" The categorical series scale: distinct hues in a fixed order.\"] # [doc = \"\"] # [doc = \" The hues differ rather than the lightnesses, which is the whole point. A\"] # [doc = \" chart drawn in four steps of one hue tells a reader that its four series\"] # [doc = \" are four degrees of one thing, and the four series of a donut are not\"] # [doc = \" ordered at all. The order here is the order a series takes them in, so two\"] # [doc = \" charts of the same data agree on which slice is which.\"] # [derive (Debug, Clone, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct SequenceColors { pub categorical : Vec<String>, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::Space",
      "name": "Space",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum Space { Xxs, Xs, Sm, Md, Lg, Xl, Xxl, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::SpacingTokens",
      "name": "SpacingTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct SpacingTokens { pub xxs : f32, pub xs : f32, pub sm : f32, pub md : f32, pub lg : f32, pub xl : f32, pub xxl : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::SpringPreset",
      "name": "SpringPreset",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum SpringPreset { Snappy, Smooth, Bouncy, # [doc = \" Direct manipulation: tight enough that the element reads as attached to\"] # [doc = \" the pointer rather than trailing it.\"] Grab, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::SpringPreset::name",
      "name": "name",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn name (self) -> & 'static str",
      "cfg": [],
      "target": "SpringPreset"
    },
    {
      "id": "gpui_kit_tokens::SpringPresetTokens",
      "name": "SpringPresetTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct SpringPresetTokens { pub snappy : SpringTokens, pub smooth : SpringTokens, pub bouncy : SpringTokens, pub grab : SpringTokens, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::SpringTokens",
      "name": "SpringTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct SpringTokens { pub stiffness : f32, pub damping : f32, pub mass : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::Surface",
      "name": "Surface",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum Surface { # [doc = \" The substrate behind the page. A card can sit on it; a well cannot.\"] Backdrop, Canvas, # [doc = \" Recessed below whatever carries it: the well an editable value sits in.\"] Sunken, Panel, Raised, Overlay, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::SurfaceColors",
      "name": "SurfaceColors",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct SurfaceColors { # [doc = \" In-content editable and actionable surfaces, outside the plane ladder.\"] pub control : String, pub control_hover : String, pub control_pressed : String, # [doc = \" The substrate behind the page. A card can sit on it; a well cannot,\"] # [doc = \" which is why it is not compared to `sunken`.\"] pub backdrop : String, pub canvas : String, # [doc = \" The well an editable value sits in, recessed below the surface that\"] # [doc = \" carries it. It is what a text field is made of once the field has no\"] # [doc = \" border to be made of instead.\"] pub sunken : String, pub panel : String, pub raised : String, pub overlay : String, # [doc = \" The veil painted over the page behind a modal surface, at\"] # [doc = \" `opacity.scrim`. Not a text-bearing surface, so it takes no part in\"] # [doc = \" the surface ordering: on a near-black backdrop a pure-black veil\"] # [doc = \" disappears, which is why dark themes declare a cast the page does not\"] # [doc = \" have instead of more black.\"] pub scrim : String, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::SyntaxColor",
      "name": "SyntaxColor",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "One paint class of code. See [`SyntaxColors`].",
      "documentation": "One paint class of code. See [`SyntaxColors`].",
      "signature": "# [doc = \" One paint class of code. See [`SyntaxColors`].\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum SyntaxColor { Keyword, StringLiteral, Comment, Number, Inline, InlineWash, Added, AddedWash, Removed, RemovedWash, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::SyntaxColor::path",
      "name": "path",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn path (self) -> & 'static str",
      "cfg": [],
      "target": "SyntaxColor"
    },
    {
      "id": "gpui_kit_tokens::SyntaxColors",
      "name": "SyntaxColors",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The vocabulary code is painted in, wherever this library draws code.",
      "documentation": "The vocabulary code is painted in, wherever this library draws code.\n\nThese are token roles rather than a component's constants for the same\nreason the ANSI table is: every one of them changes with the theme, and a\nrenderer that branched on the appearance itself would be a second theme\nsystem. They are held to their own contrast floors against the surfaces\ncode actually sits on; see [`contrast::report`].\n\nThe set is deliberately four classes and not a grammar. A tokenizer that\ndistinguished forty kinds of thing would need forty tokens in every theme,\nand a reader scanning a block for a string literal is served by four.",
      "signature": "# [doc = \" The vocabulary code is painted in, wherever this library draws code.\"] # [doc = \"\"] # [doc = \" These are token roles rather than a component's constants for the same\"] # [doc = \" reason the ANSI table is: every one of them changes with the theme, and a\"] # [doc = \" renderer that branched on the appearance itself would be a second theme\"] # [doc = \" system. They are held to their own contrast floors against the surfaces\"] # [doc = \" code actually sits on; see [`contrast::report`].\"] # [doc = \"\"] # [doc = \" The set is deliberately four classes and not a grammar. A tokenizer that\"] # [doc = \" distinguished forty kinds of thing would need forty tokens in every theme,\"] # [doc = \" and a reader scanning a block for a string literal is served by four.\"] # [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct SyntaxColors { pub keyword : String, pub string : String, # [doc = \" Quiet by contract: a comment is supporting detail inside code the way\"] # [doc = \" `text.faint` is beside prose, and carries that role's floor.\"] pub comment : String, pub number : String, # [doc = \" Inline code inside prose, and the wash it sits on. A span of code in a\"] # [doc = \" sentence is not a code block: it keeps the paragraph's rhythm and only\"] # [doc = \" changes face and tone, so it has its own pair rather than borrowing the\"] # [doc = \" block's surface.\"] pub inline : String, pub inline_wash : String, # [doc = \" A diff's two sides. The text tone is what the line's characters are\"] # [doc = \" drawn in; the wash is the band under the whole line, which is why they\"] # [doc = \" are separate values and not one colour at two alphas: the wash has to\"] # [doc = \" stay quiet enough for the text on it to clear its own floor.\"] pub added : String, pub added_wash : String, pub removed : String, pub removed_wash : String, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::TerminalColors",
      "name": "TerminalColors",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The vocabulary a terminal grid paints in.",
      "documentation": "The vocabulary a terminal grid paints in.\n\nIt lives in the token document rather than beside the component because\nevery one of these values changes with the theme, and a component that\nbranched on the appearance itself would be a second theme system with one\ncustomer.",
      "signature": "# [doc = \" The vocabulary a terminal grid paints in.\"] # [doc = \"\"] # [doc = \" It lives in the token document rather than beside the component because\"] # [doc = \" every one of these values changes with the theme, and a component that\"] # [doc = \" branched on the appearance itself would be a second theme system with one\"] # [doc = \" customer.\"] # [derive (Debug, Clone, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct TerminalColors { pub background : String, pub selection : String, # [doc = \" Slots 0-7 normal, 8-15 bright.\"] pub ansi : [String; 16], }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::TextColors",
      "name": "TextColors",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct TextColors { pub primary : String, pub muted : String, pub faint : String, pub placeholder : String, pub disabled : String, pub on_accent : String, pub on_primary_fill : String, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::TextTone",
      "name": "TextTone",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum TextTone { Primary, Muted, Faint, Placeholder, Disabled, OnAccent, # [doc = \" The label a primary action carries, over `interactive.primaryFill`.\"] OnPrimaryFill, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::TokenDocument",
      "name": "TokenDocument",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct TokenDocument { # [serde (rename = \"$schema\")] pub schema : String, pub meta : Metadata, pub color : ColorTokens, pub space : SpacingTokens, pub measure : MeasureTokens, pub radius : RadiusTokens, pub control : ControlTokens, pub border : BorderTokens, pub opacity : OpacityTokens, pub elevation : ElevationTokens, pub z_index : ZIndexTokens, pub density : DensityTokens, pub typography : TypographyTokens, pub motion : MotionTokens, pub effect : EffectTokens, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::agent",
      "name": "agent",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn agent (& self, role : AgentColor) -> Color",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::border_width",
      "name": "border_width",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn border_width (& self, weight : BorderWeight) -> f32",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::control",
      "name": "control",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn control (& self, size : ControlSize) -> & ControlStep",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::density",
      "name": "density",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn density (& self, density : Density) -> DensityScale",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::easing",
      "name": "easing",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn easing (& self, step : MotionEasing) -> [f32; 4]",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::elevation",
      "name": "elevation",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn elevation (& self, level : Elevation) -> ResolvedElevation",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::flick_velocity",
      "name": "flick_velocity",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The speed past which a released gesture counts as a flick, in pixels a second.",
      "documentation": "The speed past which a released gesture counts as a flick, in pixels a\nsecond.",
      "signature": "pub fn flick_velocity (& self) -> f32",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::hover_lift",
      "name": "hover_lift",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "How far a hovered control rises, in pixels.",
      "documentation": "How far a hovered control rises, in pixels.",
      "signature": "pub fn hover_lift (& self) -> f32",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::interactive",
      "name": "interactive",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn interactive (& self, role : InteractiveColor) -> Color",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::loader",
      "name": "loader",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn loader (& self, role : LoaderColor) -> Color",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::motion_duration",
      "name": "motion_duration",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn motion_duration (& self, step : MotionDuration) -> Duration",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::node",
      "name": "node",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "One paint role of the node canvas.",
      "documentation": "One paint role of the node canvas.",
      "signature": "pub fn node (& self, role : NodeColor) -> Color",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::opacity",
      "name": "opacity",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn opacity (& self, role : OpacityRole) -> f32",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::parse",
      "name": "parse",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn parse (json : & str) -> Result<Self, TokenError>",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::press_offset",
      "name": "press_offset",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "How far a pressed control sinks, in pixels.",
      "documentation": "How far a pressed control sinks, in pixels.",
      "signature": "pub fn press_offset (& self) -> f32",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::radius",
      "name": "radius",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn radius (& self, step : Radius) -> f32",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::rubber_band_tension",
      "name": "rubber_band_tension",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "How much of an overscroll is shown at the boundary.",
      "documentation": "How much of an overscroll is shown at the boundary.",
      "signature": "pub fn rubber_band_tension (& self) -> f32",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::scrim",
      "name": "scrim",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The modal veil. Separate from [`TokenDocument::surface`] because the scrim never carries text and never joins the surface ordering.",
      "documentation": "The modal veil. Separate from [`TokenDocument::surface`] because the\nscrim never carries text and never joins the surface ordering.",
      "signature": "pub fn scrim (& self) -> Color",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::semantic",
      "name": "semantic",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn semantic (& self, role : SemanticColor) -> Color",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::sequence",
      "name": "sequence",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The categorical series scale, in the order a chart consumes it.",
      "documentation": "The categorical series scale, in the order a chart consumes it.\n\nOrdered rather than named, because a series is chosen by index: the\nthird slice of a donut is the third entry, and a caller with more\nseries than entries cycles. See [`Self::sequence_color`].",
      "signature": "pub fn sequence (& self) -> Vec<Color>",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::sequence_color",
      "name": "sequence_color",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The `index`th series colour, cycling past the end of the scale.",
      "documentation": "The `index`th series colour, cycling past the end of the scale.\n\nCycling rather than clamping: a tenth series that repeats the second\ncolour is a chart the reader can still take apart by position, and one\nthat repeats the last colour forever is not.",
      "signature": "pub fn sequence_color (& self, index : usize) -> Color",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::spacing",
      "name": "spacing",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn spacing (& self, step : Space) -> f32",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::spring",
      "name": "spring",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn spring (& self, spring : SpringPreset) -> SpringTokens",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::surface",
      "name": "surface",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn surface (& self, role : Surface) -> Color",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::syntax",
      "name": "syntax",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "One paint class of code, from this theme.",
      "documentation": "One paint class of code, from this theme.",
      "signature": "pub fn syntax (& self, class : SyntaxColor) -> Color",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::terminal_ansi",
      "name": "terminal_ansi",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The sixteen ANSI slots: 0-7 normal, 8-15 bright.",
      "documentation": "The sixteen ANSI slots: 0-7 normal, 8-15 bright.\n\nThese are *named* slots (\"red\", \"bright blue\"), not literal values, so\nevery theme retints them — which is why they are tokens and the 6x6x6\ncolour cube above them is arithmetic. See\n`crate::contrast::report` for the floors each slot has to clear on its\nown terminal background.",
      "signature": "pub fn terminal_ansi (& self) -> [Color; 16]",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::terminal_background",
      "name": "terminal_background",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The plane a terminal grid is painted on.",
      "documentation": "The plane a terminal grid is painted on.\n\nIts own value rather than a surface role, because the two appearances\nwant opposite ends of the ramp: a terminal is near-black on dark and\nnear-white on light, and no single surface step is both.",
      "signature": "pub fn terminal_background (& self) -> Color",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::terminal_selection",
      "name": "terminal_selection",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The wash over selected cells.",
      "documentation": "The wash over selected cells.\n\nAchromatic by contract, which is where it differs from\n`color.interactive.selected`: a tinted veil drags all sixteen ANSI\nhues toward itself, so red under a blue selection reads purple. Only\nlightness may change, so the program's colours survive being selected.",
      "signature": "pub fn terminal_selection (& self) -> Color",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::text",
      "name": "text",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn text (& self, role : TextTone) -> Color",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::type_step",
      "name": "type_step",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn type_step (& self, step : TypeScale) -> & TypeStep",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::validate",
      "name": "validate",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn validate (& self) -> Result<(), TokenError>",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenDocument::z_index",
      "name": "z_index",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn z_index (& self, layer : Layer) -> i32",
      "cfg": [],
      "target": "TokenDocument"
    },
    {
      "id": "gpui_kit_tokens::TokenError",
      "name": "TokenError",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Error)] pub enum TokenError { # [error (\"token JSON is invalid: {0}\")] Json (# [from] serde_json::Error), # [error (\"token `{path}` is invalid: {message}\")] Invalid { path : String, message : String }, # [error (\"token contrast is invalid:\\n{0}\")] Contrast (String), # [error (\"token surface separation is invalid:\\n{0}\")] Separation (String), # [error (\"token decorative lines are not visible:\\n{0}\")] Line (String), # [error (\"token loading placeholders are outside their loudness band:\\n{0}\")] Placeholder (String), # [error (\"token tones are not distinguishable:\\n{0}\")] Distinction (String), # [error (\"token paints that carry different facts read alike:\\n{0}\")] Perceptual (String), }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::TypeScale",
      "name": "TypeScale",
      "kind": "enum",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum TypeScale { Caption, Label, Body, # [doc = \" Body at emphasis weight. Same size and line height, so a run can be\"] # [doc = \" emphasised without changing the line box it sits in.\"] Strong, # [doc = \" A heading inside a component, between body and the component's own name.\"] Subtitle, Title, Code, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::TypeScaleTokens",
      "name": "TypeScaleTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct TypeScaleTokens { pub caption : TypeStep, pub label : TypeStep, pub body : TypeStep, pub strong : TypeStep, pub subtitle : TypeStep, pub title : TypeStep, pub code : TypeStep, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::TypeStep",
      "name": "TypeStep",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct TypeStep { pub size : f32, pub line_height : f32, pub weight : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::TypographyTokens",
      "name": "TypographyTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Deserialize, Serialize)] # [serde (deny_unknown_fields)] pub struct TypographyTokens { pub sans : FontTokens, pub mono : FontTokens, # [doc = \" Scale applied to numeric readouts after the caller chooses their prose\"] # [doc = \" step. Kept separate from the prose ladder so `Title` remains a heading\"] # [doc = \" rather than silently changing every title in the library.\"] # [serde (rename = \"readoutScale\")] pub readout_scale : f32, pub scale : TypeScaleTokens, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::ZIndexTokens",
      "name": "ZIndexTokens",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, Deserialize, Serialize)] # [serde (rename_all = \"camelCase\", deny_unknown_fields)] pub struct ZIndexTokens { pub content : i32, pub sticky : i32, pub dock : i32, pub popover : i32, pub tooltip : i32, pub modal : i32, pub toast : i32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::all",
      "name": "all",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "Every theme shipped with the library: the studio pair, then the presets.",
      "documentation": "Every theme shipped with the library: the studio pair, then the presets.",
      "signature": "pub fn all () -> Vec<& 'static TokenDocument>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::bundled",
      "name": "bundled",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The two themes this library designs against, in registration order.",
      "documentation": "The two themes this library designs against, in registration order.\n\nThe presets in [`presets`] are deliberately not here: this set is what the\nvisual baselines are captured in, and every scene is rendered once per\nmember of it. See [`all`] for the whole shipped catalog.",
      "signature": "pub fn bundled () -> [& 'static TokenDocument; 2]",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::bundled_json",
      "name": "bundled_json",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bundled_json () -> [& 'static str; 2]",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::color::Color",
      "name": "Color",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq)] pub struct Color { pub red : f32, pub green : f32, pub blue : f32, pub alpha : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::color::Color::from_oklab",
      "name": "from_oklab",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "The opaque sRGB colour nearest to `lab`, with channels clamped into gamut rather than reported as out of range.",
      "documentation": "The opaque sRGB colour nearest to `lab`, with channels clamped into\ngamut rather than reported as out of range.\n\nClamping is the honest failure here: a token author asking for a\nchroma sRGB cannot reach gets the closest thing a display will show,\nand the perceptual gates then measure what was actually produced\nrather than what was requested.",
      "signature": "pub fn from_oklab (lab : Oklab) -> Self",
      "cfg": [],
      "target": "Color"
    },
    {
      "id": "gpui_kit_tokens::color::Color::from_oklch",
      "name": "from_oklch",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "The opaque sRGB colour nearest to `lch`.",
      "documentation": "The opaque sRGB colour nearest to `lch`.",
      "signature": "pub fn from_oklch (lch : Oklch) -> Self",
      "cfg": [],
      "target": "Color"
    },
    {
      "id": "gpui_kit_tokens::color::Color::lightness",
      "name": "lightness",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "CIE L\\*, perceptual lightness from 0 to 100.",
      "documentation": "CIE L\\*, perceptual lightness from 0 to 100.\n\nThis is the measure two backgrounds are compared by, and the WCAG\nratio is not. That ratio adds 0.05 to both sides so that black text\nstays measurable, which compresses everything near black into almost\nno range at all: `#050505` against `#0a0a0a` reads 1.03:1, the same\nanswer it would give for two colors nobody could tell apart, and so\ndoes a step that is plainly visible. L\\* is uniform across the range,\nso one threshold means the same thing on a dark theme and a light one.",
      "signature": "pub fn lightness (self) -> f32",
      "cfg": [],
      "target": "Color"
    },
    {
      "id": "gpui_kit_tokens::color::Color::luminance",
      "name": "luminance",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "WCAG relative luminance of an opaque color.",
      "documentation": "WCAG relative luminance of an opaque color.",
      "signature": "pub fn luminance (self) -> f32",
      "cfg": [],
      "target": "Color"
    },
    {
      "id": "gpui_kit_tokens::color::Color::oklab",
      "name": "oklab",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "This colour in OKLab, ignoring its alpha.",
      "documentation": "This colour in OKLab, ignoring its alpha.\n\nComposite first with [`over`] when the colour is translucent: a\nperceptual distance between two paints nobody sees at full strength is\na measurement of something that is not on screen.",
      "signature": "pub fn oklab (self) -> Oklab",
      "cfg": [],
      "target": "Color"
    },
    {
      "id": "gpui_kit_tokens::color::Color::oklch",
      "name": "oklch",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "This colour in cylindrical OKLCH, ignoring its alpha.",
      "documentation": "This colour in cylindrical OKLCH, ignoring its alpha.",
      "signature": "pub fn oklch (self) -> Oklch",
      "cfg": [],
      "target": "Color"
    },
    {
      "id": "gpui_kit_tokens::color::Color::parse",
      "name": "parse",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn parse (path : & str, value : & str) -> Result<Self, TokenError>",
      "cfg": [],
      "target": "Color"
    },
    {
      "id": "gpui_kit_tokens::color::Color::resolve",
      "name": "resolve",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "Parses `#RRGGBB`, `#RRGGBBAA`, `{group.step}`, or `{group.step}/AA`.",
      "documentation": "Parses `#RRGGBB`, `#RRGGBBAA`, `{group.step}`, or `{group.step}/AA`.\n\nThe alpha suffix stays hexadecimal so a reference reproduces the exact\nchannel a literal would have produced.",
      "signature": "pub fn resolve (path : & str, value : & str, palette : & Palette) -> Result<Self, TokenError>",
      "cfg": [],
      "target": "Color"
    },
    {
      "id": "gpui_kit_tokens::color::Oklab",
      "name": "Oklab",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "A colour in OKLab, the perceptual space this crate reasons about hue and chroma in.",
      "documentation": "A colour in OKLab, the perceptual space this crate reasons about hue and\nchroma in.\n\nCIE L\\* answers how light two colours are relative to each other, which is\nwhat stacking surfaces and reading text need. It says nothing about whether\ntwo colours of the same lightness are far enough apart to be told apart,\nand that is the question a categorical scale asks. OKLab answers it: equal\ndistances in it are approximately equal perceived differences, across the\nwhole gamut and in both appearances, which is what lets one threshold mean\nthe same thing on a dark theme and a light one.",
      "signature": "# [doc = \" A colour in OKLab, the perceptual space this crate reasons about hue and\"] # [doc = \" chroma in.\"] # [doc = \"\"] # [doc = \" CIE L\\\\* answers how light two colours are relative to each other, which is\"] # [doc = \" what stacking surfaces and reading text need. It says nothing about whether\"] # [doc = \" two colours of the same lightness are far enough apart to be told apart,\"] # [doc = \" and that is the question a categorical scale asks. OKLab answers it: equal\"] # [doc = \" distances in it are approximately equal perceived differences, across the\"] # [doc = \" whole gamut and in both appearances, which is what lets one threshold mean\"] # [doc = \" the same thing on a dark theme and a light one.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Oklab { # [doc = \" Perceptual lightness, 0 at black and 1 at white.\"] pub lightness : f32, # [doc = \" The green-red axis.\"] pub a : f32, # [doc = \" The blue-yellow axis.\"] pub b : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::color::Oklch",
      "name": "Oklch",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "The same colour in cylindrical form, which is how a scale is authored: pick a lightness and a chroma, then walk the hue.",
      "documentation": "The same colour in cylindrical form, which is how a scale is authored:\npick a lightness and a chroma, then walk the hue.",
      "signature": "# [doc = \" The same colour in cylindrical form, which is how a scale is authored:\"] # [doc = \" pick a lightness and a chroma, then walk the hue.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct Oklch { # [doc = \" Perceptual lightness, 0 at black and 1 at white.\"] pub lightness : f32, # [doc = \" Distance from grey. Zero is neutral; roughly 0.37 is the most any\"] # [doc = \" sRGB colour reaches.\"] pub chroma : f32, # [doc = \" Hue angle in degrees, `0..360`.\"] pub hue : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::color::Oklch::hue_distance",
      "name": "hue_distance",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "The shortest angular distance to another hue, in degrees, `0..=180`.",
      "documentation": "The shortest angular distance to another hue, in degrees, `0..=180`.",
      "signature": "pub fn hue_distance (self, other : Self) -> f32",
      "cfg": [],
      "target": "Oklch"
    },
    {
      "id": "gpui_kit_tokens::color::Oklch::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn new (lightness : f32, chroma : f32, hue : f32) -> Self",
      "cfg": [],
      "target": "Oklch"
    },
    {
      "id": "gpui_kit_tokens::color::Palette",
      "name": "Palette",
      "kind": "type",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "A palette is free-form groups of steps, so a theme can name its own scales.",
      "documentation": "A palette is free-form groups of steps, so a theme can name its own scales.",
      "signature": "# [doc = \" A palette is free-form groups of steps, so a theme can name its own scales.\"] pub type Palette = BTreeMap<String, BTreeMap<String, String>>;",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::color::contrast_ratio",
      "name": "contrast_ratio",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "WCAG contrast ratio, compositing any translucency onto the background.",
      "documentation": "WCAG contrast ratio, compositing any translucency onto the background.",
      "signature": "pub fn contrast_ratio (foreground : Color, background : Color) -> f32",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::color::mix",
      "name": "mix",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "Blends two opaque colours perceptually, `0` returning `left` and `1` returning `right`.",
      "documentation": "Blends two opaque colours perceptually, `0` returning `left` and `1`\nreturning `right`.\n\nBlending in sRGB channels dips through a muddy, darker midpoint because\nthose channels are gamma-encoded rather than proportional to light. In\nOKLab the midpoint is the colour a reader would name as halfway, which is\nwhat a wash, a tint, or a state crossfade is claiming to show.",
      "signature": "pub fn mix (left : Color, right : Color, amount : f32) -> Color",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::color::over",
      "name": "over",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "Composites `foreground` over an opaque `background`.",
      "documentation": "Composites `foreground` over an opaque `background`.",
      "signature": "pub fn over (foreground : Color, background : Color) -> Color",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::color::perceptual_distance",
      "name": "perceptual_distance",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "color",
      "path": "gpui_kit_tokens::color",
      "source": "crates/gpui-kit-tokens/src/color.rs",
      "summary": "The perceptual distance between two opaque colours, in OKLab units.",
      "documentation": "The perceptual distance between two opaque colours, in OKLab units.\n\nThis is the measure that answers \"can a reader tell these two apart\", which\nneither the WCAG ratio nor an L\\* difference does. Two colours of the same\nlightness in different hues are 1:1 by contrast ratio and zero apart in\nL\\*, and a categorical scale is made entirely of such pairs.\n\nAs a rule of thumb for the thresholds in this crate: below about `0.02` is\na difference nobody reliably sees, `0.10` is a comfortable separation\nbetween adjacent series, and `1.0` is roughly black against white.",
      "signature": "pub fn perceptual_distance (left : Color, right : Color) -> f32",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::CANVAS_SEPARATION_MINIMUM",
      "name": "CANVAS_SEPARATION_MINIMUM",
      "kind": "constant",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "How far apart two canvas marks that carry different facts must read.",
      "documentation": "How far apart two canvas marks that carry different facts must read.\n\nLower than the series floor because these marks are read one at a time\nagainst a known neighbour — a port beside its own edge, a return path\nbeside the flow it returns from — rather than eight at once across a\nplot. It is still a floor a hue drift falls through.",
      "signature": "pub const CANVAS_SEPARATION_MINIMUM: f32",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::ContrastCheck",
      "name": "ContrastCheck",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, PartialEq)] pub struct ContrastCheck { pub foreground : String, pub background : String, pub ratio : f32, pub minimum : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::ContrastCheck::passes",
      "name": "passes",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn passes (& self) -> bool",
      "cfg": [],
      "target": "ContrastCheck"
    },
    {
      "id": "gpui_kit_tokens::contrast::DISTINCTION_MINIMUM",
      "name": "DISTINCTION_MINIMUM",
      "kind": "constant",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "How far apart two tones that carry different facts must read.",
      "documentation": "How far apart two tones that carry different facts must read.\n\nThe same floor the surfaces get, for the same reason and in the same\nunits: below it the difference is a rendering artifact rather than\nsomething a reader can point at.",
      "signature": "pub const DISTINCTION_MINIMUM: f32",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::DistinctionCheck",
      "name": "DistinctionCheck",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "Two text tones that mean different things, and how far apart they read.",
      "documentation": "Two text tones that mean different things, and how far apart they read.",
      "signature": "# [doc = \" Two text tones that mean different things, and how far apart they read.\"] # [derive (Debug, Clone, PartialEq)] pub struct DistinctionCheck { pub tone : String, pub against : String, pub distance : f32, pub minimum : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::DistinctionCheck::passes",
      "name": "passes",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn passes (& self) -> bool",
      "cfg": [],
      "target": "DistinctionCheck"
    },
    {
      "id": "gpui_kit_tokens::contrast::LINE_MINIMUM",
      "name": "LINE_MINIMUM",
      "kind": "constant",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "The perceptual lightness a decorative line must gain over its surface.",
      "documentation": "The perceptual lightness a decorative line must gain over its surface.\n\nDeliberately far below [`SEPARATION_MINIMUM`]. A hairline separating two\nrows of one table is not a plane a reader has to identify, it is a hint\nthat two rows are two rows, and the row heights and the hover wash have\nalready said so. What this floor rules out is a line that was *typed* and\nnever *drawn*: an alpha low enough to round away against its own surface\nis a line the author believes is there and no display renders.\n\nThe upper bound is the point of the rule. A line held to the 3:1 that\n[`report`] requires of control boundaries is not a hairline, it is an\noutline, and a library that draws one around every card, row, menu and\ntab has no borderless language left to speak.",
      "signature": "pub const LINE_MINIMUM: f32",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::LineCheck",
      "name": "LineCheck",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "One decorative line on one surface, and how far it stands from it.",
      "documentation": "One decorative line on one surface, and how far it stands from it.",
      "signature": "# [doc = \" One decorative line on one surface, and how far it stands from it.\"] # [derive (Debug, Clone, PartialEq)] pub struct LineCheck { pub line : String, pub surface : String, pub distance : f32, pub minimum : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::LineCheck::passes",
      "name": "passes",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn passes (& self) -> bool",
      "cfg": [],
      "target": "LineCheck"
    },
    {
      "id": "gpui_kit_tokens::contrast::PLACEHOLDER_MAXIMUM",
      "name": "PLACEHOLDER_MAXIMUM",
      "kind": "constant",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "The most a loading placeholder may stand from its surface, in L\\*.",
      "documentation": "The most a loading placeholder may stand from its surface, in L\\*.\n\nThe ceiling is the point of the rule, and it is the one this table did not\nhave while every skeleton in the library was filled with\n`color.interactive.track`: a 3:1 control boundary used as a fill reads\naround 40 L\\* from a dark panel, which made *the absence of content* the\nbrightest thing on the page. A placeholder is a shape being awaited, not\ncontent — too loud is a defect exactly as real as invisible.",
      "signature": "pub const PLACEHOLDER_MAXIMUM: f32",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::PLACEHOLDER_MINIMUM",
      "name": "PLACEHOLDER_MINIMUM",
      "kind": "constant",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "The least a loading placeholder may stand from its surface, in L\\*.",
      "documentation": "The least a loading placeholder may stand from its surface, in L\\*.\n\nThe floor is the line rule's concern restated: a skeleton typed at an\nalpha that rounds away is a blank region the author believes is a shape.",
      "signature": "pub const PLACEHOLDER_MINIMUM: f32",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::PerceptualCheck",
      "name": "PerceptualCheck",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "One perceptual measurement, in OKLab units.",
      "documentation": "One perceptual measurement, in OKLab units.\n\nThe reports above measure whether a paint can be *seen*: a ratio against\nwhat is behind it, or a lightness step away from it. Those cannot answer\nwhether two paints can be told from *each other*, because two colours of\nequal lightness in different hues are 1:1 by the WCAG ratio and zero apart\nin L\\*. This is the type for the questions that need the answer — a\ncategorical scale, and the marks a canvas reports state with.\n\n`subject` names what was measured, so a failure says which paint to move.",
      "signature": "# [doc = \" One perceptual measurement, in OKLab units.\"] # [doc = \"\"] # [doc = \" The reports above measure whether a paint can be *seen*: a ratio against\"] # [doc = \" what is behind it, or a lightness step away from it. Those cannot answer\"] # [doc = \" whether two paints can be told from *each other*, because two colours of\"] # [doc = \" equal lightness in different hues are 1:1 by the WCAG ratio and zero apart\"] # [doc = \" in L\\\\*. This is the type for the questions that need the answer — a\"] # [doc = \" categorical scale, and the marks a canvas reports state with.\"] # [doc = \"\"] # [doc = \" `subject` names what was measured, so a failure says which paint to move.\"] # [derive (Debug, Clone, PartialEq)] pub struct PerceptualCheck { pub measure : String, pub subject : String, pub value : f32, pub minimum : f32, pub maximum : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::PerceptualCheck::passes",
      "name": "passes",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn passes (& self) -> bool",
      "cfg": [],
      "target": "PerceptualCheck"
    },
    {
      "id": "gpui_kit_tokens::contrast::PlaceholderCheck",
      "name": "PlaceholderCheck",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "One loading placeholder on one surface, and how loudly it reads there.",
      "documentation": "One loading placeholder on one surface, and how loudly it reads there.",
      "signature": "# [doc = \" One loading placeholder on one surface, and how loudly it reads there.\"] # [derive (Debug, Clone, PartialEq)] pub struct PlaceholderCheck { pub role : String, pub surface : String, pub distance : f32, pub minimum : f32, pub maximum : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::PlaceholderCheck::passes",
      "name": "passes",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn passes (& self) -> bool",
      "cfg": [],
      "target": "PlaceholderCheck"
    },
    {
      "id": "gpui_kit_tokens::contrast::SEPARATION_MINIMUM",
      "name": "SEPARATION_MINIMUM",
      "kind": "constant",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "The perceptual lightness gain required for every Dark nesting and for Canvas and Panel over Sunken in Light. Other Light nestings have a zero minimum: structural and elevated surfaces may share white, but not descend.",
      "documentation": "The perceptual lightness gain required for every Dark nesting and for\nCanvas and Panel over Sunken in Light. Other Light nestings have a zero\nminimum: structural and elevated surfaces may share white, but not descend.",
      "signature": "pub const SEPARATION_MINIMUM: f32",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::SERIES_CHROMA_RATIO_MINIMUM",
      "name": "SERIES_CHROMA_RATIO_MINIMUM",
      "kind": "constant",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "How saturated the quietest series must stay relative to the loudest.",
      "documentation": "How saturated the quietest series must stay relative to the loudest.\n\nThe regression this catches is the one entry picked from a different ramp\nthan the rest: it keeps its lightness and its contrast, so every other\ncheck passes, and it reads as grey beside seven colours. A near-neutral in\na categorical scale says \"no category\" while the legend says otherwise.",
      "signature": "pub const SERIES_CHROMA_RATIO_MINIMUM: f32",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::SERIES_LIGHTNESS_SPREAD_MAXIMUM",
      "name": "SERIES_LIGHTNESS_SPREAD_MAXIMUM",
      "kind": "constant",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "The most lightness a categorical scale may spread across, in OKLab L.",
      "documentation": "The most lightness a categorical scale may spread across, in OKLab L.\n\nCategorical means the entries are *different*, not ranked. Lightness is\nthe channel a reader reads rank in, so a scale whose entries span a wide\nlightness range is quietly claiming an order its data does not have: the\npale ones read as more important and the dark ones as background. Some\nspread is unavoidable, because sRGB will not give a saturated blue and a\nsaturated yellow the same lightness, but it is a cost rather than a\nfeature and this bounds it.",
      "signature": "pub const SERIES_LIGHTNESS_SPREAD_MAXIMUM: f32",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::SERIES_SEPARATION_MINIMUM",
      "name": "SERIES_SEPARATION_MINIMUM",
      "kind": "constant",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "How far apart any two series must read, in OKLab units.",
      "documentation": "How far apart any two series must read, in OKLab units.\n\nThe contrast report already asks whether each series is visible on each\nsurface, and a scale can pass that while two of its entries are the same\ncolour to a reader: the WCAG ratio between two paints of equal lightness\nis 1:1 whatever their hues, so it cannot tell \"indistinguishable\" from\n\"different\". This is the measure that can. The floor is the separation\neight hues can hold at one lightness and a shared chroma inside sRGB, so a\nscale that fails it has an entry that drifted rather than an ambition sRGB\ncannot meet.",
      "signature": "pub const SERIES_SEPARATION_MINIMUM: f32",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::SHEEN_MINIMUM",
      "name": "SHEEN_MINIMUM",
      "kind": "constant",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "The least a sheen may change the placeholder it crosses, in L\\*.",
      "documentation": "The least a sheen may change the placeholder it crosses, in L\\*.\n\nMeasured over the composited placeholder rather than the bare surface,\nbecause that is the only plane a sheen is ever drawn on: a highlight that\nclears every surface but vanishes on the skeleton itself is still a\nshimmer nobody sees.",
      "signature": "pub const SHEEN_MINIMUM: f32",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::SeparationCheck",
      "name": "SeparationCheck",
      "kind": "struct",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "One nesting of two surfaces, and how far apart they read.",
      "documentation": "One nesting of two surfaces, and how far apart they read.\n\n`distance` is signed: positive means `near` is the lighter of the two, so\none check enforces the direction of a stack and, where required by the\nappearance and nesting, a visible step.",
      "signature": "# [doc = \" One nesting of two surfaces, and how far apart they read.\"] # [doc = \"\"] # [doc = \" `distance` is signed: positive means `near` is the lighter of the two, so\"] # [doc = \" one check enforces the direction of a stack and, where required by the\"] # [doc = \" appearance and nesting, a visible step.\"] # [derive (Debug, Clone, PartialEq)] pub struct SeparationCheck { pub near : String, pub behind : String, pub distance : f32, pub minimum : f32, }",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::SeparationCheck::passes",
      "name": "passes",
      "kind": "method",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn passes (& self) -> bool",
      "cfg": [],
      "target": "SeparationCheck"
    },
    {
      "id": "gpui_kit_tokens::contrast::canvas_failures",
      "name": "canvas_failures",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn canvas_failures (tokens : & TokenDocument) -> Vec<PerceptualCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::canvas_report",
      "name": "canvas_report",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "Evaluates the node canvas marks that report state, in OKLab.",
      "documentation": "Evaluates the node canvas marks that report state, in OKLab.\n\n[`report`] asks whether each of these is visible on the canvas and\n[`distinction_report`] holds the one ordering that matters — a connected\nport stands further from the page than an idle one. Neither can see two\nmarks that are visible, correctly ordered, and the same colour.\n\nHover is measured against idle and not against connected on purpose. A\nhovered port and a connected port are both live, and what separates them\nis the ring the component draws around the one under the pointer, which is\na channel the token document does not own. What a theme must not do is\nleave hover looking like the resting state, because then the canvas never\nanswers whether a port can be grabbed.",
      "signature": "pub fn canvas_report (tokens : & TokenDocument) -> Vec<PerceptualCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::distinction_failures",
      "name": "distinction_failures",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn distinction_failures (tokens : & TokenDocument) -> Vec<DistinctionCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::distinction_report",
      "name": "distinction_report",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "Evaluates the tone ladder for one theme.",
      "documentation": "Evaluates the tone ladder for one theme.\n\nNeither report above can answer this. The contrast report asks whether each\ntone is legible on each surface and passes happily when three of them are\nlegible because they are the same colour, which is exactly how\n`studio-dark` came to draw faint, placeholder and disabled in one grey\nwhile the visual audit kept reporting that unavailable values were\nunreadable. They were perfectly readable; they were just not distinguishable.",
      "signature": "pub fn distinction_report (tokens : & TokenDocument) -> Vec<DistinctionCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::failures",
      "name": "failures",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn failures (tokens : & TokenDocument) -> Vec<ContrastCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::line_failures",
      "name": "line_failures",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn line_failures (tokens : & TokenDocument) -> Vec<LineCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::line_report",
      "name": "line_report",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "Every decorative line, against every surface it can be drawn on.",
      "documentation": "Every decorative line, against every surface it can be drawn on.\n\nThe line colours are translucent by design, so each is composited onto the\nsurface before it is measured: what the rule asks is what a reader\nactually sees, not what the channel says in isolation.",
      "signature": "pub fn line_report (tokens : & TokenDocument) -> Vec<LineCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::placeholder_failures",
      "name": "placeholder_failures",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn placeholder_failures (tokens : & TokenDocument) -> Vec<PlaceholderCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::placeholder_report",
      "name": "placeholder_report",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "Evaluates the quiet loader roles for one theme.",
      "documentation": "Evaluates the quiet loader roles for one theme.\n\n`placeholder` is composited over every surface and must land inside the\nband — visible, and quieter than content. `sheen` is composited over that\nresult and must move it at all.",
      "signature": "pub fn placeholder_report (tokens : & TokenDocument) -> Vec<PlaceholderCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::report",
      "name": "report",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "Evaluates every required pair for one theme.",
      "documentation": "Evaluates every required pair for one theme.",
      "signature": "pub fn report (tokens : & TokenDocument) -> Vec<ContrastCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::separation_failures",
      "name": "separation_failures",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn separation_failures (tokens : & TokenDocument) -> Vec<SeparationCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::separation_report",
      "name": "separation_report",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "Evaluates every surface nesting for one theme.",
      "documentation": "Evaluates every surface nesting for one theme.\n\nThis is independent of foreground readability. Equal Light backgrounds\nare intentional; recessed wells and the Dark ramp still need separation.",
      "signature": "pub fn separation_report (tokens : & TokenDocument) -> Vec<SeparationCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::series_failures",
      "name": "series_failures",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn series_failures (tokens : & TokenDocument) -> Vec<PerceptualCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::contrast::series_report",
      "name": "series_report",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "contrast",
      "path": "gpui_kit_tokens::contrast",
      "source": "crates/gpui-kit-tokens/src/contrast.rs",
      "summary": "Evaluates the categorical scale of one theme in OKLab.",
      "documentation": "Evaluates the categorical scale of one theme in OKLab.\n\nThis is the perceptual counterpart to [`report`]. That one asks whether a\nseries can be seen; this one asks whether it can be told from the other\nseven, and whether the scale as a whole says only what a categorical scale\nis entitled to say.",
      "signature": "pub fn series_report (tokens : & TokenDocument) -> Vec<PerceptualCheck>",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::presets",
      "name": "presets",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "The community schemes shipped alongside the studio pair, in registration order.",
      "documentation": "The community schemes shipped alongside the studio pair, in registration\norder.",
      "signature": "pub fn presets () -> [& 'static TokenDocument; 8]",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::reexport-1",
      "name": "color :: { Color , Oklab , Oklch , Palette , contrast_ratio , mix , over , perceptual_distance }",
      "kind": "reexport",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use color::{ Color, Oklab, Oklch, Palette, contrast_ratio, mix, over, perceptual_distance };",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::studio_dark",
      "name": "studio_dark",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn studio_dark () -> & 'static TokenDocument",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::studio_dark_json",
      "name": "studio_dark_json",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn studio_dark_json () -> & 'static str",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::studio_light",
      "name": "studio_light",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn studio_light () -> & 'static TokenDocument",
      "cfg": []
    },
    {
      "id": "gpui_kit_tokens::studio_light_json",
      "name": "studio_light_json",
      "kind": "function",
      "package": "gpui-box-kit-tokens",
      "crate": "gpui_kit_tokens",
      "module": "",
      "path": "gpui_kit_tokens",
      "source": "crates/gpui-kit-tokens/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn studio_light_json () -> & 'static str",
      "cfg": []
    },
    {
      "id": "gpui_linux::gpui_linux::reexport-1",
      "name": "linux :: current_platform",
      "kind": "reexport",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "gpui_linux",
      "path": "gpui_linux::gpui_linux",
      "source": "crates/gpui_linux/src/gpui_linux.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use linux::current_platform;",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::current_platform",
      "name": "current_platform",
      "kind": "function",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux",
      "path": "gpui_linux::linux",
      "source": "crates/gpui_linux/src/linux.rs",
      "summary": "Returns the default platform implementation for the current OS.",
      "documentation": "Returns the default platform implementation for the current OS.",
      "signature": "pub fn current_platform (headless : bool) -> Rc<dyn gpui::Platform>",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::dispatcher::ChannelError",
      "name": "ChannelError",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::dispatcher",
      "path": "gpui_linux::linux::dispatcher",
      "source": "crates/gpui_linux/src/linux/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug)] pub struct ChannelError (calloop::ping::PingError);",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::dispatcher::LinuxDispatcher::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::dispatcher",
      "path": "gpui_linux::linux::dispatcher",
      "source": "crates/gpui_linux/src/linux/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (main_sender : PriorityQueueCalloopSender<RunnableVariant>) -> Self",
      "cfg": [],
      "target": "LinuxDispatcher"
    },
    {
      "id": "gpui_linux::linux::dispatcher::PriorityQueueCalloopReceiver",
      "name": "PriorityQueueCalloopReceiver",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::dispatcher",
      "path": "gpui_linux::linux::dispatcher",
      "source": "crates/gpui_linux/src/linux/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct PriorityQueueCalloopReceiver<T> { receiver : PriorityQueueReceiver<T>, source : calloop::ping::PingSource, ping : calloop::ping::Ping, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::dispatcher::PriorityQueueCalloopReceiver::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::dispatcher",
      "path": "gpui_linux::linux::dispatcher",
      "source": "crates/gpui_linux/src/linux/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> (PriorityQueueCalloopSender<T>, Self)",
      "cfg": [],
      "target": "PriorityQueueCalloopReceiver<T>"
    },
    {
      "id": "gpui_linux::linux::dispatcher::PriorityQueueCalloopSender",
      "name": "PriorityQueueCalloopSender",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::dispatcher",
      "path": "gpui_linux::linux::dispatcher",
      "source": "crates/gpui_linux/src/linux/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct PriorityQueueCalloopSender<T> { sender : PriorityQueueSender<T>, ping : calloop::ping::Ping, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::headless::client::HeadlessClientState",
      "name": "HeadlessClientState",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::headless::client",
      "path": "gpui_linux::linux::headless::client",
      "source": "crates/gpui_linux/src/linux/headless/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct HeadlessClientState { pub (crate) _loop_handle : LoopHandle<'static, HeadlessClient>, pub (crate) event_loop : Option<calloop::EventLoop<'static, HeadlessClient>>, pub (crate) common : LinuxCommon, pub (crate) display : Rc<dyn PlatformDisplay>, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::platform::LinuxCommon::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::platform",
      "path": "gpui_linux::linux::platform",
      "source": "crates/gpui_linux/src/linux/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (signal : LoopSignal,) -> (Self, PriorityQueueCalloopReceiver<RunnableVariant>, calloop::channel::Channel<()>,)",
      "cfg": [],
      "target": "LinuxCommon"
    },
    {
      "id": "gpui_linux::linux::platform::keystroke_underlying_dead_key",
      "name": "keystroke_underlying_dead_key",
      "kind": "function",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::platform",
      "path": "gpui_linux::linux::platform",
      "source": "crates/gpui_linux/src/linux/platform.rs",
      "summary": "* Returns which symbol the dead key represents * <https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values#dead_keycodes_for_linux>",
      "documentation": "* Returns which symbol the dead key represents\n * <https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values#dead_keycodes_for_linux>",
      "signature": "pub fn keystroke_underlying_dead_key (keysym : Keysym) -> Option<String>",
      "cfg": [
        "cfg (any (feature = \"wayland\", feature = \"x11\"))"
      ]
    },
    {
      "id": "gpui_linux::linux::reexport-1",
      "name": "dispatcher :: *",
      "kind": "reexport",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux",
      "path": "gpui_linux::linux",
      "source": "crates/gpui_linux/src/linux.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use dispatcher::*;",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::client::ClickState",
      "name": "ClickState",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct ClickState { last_mouse_button : Option<MouseButton>, last_click : Instant, last_location : Point<Pixels>, current_count : usize, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::client::DragState",
      "name": "DragState",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct DragState { data_offer : Option<wl_data_offer::WlDataOffer>, window : Option<WaylandWindowStatePtr>, position : Point<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::client::Globals",
      "name": "Globals",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone)] pub struct Globals { pub qh : QueueHandle<WaylandClientStatePtr>, pub activation : Option<xdg_activation_v1::XdgActivationV1>, pub compositor : wl_compositor::WlCompositor, pub cursor_shape_manager : Option<wp_cursor_shape_manager_v1::WpCursorShapeManagerV1>, pub data_device_manager : Option<wl_data_device_manager::WlDataDeviceManager>, pub primary_selection_manager : Option<zwp_primary_selection_device_manager_v1::ZwpPrimarySelectionDeviceManagerV1>, pub wm_base : xdg_wm_base::XdgWmBase, pub shm : wl_shm::WlShm, pub seat : wl_seat::WlSeat, pub viewporter : Option<wp_viewporter::WpViewporter>, pub fractional_scale_manager : Option<wp_fractional_scale_manager_v1::WpFractionalScaleManagerV1>, pub decoration_manager : Option<zxdg_decoration_manager_v1::ZxdgDecorationManagerV1>, pub layer_shell : Option<zwlr_layer_shell_v1::ZwlrLayerShellV1>, pub blur_manager : Option<org_kde_kwin_blur_manager::OrgKdeKwinBlurManager>, pub text_input_manager : Option<zwp_text_input_manager_v3::ZwpTextInputManagerV3>, pub gesture_manager : Option<zwp_pointer_gestures_v1::ZwpPointerGesturesV1>, pub dialog : Option<xdg_wm_dialog_v1::XdgWmDialogV1>, pub system_bell : Option<xdg_system_bell_v1::XdgSystemBellV1>, pub executor : ForegroundExecutor, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::client::InProgressOutput",
      "name": "InProgressOutput",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Default, Debug, Clone, PartialEq, Eq, Hash)] pub struct InProgressOutput { name : Option<String>, scale : Option<i32>, position : Option<Point<DevicePixels>>, size : Option<Size<DevicePixels>>, subpixel : Option<wl_output::Subpixel>, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::client::Output",
      "name": "Output",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Eq, PartialEq, Hash)] pub struct Output { pub name : Option<String>, pub scale : i32, pub bounds : Bounds<DevicePixels>, pub subpixel : Option<wl_output::Subpixel>, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::client::WaylandClient",
      "name": "WaylandClient",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone)] pub struct WaylandClient (Rc<RefCell<WaylandClientState>>);",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::client::WaylandClientStatePtr",
      "name": "WaylandClientStatePtr",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "This struct is required to conform to Rust's orphan rules, so we can dispatch on the state but hand the window to GPUI.",
      "documentation": "This struct is required to conform to Rust's orphan rules, so we can dispatch on the state but hand the\nwindow to GPUI.",
      "signature": "# [doc = \" This struct is required to conform to Rust's orphan rules, so we can dispatch on the state but hand the\"] # [doc = \" window to GPUI.\"] # [derive (Clone)] pub struct WaylandClientStatePtr (Weak<RefCell<WaylandClientState>>);",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::client::WaylandClientStatePtr::disable_ime",
      "name": "disable_ime",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn disable_ime (& self)",
      "cfg": [],
      "target": "WaylandClientStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::client::WaylandClientStatePtr::drop_window",
      "name": "drop_window",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn drop_window (& self, surface_id : & ObjectId)",
      "cfg": [],
      "target": "WaylandClientStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::client::WaylandClientStatePtr::enable_ime",
      "name": "enable_ime",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn enable_ime (& self)",
      "cfg": [],
      "target": "WaylandClientStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::client::WaylandClientStatePtr::get_client",
      "name": "get_client",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get_client (& self) -> Rc<RefCell<WaylandClientState>>",
      "cfg": [],
      "target": "WaylandClientStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::client::WaylandClientStatePtr::get_serial",
      "name": "get_serial",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get_serial (& self, kind : SerialKind) -> Serial",
      "cfg": [],
      "target": "WaylandClientStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::client::WaylandClientStatePtr::handle_keyboard_layout_change",
      "name": "handle_keyboard_layout_change",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_keyboard_layout_change (& self)",
      "cfg": [],
      "target": "WaylandClientStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::client::WaylandClientStatePtr::ime_enabled",
      "name": "ime_enabled",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ime_enabled (& self) -> Option<bool>",
      "cfg": [],
      "target": "WaylandClientStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::client::WaylandClientStatePtr::set_pending_activation",
      "name": "set_pending_activation",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_pending_activation (& self, window : ObjectId)",
      "cfg": [],
      "target": "WaylandClientStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::client::WaylandClientStatePtr::start_external_drag",
      "name": "start_external_drag",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn start_external_drag (& self, surface : & wl_surface::WlSurface, payload : & ExternalDragPayload,) -> bool",
      "cfg": [],
      "target": "WaylandClientStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::client::WaylandClientStatePtr::update_ime_position",
      "name": "update_ime_position",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::client",
      "path": "gpui_linux::linux::wayland::client",
      "source": "crates/gpui_linux/src/linux/wayland/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update_ime_position (& self, bounds : Bounds<Pixels>)",
      "cfg": [],
      "target": "WaylandClientStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::clipboard::Clipboard::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::clipboard",
      "path": "gpui_linux::linux::wayland::clipboard",
      "source": "crates/gpui_linux/src/linux/wayland/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (connection : Connection, loop_handle : LoopHandle<'static, WaylandClientStatePtr>,) -> Self",
      "cfg": [],
      "target": "Clipboard"
    },
    {
      "id": "gpui_linux::linux::wayland::clipboard::Clipboard::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::clipboard",
      "path": "gpui_linux::linux::wayland::clipboard",
      "source": "crates/gpui_linux/src/linux/wayland/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn read (& mut self) -> Option<ClipboardItem>",
      "cfg": [],
      "target": "Clipboard"
    },
    {
      "id": "gpui_linux::linux::wayland::clipboard::Clipboard::read_primary",
      "name": "read_primary",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::clipboard",
      "path": "gpui_linux::linux::wayland::clipboard",
      "source": "crates/gpui_linux/src/linux/wayland/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn read_primary (& mut self) -> Option<ClipboardItem>",
      "cfg": [],
      "target": "Clipboard"
    },
    {
      "id": "gpui_linux::linux::wayland::clipboard::Clipboard::self_mime",
      "name": "self_mime",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::clipboard",
      "path": "gpui_linux::linux::wayland::clipboard",
      "source": "crates/gpui_linux/src/linux/wayland/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn self_mime (& self) -> String",
      "cfg": [],
      "target": "Clipboard"
    },
    {
      "id": "gpui_linux::linux::wayland::clipboard::Clipboard::send",
      "name": "send",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::clipboard",
      "path": "gpui_linux::linux::wayland::clipboard",
      "source": "crates/gpui_linux/src/linux/wayland/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn send (& self, _mime_type : String, fd : OwnedFd)",
      "cfg": [],
      "target": "Clipboard"
    },
    {
      "id": "gpui_linux::linux::wayland::clipboard::Clipboard::send_bytes",
      "name": "send_bytes",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::clipboard",
      "path": "gpui_linux::linux::wayland::clipboard",
      "source": "crates/gpui_linux/src/linux/wayland/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn send_bytes (& self, fd : OwnedFd, bytes : Vec<u8>)",
      "cfg": [],
      "target": "Clipboard"
    },
    {
      "id": "gpui_linux::linux::wayland::clipboard::Clipboard::send_primary",
      "name": "send_primary",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::clipboard",
      "path": "gpui_linux::linux::wayland::clipboard",
      "source": "crates/gpui_linux/src/linux/wayland/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn send_primary (& self, _mime_type : String, fd : OwnedFd)",
      "cfg": [],
      "target": "Clipboard"
    },
    {
      "id": "gpui_linux::linux::wayland::clipboard::Clipboard::set",
      "name": "set",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::clipboard",
      "path": "gpui_linux::linux::wayland::clipboard",
      "source": "crates/gpui_linux/src/linux/wayland/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set (& mut self, item : ClipboardItem)",
      "cfg": [],
      "target": "Clipboard"
    },
    {
      "id": "gpui_linux::linux::wayland::clipboard::Clipboard::set_offer",
      "name": "set_offer",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::clipboard",
      "path": "gpui_linux::linux::wayland::clipboard",
      "source": "crates/gpui_linux/src/linux/wayland/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_offer (& mut self, data_offer : Option<DataOffer<WlDataOffer>>)",
      "cfg": [],
      "target": "Clipboard"
    },
    {
      "id": "gpui_linux::linux::wayland::clipboard::Clipboard::set_primary",
      "name": "set_primary",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::clipboard",
      "path": "gpui_linux::linux::wayland::clipboard",
      "source": "crates/gpui_linux/src/linux/wayland/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_primary (& mut self, item : ClipboardItem)",
      "cfg": [],
      "target": "Clipboard"
    },
    {
      "id": "gpui_linux::linux::wayland::clipboard::Clipboard::set_primary_offer",
      "name": "set_primary_offer",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::clipboard",
      "path": "gpui_linux::linux::wayland::clipboard",
      "source": "crates/gpui_linux/src/linux/wayland/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_primary_offer (& mut self, data_offer : Option<DataOffer<ZwpPrimarySelectionOfferV1>>)",
      "cfg": [],
      "target": "Clipboard"
    },
    {
      "id": "gpui_linux::linux::wayland::clipboard::DataOffer::add_mime_type",
      "name": "add_mime_type",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::clipboard",
      "path": "gpui_linux::linux::wayland::clipboard",
      "source": "crates/gpui_linux/src/linux/wayland/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn add_mime_type (& mut self, mime_type : String)",
      "cfg": [],
      "target": "DataOffer<T>"
    },
    {
      "id": "gpui_linux::linux::wayland::clipboard::DataOffer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::clipboard",
      "path": "gpui_linux::linux::wayland::clipboard",
      "source": "crates/gpui_linux/src/linux/wayland/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (offer : T) -> Self",
      "cfg": [],
      "target": "DataOffer<T>"
    },
    {
      "id": "gpui_linux::linux::wayland::cursor::Cursor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::cursor",
      "path": "gpui_linux::linux::wayland::cursor",
      "source": "crates/gpui_linux/src/linux/wayland/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (connection : & Connection, globals : & Globals, size : u32) -> Self",
      "cfg": [],
      "target": "Cursor"
    },
    {
      "id": "gpui_linux::linux::wayland::cursor::Cursor::set_icon",
      "name": "set_icon",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::cursor",
      "path": "gpui_linux::linux::wayland::cursor",
      "source": "crates/gpui_linux/src/linux/wayland/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_icon (& mut self, wl_pointer : & WlPointer, serial_id : u32, cursor_icon_names : & [& str], scale : i32,)",
      "cfg": [],
      "target": "Cursor"
    },
    {
      "id": "gpui_linux::linux::wayland::cursor::Cursor::set_size",
      "name": "set_size",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::cursor",
      "path": "gpui_linux::linux::wayland::cursor",
      "source": "crates/gpui_linux/src/linux/wayland/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_size (& mut self, size : u32)",
      "cfg": [],
      "target": "Cursor"
    },
    {
      "id": "gpui_linux::linux::wayland::cursor::Cursor::set_theme",
      "name": "set_theme",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::cursor",
      "path": "gpui_linux::linux::wayland::cursor",
      "source": "crates/gpui_linux/src/linux/wayland/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_theme (& mut self, theme_name : String)",
      "cfg": [],
      "target": "Cursor"
    },
    {
      "id": "gpui_linux::linux::wayland::layer_shell::reexport-1",
      "name": "gpui :: layer_shell :: *",
      "kind": "reexport",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::layer_shell",
      "path": "gpui_linux::linux::wayland::layer_shell",
      "source": "crates/gpui_linux/src/linux/wayland/layer_shell.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui::layer_shell::*;",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::popup::reexport-1",
      "name": "gpui :: popup :: *",
      "kind": "reexport",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::popup",
      "path": "gpui_linux::linux::wayland::popup",
      "source": "crates/gpui_linux/src/linux/wayland/popup.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui::popup::*;",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::serial::SerialTracker::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::serial",
      "path": "gpui_linux::linux::wayland::serial",
      "source": "crates/gpui_linux/src/linux/wayland/serial.rs",
      "summary": "Returns the latest tracked serial of the provided [`SerialKind`].",
      "documentation": "Returns the latest tracked serial of the provided [`SerialKind`].\n\nReturns a serial with a raw value of 0 if the kind has not been tracked.",
      "signature": "pub fn get (& self, kind : SerialKind) -> Serial",
      "cfg": [],
      "target": "SerialTracker"
    },
    {
      "id": "gpui_linux::linux::wayland::serial::SerialTracker::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::serial",
      "path": "gpui_linux::linux::wayland::serial",
      "source": "crates/gpui_linux/src/linux/wayland/serial.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "SerialTracker"
    },
    {
      "id": "gpui_linux::linux::wayland::serial::SerialTracker::selection_serial",
      "name": "selection_serial",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::serial",
      "path": "gpui_linux::linux::wayland::serial",
      "source": "crates/gpui_linux/src/linux/wayland/serial.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn selection_serial (& self) -> Option<SelectionSerial>",
      "cfg": [],
      "target": "SerialTracker"
    },
    {
      "id": "gpui_linux::linux::wayland::serial::SerialTracker::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::serial",
      "path": "gpui_linux::linux::wayland::serial",
      "source": "crates/gpui_linux/src/linux/wayland/serial.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update (& mut self, kind : SerialKind, value : u32)",
      "cfg": [],
      "target": "SerialTracker"
    },
    {
      "id": "gpui_linux::linux::wayland::window::ImeInput",
      "name": "ImeInput",
      "kind": "enum",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub enum ImeInput { Insert (String), SetMarked (String), Unmark, DeleteBackward, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandLayerSurfaceState",
      "name": "WaylandLayerSurfaceState",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WaylandLayerSurfaceState { layer_surface : zwlr_layer_surface_v1::ZwlrLayerSurfaceV1, anchor : Anchor, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandPopupSurfaceState",
      "name": "WaylandPopupSurfaceState",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WaylandPopupSurfaceState { xdg_surface : xdg_surface::XdgSurface, xdg_popup : xdg_popup::XdgPopup, options : PopupOptions, next_reposition_token : Cell<u32>, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandSurfaceState",
      "name": "WaylandSurfaceState",
      "kind": "enum",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub enum WaylandSurfaceState { Xdg (WaylandXdgSurfaceState), LayerShell (WaylandLayerSurfaceState), Popup (WaylandPopupSurfaceState), }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindow::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (handle : AnyWindowHandle, context : WaylandWindowContext, params : WindowParams, parent : Option<WaylandWindowStatePtr>, popup_grab : Option<(u32, wl_seat::WlSeat)>, target_output : Option<wl_output::WlOutput>,) -> anyhow::Result<(Self, ObjectId)>",
      "cfg": [],
      "target": "WaylandWindow"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowState",
      "name": "WaylandWindowState",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WaylandWindowState { surface_state : WaylandSurfaceState, acknowledged_first_configure : bool, parent : Option<WaylandWindowStatePtr>, # [doc = \" Child surfaces mapped to whether they block this window's input (dialogs\"] # [doc = \" block, popups don't). Children are closed before this window closes.\"] children : FxHashMap<ObjectId, bool>, pub surface : wl_surface::WlSurface, app_id : Option<String>, appearance : WindowAppearance, blur : Option<org_kde_kwin_blur::OrgKdeKwinBlur>, viewport : Option<wp_viewport::WpViewport>, outputs : HashMap<ObjectId, Output>, display : Option<(ObjectId, Output)>, globals : Globals, renderer : WgpuRenderer, bounds : Bounds<Pixels>, scale : f32, input_handler : Option<PlatformInputHandler>, decorations : WindowDecorations, background_appearance : WindowBackgroundAppearance, fullscreen : bool, maximized : bool, tiling : Tiling, window_bounds : Bounds<Pixels>, client : WaylandClientStatePtr, handle : AnyWindowHandle, active : bool, hovered : bool, pub (crate) force_render_after_recovery : bool, renderer_presented : bool, in_progress_configure : Option<InProgressConfigure>, resize_throttle : bool, in_progress_window_controls : Option<WindowControls>, window_controls : WindowControls, client_inset : Option<Pixels>, accesskit_adapter : Option<accesskit_unix::Adapter>, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowState::inset",
      "name": "inset",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn inset (& self) -> Pixels",
      "cfg": [],
      "target": "WaylandWindowState"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowState::is_transparent",
      "name": "is_transparent",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_transparent (& self) -> bool",
      "cfg": [],
      "target": "WaylandWindowState"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowState::primary_output_scale",
      "name": "primary_output_scale",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn primary_output_scale (& mut self) -> i32",
      "cfg": [],
      "target": "WaylandWindowState"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr",
      "name": "WaylandWindowStatePtr",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone)] pub struct WaylandWindowStatePtr { state : Rc<RefCell<WaylandWindowState>>, callbacks : Rc<RefCell<Callbacks>>, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::add_child",
      "name": "add_child",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn add_child (& self, child : ObjectId, blocking : bool)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn close (& self)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::frame",
      "name": "frame",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn frame (& self)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::get_ime_area",
      "name": "get_ime_area",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get_ime_area (& self) -> Option<Bounds<Pixels>>",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::handle",
      "name": "handle",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle (& self) -> AnyWindowHandle",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::handle_fractional_scale_event",
      "name": "handle_fractional_scale_event",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_fractional_scale_event (& self, event : wp_fractional_scale_v1::Event)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::handle_ime",
      "name": "handle_ime",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_ime (& self, ime : ImeInput)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::handle_input",
      "name": "handle_input",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_input (& self, input : PlatformInput)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::handle_layersurface_event",
      "name": "handle_layersurface_event",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_layersurface_event (& self, event : zwlr_layer_surface_v1::Event) -> bool",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::handle_popup_event",
      "name": "handle_popup_event",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_popup_event (& self, event : xdg_popup::Event) -> bool",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::handle_surface_event",
      "name": "handle_surface_event",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_surface_event (& self, event : wl_surface::Event, outputs : HashMap<ObjectId, Output>,)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::handle_toplevel_decoration_event",
      "name": "handle_toplevel_decoration_event",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_toplevel_decoration_event (& self, event : zxdg_toplevel_decoration_v1::Event)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::handle_toplevel_event",
      "name": "handle_toplevel_event",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_toplevel_event (& self, event : xdg_toplevel::Event) -> bool",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::handle_xdg_surface_event",
      "name": "handle_xdg_surface_event",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_xdg_surface_event (& self, event : xdg_surface::Event)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::is_blocked",
      "name": "is_blocked",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_blocked (& self) -> bool",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::layer_surface",
      "name": "layer_surface",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "The layer-shell surface backing this window, if it is one. Used to anchor child popups.",
      "documentation": "The layer-shell surface backing this window, if it is one. Used to anchor child popups.",
      "signature": "pub fn layer_surface (& self) -> Option<zwlr_layer_surface_v1::ZwlrLayerSurfaceV1>",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::primary_output_scale",
      "name": "primary_output_scale",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn primary_output_scale (& self) -> i32",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::ptr_eq",
      "name": "ptr_eq",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ptr_eq (& self, other : & Self) -> bool",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::rescale",
      "name": "rescale",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rescale (& self, scale : f32)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::resize",
      "name": "resize",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn resize (& self, size : Size<Pixels>)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::set_appearance",
      "name": "set_appearance",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_appearance (& mut self, appearance : WindowAppearance)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::set_button_layout",
      "name": "set_button_layout",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_button_layout (& self)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::set_focused",
      "name": "set_focused",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_focused (& self, focus : bool)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::set_hovered",
      "name": "set_hovered",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_hovered (& self, focus : bool)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::set_size_and_scale",
      "name": "set_size_and_scale",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_size_and_scale (& self, size : Option<Size<Pixels>>, scale : Option<f32>)",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::surface",
      "name": "surface",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn surface (& self) -> wl_surface::WlSurface",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::toplevel",
      "name": "toplevel",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn toplevel (& self) -> Option<xdg_toplevel::XdgToplevel>",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::window_geometry",
      "name": "window_geometry",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "This window's xdg window geometry in surface-local coordinates. Child popup anchor rectangles are relative to it, while gpui coordinates are surface-local.",
      "documentation": "This window's xdg window geometry in surface-local coordinates. Child popup anchor\nrectangles are relative to it, while gpui coordinates are surface-local.",
      "signature": "pub fn window_geometry (& self) -> Bounds<Pixels>",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandWindowStatePtr::xdg_surface",
      "name": "xdg_surface",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "The `xdg_surface` backing this window, if it has one. Used to anchor child popups.",
      "documentation": "The `xdg_surface` backing this window, if it has one. Used to anchor child popups.",
      "signature": "pub fn xdg_surface (& self) -> Option<xdg_surface::XdgSurface>",
      "cfg": [],
      "target": "WaylandWindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::wayland::window::WaylandXdgSurfaceState",
      "name": "WaylandXdgSurfaceState",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::wayland::window",
      "path": "gpui_linux::linux::wayland::window",
      "source": "crates/gpui_linux/src/linux/wayland/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WaylandXdgSurfaceState { xdg_surface : xdg_surface::XdgSurface, toplevel : xdg_toplevel::XdgToplevel, decoration : Option<zxdg_toplevel_decoration_v1::ZxdgToplevelDecorationV1>, dialog : Option<XdgDialogV1>, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::x11::client::EventHandlerError",
      "name": "EventHandlerError",
      "kind": "enum",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::client",
      "path": "gpui_linux::linux::x11::client",
      "source": "crates/gpui_linux/src/linux/x11/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug)] # [non_exhaustive] pub enum EventHandlerError { XCBConnectionError (ConnectionError), XIMClientError (xim::ClientError), }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::x11::client::WindowRef::handle",
      "name": "handle",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::client",
      "path": "gpui_linux::linux::x11::client",
      "source": "crates/gpui_linux/src/linux/x11/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle (& self) -> AnyWindowHandle",
      "cfg": [],
      "target": "WindowRef"
    },
    {
      "id": "gpui_linux::linux::x11::client::X11Client::enable_ime",
      "name": "enable_ime",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::client",
      "path": "gpui_linux::linux::x11::client",
      "source": "crates/gpui_linux/src/linux/x11/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn enable_ime (& self)",
      "cfg": [],
      "target": "X11Client"
    },
    {
      "id": "gpui_linux::linux::x11::client::X11Client::process_x11_events",
      "name": "process_x11_events",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::client",
      "path": "gpui_linux::linux::x11::client",
      "source": "crates/gpui_linux/src/linux/x11/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn process_x11_events (& self, xcb_connection : & XCBConnection,) -> Result<(), EventHandlerError>",
      "cfg": [],
      "target": "X11Client"
    },
    {
      "id": "gpui_linux::linux::x11::client::X11Client::reset_ime",
      "name": "reset_ime",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::client",
      "path": "gpui_linux::linux::x11::client",
      "source": "crates/gpui_linux/src/linux/x11/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn reset_ime (& self)",
      "cfg": [],
      "target": "X11Client"
    },
    {
      "id": "gpui_linux::linux::x11::client::X11ClientState",
      "name": "X11ClientState",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::client",
      "path": "gpui_linux::linux::x11::client",
      "source": "crates/gpui_linux/src/linux/x11/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct X11ClientState { pub (crate) loop_handle : LoopHandle<'static, X11Client>, pub (crate) event_loop : Option<calloop::EventLoop<'static, X11Client>>, pub (crate) last_click : Instant, pub (crate) last_mouse_button : Option<MouseButton>, pub (crate) last_location : Point<Pixels>, pub (crate) current_count : usize, pub (crate) pinch_scale : f32, pub (crate) gpu_context : GpuContext, pub (crate) compositor_gpu : Option<CompositorGpuHint>, pub (crate) scale_factor : f32, xkb_context : xkbc::Context, pub (crate) xcb_connection : Rc<XCBConnection>, xkb_device_id : i32, client_side_decorations_supported : bool, pub (crate) x_root_index : usize, pub (crate) resource_database : Database, pub (crate) atoms : XcbAtoms, pub (crate) windows : HashMap<xproto::Window, WindowRef>, pub (crate) mouse_focused_window : Option<xproto::Window>, pub (crate) keyboard_focused_window : Option<xproto::Window>, pub (crate) xkb : xkbc::State, keyboard_layout : LinuxKeyboardLayout, pub (crate) ximc : Option<X11rbClient<Rc<XCBConnection>>>, pub (crate) xim_handler : Option<XimHandler>, pub modifiers : Modifiers, pub capslock : Capslock, pub last_modifiers_changed_event : Modifiers, pub last_capslock_changed_event : Capslock, pub (crate) compose_state : Option<xkbc::compose::State>, pub (crate) pre_edit_text : Option<String>, pub (crate) composing : bool, pub (crate) pre_key_char_down : Option<Keystroke>, pub (crate) cursor_handle : cursor::Handle, pub (crate) cursor_styles : HashMap<xproto::Window, CursorStyle>, pub (crate) cursor_cache : HashMap<CursorStyle, Option<xproto::Cursor>>, pub (crate) invisible_cursor_cache : Option<xproto::Cursor>, pub (crate) cursor_hidden_window : Option<xproto::Window>, pointer_device_states : BTreeMap<xinput::DeviceId, PointerDeviceState>, pub (crate) supports_xinput_gestures : bool, pub (crate) common : LinuxCommon, pub (crate) clipboard : Clipboard, pub (crate) clipboard_item : Option<ClipboardItem>, pub (crate) xdnd_state : Xdnd, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::x11::client::X11ClientStatePtr",
      "name": "X11ClientStatePtr",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::client",
      "path": "gpui_linux::linux::x11::client",
      "source": "crates/gpui_linux/src/linux/x11/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone)] pub struct X11ClientStatePtr (pub Weak<RefCell<X11ClientState>>);",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::x11::client::X11ClientStatePtr::drop_window",
      "name": "drop_window",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::client",
      "path": "gpui_linux::linux::x11::client",
      "source": "crates/gpui_linux/src/linux/x11/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn drop_window (& self, x_window : u32)",
      "cfg": [],
      "target": "X11ClientStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::client::X11ClientStatePtr::get_client",
      "name": "get_client",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::client",
      "path": "gpui_linux::linux::x11::client",
      "source": "crates/gpui_linux/src/linux/x11/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get_client (& self) -> Option<X11Client>",
      "cfg": [],
      "target": "X11ClientStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::client::X11ClientStatePtr::update_ime_position",
      "name": "update_ime_position",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::client",
      "path": "gpui_linux::linux::x11::client",
      "source": "crates/gpui_linux/src/linux/x11/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update_ime_position (& self, bounds : Bounds<Pixels>)",
      "cfg": [],
      "target": "X11ClientStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::client::Xdnd",
      "name": "Xdnd",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::client",
      "path": "gpui_linux::linux::x11::client",
      "source": "crates/gpui_linux/src/linux/x11/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Default)] pub struct Xdnd { other_window : xproto::Window, drag_type : u32, retrieved : bool, position : Point<Pixels>, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::x11::client::mode_refresh_rate",
      "name": "mode_refresh_rate",
      "kind": "function",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::client",
      "path": "gpui_linux::linux::x11::client",
      "source": "crates/gpui_linux/src/linux/x11/client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn mode_refresh_rate (mode : & randr::ModeInfo) -> Duration",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::x11::clipboard::Clipboard::is_owner",
      "name": "is_owner",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::clipboard",
      "path": "gpui_linux::linux::x11::clipboard",
      "source": "crates/gpui_linux/src/linux/x11/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_owner (& self, selection : ClipboardKind) -> bool",
      "cfg": [],
      "target": "Clipboard"
    },
    {
      "id": "gpui_linux::linux::x11::clipboard::ClipboardKind",
      "name": "ClipboardKind",
      "kind": "enum",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::clipboard",
      "path": "gpui_linux::linux::x11::clipboard",
      "source": "crates/gpui_linux/src/linux/x11/clipboard.rs",
      "summary": "Clipboard selection",
      "documentation": "Clipboard selection\n\nLinux has a concept of clipboard \"selections\" which tend to be used in different contexts. This\nenum provides a way to get/set to a specific clipboard\n\nSee <https://specifications.freedesktop.org/clipboards-spec/clipboards-0.1.txt> for a better\ndescription of the different clipboards.",
      "signature": "# [doc = \" Clipboard selection\"] # [doc = \"\"] # [doc = \" Linux has a concept of clipboard \\\"selections\\\" which tend to be used in different contexts. This\"] # [doc = \" enum provides a way to get/set to a specific clipboard\"] # [doc = \"\"] # [doc = \" See <https://specifications.freedesktop.org/clipboards-spec/clipboards-0.1.txt> for a better\"] # [doc = \" description of the different clipboards.\"] # [derive (Copy, Clone, Debug)] pub enum ClipboardKind { # [doc = \" Typically used selection for explicit cut/copy/paste actions (ie. windows/macos like\"] # [doc = \" clipboard behavior)\"] Clipboard, # [doc = \" Typically used for mouse selections and/or currently selected text. Accessible via middle\"] # [doc = \" mouse click.\"] Primary, # [doc = \" The secondary clipboard is rarely used but theoretically available on X11.\"] Secondary, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::x11::clipboard::Error",
      "name": "Error",
      "kind": "enum",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::clipboard",
      "path": "gpui_linux::linux::x11::clipboard",
      "source": "crates/gpui_linux/src/linux/x11/clipboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [non_exhaustive] pub enum Error { # [doc = \" The clipboard contents were not available in the requested format.\"] # [doc = \" This could either be due to the clipboard being empty or the clipboard contents having\"] # [doc = \" an incompatible format to the requested one (eg when calling `get_image` on text)\"] ContentNotAvailable, # [doc = \" The native clipboard is not accessible due to being held by an other party.\"] # [doc = \"\"] # [doc = \" This \\\"other party\\\" could be a different process or it could be within\"] # [doc = \" the same program. So for example you may get this error when trying\"] # [doc = \" to interact with the clipboard from multiple threads at once.\"] # [doc = \"\"] # [doc = \" Note that it's OK to have multiple `Clipboard` instances. The underlying\"] # [doc = \" implementation will make sure that the native clipboard is only\"] # [doc = \" opened for transferring data and then closed as soon as possible.\"] ClipboardOccupied, # [doc = \" The image or the text that was about the be transferred to/from the clipboard could not be\"] # [doc = \" converted to the appropriate format.\"] ConversionFailure, # [doc = \" Any error that doesn't fit the other error types.\"] # [doc = \"\"] # [doc = \" The `description` field is only meant to help the developer and should not be relied on as a\"] # [doc = \" means to identify an error case during runtime.\"] Unknown { description : String }, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::x11::platform_view::NativeChildren::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::platform_view",
      "path": "gpui_linux::linux::x11::platform_view",
      "source": "crates/gpui_linux/src/linux/x11/platform_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clear (& mut self, connection : & XCBConnection) -> anyhow::Result<()>",
      "cfg": [],
      "target": "NativeChildren"
    },
    {
      "id": "gpui_linux::linux::x11::platform_view::NativeChildren::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::platform_view",
      "path": "gpui_linux::linux::x11::platform_view",
      "source": "crates/gpui_linux/src/linux/x11/platform_view.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update (& mut self, connection : & XCBConnection, parent : u32, scale : f32, update : & PlatformViewUpdate,) -> anyhow::Result<()>",
      "cfg": [],
      "target": "NativeChildren"
    },
    {
      "id": "gpui_linux::linux::x11::window::Callbacks",
      "name": "Callbacks",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Default)] pub struct Callbacks { request_frame : Option<Box<dyn FnMut (RequestFrameOptions)>>, input : Option<Box<dyn FnMut (PlatformInput) -> gpui::DispatchEventResult>>, active_status_change : Option<Box<dyn FnMut (bool)>>, hovered_status_change : Option<Box<dyn FnMut (bool)>>, resize : Option<ResizeCallback>, moved : Option<Box<dyn FnMut ()>>, should_close : Option<Box<dyn FnMut () -> bool>>, close : Option<Box<dyn FnOnce ()>>, appearance_changed : Option<Box<dyn FnMut ()>>, button_layout_changed : Option<Box<dyn FnMut ()>>, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::x11::window::X11Window::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (handle : AnyWindowHandle, context : X11WindowContext<'_>, params : WindowParams, x_window : xproto::Window, parent_window : Option<X11WindowStatePtr>,) -> anyhow::Result<Self>",
      "cfg": [],
      "target": "X11Window"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowState",
      "name": "X11WindowState",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct X11WindowState { pub destroyed : bool, parent : Option<X11WindowStatePtr>, children : FxHashSet<xproto::Window>, client : X11ClientStatePtr, executor : ForegroundExecutor, atoms : XcbAtoms, x_root_window : xproto::Window, x_screen_index : usize, visual_id : u32, pub (crate) counter_id : sync::Counter, pub (crate) last_sync_counter : Option<sync::Int64>, bounds : Bounds<Pixels>, scale_factor : f32, renderer : WgpuRenderer, display : Rc<dyn PlatformDisplay>, input_handler : Option<PlatformInputHandler>, appearance : WindowAppearance, background_appearance : WindowBackgroundAppearance, maximized_vertical : bool, maximized_horizontal : bool, hidden : bool, active : bool, hovered : bool, pub (crate) force_render_after_recovery : bool, fullscreen : bool, client_side_decorations_supported : bool, decorations : WindowDecorations, edge_constraints : Option<EdgeConstraints>, pub handle : AnyWindowHandle, last_insets : [u32; 4], accesskit_adapter : Option<accesskit_unix::Adapter>, # [cfg (target_os = \"linux\")] native_children : super::platform_view::NativeChildren, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowState::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (handle : AnyWindowHandle, context : X11WindowContext<'_>, params : WindowParams, x_window : xproto::Window, parent_window : Option<X11WindowStatePtr>,) -> anyhow::Result<Self>",
      "cfg": [],
      "target": "X11WindowState"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::add_child",
      "name": "add_child",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn add_child (& self, child : xproto::Window)",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::close",
      "name": "close",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn close (& self)",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::get_ime_area",
      "name": "get_ime_area",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get_ime_area (& self) -> Option<Bounds<ScaledPixels>>",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::handle_ime_commit",
      "name": "handle_ime_commit",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_ime_commit (& self, text : String)",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::handle_ime_delete",
      "name": "handle_ime_delete",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_ime_delete (& self)",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::handle_ime_preedit",
      "name": "handle_ime_preedit",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_ime_preedit (& self, text : String)",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::handle_ime_unmark",
      "name": "handle_ime_unmark",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_ime_unmark (& self)",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::handle_input",
      "name": "handle_input",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn handle_input (& self, input : PlatformInput)",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::is_blocked",
      "name": "is_blocked",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_blocked (& self) -> bool",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::property_notify",
      "name": "property_notify",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn property_notify (& self, event : xproto::PropertyNotifyEvent) -> anyhow::Result<()>",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::refresh",
      "name": "refresh",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn refresh (& self, request_frame_options : RequestFrameOptions)",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::set_active",
      "name": "set_active",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_active (& self, focus : bool)",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::set_appearance",
      "name": "set_appearance",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_appearance (& mut self, appearance : WindowAppearance)",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::set_bounds",
      "name": "set_bounds",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_bounds (& self, bounds : Bounds<i32>) -> anyhow::Result<()>",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::set_button_layout",
      "name": "set_button_layout",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_button_layout (& self)",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::set_hovered",
      "name": "set_hovered",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_hovered (& self, focus : bool)",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::window::X11WindowStatePtr::should_close",
      "name": "should_close",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::window",
      "path": "gpui_linux::linux::x11::window",
      "source": "crates/gpui_linux/src/linux/x11/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn should_close (& self) -> bool",
      "cfg": [],
      "target": "X11WindowStatePtr"
    },
    {
      "id": "gpui_linux::linux::x11::xim_handler::XimCallbackEvent",
      "name": "XimCallbackEvent",
      "kind": "enum",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::xim_handler",
      "path": "gpui_linux::linux::x11::xim_handler",
      "source": "crates/gpui_linux/src/linux/x11/xim_handler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub enum XimCallbackEvent { XEvent (x11rb::protocol::Event), Preedit (xproto::Window, String), Commit (xproto::Window, String), }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::x11::xim_handler::XimHandler",
      "name": "XimHandler",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::xim_handler",
      "path": "gpui_linux::linux::x11::xim_handler",
      "source": "crates/gpui_linux/src/linux/x11/xim_handler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct XimHandler { pub im_id : u16, pub ic_id : u16, pub connected : bool, pub window : xproto::Window, pub last_callback_event : Option<XimCallbackEvent>, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::x11::xim_handler::XimHandler::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::x11::xim_handler",
      "path": "gpui_linux::linux::x11::xim_handler",
      "source": "crates/gpui_linux/src/linux/x11/xim_handler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "XimHandler"
    },
    {
      "id": "gpui_linux::linux::xdg_desktop_portal::Event",
      "name": "Event",
      "kind": "enum",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::xdg_desktop_portal",
      "path": "gpui_linux::linux::xdg_desktop_portal",
      "source": "crates/gpui_linux/src/linux/xdg_desktop_portal.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub enum Event { WindowAppearance (WindowAppearance), # [cfg_attr (feature = \"x11\", allow (dead_code))] CursorTheme (String), # [cfg_attr (feature = \"x11\", allow (dead_code))] CursorSize (u32), ButtonLayout (String), }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::xdg_desktop_portal::XDPEventSource",
      "name": "XDPEventSource",
      "kind": "struct",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::xdg_desktop_portal",
      "path": "gpui_linux::linux::xdg_desktop_portal",
      "source": "crates/gpui_linux/src/linux/xdg_desktop_portal.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct XDPEventSource { channel : Channel<Event>, }",
      "cfg": []
    },
    {
      "id": "gpui_linux::linux::xdg_desktop_portal::XDPEventSource::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-linux",
      "crate": "gpui_linux",
      "module": "linux::xdg_desktop_portal",
      "path": "gpui_linux::linux::xdg_desktop_portal",
      "source": "crates/gpui_linux/src/linux/xdg_desktop_portal.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (executor : & BackgroundExecutor) -> Self",
      "cfg": [],
      "target": "XDPEventSource"
    },
    {
      "id": "gpui_macos::dispatcher::MacDispatcher::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "dispatcher",
      "path": "gpui_macos::dispatcher",
      "source": "crates/gpui_macos/src/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "MacDispatcher"
    },
    {
      "id": "gpui_macos::display::MacDisplay::all",
      "name": "all",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "display",
      "path": "gpui_macos::display",
      "source": "crates/gpui_macos/src/display.rs",
      "summary": "Obtains an iterator over all currently active system displays.",
      "documentation": "Obtains an iterator over all currently active system displays.",
      "signature": "pub fn all () -> impl Iterator<Item = Self>",
      "cfg": [],
      "target": "MacDisplay"
    },
    {
      "id": "gpui_macos::display::MacDisplay::find_by_id",
      "name": "find_by_id",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "display",
      "path": "gpui_macos::display",
      "source": "crates/gpui_macos/src/display.rs",
      "summary": "Get the screen with the given [`DisplayId`].",
      "documentation": "Get the screen with the given [`DisplayId`].",
      "signature": "pub fn find_by_id (id : DisplayId) -> Option<Self>",
      "cfg": [],
      "target": "MacDisplay"
    },
    {
      "id": "gpui_macos::display::MacDisplay::primary",
      "name": "primary",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "display",
      "path": "gpui_macos::display",
      "source": "crates/gpui_macos/src/display.rs",
      "summary": "Get the primary screen - the one with the menu bar, and whose bottom left corner is at the origin of the AppKit coordinate system.",
      "documentation": "Get the primary screen - the one with the menu bar, and whose bottom left\ncorner is at the origin of the AppKit coordinate system.",
      "signature": "pub fn primary () -> Self",
      "cfg": [],
      "target": "MacDisplay"
    },
    {
      "id": "gpui_macos::display_link::WindowFrameSource",
      "name": "WindowFrameSource",
      "kind": "struct",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "display_link",
      "path": "gpui_macos::display_link",
      "source": "crates/gpui_macos/src/display_link.rs",
      "summary": "A per-window source of frame requests, paced by the display the window is on. The wrapped dispatch source coalesces vsync ticks from the display's io thread and invokes `callback(data)` on the main queue.",
      "documentation": "A per-window source of frame requests, paced by the display the window is\non. The wrapped dispatch source coalesces vsync ticks from the display's\nio thread and invokes `callback(data)` on the main queue.",
      "signature": "# [doc = \" A per-window source of frame requests, paced by the display the window is\"] # [doc = \" on. The wrapped dispatch source coalesces vsync ticks from the display's\"] # [doc = \" io thread and invokes `callback(data)` on the main queue.\"] pub struct WindowFrameSource { frame_requests : DispatchRetained<DispatchSource>, registration : Option<(CGDirectDisplayID, SubscriberId)>, }",
      "cfg": []
    },
    {
      "id": "gpui_macos::display_link::WindowFrameSource::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "display_link",
      "path": "gpui_macos::display_link",
      "source": "crates/gpui_macos/src/display_link.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (data : * mut c_void, callback : extern \"C\" fn (* mut c_void)) -> Self",
      "cfg": [],
      "target": "WindowFrameSource"
    },
    {
      "id": "gpui_macos::display_link::WindowFrameSource::start",
      "name": "start",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "display_link",
      "path": "gpui_macos::display_link",
      "source": "crates/gpui_macos/src/display_link.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn start (& mut self, display_id : CGDirectDisplayID) -> Result<()>",
      "cfg": [],
      "target": "WindowFrameSource"
    },
    {
      "id": "gpui_macos::display_link::WindowFrameSource::stop",
      "name": "stop",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "display_link",
      "path": "gpui_macos::display_link",
      "source": "crates/gpui_macos/src/display_link.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn stop (& mut self)",
      "cfg": [],
      "target": "WindowFrameSource"
    },
    {
      "id": "gpui_macos::events::key_to_native",
      "name": "key_to_native",
      "kind": "function",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "events",
      "path": "gpui_macos::events",
      "source": "crates/gpui_macos/src/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn key_to_native (key : & str) -> Cow<'_, str>",
      "cfg": []
    },
    {
      "id": "gpui_macos::gpui_macos::reexport-1",
      "name": "platform :: MacPlatform",
      "kind": "reexport",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "gpui_macos",
      "path": "gpui_macos::gpui_macos",
      "source": "crates/gpui_macos/src/gpui_macos.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use platform::MacPlatform;",
      "cfg": []
    },
    {
      "id": "gpui_macos::metal_renderer::MetalHeadlessRenderer",
      "name": "MetalHeadlessRenderer",
      "kind": "struct",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (any (test, feature = \"test-support\"))] pub struct MetalHeadlessRenderer { renderer : MetalRenderer, measurement_id : u64, }",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ]
    },
    {
      "id": "gpui_macos::metal_renderer::MetalHeadlessRenderer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "MetalHeadlessRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::backdrop_luminance",
      "name": "backdrop_luminance",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "The luminance the most recently completed frame read for this slot.",
      "documentation": "The luminance the most recently completed frame read for this slot.",
      "signature": "pub fn backdrop_luminance (& mut self, id : u32) -> Option<f32>",
      "cfg": [],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::backdrop_statistics",
      "name": "backdrop_statistics",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn backdrop_statistics (& mut self, id : u32) -> Option<gpui::BackdropStatistics>",
      "cfg": [],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::destroy",
      "name": "destroy",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn destroy (& self)",
      "cfg": [],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::draw",
      "name": "draw",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn draw (& mut self, scene : & Scene)",
      "cfg": [],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::layer",
      "name": "layer",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn layer (& self) -> Option<& metal::MetalLayerRef>",
      "cfg": [],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::layer_ptr",
      "name": "layer_ptr",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn layer_ptr (& self) -> * mut CAMetalLayer",
      "cfg": [],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "Creates a new MetalRenderer with a CAMetalLayer for window-based rendering.",
      "documentation": "Creates a new MetalRenderer with a CAMetalLayer for window-based rendering.",
      "signature": "pub fn new (instance_buffer_pool : Arc<Mutex<InstanceBufferPool>>, transparent : bool) -> Self",
      "cfg": [],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::new_headless",
      "name": "new_headless",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "Creates a new headless MetalRenderer for offscreen rendering without a window.",
      "documentation": "Creates a new headless MetalRenderer for offscreen rendering without a window.\n\nThis renderer can render scenes to images without requiring a CAMetalLayer,\nwindow, or AppKit. Use `render_scene_to_image()` to render scenes.",
      "signature": "pub fn new_headless (instance_buffer_pool : Arc<Mutex<InstanceBufferPool>>) -> Self",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::render_scene",
      "name": "render_scene",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "Renders a scene to a reused offscreen texture without reading pixels back or blocking on GPU completion.",
      "documentation": "Renders a scene to a reused offscreen texture without reading pixels\nback or blocking on GPU completion.\n\nThis mirrors the CPU cost of presenting a frame to a window (scene\nencoding, instance buffer writes, command submission) and is used by\nheadless benchmark rendering, where the produced pixels are never\ninspected.",
      "signature": "pub fn render_scene (& mut self, scene : & Scene, size : Size<DevicePixels>) -> Result<()>",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::render_scene_to_image",
      "name": "render_scene_to_image",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "Renders a scene to an image without requiring a window or CAMetalLayer.",
      "documentation": "Renders a scene to an image without requiring a window or CAMetalLayer.\n\nThis is the primary method for headless rendering. It creates an offscreen\ntexture, renders the scene to it, and returns the pixel data as an RGBA image.",
      "signature": "pub fn render_scene_to_image (& mut self, scene : & Scene, size : Size<DevicePixels>,) -> Result<RgbaImage>",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::render_to_image",
      "name": "render_to_image",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "Renders the scene to a texture and returns the pixel data as an RGBA image. This does not present the frame to screen - useful for visual testing where we want to capture what would be rendered without displaying it.",
      "documentation": "Renders the scene to a texture and returns the pixel data as an RGBA image.\nThis does not present the frame to screen - useful for visual testing\nwhere we want to capture what would be rendered without displaying it.\n\nNote: This requires a layer-backed renderer. For headless rendering,\nuse `render_scene_to_image()` instead.",
      "signature": "pub fn render_to_image (& mut self, scene : & Scene) -> Result<RgbaImage>",
      "cfg": [
        "cfg (any (test, feature = \"test-support\"))"
      ],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::set_presents_with_transaction",
      "name": "set_presents_with_transaction",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_presents_with_transaction (& mut self, presents_with_transaction : bool)",
      "cfg": [],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::sprite_atlas",
      "name": "sprite_atlas",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sprite_atlas (& self) -> & Arc<MetalAtlas>",
      "cfg": [],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::update_drawable_size",
      "name": "update_drawable_size",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update_drawable_size (& mut self, size : Size<DevicePixels>)",
      "cfg": [],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::MetalRenderer::update_transparency",
      "name": "update_transparency",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update_transparency (& mut self, transparent : bool)",
      "cfg": [],
      "target": "MetalRenderer"
    },
    {
      "id": "gpui_macos::metal_renderer::PathRasterizationVertex",
      "name": "PathRasterizationVertex",
      "kind": "struct",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [repr (C)] pub struct PathRasterizationVertex { pub xy_position : Point<ScaledPixels>, pub st_position : Point<f32>, pub color : Background, pub bounds : Bounds<ScaledPixels>, pub clip_id : gpui::ClipId, }",
      "cfg": []
    },
    {
      "id": "gpui_macos::metal_renderer::PathSprite",
      "name": "PathSprite",
      "kind": "struct",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, Eq, PartialEq)] # [repr (C)] pub struct PathSprite { pub bounds : Bounds<ScaledPixels>, }",
      "cfg": []
    },
    {
      "id": "gpui_macos::metal_renderer::SurfaceBounds",
      "name": "SurfaceBounds",
      "kind": "struct",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "metal_renderer",
      "path": "gpui_macos::metal_renderer",
      "source": "crates/gpui_macos/src/metal_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, Eq, PartialEq)] # [repr (C)] pub struct SurfaceBounds { pub bounds : Bounds<ScaledPixels>, pub content_mask : ContentMask<ScaledPixels>, pub clip_id : gpui::ClipId, }",
      "cfg": []
    },
    {
      "id": "gpui_macos::open_type::apply_features_and_fallbacks",
      "name": "apply_features_and_fallbacks",
      "kind": "function",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "open_type",
      "path": "gpui_macos::open_type",
      "source": "crates/gpui_macos/src/open_type.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn apply_features_and_fallbacks (font : & mut FontKitFont, features : & FontFeatures, fallbacks : Option<& FontFallbacks>,) -> anyhow::Result<()>",
      "cfg": []
    },
    {
      "id": "gpui_macos::pasteboard::Pasteboard",
      "name": "Pasteboard",
      "kind": "struct",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct Pasteboard { inner : StrongPtr, text_hash_type : StrongPtr, metadata_type : StrongPtr, }",
      "cfg": []
    },
    {
      "id": "gpui_macos::pasteboard::Pasteboard::find",
      "name": "find",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn find () -> Self",
      "cfg": [],
      "target": "Pasteboard"
    },
    {
      "id": "gpui_macos::pasteboard::Pasteboard::general",
      "name": "general",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn general () -> Self",
      "cfg": [],
      "target": "Pasteboard"
    },
    {
      "id": "gpui_macos::pasteboard::Pasteboard::read",
      "name": "read",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn read (& self) -> Option<ClipboardItem>",
      "cfg": [],
      "target": "Pasteboard"
    },
    {
      "id": "gpui_macos::pasteboard::Pasteboard::unique",
      "name": "unique",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn unique () -> Self",
      "cfg": [
        "cfg (test)"
      ],
      "target": "Pasteboard"
    },
    {
      "id": "gpui_macos::pasteboard::Pasteboard::write",
      "name": "write",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn write (& self, item : ClipboardItem)",
      "cfg": [],
      "target": "Pasteboard"
    },
    {
      "id": "gpui_macos::pasteboard::UTType",
      "name": "UTType",
      "kind": "struct",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct UTType (id);",
      "cfg": []
    },
    {
      "id": "gpui_macos::pasteboard::UTType::bmp",
      "name": "bmp",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bmp () -> Self",
      "cfg": [],
      "target": "UTType"
    },
    {
      "id": "gpui_macos::pasteboard::UTType::gif",
      "name": "gif",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn gif () -> Self",
      "cfg": [],
      "target": "UTType"
    },
    {
      "id": "gpui_macos::pasteboard::UTType::ico",
      "name": "ico",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ico () -> Self",
      "cfg": [],
      "target": "UTType"
    },
    {
      "id": "gpui_macos::pasteboard::UTType::inner_mut",
      "name": "inner_mut",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn inner_mut (& self) -> * mut Object",
      "cfg": [],
      "target": "UTType"
    },
    {
      "id": "gpui_macos::pasteboard::UTType::jpeg",
      "name": "jpeg",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn jpeg () -> Self",
      "cfg": [],
      "target": "UTType"
    },
    {
      "id": "gpui_macos::pasteboard::UTType::png",
      "name": "png",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn png () -> Self",
      "cfg": [],
      "target": "UTType"
    },
    {
      "id": "gpui_macos::pasteboard::UTType::pnm",
      "name": "pnm",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn pnm () -> Self",
      "cfg": [],
      "target": "UTType"
    },
    {
      "id": "gpui_macos::pasteboard::UTType::svg",
      "name": "svg",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn svg () -> Self",
      "cfg": [],
      "target": "UTType"
    },
    {
      "id": "gpui_macos::pasteboard::UTType::tiff",
      "name": "tiff",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn tiff () -> Self",
      "cfg": [],
      "target": "UTType"
    },
    {
      "id": "gpui_macos::pasteboard::UTType::webp",
      "name": "webp",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "pasteboard",
      "path": "gpui_macos::pasteboard",
      "source": "crates/gpui_macos/src/pasteboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn webp () -> Self",
      "cfg": [],
      "target": "UTType"
    },
    {
      "id": "gpui_macos::platform::MacPlatform",
      "name": "MacPlatform",
      "kind": "struct",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "platform",
      "path": "gpui_macos::platform",
      "source": "crates/gpui_macos/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct MacPlatform (Mutex<MacPlatformState>);",
      "cfg": []
    },
    {
      "id": "gpui_macos::platform::MacPlatform::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "platform",
      "path": "gpui_macos::platform",
      "source": "crates/gpui_macos/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (headless : bool) -> Self",
      "cfg": [],
      "target": "MacPlatform"
    },
    {
      "id": "gpui_macos::screen_capture::MacScreenCaptureSource",
      "name": "MacScreenCaptureSource",
      "kind": "struct",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "screen_capture",
      "path": "gpui_macos::screen_capture",
      "source": "crates/gpui_macos/src/screen_capture.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone)] pub struct MacScreenCaptureSource { sc_display : id, meta : Option<ScreenMeta>, }",
      "cfg": []
    },
    {
      "id": "gpui_macos::screen_capture::MacScreenCaptureStream",
      "name": "MacScreenCaptureStream",
      "kind": "struct",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "screen_capture",
      "path": "gpui_macos::screen_capture",
      "source": "crates/gpui_macos/src/screen_capture.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct MacScreenCaptureStream { sc_stream : id, sc_stream_output : id, meta : SourceMetadata, }",
      "cfg": []
    },
    {
      "id": "gpui_macos::text_system::MacTextSystem",
      "name": "MacTextSystem",
      "kind": "struct",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "text_system",
      "path": "gpui_macos::text_system",
      "source": "crates/gpui_macos/src/text_system.rs",
      "summary": "macOS text system using CoreText for font shaping.",
      "documentation": "macOS text system using CoreText for font shaping.",
      "signature": "# [doc = \" macOS text system using CoreText for font shaping.\"] pub struct MacTextSystem (RwLock<MacTextSystemState>);",
      "cfg": []
    },
    {
      "id": "gpui_macos::text_system::MacTextSystem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "text_system",
      "path": "gpui_macos::text_system",
      "source": "crates/gpui_macos/src/text_system.rs",
      "summary": "Create a new MacTextSystem.",
      "documentation": "Create a new MacTextSystem.",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "MacTextSystem"
    },
    {
      "id": "gpui_macos::window::MacWindow::active_window",
      "name": "active_window",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "window",
      "path": "gpui_macos::window",
      "source": "crates/gpui_macos/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn active_window () -> Option<AnyWindowHandle>",
      "cfg": [],
      "target": "MacWindow"
    },
    {
      "id": "gpui_macos::window::MacWindow::get_user_tabbing_preference",
      "name": "get_user_tabbing_preference",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "window",
      "path": "gpui_macos::window",
      "source": "crates/gpui_macos/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get_user_tabbing_preference () -> Option<UserTabbingPreference>",
      "cfg": [],
      "target": "MacWindow"
    },
    {
      "id": "gpui_macos::window::MacWindow::open",
      "name": "open",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "window",
      "path": "gpui_macos::window",
      "source": "crates/gpui_macos/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn open (handle : AnyWindowHandle, WindowParams { bounds, titlebar, kind, is_movable, app_owns_titlebar_drag, is_resizable, is_minimizable, focus, show, display_id, window_min_size, tabbing_identifier, .. } : WindowParams, cursor_visible : Arc<AtomicBool>, foreground_executor : ForegroundExecutor, background_executor : BackgroundExecutor, renderer_context : renderer::Context,) -> Self",
      "cfg": [],
      "target": "MacWindow"
    },
    {
      "id": "gpui_macos::window::MacWindow::ordered_windows",
      "name": "ordered_windows",
      "kind": "method",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "window",
      "path": "gpui_macos::window",
      "source": "crates/gpui_macos/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn ordered_windows () -> Vec<AnyWindowHandle>",
      "cfg": [],
      "target": "MacWindow"
    },
    {
      "id": "gpui_macos::window::UserTabbingPreference",
      "name": "UserTabbingPreference",
      "kind": "enum",
      "package": "gpui-box-macos",
      "crate": "gpui_macos",
      "module": "window",
      "path": "gpui_macos::window",
      "source": "crates/gpui_macos/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (PartialEq)] pub enum UserTabbingPreference { Never, Always, InFullScreen, }",
      "cfg": []
    },
    {
      "id": "gpui_macros::bench::bench",
      "name": "bench",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "bench",
      "path": "gpui_macros::bench",
      "source": "crates/gpui_macros/src/bench.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn bench (args : TokenStream, function : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::derive_app_context::derive_app_context",
      "name": "derive_app_context",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "derive_app_context",
      "path": "gpui_macros::derive_app_context",
      "source": "crates/gpui_macros/src/derive_app_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn derive_app_context (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::derive_inspector_reflection::derive_inspector_reflection",
      "name": "derive_inspector_reflection",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "derive_inspector_reflection",
      "path": "gpui_macros::derive_inspector_reflection",
      "source": "crates/gpui_macros/src/derive_inspector_reflection.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn derive_inspector_reflection (_args : TokenStream, input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::derive_into_element::derive_into_element",
      "name": "derive_into_element",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "derive_into_element",
      "path": "gpui_macros::derive_into_element",
      "source": "crates/gpui_macros/src/derive_into_element.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn derive_into_element (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::derive_render::derive_render",
      "name": "derive_render",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "derive_render",
      "path": "gpui_macros::derive_render",
      "source": "crates/gpui_macros/src/derive_render.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn derive_render (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::derive_visual_context::derive_visual_context",
      "name": "derive_visual_context",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "derive_visual_context",
      "path": "gpui_macros::derive_visual_context",
      "source": "crates/gpui_macros/src/derive_visual_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn derive_visual_context (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::bench",
      "name": "bench",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "`#[gpui::bench]` annotates a Criterion benchmark that runs with GPUI support.",
      "documentation": "`#[gpui::bench]` annotates a Criterion benchmark that runs with GPUI support.\n\nUse `#[gpui::bench(inputs = some_iterable())]` on benchmarks that take an\nadditional input argument; the generated benchmark uses Criterion's\n`bench_with_input`. `group`, `input_name`, and `sample_size` can customize\nthe generated input benchmark group.\n\nThe benchmark crate must add `criterion` and `gpui_platform` (with its\n`test-support` feature) to its dev-dependencies and enable gpui's `bench`\nfeature, since the generated code references all three.",
      "signature": "pub fn bench (args : TokenStream, function : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::border_style_methods",
      "name": "border_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "Generates methods for border styles.",
      "documentation": "Generates methods for border styles.",
      "signature": "pub fn border_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::box_shadow_style_methods",
      "name": "box_shadow_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "Generates methods for box shadow styles.",
      "documentation": "Generates methods for box shadow styles.",
      "signature": "pub fn box_shadow_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::cursor_style_methods",
      "name": "cursor_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "Generates methods for cursor styles.",
      "documentation": "Generates methods for cursor styles.",
      "signature": "pub fn cursor_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::derive_action",
      "name": "derive_action",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "`Action` derive macro - see the trait documentation for details.",
      "documentation": "`Action` derive macro - see the trait documentation for details.",
      "signature": "pub fn derive_action (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::derive_app_context",
      "name": "derive_app_context",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "#[derive(AppContext)] is used to create a context out of anything that holds a `&mut App` Note that a `#[app]` attribute is required to identify the variable holding the &mut App.",
      "documentation": "#[derive(AppContext)] is used to create a context out of anything that holds a `&mut App`\nNote that a `#[app]` attribute is required to identify the variable holding the &mut App.\n\nFailure to add the attribute causes a compile error:\n\n```compile_fail\n# #[macro_use] extern crate gpui_macros;\n# #[macro_use] extern crate gpui;\n#[derive(AppContext)]\nstruct MyContext<'a> {\napp: &'a mut gpui::App\n}\n```",
      "signature": "pub fn derive_app_context (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::derive_inspector_reflection",
      "name": "derive_inspector_reflection",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "When added to a trait, `#[derive_inspector_reflection]` generates a module which provides enumeration and lookup by name of all methods that have the shape `fn method(self) -> Self`. This is used by the inspector so that it can use the builder methods in `Styled` and `StyledExt`.",
      "documentation": "When added to a trait, `#[derive_inspector_reflection]` generates a module which provides\nenumeration and lookup by name of all methods that have the shape `fn method(self) -> Self`.\nThis is used by the inspector so that it can use the builder methods in `Styled` and\n`StyledExt`.\n\nThe generated module will have the name `<snake_case_trait_name>_reflection` and contain the\nfollowing functions:\n\n```ignore\npub fn methods::<T: TheTrait + 'static>() -> Vec<gpui::inspector_reflection::FunctionReflection<T>>;\n\npub fn find_method::<T: TheTrait + 'static>() -> Option<gpui::inspector_reflection::FunctionReflection<T>>;\n```\n\nThe `invoke` method on `FunctionReflection` will run the method. `FunctionReflection` also\nprovides the method's documentation.",
      "signature": "pub fn derive_inspector_reflection (_args : TokenStream, input : TokenStream) -> TokenStream",
      "cfg": [
        "cfg (any (feature = \"inspector\", debug_assertions))"
      ]
    },
    {
      "id": "gpui_macros::gpui_macros::derive_into_element",
      "name": "derive_into_element",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "#[derive(IntoElement)] generates an `IntoElement` impl for any `RenderOnce` type, wrapping it in a `ViewElement` so it can be used as a child.",
      "documentation": "#[derive(IntoElement)] generates an `IntoElement` impl for any `RenderOnce`\ntype, wrapping it in a `ViewElement` so it can be used as a child.",
      "signature": "pub fn derive_into_element (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::derive_render",
      "name": "derive_render",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn derive_render (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::derive_visual_context",
      "name": "derive_visual_context",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "#[derive(VisualContext)] is used to create a visual context out of anything that holds a `&mut Window` and implements `AppContext` Note that a `#[app]` and a `#[window]` attribute are required to identify the variables holding the &mut App, and &mut Window respectively.",
      "documentation": "#[derive(VisualContext)] is used to create a visual context out of anything that holds a `&mut Window` and\nimplements `AppContext`\nNote that a `#[app]` and a `#[window]` attribute are required to identify the variables holding the &mut App,\nand &mut Window respectively.\n\nFailure to add both attributes causes a compile error:\n\n```compile_fail\n# #[macro_use] extern crate gpui_macros;\n# #[macro_use] extern crate gpui;\n#[derive(VisualContext)]\nstruct MyContext<'a, 'b> {\n#[app]\napp: &'a mut gpui::App,\nwindow: &'b mut gpui::Window\n}\n```\n\n```compile_fail\n# #[macro_use] extern crate gpui_macros;\n# #[macro_use] extern crate gpui;\n#[derive(VisualContext)]\nstruct MyContext<'a, 'b> {\napp: &'a mut gpui::App,\n#[window]\nwindow: &'b mut gpui::Window\n}\n```",
      "signature": "pub fn derive_visual_context (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::margin_style_methods",
      "name": "margin_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "Generates methods for margin styles.",
      "documentation": "Generates methods for margin styles.",
      "signature": "pub fn margin_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::overflow_style_methods",
      "name": "overflow_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "Generates methods for overflow styles.",
      "documentation": "Generates methods for overflow styles.",
      "signature": "pub fn overflow_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::padding_style_methods",
      "name": "padding_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "Generates methods for padding styles.",
      "documentation": "Generates methods for padding styles.",
      "signature": "pub fn padding_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::position_style_methods",
      "name": "position_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "Generates methods for position styles.",
      "documentation": "Generates methods for position styles.",
      "signature": "pub fn position_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::property_test",
      "name": "property_test",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "A variant of `#[gpui::test]` that supports property-based testing.",
      "documentation": "A variant of `#[gpui::test]` that supports property-based testing.\n\nEnable GPUI's `test-support` feature in the package's dev-dependencies before\nusing this macro. GPUI re-exports the required proptest API, so consumers do\nnot need to add proptest as a separate direct dependency.\n\nA property test, much like a standard GPUI randomized test, allows testing\nclaims of the form \"for any possible X, Y should hold\". For example:\n```\n#[gpui::property_test]\nfn test_arithmetic(x: i32, y: i32) {\nassert!(x == y || x < y || x > y);\n}\n```\nStandard GPUI randomized tests provide you with an instance of `StdRng` to\ngenerate random data in a controlled manner. Property-based tests have some\nadvantages, however:\n- Shrinking - the harness also understands a notion of the \"complexity\" of a\nparticular value. This allows it to find the \"simplest possible value that\ncauses the test to fail\".\n- Ergonomics/clarity - the property-testing harness will automatically\ngenerate values, removing the need to fill the test body with generation\nlogic.\n- Failure persistence - if a failing seed is identified, it is stored in a\nfile, which can be checked in, and future runs will check these cases before\nfuture cases.\n\nProperty tests work best when all inputs can be generated up-front and kept\nin a simple data structure. Sometimes, this isn't possible - for example, if\na test needs to make a random decision based on the current state of some\nstructure. In this case, a standard GPUI randomized test may be more\nsuitable.\n\n## Customizing random values\n\nThis macro is based on the\n[`#[proptest::property_test]`](https://docs.rs/proptest/latest/proptest/attr.property_test.html)\nmacro, but handles some of the same GPUI-specific arguments as\n`#[gpui::test]`. Specifically, `&{mut,} TestAppContext` and\n`BackgroundExecutor` work as normal. `StdRng` arguments are **explicitly\nforbidden**, since they break shrinking, and are a common footgun.\n\nThe optional `config = ...` argument accepts a proptest `Config`; GPUI applies\nits deterministic scheduler seed to that configuration.\nProperty tests may return proptest's `TestCaseResult`, including when using\n`prop_assert!` and related macros:\n```\n#[gpui::property_test(\nconfig = gpui::proptest::test_runner::Config::with_cases(4),\n)]\nfn test_result(x: i32) -> gpui::proptest::test_runner::TestCaseResult {\ngpui::proptest::prop_assert_eq!(x, x);\nOk(())\n}\n```\n\nNote: much of the following is copied from the\n[`#[proptest::property_test]`](https://docs.rs/proptest/latest/proptest/attr.property_test.html)\nmacro docs.\n\nRandom values of type `T` are generated by a `Strategy<Value = T>` object.\nSome types have a canonical `Strategy` - these types also implement\n`Arbitrary`. Parameters to a `#[gpui::property_test]`, by default, use a\ntype's `Arbitrary` implementation. If you'd like to provide a custom\nstrategy, you can use `#[strategy = ...]` on the argument:\n```\n#[gpui::property_test]\nfn int_test(#[strategy = 1..10] x: i32, #[strategy = \"[a-zA-Z0-9]{20}\"] s: String) {\nassert!(s.len() > (x as usize));\n}\n```\n\nFor more information on writing custom `Strategy` and `Arbitrary`\nimplementations, see [the proptest book](https://proptest-rs.github.io/proptest/intro.html)\nand the [`Strategy`](https://docs.rs/proptest/latest/proptest/strategy/trait.Strategy.html)\ntrait.\n\n## Scheduler\n\nSimilar to `#[gpui::test]`, this macro will choose random seeds for the test\nscheduler. It uses `.no_shrink()` to tell proptest that all seeds are\nroughly equivalent in terms of \"complexity\". If `$SEED` is set, it will\naffect **ONLY** the seed passed to the scheduler. To control other values,\nuse custom `Strategy`s.\n",
      "signature": "pub fn property_test (args : TokenStream, function : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::register_action",
      "name": "register_action",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "This can be used to register an action with the GPUI runtime when you want to manually implement the `Action` trait. Typically you should use the `Action` derive macro or `actions!` macro instead.",
      "documentation": "This can be used to register an action with the GPUI runtime when you want to manually implement\nthe `Action` trait. Typically you should use the `Action` derive macro or `actions!` macro\ninstead.",
      "signature": "pub fn register_action (ident : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::style_helpers",
      "name": "style_helpers",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "Used by GPUI to generate the style helpers.",
      "documentation": "Used by GPUI to generate the style helpers.",
      "signature": "pub fn style_helpers (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::test",
      "name": "test",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "`#[gpui::test]` can be used to annotate test functions that run with GPUI support.",
      "documentation": "`#[gpui::test]` can be used to annotate test functions that run with GPUI support.\n\nIt supports both synchronous and asynchronous tests, and can provide you with\nas many `TestAppContext` instances as you need.\nThe output contains a `#[test]` annotation so this can be used with any existing\ntest harness (`cargo test` or `cargo-nextest`).\n\n```\n#[gpui::test]\nasync fn test_foo(mut cx: &TestAppContext) { }\n```\n\nIn addition to passing a TestAppContext, you can also ask for a `StdRnd` instance.\nthis will be seeded with the `SEED` environment variable and is used internally by\nthe ForegroundExecutor and BackgroundExecutor to run tasks deterministically in tests.\nUsing the same `StdRng` for behavior in your test will allow you to exercise a wide\nvariety of scenarios and interleavings just by changing the seed.\n\n# Arguments\n\n- `#[gpui::test]` with no arguments runs once with the seed `0` or `SEED` env var if set.\n- `#[gpui::test(seed = 10)]` runs once with the seed `10`.\n- `#[gpui::test(seeds(10, 20, 30))]` runs three times with seeds `10`, `20`, and `30`.\n- `#[gpui::test(iterations = 5)]` runs five times, providing as seed the values in the range `0..5`.\n- `#[gpui::test(retries = 3)]` runs up to four times if it fails to try and make it pass.\n- `#[gpui::test(on_failure = \"crate::test::report_failure\")]` will call the specified function after the\ntests fail so that you can write out more detail about the failure.\n\nYou can combine `iterations = ...` with `seeds(...)`:\n- `#[gpui::test(iterations = 5, seed = 10)]` is equivalent to `#[gpui::test(seeds(0, 1, 2, 3, 4, 10))]`.\n- `#[gpui::test(iterations = 5, seeds(10, 20, 30)]` is equivalent to `#[gpui::test(seeds(0, 1, 2, 3, 4, 10, 20, 30))]`.\n- `#[gpui::test(seeds(10, 20, 30), iterations = 5]` is equivalent to `#[gpui::test(seeds(0, 1, 2, 3, 4, 10, 20, 30))]`.\n\n# Environment Variables\n\n- `SEED`: sets a seed for the first run\n- `ITERATIONS`: forces the value of the `iterations` argument",
      "signature": "pub fn test (args : TokenStream, function : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::gpui_macros::visibility_style_methods",
      "name": "visibility_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "gpui_macros",
      "path": "gpui_macros::gpui_macros",
      "source": "crates/gpui_macros/src/gpui_macros.rs",
      "summary": "Generates methods for visibility styles.",
      "documentation": "Generates methods for visibility styles.",
      "signature": "pub fn visibility_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::property_test::test",
      "name": "test",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "property_test",
      "path": "gpui_macros::property_test",
      "source": "crates/gpui_macros/src/property_test.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn test (args : TokenStream, item : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::styles::border_style_methods",
      "name": "border_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "styles",
      "path": "gpui_macros::styles",
      "source": "crates/gpui_macros/src/styles.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn border_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::styles::box_shadow_style_methods",
      "name": "box_shadow_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "styles",
      "path": "gpui_macros::styles",
      "source": "crates/gpui_macros/src/styles.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn box_shadow_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::styles::cursor_style_methods",
      "name": "cursor_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "styles",
      "path": "gpui_macros::styles",
      "source": "crates/gpui_macros/src/styles.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cursor_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::styles::margin_style_methods",
      "name": "margin_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "styles",
      "path": "gpui_macros::styles",
      "source": "crates/gpui_macros/src/styles.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn margin_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::styles::overflow_style_methods",
      "name": "overflow_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "styles",
      "path": "gpui_macros::styles",
      "source": "crates/gpui_macros/src/styles.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn overflow_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::styles::padding_style_methods",
      "name": "padding_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "styles",
      "path": "gpui_macros::styles",
      "source": "crates/gpui_macros/src/styles.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn padding_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::styles::position_style_methods",
      "name": "position_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "styles",
      "path": "gpui_macros::styles",
      "source": "crates/gpui_macros/src/styles.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn position_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::styles::style_helpers",
      "name": "style_helpers",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "styles",
      "path": "gpui_macros::styles",
      "source": "crates/gpui_macros/src/styles.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn style_helpers (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::styles::visibility_style_methods",
      "name": "visibility_style_methods",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "styles",
      "path": "gpui_macros::styles",
      "source": "crates/gpui_macros/src/styles.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn visibility_style_methods (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_macros::test::test",
      "name": "test",
      "kind": "function",
      "package": "gpui-box-macros",
      "crate": "gpui_macros",
      "module": "test",
      "path": "gpui_macros::test",
      "source": "crates/gpui_macros/src/test.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn test (args : TokenStream, function : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "gpui_platform::gpui_platform::application",
      "name": "application",
      "kind": "function",
      "package": "gpui-box-platform",
      "crate": "gpui_platform",
      "module": "gpui_platform",
      "path": "gpui_platform::gpui_platform",
      "source": "crates/gpui_platform/src/gpui_platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn application () -> gpui::Application",
      "cfg": [
        "cfg (feature = \"native-platform\")"
      ]
    },
    {
      "id": "gpui_platform::gpui_platform::application_with_web_backend",
      "name": "application_with_web_backend",
      "kind": "function",
      "package": "gpui-box-platform",
      "crate": "gpui_platform",
      "module": "gpui_platform",
      "path": "gpui_platform::gpui_platform",
      "source": "crates/gpui_platform/src/gpui_platform.rs",
      "summary": "Creates a browser application using the requested graphics backend.",
      "documentation": "Creates a browser application using the requested graphics backend.\n\nBrowser applications are single-threaded by default and build on the repository's stable\ntoolchain. Enable `web-multithreaded` explicitly to compile the experimental worker-backed\ndispatcher; that path currently requires a nightly toolchain and Wasm atomics build flags.",
      "signature": "pub fn application_with_web_backend (backend_preference : WebBackendPreference) -> gpui::Application",
      "cfg": [
        "cfg (all (feature = \"native-platform\", target_family = \"wasm\"))"
      ]
    },
    {
      "id": "gpui_platform::gpui_platform::background_executor",
      "name": "background_executor",
      "kind": "function",
      "package": "gpui-box-platform",
      "crate": "gpui_platform",
      "module": "gpui_platform",
      "path": "gpui_platform::gpui_platform",
      "source": "crates/gpui_platform/src/gpui_platform.rs",
      "summary": "Returns a background executor for the current platform.",
      "documentation": "Returns a background executor for the current platform.",
      "signature": "pub fn background_executor () -> gpui::BackgroundExecutor",
      "cfg": [
        "cfg (feature = \"native-platform\")"
      ]
    },
    {
      "id": "gpui_platform::gpui_platform::current_headless_renderer",
      "name": "current_headless_renderer",
      "kind": "function",
      "package": "gpui-box-platform",
      "crate": "gpui_platform",
      "module": "gpui_platform",
      "path": "gpui_platform::gpui_platform",
      "source": "crates/gpui_platform/src/gpui_platform.rs",
      "summary": "Returns a new [`gpui::PlatformHeadlessRenderer`] for the current platform, if available.",
      "documentation": "Returns a new [`gpui::PlatformHeadlessRenderer`] for the current platform, if available.",
      "signature": "pub fn current_headless_renderer () -> Option<Box<dyn gpui::PlatformHeadlessRenderer>>",
      "cfg": [
        "cfg (feature = \"test-support\")"
      ]
    },
    {
      "id": "gpui_platform::gpui_platform::current_platform",
      "name": "current_platform",
      "kind": "function",
      "package": "gpui-box-platform",
      "crate": "gpui_platform",
      "module": "gpui_platform",
      "path": "gpui_platform::gpui_platform",
      "source": "crates/gpui_platform/src/gpui_platform.rs",
      "summary": "Returns the default [`Platform`] for the current OS.",
      "documentation": "Returns the default [`Platform`] for the current OS.\n\niOS requires explicit fonts through `application_with_ios_fonts`; this\ngeneric constructor and headless initialization are not available there.",
      "signature": "pub fn current_platform (headless : bool) -> Rc<dyn Platform>",
      "cfg": [
        "cfg (feature = \"native-platform\")"
      ]
    },
    {
      "id": "gpui_platform::gpui_platform::headless",
      "name": "headless",
      "kind": "function",
      "package": "gpui-box-platform",
      "crate": "gpui_platform",
      "module": "gpui_platform",
      "path": "gpui_platform::gpui_platform",
      "source": "crates/gpui_platform/src/gpui_platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn headless () -> gpui::Application",
      "cfg": [
        "cfg (feature = \"native-platform\")"
      ]
    },
    {
      "id": "gpui_platform::gpui_platform::reexport-1",
      "name": "gpui :: Platform",
      "kind": "reexport",
      "package": "gpui-box-platform",
      "crate": "gpui_platform",
      "module": "gpui_platform",
      "path": "gpui_platform::gpui_platform",
      "source": "crates/gpui_platform/src/gpui_platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui::Platform;",
      "cfg": []
    },
    {
      "id": "gpui_platform::gpui_platform::reexport-2",
      "name": "gpui_ios :: application as application_with_ios_fonts",
      "kind": "reexport",
      "package": "gpui-box-platform",
      "crate": "gpui_platform",
      "module": "gpui_platform",
      "path": "gpui_platform::gpui_platform",
      "source": "crates/gpui_platform/src/gpui_platform.rs",
      "summary": "Creates an experimental UIKit application with explicit caller-owned fonts. Native iOS execution is required; no headless or empty-font fallback exists.",
      "documentation": "Creates an experimental UIKit application with explicit caller-owned fonts.\nNative iOS execution is required; no headless or empty-font fallback exists.",
      "signature": "# [doc = \" Creates an experimental UIKit application with explicit caller-owned fonts.\"] # [doc = \" Native iOS execution is required; no headless or empty-font fallback exists.\"] # [cfg (all (feature = \"native-platform\", target_os = \"ios\"))] pub use gpui_ios::application as application_with_ios_fonts;",
      "cfg": [
        "cfg (all (feature = \"native-platform\", target_os = \"ios\"))"
      ]
    },
    {
      "id": "gpui_platform::gpui_platform::reexport-3",
      "name": "gpui_web :: WebBackendPreference",
      "kind": "reexport",
      "package": "gpui-box-platform",
      "crate": "gpui_platform",
      "module": "gpui_platform",
      "path": "gpui_platform::gpui_platform",
      "source": "crates/gpui_platform/src/gpui_platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (all (feature = \"native-platform\", target_family = \"wasm\"))] pub use gpui_web::WebBackendPreference;",
      "cfg": [
        "cfg (all (feature = \"native-platform\", target_family = \"wasm\"))"
      ]
    },
    {
      "id": "gpui_platform::gpui_platform::single_threaded_web",
      "name": "single_threaded_web",
      "kind": "function",
      "package": "gpui-box-platform",
      "crate": "gpui_platform",
      "module": "gpui_platform",
      "path": "gpui_platform::gpui_platform",
      "source": "crates/gpui_platform/src/gpui_platform.rs",
      "summary": "Unlike `application`, this function returns a single-threaded web application.",
      "documentation": "Unlike `application`, this function returns a single-threaded web application.",
      "signature": "pub fn single_threaded_web () -> gpui::Application",
      "cfg": [
        "cfg (all (feature = \"native-platform\", target_family = \"wasm\"))"
      ]
    },
    {
      "id": "gpui_platform::gpui_platform::test_text_system",
      "name": "test_text_system",
      "kind": "function",
      "package": "gpui-box-platform",
      "crate": "gpui_platform",
      "module": "gpui_platform",
      "path": "gpui_platform::gpui_platform",
      "source": "crates/gpui_platform/src/gpui_platform.rs",
      "summary": "Returns a text system for tests whose font database initially contains no fonts.",
      "documentation": "Returns a text system for tests whose font database initially contains no fonts.\n\nThe fallback family is used after callers register bundled font data with\n[`gpui::PlatformTextSystem::add_fonts`]. System fonts are never loaded.",
      "signature": "pub fn test_text_system (fallback_family : & str) -> std::sync::Arc<dyn gpui::PlatformTextSystem>",
      "cfg": [
        "cfg (feature = \"test-support\")"
      ]
    },
    {
      "id": "gpui_platform::gpui_platform::web_init",
      "name": "web_init",
      "kind": "function",
      "package": "gpui-box-platform",
      "crate": "gpui_platform",
      "module": "gpui_platform",
      "path": "gpui_platform::gpui_platform",
      "source": "crates/gpui_platform/src/gpui_platform.rs",
      "summary": "Initializes panic hooks and logging for the web platform. Call this before running the application in a wasm_bindgen entrypoint.",
      "documentation": "Initializes panic hooks and logging for the web platform.\nCall this before running the application in a wasm_bindgen entrypoint.",
      "signature": "pub fn web_init ()",
      "cfg": [
        "cfg (all (feature = \"native-platform\", target_family = \"wasm\"))"
      ]
    },
    {
      "id": "gpui_util::Deferred",
      "name": "Deferred",
      "kind": "struct",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct Deferred<F : FnOnce ()> (Option<F>);",
      "cfg": []
    },
    {
      "id": "gpui_util::Deferred::abort",
      "name": "abort",
      "kind": "method",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "Drop without running the deferred function.",
      "documentation": "Drop without running the deferred function.",
      "signature": "pub fn abort (mut self)",
      "cfg": [],
      "target": "Deferred<F>"
    },
    {
      "id": "gpui_util::LogErrorFuture",
      "name": "LogErrorFuture",
      "kind": "struct",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [must_use] pub struct LogErrorFuture<F> (F, log::Level, core::panic::Location<'static>);",
      "cfg": []
    },
    {
      "id": "gpui_util::LogErrorWithBacktraceFuture",
      "name": "LogErrorWithBacktraceFuture",
      "kind": "struct",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [must_use] pub struct LogErrorWithBacktraceFuture<F> (F, log::Level, core::panic::Location<'static>);",
      "cfg": []
    },
    {
      "id": "gpui_util::ResultExt",
      "name": "ResultExt",
      "kind": "trait",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub trait ResultExt<E> { type Ok; fn log_err (self) -> Option<Self::Ok>; # [doc = \" Like [`ResultExt::log_err`], but uses `{:?}` formatting so `anyhow::Error` values emit their\"] # [doc = \" full backtrace. Reach for this only when a backtrace is genuinely wanted — most call sites\"] # [doc = \" should stick with `log_err` / `warn_on_err`, whose output is a single chained error message.\"] fn log_err_with_backtrace (self) -> Option<Self::Ok> where E : std::fmt::Debug; # [doc = \" Assert that this result should never be an error in development or tests.\"] fn debug_assert_ok (self, reason : & str) -> Self; fn warn_on_err (self) -> Option<Self::Ok>; fn log_with_level (self, level : log::Level) -> Option<Self::Ok>; fn anyhow (self) -> anyhow::Result<Self::Ok> where E : Into<anyhow::Error>; }",
      "cfg": []
    },
    {
      "id": "gpui_util::TryFutureExt",
      "name": "TryFutureExt",
      "kind": "trait",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub trait TryFutureExt { fn log_err (self) -> LogErrorFuture<Self> where Self : Sized; fn log_tracked_err (self, location : core::panic::Location<'static>) -> LogErrorFuture<Self> where Self : Sized; fn warn_on_err (self) -> LogErrorFuture<Self> where Self : Sized; fn unwrap (self) -> UnwrapFuture<Self> where Self : Sized; }",
      "cfg": []
    },
    {
      "id": "gpui_util::TryFutureExtBacktrace",
      "name": "TryFutureExtBacktrace",
      "kind": "trait",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "`{:?}`-formatting companion to [`TryFutureExt`]; emits a backtrace for `anyhow::Error`. Prefer [`TryFutureExt`] unless a backtrace is genuinely wanted.",
      "documentation": "`{:?}`-formatting companion to [`TryFutureExt`]; emits a backtrace for `anyhow::Error`. Prefer\n[`TryFutureExt`] unless a backtrace is genuinely wanted.",
      "signature": "# [doc = \" `{:?}`-formatting companion to [`TryFutureExt`]; emits a backtrace for `anyhow::Error`. Prefer\"] # [doc = \" [`TryFutureExt`] unless a backtrace is genuinely wanted.\"] pub trait TryFutureExtBacktrace { fn log_err_with_backtrace (self) -> LogErrorWithBacktraceFuture<Self> where Self : Sized; fn log_tracked_err_with_backtrace (self, location : core::panic::Location<'static>,) -> LogErrorWithBacktraceFuture<Self> where Self : Sized; }",
      "cfg": []
    },
    {
      "id": "gpui_util::TypeIdHashBuilder",
      "name": "TypeIdHashBuilder",
      "kind": "struct",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Default, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct TypeIdHashBuilder;",
      "cfg": []
    },
    {
      "id": "gpui_util::TypeIdHasher",
      "name": "TypeIdHasher",
      "kind": "struct",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Default, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct TypeIdHasher { value : u64, }",
      "cfg": []
    },
    {
      "id": "gpui_util::UnwrapFuture",
      "name": "UnwrapFuture",
      "kind": "struct",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct UnwrapFuture<F> (F);",
      "cfg": []
    },
    {
      "id": "gpui_util::arc_cow::ArcCow",
      "name": "ArcCow",
      "kind": "enum",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "arc_cow",
      "path": "gpui_util::arc_cow",
      "source": "crates/gpui_util/src/arc_cow.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub enum ArcCow<'a, T : ? Sized> { Borrowed (& 'a T), Owned (Arc<T>), }",
      "cfg": []
    },
    {
      "id": "gpui_util::debug_panic",
      "name": "debug_panic",
      "kind": "macro",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "macro_rules! debug_panic",
      "cfg": []
    },
    {
      "id": "gpui_util::defer",
      "name": "defer",
      "kind": "function",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "Run the given function when the returned value is dropped (unless it's cancelled).",
      "documentation": "Run the given function when the returned value is dropped (unless it's cancelled).",
      "signature": "pub fn defer<F : FnOnce ()> (f : F) -> Deferred<F>",
      "cfg": []
    },
    {
      "id": "gpui_util::get_windows_system_shell",
      "name": "get_windows_system_shell",
      "kind": "function",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get_windows_system_shell () -> String",
      "cfg": [
        "cfg (target_os = \"windows\")"
      ]
    },
    {
      "id": "gpui_util::log_err",
      "name": "log_err",
      "kind": "function",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn log_err<E : std::fmt::Display> (error : & E)",
      "cfg": []
    },
    {
      "id": "gpui_util::maybe",
      "name": "maybe",
      "kind": "macro",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "Expands to an immediately-invoked function expression. Good for using the ? operator in functions which do not return an Option or Result.",
      "documentation": "Expands to an immediately-invoked function expression. Good for using the ? operator\nin functions which do not return an Option or Result.\n\nAccepts a normal block, an async block, or an async move block.",
      "signature": "macro_rules! maybe",
      "cfg": []
    },
    {
      "id": "gpui_util::measure",
      "name": "measure",
      "kind": "function",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn measure<R> (label : & str, f : impl FnOnce () -> R) -> R",
      "cfg": []
    },
    {
      "id": "gpui_util::new_std_command",
      "name": "new_std_command",
      "kind": "function",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "summary": "",
      "declarations": [
        {
          "source": "crates/gpui_util/src/lib.rs",
          "documentation": "",
          "signature": "pub fn new_std_command (program : impl AsRef<OsStr>) -> std::process::Command",
          "cfg": [
            "cfg (not (target_os = \"windows\"))"
          ]
        },
        {
          "source": "crates/gpui_util/src/lib.rs",
          "documentation": "",
          "signature": "pub fn new_std_command (program : impl AsRef<OsStr>) -> std::process::Command",
          "cfg": [
            "cfg (target_os = \"windows\")"
          ]
        }
      ]
    },
    {
      "id": "gpui_util::post_inc",
      "name": "post_inc",
      "kind": "function",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn post_inc<T : From<u8> + AddAssign<T> + Copy> (value : & mut T) -> T",
      "cfg": []
    },
    {
      "id": "gpui_util::some_or_debug_panic",
      "name": "some_or_debug_panic",
      "kind": "function",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn some_or_debug_panic<T> (option : Option<T>) -> Option<T>",
      "cfg": []
    },
    {
      "id": "gpui_util::truncate_to_bottom_n_sorted_by",
      "name": "truncate_to_bottom_n_sorted_by",
      "kind": "function",
      "package": "gpui-box-util",
      "crate": "gpui_util",
      "module": "",
      "path": "gpui_util",
      "source": "crates/gpui_util/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn truncate_to_bottom_n_sorted_by<T, F> (items : & mut Vec<T>, limit : usize, compare : & F) where F : Fn (& T, & T) -> std::cmp::Ordering,",
      "cfg": []
    },
    {
      "id": "gpui_web::dispatcher::WebDispatcher",
      "name": "WebDispatcher",
      "kind": "struct",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "dispatcher",
      "path": "gpui_web::dispatcher",
      "source": "crates/gpui_web/src/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WebDispatcher { main_thread_id : std::thread::ThreadId, background_sender : PriorityQueueSender<RunnableVariant>, main_thread_mailbox : Arc<MainThreadMailbox>, supports_threads : bool, # [cfg (feature = \"multithreaded\")] _background_threads : Vec<wasm_thread::JoinHandle<()>>, }",
      "cfg": []
    },
    {
      "id": "gpui_web::dispatcher::WebDispatcher::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "dispatcher",
      "path": "gpui_web::dispatcher",
      "source": "crates/gpui_web/src/dispatcher.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (browser_window : web_sys::Window, allow_threads : bool) -> Self",
      "cfg": [],
      "target": "WebDispatcher"
    },
    {
      "id": "gpui_web::display::WebDisplay",
      "name": "WebDisplay",
      "kind": "struct",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "display",
      "path": "gpui_web::display",
      "source": "crates/gpui_web/src/display.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug)] pub struct WebDisplay { id : DisplayId, uuid : uuid::Uuid, browser_window : web_sys::Window, }",
      "cfg": []
    },
    {
      "id": "gpui_web::display::WebDisplay::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "display",
      "path": "gpui_web::display",
      "source": "crates/gpui_web/src/display.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (browser_window : web_sys::Window) -> Self",
      "cfg": [],
      "target": "WebDisplay"
    },
    {
      "id": "gpui_web::events::WebEventListeners",
      "name": "WebEventListeners",
      "kind": "struct",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "events",
      "path": "gpui_web::events",
      "source": "crates/gpui_web/src/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WebEventListeners { _handles : Vec<EventListenerHandle>, }",
      "cfg": []
    },
    {
      "id": "gpui_web::events::WebWindowInner::register_event_listeners",
      "name": "register_event_listeners",
      "kind": "method",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "events",
      "path": "gpui_web::events",
      "source": "crates/gpui_web/src/events.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn register_event_listeners (self : & Rc<Self>) -> WebEventListeners",
      "cfg": [],
      "target": "WebWindowInner"
    },
    {
      "id": "gpui_web::gpui_web::reexport-1",
      "name": "dispatcher :: WebDispatcher",
      "kind": "reexport",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "gpui_web",
      "path": "gpui_web::gpui_web",
      "source": "crates/gpui_web/src/gpui_web.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use dispatcher::WebDispatcher;",
      "cfg": []
    },
    {
      "id": "gpui_web::gpui_web::reexport-2",
      "name": "display :: WebDisplay",
      "kind": "reexport",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "gpui_web",
      "path": "gpui_web::gpui_web",
      "source": "crates/gpui_web/src/gpui_web.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use display::WebDisplay;",
      "cfg": []
    },
    {
      "id": "gpui_web::gpui_web::reexport-3",
      "name": "gpui_wgpu :: WebBackendPreference",
      "kind": "reexport",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "gpui_web",
      "path": "gpui_web::gpui_web",
      "source": "crates/gpui_web/src/gpui_web.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use gpui_wgpu::WebBackendPreference;",
      "cfg": []
    },
    {
      "id": "gpui_web::gpui_web::reexport-4",
      "name": "http_client :: { FetchCredentials , FetchHttpClient }",
      "kind": "reexport",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "gpui_web",
      "path": "gpui_web::gpui_web",
      "source": "crates/gpui_web/src/gpui_web.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use http_client::{ FetchCredentials, FetchHttpClient };",
      "cfg": []
    },
    {
      "id": "gpui_web::gpui_web::reexport-5",
      "name": "keyboard :: WebKeyboardLayout",
      "kind": "reexport",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "gpui_web",
      "path": "gpui_web::gpui_web",
      "source": "crates/gpui_web/src/gpui_web.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use keyboard::WebKeyboardLayout;",
      "cfg": []
    },
    {
      "id": "gpui_web::gpui_web::reexport-6",
      "name": "logging :: init_logging",
      "kind": "reexport",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "gpui_web",
      "path": "gpui_web::gpui_web",
      "source": "crates/gpui_web/src/gpui_web.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use logging::init_logging;",
      "cfg": []
    },
    {
      "id": "gpui_web::gpui_web::reexport-7",
      "name": "platform :: { WebPlatform , WebWindowError }",
      "kind": "reexport",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "gpui_web",
      "path": "gpui_web::gpui_web",
      "source": "crates/gpui_web/src/gpui_web.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use platform::{ WebPlatform, WebWindowError };",
      "cfg": []
    },
    {
      "id": "gpui_web::gpui_web::reexport-8",
      "name": "window :: WebWindow",
      "kind": "reexport",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "gpui_web",
      "path": "gpui_web::gpui_web",
      "source": "crates/gpui_web/src/gpui_web.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use window::WebWindow;",
      "cfg": []
    },
    {
      "id": "gpui_web::http_client::FetchCredentials",
      "name": "FetchCredentials",
      "kind": "enum",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "http_client",
      "path": "gpui_web::http_client",
      "source": "crates/gpui_web/src/http_client.rs",
      "summary": "Controls whether browser Fetch requests include credentials.",
      "documentation": "Controls whether browser Fetch requests include credentials.",
      "signature": "# [doc = \" Controls whether browser Fetch requests include credentials.\"] # [derive (Clone, Copy, Debug, Default, Eq, PartialEq)] pub enum FetchCredentials { # [doc = \" Never send credentials in the request or include credentials in the response.\"] Omit, # [doc = \" Only send and include credentials for same-origin requests. This is the default.\"] # [default] SameOrigin, # [doc = \" Always include credentials, even for cross-origin requests.\"] Include, }",
      "cfg": []
    },
    {
      "id": "gpui_web::http_client::FetchHttpClient",
      "name": "FetchHttpClient",
      "kind": "struct",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "http_client",
      "path": "gpui_web::http_client",
      "source": "crates/gpui_web/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct FetchHttpClient { dispatcher : Arc<WebDispatcher>, user_agent : Option<http_client::http::header::HeaderValue>, credentials : FetchCredentials, }",
      "cfg": []
    },
    {
      "id": "gpui_web::http_client::FetchHttpClient::with_credentials",
      "name": "with_credentials",
      "kind": "method",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "http_client",
      "path": "gpui_web::http_client",
      "source": "crates/gpui_web/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_credentials (mut self, credentials : FetchCredentials) -> Self",
      "cfg": [],
      "target": "FetchHttpClient"
    },
    {
      "id": "gpui_web::keyboard::WebKeyboardLayout",
      "name": "WebKeyboardLayout",
      "kind": "struct",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "keyboard",
      "path": "gpui_web::keyboard",
      "source": "crates/gpui_web/src/keyboard.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WebKeyboardLayout;",
      "cfg": []
    },
    {
      "id": "gpui_web::logging::init_logging",
      "name": "init_logging",
      "kind": "function",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "logging",
      "path": "gpui_web::logging",
      "source": "crates/gpui_web/src/logging.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn init_logging ()",
      "cfg": []
    },
    {
      "id": "gpui_web::platform::WebPlatform",
      "name": "WebPlatform",
      "kind": "struct",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "platform",
      "path": "gpui_web::platform",
      "source": "crates/gpui_web/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WebPlatform { browser_window : web_sys::Window, dispatcher : Arc<WebDispatcher>, background_executor : BackgroundExecutor, foreground_executor : ForegroundExecutor, text_system : Arc<dyn PlatformTextSystem>, active_window : Rc<RefCell<Option<AnyWindowHandle>>>, active_display : Rc<dyn PlatformDisplay>, callbacks : RefCell<WebPlatformCallbacks>, backend_preference : WebBackendPreference, wgpu_context : Rc<RefCell<Option<WgpuContext>>>, prepared_window : Rc<RefCell<Option<PreparedWebWindow>>>, window_lifecycle : Rc<Cell<WebWindowLifecycle>>, cursor_visible : Rc<Cell<bool>>, last_cursor_css : Rc<Cell<& 'static str>>, _cursor_restore_listeners : Vec<EventListenerHandle>, }",
      "cfg": []
    },
    {
      "id": "gpui_web::platform::WebPlatform::fetch_http_client",
      "name": "fetch_http_client",
      "kind": "method",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "platform",
      "path": "gpui_web::platform",
      "source": "crates/gpui_web/src/platform.rs",
      "summary": "Returns an HTTP client that runs browser Fetch operations on this platform's main thread.",
      "documentation": "Returns an HTTP client that runs browser Fetch operations on this platform's main thread.",
      "signature": "pub fn fetch_http_client (& self) -> FetchHttpClient",
      "cfg": [],
      "target": "WebPlatform"
    },
    {
      "id": "gpui_web::platform::WebPlatform::fetch_http_client_with_user_agent",
      "name": "fetch_http_client_with_user_agent",
      "kind": "method",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "platform",
      "path": "gpui_web::platform",
      "source": "crates/gpui_web/src/platform.rs",
      "summary": "Returns a browser Fetch HTTP client with the given reported user agent.",
      "documentation": "Returns a browser Fetch HTTP client with the given reported user agent.",
      "signature": "pub fn fetch_http_client_with_user_agent (& self, user_agent : & str,) -> anyhow::Result<FetchHttpClient>",
      "cfg": [],
      "target": "WebPlatform"
    },
    {
      "id": "gpui_web::platform::WebPlatform::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "platform",
      "path": "gpui_web::platform",
      "source": "crates/gpui_web/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (allow_multi_threading : bool) -> Self",
      "cfg": [],
      "target": "WebPlatform"
    },
    {
      "id": "gpui_web::platform::WebPlatform::new_with_backend",
      "name": "new_with_backend",
      "kind": "method",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "platform",
      "path": "gpui_web::platform",
      "source": "crates/gpui_web/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new_with_backend (allow_multi_threading : bool, backend_preference : WebBackendPreference,) -> Self",
      "cfg": [],
      "target": "WebPlatform"
    },
    {
      "id": "gpui_web::platform::WebWindowError",
      "name": "WebWindowError",
      "kind": "enum",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "platform",
      "path": "gpui_web::platform",
      "source": "crates/gpui_web/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug)] pub enum WebWindowError { AlreadyOpen, ReopeningUnsupported, UnsupportedWindowKind (& 'static str), # [doc = \" Graphics initialization has not completed yet; retrying after it\"] # [doc = \" finishes (e.g. from the `Platform::run` callback) can succeed.\"] GraphicsInitializationPending, # [doc = \" Graphics initialization or an earlier window creation failed;\"] # [doc = \" retrying cannot succeed.\"] GraphicsUnavailable, }",
      "cfg": []
    },
    {
      "id": "gpui_web::window::WebWindow",
      "name": "WebWindow",
      "kind": "struct",
      "package": "gpui-box-web",
      "crate": "gpui_web",
      "module": "window",
      "path": "gpui_web::window",
      "source": "crates/gpui_web/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WebWindow { inner : Rc<WebWindowInner>, display : Rc<dyn PlatformDisplay>, lifecycle : Rc<Cell<WebWindowLifecycle>>, active_window : Rc<RefCell<Option<AnyWindowHandle>>>, _raf_closure : Closure<dyn FnMut ()>, _resize_observer : Option<web_sys::ResizeObserver>, _css_resize_observer : Option<web_sys::ResizeObserver>, _resize_observer_closure : Closure<dyn FnMut (js_sys::Array)>, _event_listeners : WebEventListeners, }",
      "cfg": []
    },
    {
      "id": "gpui_webview::BrowserEvent",
      "name": "BrowserEvent",
      "kind": "enum",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "",
      "path": "gpui_webview",
      "source": "crates/gpui-webview/src/lib.rs",
      "summary": "Engine notifications. PageFinished is deliberately not a success assertion: native failure notifications may follow it. Do not log URLs or messages without the application's privacy/redaction policy.",
      "documentation": "Engine notifications. PageFinished is deliberately not a success assertion:\nnative failure notifications may follow it. Do not log URLs or messages\nwithout the application's privacy/redaction policy.",
      "signature": "# [doc = \" Engine notifications. PageFinished is deliberately not a success assertion:\"] # [doc = \" native failure notifications may follow it. Do not log URLs or messages\"] # [doc = \" without the application's privacy/redaction policy.\"] # [derive (Clone, Debug, PartialEq, Eq)] pub enum BrowserEvent { NavigationStarted (String), NavigationRefused (String), PageFinished (String), LoadFailed { url : String, description : String, }, # [doc = \" Native process failure, including termination or unresponsiveness.\"] ProcessFailed (String), # [doc = \" Host content allocation failed, distinct from a page navigation failure.\"] ViewportAllocationFailed (String), PopupRefused (String), DownloadRefused (String), PermissionRefused (String), # [doc = \" Untrusted page data, NEVER a privileged runtime command. In particular\"] # [doc = \" Linux Wry reports the main URL for iframe IPC, not the sender's origin.\"] Message { reported_url : String, body : String, }, MessageRefused, # [doc = \" The caller did not drain the bounded event queue quickly enough. State\"] # [doc = \" is incomplete; do not infer success from a stream with missing events.\"] EventsDropped (usize), }",
      "cfg": []
    },
    {
      "id": "gpui_webview::NavigationPolicy",
      "name": "NavigationPolicy",
      "kind": "struct",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "",
      "path": "gpui_webview",
      "source": "crates/gpui-webview/src/lib.rs",
      "summary": "Synchronous navigation policy. This governs navigation, not subresource networking; it is not a network sandbox or an IPC authorization policy.",
      "documentation": "Synchronous navigation policy. This governs navigation, not subresource\nnetworking; it is not a network sandbox or an IPC authorization policy.",
      "signature": "# [doc = \" Synchronous navigation policy. This governs navigation, not subresource\"] # [doc = \" networking; it is not a network sandbox or an IPC authorization policy.\"] # [derive (Clone, Debug, Default)] pub struct NavigationPolicy { # [doc = \" Empty allows all HTTP(S) origins. Entries are parsed and normalized.\"] pub origins : Vec<Url>, }",
      "cfg": []
    },
    {
      "id": "gpui_webview::NavigationPolicy::allows",
      "name": "allows",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "",
      "path": "gpui_webview",
      "source": "crates/gpui-webview/src/lib.rs",
      "summary": "Rejects local files, executable schemes, credentials, and opaque origins.",
      "documentation": "Rejects local files, executable schemes, credentials, and opaque origins.",
      "signature": "pub fn allows (& self, address : & str) -> bool",
      "cfg": [],
      "target": "NavigationPolicy"
    },
    {
      "id": "gpui_webview::native::BrowserHost",
      "name": "BrowserHost",
      "kind": "struct",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "A UI-thread-only, caller-owned browser. The handle retains its engine until GPUI has detached the last painted view. Never move it between GPUI windows.",
      "documentation": "A UI-thread-only, caller-owned browser. The handle retains its engine until\nGPUI has detached the last painted view. Never move it between GPUI windows.",
      "signature": "# [doc = \" A UI-thread-only, caller-owned browser. The handle retains its engine until\"] # [doc = \" GPUI has detached the last painted view. Never move it between GPUI windows.\"] pub struct BrowserHost { engine : Rc<Engine>, handle : PlatformViewHandle, events : EventInbox, sender : EventSender, navigation : NavigationPolicy, # [cfg (target_os = \"windows\")] pending_html : Rc<std::cell::RefCell<crate::PendingHtmlNavigation>>, }",
      "cfg": []
    },
    {
      "id": "gpui_webview::native::BrowserHost::back",
      "name": "back",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn back (& self) -> anyhow::Result<()>",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserHost::can_go_back",
      "name": "can_go_back",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn can_go_back (& self) -> anyhow::Result<bool>",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserHost::can_go_forward",
      "name": "can_go_forward",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn can_go_forward (& self) -> anyhow::Result<bool>",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserHost::drain_events",
      "name": "drain_events",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "Drains notifications without reentering GPUI from a native callback.",
      "documentation": "Drains notifications without reentering GPUI from a native callback.",
      "signature": "pub fn drain_events (& self) -> impl Iterator<Item = BrowserEvent> + '_",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserHost::evaluate_script",
      "name": "evaluate_script",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "Executes caller-authored code. Do not interpolate page-controlled text; this is not the isolated application/plugin runtime.",
      "documentation": "Executes caller-authored code. Do not interpolate page-controlled text;\nthis is not the isolated application/plugin runtime.",
      "signature": "pub fn evaluate_script (& self, script : & str) -> anyhow::Result<()>",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserHost::focus",
      "name": "focus",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn focus (& self) -> anyhow::Result<()>",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserHost::focus_parent",
      "name": "focus_parent",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn focus_parent (& self) -> anyhow::Result<()>",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserHost::forward",
      "name": "forward",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn forward (& self) -> anyhow::Result<()>",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserHost::handle",
      "name": "handle",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "Render with `gpui::platform_view`. Rectangular clipping only; no rotation, scaling, rounded masks, opacity, or GPU-scene interleaving is promised.",
      "documentation": "Render with `gpui::platform_view`. Rectangular clipping only; no rotation,\nscaling, rounded masks, opacity, or GPU-scene interleaving is promised.",
      "signature": "pub fn handle (& self) -> PlatformViewHandle",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserHost::load_html",
      "name": "load_html",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "Loads caller-owned HTML with the engine's complete HTML/CSS support. Relative URLs have no application base URL. Content is not trusted by IPC.",
      "documentation": "Loads caller-owned HTML with the engine's complete HTML/CSS support.\nRelative URLs have no application base URL. Content is not trusted by IPC.",
      "signature": "pub fn load_html (& self, html : & str) -> anyhow::Result<()>",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserHost::navigate",
      "name": "navigate",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn navigate (& self, url : & str) -> anyhow::Result<()>",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserHost::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "Creates a child on the window's UI thread. Linux requires an X11 GPUI window (including XWayland) and GTK using the same X server. Native Wayland is rejected, never silently replaced with an inert handle.",
      "documentation": "Creates a child on the window's UI thread. Linux requires an X11 GPUI\nwindow (including XWayland) and GTK using the same X server. Native\nWayland is rejected, never silently replaced with an inert handle.",
      "signature": "pub fn new (window : & Window, cx : & App, options : BrowserOptions) -> anyhow::Result<Self>",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserHost::reload",
      "name": "reload",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn reload (& self) -> anyhow::Result<()>",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserHost::url",
      "name": "url",
      "kind": "method",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn url (& self) -> anyhow::Result<String>",
      "cfg": [],
      "target": "BrowserHost"
    },
    {
      "id": "gpui_webview::native::BrowserOptions",
      "name": "BrowserOptions",
      "kind": "struct",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "native",
      "path": "gpui_webview::native",
      "source": "crates/gpui-webview/src/native.rs",
      "summary": "Security defaults: HTTP(S) navigation, no popup, download, permission grants or script bridge. HTML is rendered by the OS browser, not GPUI's text parser.",
      "documentation": "Security defaults: HTTP(S) navigation, no popup, download, permission grants\nor script bridge. HTML is rendered by the OS browser, not GPUI's text parser.",
      "signature": "# [doc = \" Security defaults: HTTP(S) navigation, no popup, download, permission grants\"] # [doc = \" or script bridge. HTML is rendered by the OS browser, not GPUI's text parser.\"] # [derive (Default)] pub struct BrowserOptions { pub navigation : NavigationPolicy, # [doc = \" Opt in to receiving untrusted messages. Never authorizes native actions.\"] pub receive_messages : bool, }",
      "cfg": []
    },
    {
      "id": "gpui_webview::reexport-1",
      "name": "native :: { BrowserHost , BrowserOptions }",
      "kind": "reexport",
      "package": "gpui-box-webview",
      "crate": "gpui_webview",
      "module": "",
      "path": "gpui_webview",
      "source": "crates/gpui-webview/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (any (target_os = \"linux\", target_os = \"macos\", target_os = \"windows\"))] pub use native::{ BrowserHost, BrowserOptions };",
      "cfg": [
        "cfg (any (target_os = \"linux\", target_os = \"macos\", target_os = \"windows\"))"
      ]
    },
    {
      "id": "gpui_wgpu::cosmic_text_system::CosmicTextSystem",
      "name": "CosmicTextSystem",
      "kind": "struct",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "cosmic_text_system",
      "path": "gpui_wgpu::cosmic_text_system",
      "source": "crates/gpui_wgpu/src/cosmic_text_system.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct CosmicTextSystem (RwLock<CosmicTextSystemState>);",
      "cfg": []
    },
    {
      "id": "gpui_wgpu::cosmic_text_system::CosmicTextSystem::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "cosmic_text_system",
      "path": "gpui_wgpu::cosmic_text_system",
      "source": "crates/gpui_wgpu/src/cosmic_text_system.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (system_font_fallback : & str) -> Self",
      "cfg": [],
      "target": "CosmicTextSystem"
    },
    {
      "id": "gpui_wgpu::cosmic_text_system::CosmicTextSystem::new_without_system_fonts",
      "name": "new_without_system_fonts",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "cosmic_text_system",
      "path": "gpui_wgpu::cosmic_text_system",
      "source": "crates/gpui_wgpu/src/cosmic_text_system.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new_without_system_fonts (system_font_fallback : & str) -> Self",
      "cfg": [],
      "target": "CosmicTextSystem"
    },
    {
      "id": "gpui_wgpu::gpui_wgpu::reexport-1",
      "name": "cosmic_text_system :: *",
      "kind": "reexport",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "gpui_wgpu",
      "path": "gpui_wgpu::gpui_wgpu",
      "source": "crates/gpui_wgpu/src/gpui_wgpu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use cosmic_text_system::*;",
      "cfg": []
    },
    {
      "id": "gpui_wgpu::gpui_wgpu::reexport-2",
      "name": "wgpu",
      "kind": "reexport",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "gpui_wgpu",
      "path": "gpui_wgpu::gpui_wgpu",
      "source": "crates/gpui_wgpu/src/gpui_wgpu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use wgpu;",
      "cfg": []
    },
    {
      "id": "gpui_wgpu::gpui_wgpu::reexport-3",
      "name": "wgpu_atlas :: *",
      "kind": "reexport",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "gpui_wgpu",
      "path": "gpui_wgpu::gpui_wgpu",
      "source": "crates/gpui_wgpu/src/gpui_wgpu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use wgpu_atlas::*;",
      "cfg": []
    },
    {
      "id": "gpui_wgpu::gpui_wgpu::reexport-4",
      "name": "wgpu_context :: *",
      "kind": "reexport",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "gpui_wgpu",
      "path": "gpui_wgpu::gpui_wgpu",
      "source": "crates/gpui_wgpu/src/gpui_wgpu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use wgpu_context::*;",
      "cfg": []
    },
    {
      "id": "gpui_wgpu::gpui_wgpu::reexport-5",
      "name": "wgpu_renderer :: WgpuHeadlessRenderer",
      "kind": "reexport",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "gpui_wgpu",
      "path": "gpui_wgpu::gpui_wgpu",
      "source": "crates/gpui_wgpu/src/gpui_wgpu.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (all (not (target_family = \"wasm\"), any (test, feature = \"test-support\")))] pub use wgpu_renderer::WgpuHeadlessRenderer;",
      "cfg": [
        "cfg (all (not (target_family = \"wasm\"), any (test, feature = \"test-support\")))"
      ]
    },
    {
      "id": "gpui_wgpu::gpui_wgpu::reexport-6",
      "name": "wgpu_renderer :: { GpuContext , WgpuRenderer , WgpuSurfaceConfig }",
      "kind": "reexport",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "gpui_wgpu",
      "path": "gpui_wgpu::gpui_wgpu",
      "source": "crates/gpui_wgpu/src/gpui_wgpu.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use wgpu_renderer::{ GpuContext, WgpuRenderer, WgpuSurfaceConfig };",
      "cfg": []
    },
    {
      "id": "gpui_wgpu::wgpu_atlas::WgpuAtlas",
      "name": "WgpuAtlas",
      "kind": "struct",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_atlas",
      "path": "gpui_wgpu::wgpu_atlas",
      "source": "crates/gpui_wgpu/src/wgpu_atlas.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WgpuAtlas (Mutex<WgpuAtlasState>);",
      "cfg": []
    },
    {
      "id": "gpui_wgpu::wgpu_atlas::WgpuAtlas::before_frame",
      "name": "before_frame",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_atlas",
      "path": "gpui_wgpu::wgpu_atlas",
      "source": "crates/gpui_wgpu/src/wgpu_atlas.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn before_frame (& self)",
      "cfg": [],
      "target": "WgpuAtlas"
    },
    {
      "id": "gpui_wgpu::wgpu_atlas::WgpuAtlas::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_atlas",
      "path": "gpui_wgpu::wgpu_atlas",
      "source": "crates/gpui_wgpu/src/wgpu_atlas.rs",
      "summary": "Clears all cached textures and tiles, forcing them to be recreated. Use this for incremental recovery when the device is still valid.",
      "documentation": "Clears all cached textures and tiles, forcing them to be recreated.\nUse this for incremental recovery when the device is still valid.",
      "signature": "pub fn clear (& self)",
      "cfg": [],
      "target": "WgpuAtlas"
    },
    {
      "id": "gpui_wgpu::wgpu_atlas::WgpuAtlas::from_context",
      "name": "from_context",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_atlas",
      "path": "gpui_wgpu::wgpu_atlas",
      "source": "crates/gpui_wgpu/src/wgpu_atlas.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_context (context : & WgpuContext) -> Self",
      "cfg": [],
      "target": "WgpuAtlas"
    },
    {
      "id": "gpui_wgpu::wgpu_atlas::WgpuAtlas::get_texture_info",
      "name": "get_texture_info",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_atlas",
      "path": "gpui_wgpu::wgpu_atlas",
      "source": "crates/gpui_wgpu/src/wgpu_atlas.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get_texture_info (& self, id : AtlasTextureId) -> WgpuTextureInfo",
      "cfg": [],
      "target": "WgpuAtlas"
    },
    {
      "id": "gpui_wgpu::wgpu_atlas::WgpuAtlas::handle_device_lost",
      "name": "handle_device_lost",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_atlas",
      "path": "gpui_wgpu::wgpu_atlas",
      "source": "crates/gpui_wgpu/src/wgpu_atlas.rs",
      "summary": "Handles device lost by clearing all textures and cached tiles. The atlas will lazily recreate textures as needed on subsequent frames.",
      "documentation": "Handles device lost by clearing all textures and cached tiles.\nThe atlas will lazily recreate textures as needed on subsequent frames.",
      "signature": "pub fn handle_device_lost (& self, context : & WgpuContext)",
      "cfg": [],
      "target": "WgpuAtlas"
    },
    {
      "id": "gpui_wgpu::wgpu_atlas::WgpuAtlas::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_atlas",
      "path": "gpui_wgpu::wgpu_atlas",
      "source": "crates/gpui_wgpu/src/wgpu_atlas.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (device : Arc<wgpu::Device>, queue : Arc<wgpu::Queue>, color_texture_format : wgpu::TextureFormat,) -> Self",
      "cfg": [],
      "target": "WgpuAtlas"
    },
    {
      "id": "gpui_wgpu::wgpu_atlas::WgpuTextureInfo",
      "name": "WgpuTextureInfo",
      "kind": "struct",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_atlas",
      "path": "gpui_wgpu::wgpu_atlas",
      "source": "crates/gpui_wgpu/src/wgpu_atlas.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WgpuTextureInfo { pub view : wgpu::TextureView, }",
      "cfg": []
    },
    {
      "id": "gpui_wgpu::wgpu_context::CompositorGpuHint",
      "name": "CompositorGpuHint",
      "kind": "struct",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy)] pub struct CompositorGpuHint { pub vendor_id : u32, pub device_id : u32, }",
      "cfg": []
    },
    {
      "id": "gpui_wgpu::wgpu_context::PreparedWebGraphics",
      "name": "PreparedWebGraphics",
      "kind": "struct",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (target_family = \"wasm\")] pub struct PreparedWebGraphics { pub context : WgpuContext, pub surface : wgpu::Surface<'static>, }",
      "cfg": [
        "cfg (target_family = \"wasm\")"
      ]
    },
    {
      "id": "gpui_wgpu::wgpu_context::WebBackendPreference",
      "name": "WebBackendPreference",
      "kind": "enum",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (target_family = \"wasm\")] # [derive (Clone, Copy, Debug, Default, Eq, PartialEq)] pub enum WebBackendPreference { # [default] Auto, WebGpu, WebGl, }",
      "cfg": [
        "cfg (target_family = \"wasm\")"
      ]
    },
    {
      "id": "gpui_wgpu::wgpu_context::WgpuBackend",
      "name": "WgpuBackend",
      "kind": "enum",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, Eq, PartialEq)] pub enum WgpuBackend { BrowserWebGpu, Gl, Native (wgpu::Backend), }",
      "cfg": []
    },
    {
      "id": "gpui_wgpu::wgpu_context::WgpuContext",
      "name": "WgpuContext",
      "kind": "struct",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WgpuContext { pub instance : wgpu::Instance, pub adapter : wgpu::Adapter, pub device : Arc<wgpu::Device>, pub queue : Arc<wgpu::Queue>, backend : WgpuBackend, dual_source_blending : bool, color_texture_format : wgpu::TextureFormat, device_lost : Arc<AtomicBool>, last_error : Arc<Mutex<Option<String>>>, }",
      "cfg": []
    },
    {
      "id": "gpui_wgpu::wgpu_context::WgpuContext::backend",
      "name": "backend",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn backend (& self) -> WgpuBackend",
      "cfg": [],
      "target": "WgpuContext"
    },
    {
      "id": "gpui_wgpu::wgpu_context::WgpuContext::check_compatible_with_surface",
      "name": "check_compatible_with_surface",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn check_compatible_with_surface (& self, surface : & wgpu::Surface<'_>) -> anyhow::Result<()>",
      "cfg": [],
      "target": "WgpuContext"
    },
    {
      "id": "gpui_wgpu::wgpu_context::WgpuContext::color_texture_format",
      "name": "color_texture_format",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn color_texture_format (& self) -> wgpu::TextureFormat",
      "cfg": [],
      "target": "WgpuContext"
    },
    {
      "id": "gpui_wgpu::wgpu_context::WgpuContext::device_lost",
      "name": "device_lost",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "Returns true if the GPU device was lost (e.g., due to driver crash, suspend/resume). When this returns true, the context should be recreated.",
      "documentation": "Returns true if the GPU device was lost (e.g., due to driver crash, suspend/resume).\nWhen this returns true, the context should be recreated.",
      "signature": "pub fn device_lost (& self) -> bool",
      "cfg": [],
      "target": "WgpuContext"
    },
    {
      "id": "gpui_wgpu::wgpu_context::WgpuContext::instance",
      "name": "instance",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn instance (display : Box<dyn wgpu::wgt::WgpuHasDisplayHandle>) -> wgpu::Instance",
      "cfg": [
        "cfg (not (target_family = \"wasm\"))"
      ],
      "target": "WgpuContext"
    },
    {
      "id": "gpui_wgpu::wgpu_context::WgpuContext::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (instance : wgpu::Instance, surface : & wgpu::Surface<'_>, compositor_gpu : Option<CompositorGpuHint>,) -> anyhow::Result<Self>",
      "cfg": [
        "cfg (not (target_family = \"wasm\"))"
      ],
      "target": "WgpuContext"
    },
    {
      "id": "gpui_wgpu::wgpu_context::WgpuContext::new_headless",
      "name": "new_headless",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "Creates a GPU context without requiring a display or window surface.",
      "documentation": "Creates a GPU context without requiring a display or window surface.",
      "signature": "pub fn new_headless () -> anyhow::Result<Self>",
      "cfg": [
        "cfg (all (not (target_family = \"wasm\"), any (test, feature = \"test-support\")))"
      ],
      "target": "WgpuContext"
    },
    {
      "id": "gpui_wgpu::wgpu_context::WgpuContext::new_rejecting_software",
      "name": "new_rejecting_software",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new_rejecting_software (instance : wgpu::Instance, surface : & wgpu::Surface<'_>, compositor_gpu : Option<CompositorGpuHint>,) -> anyhow::Result<Self>",
      "cfg": [
        "cfg (not (target_family = \"wasm\"))"
      ],
      "target": "WgpuContext"
    },
    {
      "id": "gpui_wgpu::wgpu_context::WgpuContext::new_web",
      "name": "new_web",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub async fn new_web (canvas : & web_sys::HtmlCanvasElement, preference : WebBackendPreference,) -> anyhow::Result<PreparedWebGraphics>",
      "cfg": [
        "cfg (target_family = \"wasm\")"
      ],
      "target": "WgpuContext"
    },
    {
      "id": "gpui_wgpu::wgpu_context::WgpuContext::supports_dual_source_blending",
      "name": "supports_dual_source_blending",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn supports_dual_source_blending (& self) -> bool",
      "cfg": [],
      "target": "WgpuContext"
    },
    {
      "id": "gpui_wgpu::wgpu_context::WgpuContext::uses_webgl_instance_data",
      "name": "uses_webgl_instance_data",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_context",
      "path": "gpui_wgpu::wgpu_context",
      "source": "crates/gpui_wgpu/src/wgpu_context.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn uses_webgl_instance_data (& self) -> bool",
      "cfg": [],
      "target": "WgpuContext"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::GpuContext",
      "name": "GpuContext",
      "kind": "type",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "Shared GPU context reference, used to coordinate device recovery across multiple windows.",
      "documentation": "Shared GPU context reference, used to coordinate device recovery across multiple windows.",
      "signature": "# [doc = \" Shared GPU context reference, used to coordinate device recovery across multiple windows.\"] pub type GpuContext = Rc<RefCell<Option<WgpuContext>>>;",
      "cfg": []
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuHeadlessRenderer",
      "name": "WgpuHeadlessRenderer",
      "kind": "struct",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (all (not (target_family = \"wasm\"), any (test, feature = \"test-support\")))] pub struct WgpuHeadlessRenderer { renderer : WgpuRenderer, measurement_id : u64, }",
      "cfg": [
        "cfg (all (not (target_family = \"wasm\"), any (test, feature = \"test-support\")))"
      ]
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuHeadlessRenderer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> anyhow::Result<Self>",
      "cfg": [],
      "target": "WgpuHeadlessRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer",
      "name": "WgpuRenderer",
      "kind": "struct",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WgpuRenderer { # [doc = \" Shared GPU context for device recovery coordination (unused on WASM).\"] # [allow (dead_code)] context : Option<GpuContext>, # [doc = \" Compositor GPU hint for adapter selection (unused on WASM).\"] # [allow (dead_code)] compositor_gpu : Option<CompositorGpuHint>, resources : Option<WgpuResources>, surface_config : wgpu::SurfaceConfiguration, atlas : Arc<WgpuAtlas>, path_globals_offset : u64, gamma_offset : u64, instance_data_capacity : u64, max_instance_data_size : u64, instance_data_alignment : u64, uses_webgl_instance_data : bool, rendering_params : RenderingParameters, is_bgr : bool, dual_source_blending : bool, adapter_info : wgpu::AdapterInfo, transparent_alpha_mode : wgpu::CompositeAlphaMode, opaque_alpha_mode : wgpu::CompositeAlphaMode, max_texture_size : u32, last_error : Arc<Mutex<Option<String>>>, failed_frame_count : u32, device_lost : std::sync::Arc<std::sync::atomic::AtomicBool>, surface_configured : bool, needs_redraw : bool, probe_inflight : Option<ProbeInflight>, probe_values : LuminanceProbeCache, }",
      "cfg": []
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::backdrop_luminance",
      "name": "backdrop_luminance",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "The luminance the most recently completed frame read for this slot.",
      "documentation": "The luminance the most recently completed frame read for this slot.",
      "signature": "pub fn backdrop_luminance (& mut self, id : u32) -> Option<f32>",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::backdrop_statistics",
      "name": "backdrop_statistics",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "Statistics from the same completed optical-source readback as luminance.",
      "documentation": "Statistics from the same completed optical-source readback as luminance.",
      "signature": "pub fn backdrop_statistics (& mut self, id : u32) -> Option<gpui::BackdropStatistics>",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::destroy",
      "name": "destroy",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "Drains and releases presentation resources before native-window destruction. Shares the synchronization contract of [`Self::unconfigure_surface`]; callers need not detach first. Resources are released even when draining fails, but the returned error means GPU completion could not be confirmed. Repeated destruction succeeds once resources have been released.",
      "documentation": "Drains and releases presentation resources before native-window destruction.\nShares the synchronization contract of [`Self::unconfigure_surface`]; callers\nneed not detach first. Resources are released even when draining fails, but\nthe returned error means GPU completion could not be confirmed. Repeated\ndestruction succeeds once resources have been released.",
      "signature": "pub fn destroy (& mut self) -> anyhow::Result<()>",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::device_lost",
      "name": "device_lost",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "Returns true if the GPU device was lost and recovery is needed.",
      "documentation": "Returns true if the GPU device was lost and recovery is needed.",
      "signature": "pub fn device_lost (& self) -> bool",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::draw",
      "name": "draw",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn draw (& mut self, scene : & Scene) -> bool",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::gpu_specs",
      "name": "gpu_specs",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn gpu_specs (& self) -> GpuSpecs",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::max_texture_size",
      "name": "max_texture_size",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn max_texture_size (& self) -> u32",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::needs_redraw",
      "name": "needs_redraw",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "Returns true if a redraw is needed because GPU state was cleared. Calling this method clears the flag.",
      "documentation": "Returns true if a redraw is needed because GPU state was cleared.\nCalling this method clears the flag.",
      "signature": "pub fn needs_redraw (& mut self) -> bool",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "Creates a new WgpuRenderer from raw window handles.",
      "documentation": "Creates a new WgpuRenderer from raw window handles.\n\nThe `gpu_context` is a shared reference that coordinates GPU context across\nmultiple windows. The first window to create a renderer will initialize the\ncontext; subsequent windows will share it.\n\n# Safety\nThe caller must ensure that the window handle remains valid for the lifetime\nof the returned renderer.",
      "signature": "pub fn new<W> (gpu_context : GpuContext, window : & W, config : WgpuSurfaceConfig, compositor_gpu : Option<CompositorGpuHint>,) -> anyhow::Result<Self> where W : HasWindowHandle + HasDisplayHandle + std::fmt::Debug + Send + Sync + Clone + 'static,",
      "cfg": [
        "cfg (not (target_family = \"wasm\"))"
      ],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::new_from_canvas",
      "name": "new_from_canvas",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new_from_canvas (context : & WgpuContext, canvas : & web_sys::HtmlCanvasElement, config : WgpuSurfaceConfig,) -> anyhow::Result<Self>",
      "cfg": [
        "cfg (target_family = \"wasm\")"
      ],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::new_from_surface",
      "name": "new_from_surface",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new_from_surface (context : & WgpuContext, surface : wgpu::Surface<'static>, config : WgpuSurfaceConfig,) -> anyhow::Result<Self>",
      "cfg": [
        "cfg (target_family = \"wasm\")"
      ],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::recover",
      "name": "recover",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "Recovers from a lost GPU device by recreating the renderer with a new context.",
      "documentation": "Recovers from a lost GPU device by recreating the renderer with a new context.\n\nCall this after detecting `device_lost()` returns true.\n\nThis method coordinates recovery across multiple windows:\n- The first window to call this will recreate the shared context\n- Subsequent windows will adopt the already-recovered context",
      "signature": "pub fn recover<W> (& mut self, window : & W) -> anyhow::Result<()> where W : HasWindowHandle + HasDisplayHandle + std::fmt::Debug + Send + Sync + Clone + 'static,",
      "cfg": [
        "cfg (not (target_family = \"wasm\"))"
      ],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::replace_surface",
      "name": "replace_surface",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "Replace the wgpu surface with a new one (e.g. after Android destroys and recreates the native window).  Keeps the device, queue, atlas, and all pipelines intact so cached `AtlasTextureId`s remain valid.",
      "documentation": "Replace the wgpu surface with a new one (e.g. after Android destroys\nand recreates the native window).  Keeps the device, queue, atlas, and\nall pipelines intact so cached `AtlasTextureId`s remain valid.\n\nUses the original context's instance. The caller must keep the native\nhandle valid until detachment or destruction, and call on the native UI\nthread when required (UIKit). Failure leaves the renderer detached.",
      "signature": "pub fn replace_surface<W : HasWindowHandle> (& mut self, window : & W, config : WgpuSurfaceConfig,) -> anyhow::Result<()>",
      "cfg": [
        "cfg (not (target_family = \"wasm\"))"
      ],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::set_subpixel_layout",
      "name": "set_subpixel_layout",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_subpixel_layout (& mut self, is_bgr : bool)",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::sprite_atlas",
      "name": "sprite_atlas",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn sprite_atlas (& self) -> & Arc<WgpuAtlas>",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::supports_dual_source_blending",
      "name": "supports_dual_source_blending",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn supports_dual_source_blending (& self) -> bool",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::unconfigure_surface",
      "name": "unconfigure_surface",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "Drop the surface so rendering is skipped until a new surface is provided via [`replace_surface`](Self::replace_surface).",
      "documentation": "Drop the surface so rendering is skipped until a new\nsurface is provided via [`replace_surface`](Self::replace_surface).\n\nThis does **not** drop the renderer — the device, queue, atlas, and\npipelines stay alive.  Use this when the native window is destroyed\n(e.g. Android `TerminateWindow`) but you intend to re-create the\nsurface later without losing cached atlas textures. Call synchronously before\nreleasing native handles or acknowledging native surface destruction.\n\n`draw` holds its drawable only on the stack and requires exclusive access,\nso no acquired frame can survive this call. Native submitted work is drained\nbefore the surface is released. A drain failure is returned, but the surface\nis still dropped and rendering remains disabled. The platform must serialize\nlifecycle callbacks with drawing and stop other submitters sharing the device\nbefore backgrounding (in particular on iOS).",
      "signature": "pub fn unconfigure_surface (& mut self) -> anyhow::Result<()>",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::update_drawable_size",
      "name": "update_drawable_size",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update_drawable_size (& mut self, size : Size<DevicePixels>)",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::update_transparency",
      "name": "update_transparency",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update_transparency (& mut self, transparent : bool)",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::viewport_size",
      "name": "viewport_size",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn viewport_size (& self) -> Size<DevicePixels>",
      "cfg": [],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuRenderer::wait_for_gpu_completion",
      "name": "wait_for_gpu_completion",
      "kind": "method",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "Waits for GPU work already submitted on this renderer's device, with `timeout` as the native GPU wait limit (callback execution adds time). Checks device loss before and after polling and pending GPU errors after callbacks have run. Errors are not consumed: validation must not hide them from the normal draw/recovery path.",
      "documentation": "Waits for GPU work already submitted on this renderer's device, with\n`timeout` as the native GPU wait limit (callback execution adds time).\nChecks device loss before and after polling and pending GPU errors\nafter callbacks have run. Errors are not consumed: validation must not hide\nthem from the normal draw/recovery path.\n\nThis also succeeds for an idle device. It does not prove that a frame was\ndrawn or displayed. For native frame validation, first require `draw` to\nreturn true, then call this before another draw can consume pending errors,\nand obtain separate native pixel evidence. Serialize other device users;\nwork submitted concurrently or after this call is outside this guarantee.",
      "signature": "pub fn wait_for_gpu_completion (& self, timeout : std::time::Duration) -> anyhow::Result<()>",
      "cfg": [
        "cfg (not (target_family = \"wasm\"))"
      ],
      "target": "WgpuRenderer"
    },
    {
      "id": "gpui_wgpu::wgpu_renderer::WgpuSurfaceConfig",
      "name": "WgpuSurfaceConfig",
      "kind": "struct",
      "package": "gpui-box-wgpu",
      "crate": "gpui_wgpu",
      "module": "wgpu_renderer",
      "path": "gpui_wgpu::wgpu_renderer",
      "source": "crates/gpui_wgpu/src/wgpu_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WgpuSurfaceConfig { pub size : Size<DevicePixels>, pub transparent : bool, # [doc = \" Color space used to present the surface. [`wgpu::SurfaceColorSpace::Auto`]\"] # [doc = \" preserves the SDR-safe platform default. Explicit color spaces opt into\"] # [doc = \" the matching wide-gamut or HDR output contract; callers must render\"] # [doc = \" content using the transfer function that color space expects.\"] pub color_space : wgpu::SurfaceColorSpace, # [doc = \" Preferred presentation mode. When `Some`, the renderer will use this\"] # [doc = \" mode if supported by the surface, falling back to `Fifo`.\"] # [doc = \" When `None`, defaults to `Fifo` (VSync).\"] # [doc = \"\"] # [doc = \" Mobile platforms may prefer `Mailbox` (triple-buffering) to avoid\"] # [doc = \" blocking in `get_current_texture()` during lifecycle transitions.\"] pub preferred_present_mode : Option<wgpu::PresentMode>, }",
      "cfg": []
    },
    {
      "id": "gpui_windows::direct_manipulation::DirectManipulationHandler::drain_events",
      "name": "drain_events",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "direct_manipulation",
      "path": "gpui_windows::direct_manipulation",
      "source": "crates/gpui_windows/src/direct_manipulation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn drain_events (& self) -> Vec<PlatformInput>",
      "cfg": [],
      "target": "DirectManipulationHandler"
    },
    {
      "id": "gpui_windows::direct_manipulation::DirectManipulationHandler::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "direct_manipulation",
      "path": "gpui_windows::direct_manipulation",
      "source": "crates/gpui_windows/src/direct_manipulation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (window : HWND, scale_factor : f32) -> Result<Self>",
      "cfg": [],
      "target": "DirectManipulationHandler"
    },
    {
      "id": "gpui_windows::direct_manipulation::DirectManipulationHandler::on_pointer_hit_test",
      "name": "on_pointer_hit_test",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "direct_manipulation",
      "path": "gpui_windows::direct_manipulation",
      "source": "crates/gpui_windows/src/direct_manipulation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn on_pointer_hit_test (& self, wparam : WPARAM)",
      "cfg": [],
      "target": "DirectManipulationHandler"
    },
    {
      "id": "gpui_windows::direct_manipulation::DirectManipulationHandler::set_scale_factor",
      "name": "set_scale_factor",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "direct_manipulation",
      "path": "gpui_windows::direct_manipulation",
      "source": "crates/gpui_windows/src/direct_manipulation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_scale_factor (& self, scale_factor : f32)",
      "cfg": [],
      "target": "DirectManipulationHandler"
    },
    {
      "id": "gpui_windows::direct_manipulation::DirectManipulationHandler::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "direct_manipulation",
      "path": "gpui_windows::direct_manipulation",
      "source": "crates/gpui_windows/src/direct_manipulation.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update (& self)",
      "cfg": [],
      "target": "DirectManipulationHandler"
    },
    {
      "id": "gpui_windows::directx_renderer::DirectComposition::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "directx_renderer",
      "path": "gpui_windows::directx_renderer",
      "source": "crates/gpui_windows/src/directx_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (dxgi_device : & IDXGIDevice, hwnd : HWND) -> Result<Self>",
      "cfg": [],
      "target": "DirectComposition"
    },
    {
      "id": "gpui_windows::directx_renderer::DirectComposition::set_overlay_swap_chain",
      "name": "set_overlay_swap_chain",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "directx_renderer",
      "path": "gpui_windows::directx_renderer",
      "source": "crates/gpui_windows/src/directx_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_overlay_swap_chain (& self, swap_chain : & IDXGISwapChain1) -> Result<()>",
      "cfg": [],
      "target": "DirectComposition"
    },
    {
      "id": "gpui_windows::directx_renderer::DirectComposition::set_swap_chain",
      "name": "set_swap_chain",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "directx_renderer",
      "path": "gpui_windows::directx_renderer",
      "source": "crates/gpui_windows/src/directx_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_swap_chain (& self, swap_chain : & IDXGISwapChain1) -> Result<()>",
      "cfg": [],
      "target": "DirectComposition"
    },
    {
      "id": "gpui_windows::directx_renderer::DirectXGlobalElements::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "directx_renderer",
      "path": "gpui_windows::directx_renderer",
      "source": "crates/gpui_windows/src/directx_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (device : & ID3D11Device) -> Result<Self>",
      "cfg": [],
      "target": "DirectXGlobalElements"
    },
    {
      "id": "gpui_windows::directx_renderer::DirectXRenderPipelines::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "directx_renderer",
      "path": "gpui_windows::directx_renderer",
      "source": "crates/gpui_windows/src/directx_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (device : & ID3D11Device) -> Result<Self>",
      "cfg": [],
      "target": "DirectXRenderPipelines"
    },
    {
      "id": "gpui_windows::directx_renderer::DirectXResources::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "directx_renderer",
      "path": "gpui_windows::directx_renderer",
      "source": "crates/gpui_windows/src/directx_renderer.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (devices : & DirectXRendererDevices, width : u32, height : u32, hwnd : HWND, disable_direct_composition : bool,) -> Result<Self>",
      "cfg": [],
      "target": "DirectXResources"
    },
    {
      "id": "gpui_windows::display::WindowsDisplay::check_given_bounds",
      "name": "check_given_bounds",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "display",
      "path": "gpui_windows::display",
      "source": "crates/gpui_windows/src/display.rs",
      "summary": "Check if the center point of given bounds is inside this monitor",
      "documentation": "Check if the center point of given bounds is inside this monitor",
      "signature": "pub fn check_given_bounds (& self, bounds : Bounds<Pixels>) -> bool",
      "cfg": [],
      "target": "WindowsDisplay"
    },
    {
      "id": "gpui_windows::display::WindowsDisplay::displays",
      "name": "displays",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "display",
      "path": "gpui_windows::display",
      "source": "crates/gpui_windows/src/display.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn displays () -> Vec<Rc<dyn PlatformDisplay>>",
      "cfg": [],
      "target": "WindowsDisplay"
    },
    {
      "id": "gpui_windows::display::WindowsDisplay::physical_bounds",
      "name": "physical_bounds",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "display",
      "path": "gpui_windows::display",
      "source": "crates/gpui_windows/src/display.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn physical_bounds (& self) -> Bounds<DevicePixels>",
      "cfg": [],
      "target": "WindowsDisplay"
    },
    {
      "id": "gpui_windows::display::WindowsDisplay::primary_monitor",
      "name": "primary_monitor",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "display",
      "path": "gpui_windows::display",
      "source": "crates/gpui_windows/src/display.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn primary_monitor () -> Option<Self>",
      "cfg": [],
      "target": "WindowsDisplay"
    },
    {
      "id": "gpui_windows::gpui_windows::reexport-1",
      "name": "platform :: WindowsPlatform",
      "kind": "reexport",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "gpui_windows",
      "path": "gpui_windows::gpui_windows",
      "source": "crates/gpui_windows/src/gpui_windows.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use platform::WindowsPlatform;",
      "cfg": []
    },
    {
      "id": "gpui_windows::platform::WindowsPlatform",
      "name": "WindowsPlatform",
      "kind": "struct",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "platform",
      "path": "gpui_windows::platform",
      "source": "crates/gpui_windows/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WindowsPlatform { inner : Rc<WindowsPlatformInner>, raw_window_handles : Arc<RwLock<SmallVec<[SafeHwnd; 4]>>>, headless : bool, icon : HICON, background_executor : BackgroundExecutor, foreground_executor : ForegroundExecutor, text_system : Arc<dyn PlatformTextSystem>, direct_write_text_system : Option<Arc<DirectWriteTextSystem>>, drop_target_helper : Option<IDropTargetHelper>, # [doc = \" Flag to instruct the `VSyncProvider` thread to invalidate the directx devices\"] # [doc = \" as resizing them has failed, causing us to have lost at least the render target.\"] invalidate_devices : Arc<AtomicBool>, handle : HWND, suspend_resume_notification : RefCell<Option<HPOWERNOTIFY>>, disable_direct_composition : bool, has_package_identity : bool, app_identity : RefCell<Option<(String, String)>>, system_notifications : RefCell<SystemNotificationState>, }",
      "cfg": []
    },
    {
      "id": "gpui_windows::platform::WindowsPlatform::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "platform",
      "path": "gpui_windows::platform",
      "source": "crates/gpui_windows/src/platform.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (headless : bool) -> Result<Self>",
      "cfg": [],
      "target": "WindowsPlatform"
    },
    {
      "id": "gpui_windows::window::ClickState::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "window",
      "path": "gpui_windows::window",
      "source": "crates/gpui_windows/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "ClickState"
    },
    {
      "id": "gpui_windows::window::ClickState::system_update",
      "name": "system_update",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "window",
      "path": "gpui_windows::window",
      "source": "crates/gpui_windows/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn system_update (& self, wparam : usize)",
      "cfg": [],
      "target": "ClickState"
    },
    {
      "id": "gpui_windows::window::ClickState::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "window",
      "path": "gpui_windows::window",
      "source": "crates/gpui_windows/src/window.rs",
      "summary": "update self and return the needed click count",
      "documentation": "update self and return the needed click count",
      "signature": "pub fn update (& self, button : MouseButton, new_position : Point<DevicePixels>) -> usize",
      "cfg": [],
      "target": "ClickState"
    },
    {
      "id": "gpui_windows::window::WindowsWindowState",
      "name": "WindowsWindowState",
      "kind": "struct",
      "package": "gpui-box-windows",
      "crate": "gpui_windows",
      "module": "window",
      "path": "gpui_windows::window",
      "source": "crates/gpui_windows/src/window.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct WindowsWindowState { pub origin : Cell<Point<Pixels>>, pub logical_size : Cell<Size<Pixels>>, pub min_size : Option<Size<Pixels>>, pub fullscreen_restore_bounds : Cell<Bounds<Pixels>>, pub border_offset : WindowBorderOffset, pub appearance : Cell<WindowAppearance>, pub background_appearance : Cell<WindowBackgroundAppearance>, pub scale_factor : Cell<f32>, pub restore_from_minimized : Cell<Option<RequestFrameCallback>>, pub callbacks : Callbacks, pub input_handler : Cell<Option<PlatformInputHandler>>, pub ime_enabled : Cell<bool>, pub pending_surrogate : Cell<Option<u16>>, pub last_reported_modifiers : Cell<Option<Modifiers>>, pub last_reported_capslock : Cell<Option<Capslock>>, pub hovered : Cell<bool>, pub direct_manipulation : DirectManipulationHandler, pub renderer : RefCell<DirectXRenderer>, pub (crate) platform_view_host : PlatformViewHost, # [doc = \" Set when the next `draw_window` call must be treated as a forced\"] # [doc = \" render. Used after a GPU device-lost recovery, where the next frame\"] # [doc = \" must both re-enable drawing (via `mark_drawable`) and bypass the GPUI\"] # [doc = \" view cache (which would otherwise replay stale atlas tile references\"] # [doc = \" from the previous frame and panic in `DirectXAtlasState::texture`),\"] # [doc = \" and when a forced render was requested while another draw was in\"] # [doc = \" progress and had to be deferred.\"] pub force_render_pending : Cell<bool>, pub click_state : ClickState, pub current_cursor : Cell<Option<HCURSOR>>, # [doc = \" Shared with [`WindowsPlatformState::cursor_visible`].\"] pub cursor_visible : Arc<AtomicBool>, pub nc_button_pressed : Cell<Option<u32>>, pub display : Cell<WindowsDisplay>, # [doc = \" Flag to instruct the `VSyncProvider` thread to invalidate the directx devices\"] # [doc = \" as resizing them has failed, causing us to have lost at least the render target.\"] pub invalidate_devices : Arc<AtomicBool>, # [doc = \" Shared with [`WindowsPlatformState::draw_coordinator`] and every other window.\"] pub (crate) draw_coordinator : Rc<DrawCoordinator>, fullscreen : Cell<Option<StyleAndBounds>>, initial_placement : Cell<Option<WindowOpenStatus>>, hwnd : HWND, pub (crate) a11y : RefCell<Option<A11yState>>, }",
      "cfg": []
    },
    {
      "id": "headless_visual::serve::run",
      "name": "run",
      "kind": "function",
      "package": "gpui-box-headless-visual",
      "crate": "headless_visual",
      "module": "serve",
      "path": "headless_visual::serve",
      "source": "tools/headless-visual/src/serve.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn run () -> Result<()>",
      "cfg": []
    },
    {
      "id": "http_client::async_body::AsyncBody",
      "name": "AsyncBody",
      "kind": "struct",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "async_body",
      "path": "http_client::async_body",
      "source": "crates/http_client/src/async_body.rs",
      "summary": "Based on the implementation of AsyncBody in <https://github.com/sagebind/isahc/blob/5c533f1ef4d6bdf1fd291b5103c22110f41d0bf0/src/body/mod.rs>.",
      "documentation": "Based on the implementation of AsyncBody in\n<https://github.com/sagebind/isahc/blob/5c533f1ef4d6bdf1fd291b5103c22110f41d0bf0/src/body/mod.rs>.",
      "signature": "# [doc = \" Based on the implementation of AsyncBody in\"] # [doc = \" <https://github.com/sagebind/isahc/blob/5c533f1ef4d6bdf1fd291b5103c22110f41d0bf0/src/body/mod.rs>.\"] pub struct AsyncBody (pub Inner);",
      "cfg": []
    },
    {
      "id": "http_client::async_body::AsyncBody::empty",
      "name": "empty",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "async_body",
      "path": "http_client::async_body",
      "source": "crates/http_client/src/async_body.rs",
      "summary": "Create a new empty body.",
      "documentation": "Create a new empty body.\n\nAn empty body represents the *absence* of a body, which is semantically\ndifferent than the presence of a body of zero length.",
      "signature": "pub fn empty () -> Self",
      "cfg": [],
      "target": "AsyncBody"
    },
    {
      "id": "http_client::async_body::AsyncBody::from_bytes",
      "name": "from_bytes",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "async_body",
      "path": "http_client::async_body",
      "source": "crates/http_client/src/async_body.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_bytes (bytes : Bytes) -> Self",
      "cfg": [],
      "target": "AsyncBody"
    },
    {
      "id": "http_client::async_body::AsyncBody::from_reader",
      "name": "from_reader",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "async_body",
      "path": "http_client::async_body",
      "source": "crates/http_client/src/async_body.rs",
      "summary": "Create a streaming body that reads from the given reader.",
      "documentation": "Create a streaming body that reads from the given reader.",
      "signature": "pub fn from_reader<R> (read : R) -> Self where R : AsyncRead + Send + Sync + 'static,",
      "cfg": [],
      "target": "AsyncBody"
    },
    {
      "id": "http_client::async_body::Inner",
      "name": "Inner",
      "kind": "enum",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "async_body",
      "path": "http_client::async_body",
      "source": "crates/http_client/src/async_body.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub enum Inner { # [doc = \" An empty body.\"] Empty, # [doc = \" A body stored in memory.\"] Bytes (std::io::Cursor<Bytes>), # [doc = \" An asynchronous reader.\"] AsyncReader (Pin<Box<dyn futures::AsyncRead + Send + Sync>>), }",
      "cfg": []
    },
    {
      "id": "http_client::async_body::Json",
      "name": "Json",
      "kind": "struct",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "async_body",
      "path": "http_client::async_body",
      "source": "crates/http_client/src/async_body.rs",
      "summary": "Newtype wrapper that serializes a value as JSON into an `AsyncBody`.",
      "documentation": "Newtype wrapper that serializes a value as JSON into an `AsyncBody`.",
      "signature": "# [doc = \" Newtype wrapper that serializes a value as JSON into an `AsyncBody`.\"] pub struct Json<T : Serialize> (pub T);",
      "cfg": []
    },
    {
      "id": "http_client::github::AssetKind",
      "name": "AssetKind",
      "kind": "enum",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "github",
      "path": "http_client::github",
      "source": "crates/http_client/src/github.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, PartialEq, Eq, Clone, Copy)] pub enum AssetKind { TarGz, TarBz2, Gz, Zip, }",
      "cfg": []
    },
    {
      "id": "http_client::github::GitHubLspBinaryVersion",
      "name": "GitHubLspBinaryVersion",
      "kind": "struct",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "github",
      "path": "http_client::github",
      "source": "crates/http_client/src/github.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct GitHubLspBinaryVersion { pub name : String, pub url : String, pub digest : Option<String>, }",
      "cfg": []
    },
    {
      "id": "http_client::github::GithubRelease",
      "name": "GithubRelease",
      "kind": "struct",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "github",
      "path": "http_client::github",
      "source": "crates/http_client/src/github.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Deserialize, Debug)] pub struct GithubRelease { pub tag_name : String, # [serde (rename = \"prerelease\")] pub pre_release : bool, pub assets : Vec<GithubReleaseAsset>, pub tarball_url : String, pub zipball_url : String, }",
      "cfg": []
    },
    {
      "id": "http_client::github::GithubReleaseAsset",
      "name": "GithubReleaseAsset",
      "kind": "struct",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "github",
      "path": "http_client::github",
      "source": "crates/http_client/src/github.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Deserialize, Debug)] pub struct GithubReleaseAsset { pub name : String, pub browser_download_url : String, pub digest : Option<String>, }",
      "cfg": []
    },
    {
      "id": "http_client::github::build_asset_url",
      "name": "build_asset_url",
      "kind": "function",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "github",
      "path": "http_client::github",
      "source": "crates/http_client/src/github.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn build_asset_url (repo_name_with_owner : & str, tag : & str, kind : AssetKind) -> Result<String>",
      "cfg": []
    },
    {
      "id": "http_client::github::get_release_by_tag_name",
      "name": "get_release_by_tag_name",
      "kind": "function",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "github",
      "path": "http_client::github",
      "source": "crates/http_client/src/github.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub async fn get_release_by_tag_name (repo_name_with_owner : & str, tag : & str, http : Arc<dyn HttpClient>,) -> anyhow::Result<GithubRelease>",
      "cfg": []
    },
    {
      "id": "http_client::github::latest_github_release",
      "name": "latest_github_release",
      "kind": "function",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "github",
      "path": "http_client::github",
      "source": "crates/http_client/src/github.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub async fn latest_github_release (repo_name_with_owner : & str, require_assets : bool, pre_release : bool, http : Arc<dyn HttpClient>,) -> anyhow::Result<GithubRelease>",
      "cfg": []
    },
    {
      "id": "http_client::http_client::BlockedHttpClient",
      "name": "BlockedHttpClient",
      "kind": "struct",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct BlockedHttpClient;",
      "cfg": []
    },
    {
      "id": "http_client::http_client::BlockedHttpClient::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "BlockedHttpClient"
    },
    {
      "id": "http_client::http_client::CustomHeaders",
      "name": "CustomHeaders",
      "kind": "struct",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "A set of pre-validated user-supplied HTTP headers.",
      "documentation": "A set of pre-validated user-supplied HTTP headers.\n\nConstruction (and the per-name validation that goes with it) happens once\nat settings load time. Cloning is `Arc`-cheap, so providers can hand a copy\nto each outgoing request without re-parsing or re-allocating.",
      "signature": "# [doc = \" A set of pre-validated user-supplied HTTP headers.\"] # [doc = \"\"] # [doc = \" Construction (and the per-name validation that goes with it) happens once\"] # [doc = \" at settings load time. Cloning is `Arc`-cheap, so providers can hand a copy\"] # [doc = \" to each outgoing request without re-parsing or re-allocating.\"] # [derive (Default, Clone, Debug)] pub struct CustomHeaders (Arc<[(HeaderName, HeaderValue)]>);",
      "cfg": []
    },
    {
      "id": "http_client::http_client::CustomHeaders::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "CustomHeaders"
    },
    {
      "id": "http_client::http_client::CustomHeaders::iter",
      "name": "iter",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn iter (& self) -> impl ExactSizeIterator<Item = (& HeaderName, & HeaderValue)>",
      "cfg": [],
      "target": "CustomHeaders"
    },
    {
      "id": "http_client::http_client::CustomHeaders::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (headers : Vec<(HeaderName, HeaderValue)>) -> Self",
      "cfg": [],
      "target": "CustomHeaders"
    },
    {
      "id": "http_client::http_client::FakeHttpClient",
      "name": "FakeHttpClient",
      "kind": "struct",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [cfg (feature = \"test-support\")] pub struct FakeHttpClient { handler : Mutex<Option<FakeHttpHandler>>, user_agent : HeaderValue, }",
      "cfg": [
        "cfg (feature = \"test-support\")"
      ]
    },
    {
      "id": "http_client::http_client::FakeHttpClient::create",
      "name": "create",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn create<Fut, F> (handler : F) -> Arc<HttpClientWithUrl> where Fut : futures::Future<Output = anyhow::Result<Response<AsyncBody>>> + Send + 'static, F : Fn (Request<AsyncBody>) -> Fut + Send + Sync + 'static,",
      "cfg": [],
      "target": "FakeHttpClient"
    },
    {
      "id": "http_client::http_client::FakeHttpClient::replace_handler",
      "name": "replace_handler",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn replace_handler<Fut, F> (& self, new_handler : F) where Fut : futures::Future<Output = anyhow::Result<Response<AsyncBody>>> + Send + 'static, F : Fn (FakeHttpHandler, Request<AsyncBody>) -> Fut + Send + Sync + 'static,",
      "cfg": [],
      "target": "FakeHttpClient"
    },
    {
      "id": "http_client::http_client::FakeHttpClient::with_200_response",
      "name": "with_200_response",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_200_response () -> Arc<HttpClientWithUrl>",
      "cfg": [],
      "target": "FakeHttpClient"
    },
    {
      "id": "http_client::http_client::FakeHttpClient::with_404_response",
      "name": "with_404_response",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_404_response () -> Arc<HttpClientWithUrl>",
      "cfg": [],
      "target": "FakeHttpClient"
    },
    {
      "id": "http_client::http_client::FollowRedirects",
      "name": "FollowRedirects",
      "kind": "struct",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct FollowRedirects (pub bool);",
      "cfg": []
    },
    {
      "id": "http_client::http_client::HttpClient",
      "name": "HttpClient",
      "kind": "trait",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub trait HttpClient : 'static + Send + Sync { fn user_agent (& self) -> Option<& HeaderValue>; fn proxy (& self) -> Option<& Url>; fn send (& self, req : http::Request<AsyncBody>,) -> BoxFuture<'static, anyhow::Result<Response<AsyncBody>>>; fn get (& self, uri : & str, body : AsyncBody, follow_redirects : bool,) -> BoxFuture<'static, anyhow::Result<Response<AsyncBody>>> { let request = Builder::new () . uri (uri) . follow_redirects (if follow_redirects { RedirectPolicy::FollowAll } else { RedirectPolicy::NoFollow }) . body (body); match request { Ok (request) => self . send (request), Err (e) => Box::pin (async move { Err (e . into ()) }), } } fn post_json (& self, uri : & str, body : AsyncBody,) -> BoxFuture<'static, anyhow::Result<Response<AsyncBody>>> { let request = Builder::new () . uri (uri) . method (Method::POST) . header (\"Content-Type\", \"application/json\") . body (body); match request { Ok (request) => self . send (request), Err (e) => Box::pin (async move { Err (e . into ()) }), } } # [cfg (feature = \"test-support\")] fn as_fake (& self) -> & FakeHttpClient { panic ! (\"called as_fake on {}\", type_name ::< Self> ()) } }",
      "cfg": []
    },
    {
      "id": "http_client::http_client::HttpClientWithProxy",
      "name": "HttpClientWithProxy",
      "kind": "struct",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "An [`HttpClient`] that may have a proxy.",
      "documentation": "An [`HttpClient`] that may have a proxy.",
      "signature": "# [doc = \" An [`HttpClient`] that may have a proxy.\"] # [derive (Deref)] pub struct HttpClientWithProxy { # [deref] client : Arc<dyn HttpClient>, proxy : Option<Url>, }",
      "cfg": []
    },
    {
      "id": "http_client::http_client::HttpClientWithProxy::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "Returns a new [`HttpClientWithProxy`] with the given proxy URL.",
      "documentation": "Returns a new [`HttpClientWithProxy`] with the given proxy URL.",
      "signature": "pub fn new (client : Arc<dyn HttpClient>, proxy_url : Option<String>) -> Self",
      "cfg": [],
      "target": "HttpClientWithProxy"
    },
    {
      "id": "http_client::http_client::HttpClientWithProxy::new_url",
      "name": "new_url",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new_url (client : Arc<dyn HttpClient>, proxy_url : Option<Url>) -> Self",
      "cfg": [],
      "target": "HttpClientWithProxy"
    },
    {
      "id": "http_client::http_client::HttpClientWithUrl",
      "name": "HttpClientWithUrl",
      "kind": "struct",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "An [`HttpClient`] that has a base URL.",
      "documentation": "An [`HttpClient`] that has a base URL.",
      "signature": "# [doc = \" An [`HttpClient`] that has a base URL.\"] # [derive (Deref)] pub struct HttpClientWithUrl { base_url : Mutex<String>, # [deref] client : HttpClientWithProxy, }",
      "cfg": []
    },
    {
      "id": "http_client::http_client::HttpClientWithUrl::base_url",
      "name": "base_url",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "Returns the base URL.",
      "documentation": "Returns the base URL.",
      "signature": "pub fn base_url (& self) -> String",
      "cfg": [],
      "target": "HttpClientWithUrl"
    },
    {
      "id": "http_client::http_client::HttpClientWithUrl::build_url",
      "name": "build_url",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "Builds a URL using the given path.",
      "documentation": "Builds a URL using the given path.",
      "signature": "pub fn build_url (& self, path : & str) -> String",
      "cfg": [],
      "target": "HttpClientWithUrl"
    },
    {
      "id": "http_client::http_client::HttpClientWithUrl::build_zed_api_url",
      "name": "build_zed_api_url",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "Builds a Zed API URL using the given path.",
      "documentation": "Builds a Zed API URL using the given path.",
      "signature": "pub fn build_zed_api_url (& self, path : & str, query : & [(& str, & str)]) -> Result<Url>",
      "cfg": [],
      "target": "HttpClientWithUrl"
    },
    {
      "id": "http_client::http_client::HttpClientWithUrl::build_zed_cloud_url",
      "name": "build_zed_cloud_url",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "Builds a Zed Cloud URL using the given path.",
      "documentation": "Builds a Zed Cloud URL using the given path.",
      "signature": "pub fn build_zed_cloud_url (& self, path : & str) -> Result<Url>",
      "cfg": [],
      "target": "HttpClientWithUrl"
    },
    {
      "id": "http_client::http_client::HttpClientWithUrl::build_zed_cloud_url_with_query",
      "name": "build_zed_cloud_url_with_query",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "Builds a Zed Cloud URL using the given path and query params.",
      "documentation": "Builds a Zed Cloud URL using the given path and query params.",
      "signature": "pub fn build_zed_cloud_url_with_query (& self, path : & str, query : impl Serialize) -> Result<Url>",
      "cfg": [],
      "target": "HttpClientWithUrl"
    },
    {
      "id": "http_client::http_client::HttpClientWithUrl::build_zed_llm_url",
      "name": "build_zed_llm_url",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "Builds a Zed LLM URL using the given path.",
      "documentation": "Builds a Zed LLM URL using the given path.",
      "signature": "pub fn build_zed_llm_url (& self, path : & str, query : & [(& str, & str)]) -> Result<Url>",
      "cfg": [],
      "target": "HttpClientWithUrl"
    },
    {
      "id": "http_client::http_client::HttpClientWithUrl::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "Returns a new [`HttpClientWithUrl`] with the given base URL.",
      "documentation": "Returns a new [`HttpClientWithUrl`] with the given base URL.",
      "signature": "pub fn new (client : Arc<dyn HttpClient>, base_url : impl Into<String>, proxy_url : Option<String>,) -> Self",
      "cfg": [],
      "target": "HttpClientWithUrl"
    },
    {
      "id": "http_client::http_client::HttpClientWithUrl::new_url",
      "name": "new_url",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new_url (client : Arc<dyn HttpClient>, base_url : impl Into<String>, proxy_url : Option<Url>,) -> Self",
      "cfg": [],
      "target": "HttpClientWithUrl"
    },
    {
      "id": "http_client::http_client::HttpClientWithUrl::set_base_url",
      "name": "set_base_url",
      "kind": "method",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "Sets the base URL.",
      "documentation": "Sets the base URL.",
      "signature": "pub fn set_base_url (& self, base_url : impl Into<String>)",
      "cfg": [],
      "target": "HttpClientWithUrl"
    },
    {
      "id": "http_client::http_client::HttpRequestExt",
      "name": "HttpRequestExt",
      "kind": "trait",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub trait HttpRequestExt { # [doc = \" Conditionally modify self with the given closure.\"] fn when (self, condition : bool, then : impl FnOnce (Self) -> Self) -> Self where Self : Sized, { if condition { then (self) } else { self } } # [doc = \" Conditionally unwrap and modify self with the given closure, if the given option is Some.\"] fn when_some<T> (self, option : Option<T>, then : impl FnOnce (Self, T) -> Self) -> Self where Self : Sized, { match option { Some (value) => then (self, value), None => self, } } # [doc = \" Whether or not to follow redirects\"] fn follow_redirects (self, follow : RedirectPolicy) -> Self; }",
      "cfg": []
    },
    {
      "id": "http_client::http_client::RedirectPolicy",
      "name": "RedirectPolicy",
      "kind": "enum",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Default, Debug, Clone, PartialEq, Eq, Hash)] pub enum RedirectPolicy { # [default] NoFollow, FollowLimit (u32), FollowAll, }",
      "cfg": []
    },
    {
      "id": "http_client::http_client::RequestBuilderExt",
      "name": "RequestBuilderExt",
      "kind": "trait",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub trait RequestBuilderExt { # [doc = \" Append every header in `headers` to the request being built.\"] fn extra_headers (self, headers : & CustomHeaders) -> Self; }",
      "cfg": []
    },
    {
      "id": "http_client::http_client::read_no_proxy_from_env",
      "name": "read_no_proxy_from_env",
      "kind": "function",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn read_no_proxy_from_env () -> Option<String>",
      "cfg": []
    },
    {
      "id": "http_client::http_client::read_proxy_from_env",
      "name": "read_proxy_from_env",
      "kind": "function",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn read_proxy_from_env () -> Option<Url>",
      "cfg": []
    },
    {
      "id": "http_client::http_client::reexport-1",
      "name": "anyhow :: { Result , anyhow }",
      "kind": "reexport",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use anyhow::{ Result, anyhow };",
      "cfg": []
    },
    {
      "id": "http_client::http_client::reexport-2",
      "name": "async_body :: { AsyncBody , Inner , Json }",
      "kind": "reexport",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use async_body::{ AsyncBody, Inner, Json };",
      "cfg": []
    },
    {
      "id": "http_client::http_client::reexport-3",
      "name": "http :: { self , Method , Request , Response , StatusCode , Uri , request :: Builder }",
      "kind": "reexport",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use http::{ self, Method, Request, Response, StatusCode, Uri, request::Builder };",
      "cfg": []
    },
    {
      "id": "http_client::http_client::reexport-4",
      "name": "url :: { Host , Url }",
      "kind": "reexport",
      "package": "gpui-box-http-client",
      "crate": "http_client",
      "module": "http_client",
      "path": "http_client::http_client",
      "source": "crates/http_client/src/http_client.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use url::{ Host, Url };",
      "cfg": []
    },
    {
      "id": "media::media::reexport-1",
      "name": "player :: { MediaAvailability , MediaCapabilities , MediaCommand , MediaCommandOutcome , MediaError , MediaErrorKind , MediaEvent , MediaKind , MediaPlayer , MediaSnapshot , MediaSource , MediaSubscription , NativeVideoView , PlaybackState , TimeRange , }",
      "kind": "reexport",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "media",
      "path": "media::media",
      "source": "crates/media/src/media.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use player::{ MediaAvailability, MediaCapabilities, MediaCommand, MediaCommandOutcome, MediaError, MediaErrorKind, MediaEvent, MediaKind, MediaPlayer, MediaSnapshot, MediaSource, MediaSubscription, NativeVideoView, PlaybackState, TimeRange, };",
      "cfg": []
    },
    {
      "id": "media::player::MediaAvailability",
      "name": "MediaAvailability",
      "kind": "enum",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "Whether a source is present and usable.",
      "documentation": "Whether a source is present and usable.",
      "signature": "# [doc = \" Whether a source is present and usable.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum MediaAvailability { Idle, Loading, Ready, NoBackend (MediaError), Failed (MediaError), }",
      "cfg": []
    },
    {
      "id": "media::player::MediaAvailability::error",
      "name": "error",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn error (& self) -> Option<& MediaError>",
      "cfg": [],
      "target": "MediaAvailability"
    },
    {
      "id": "media::player::MediaAvailability::is_ready",
      "name": "is_ready",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_ready (& self) -> bool",
      "cfg": [],
      "target": "MediaAvailability"
    },
    {
      "id": "media::player::MediaCapabilities",
      "name": "MediaCapabilities",
      "kind": "struct",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "Playback features the selected native backend can actually honor.",
      "documentation": "Playback features the selected native backend can actually honor.\n\nThis is a snapshot rather than a target check. A build may include native\nplayback while the runtime service or codecs are unavailable, and callers\nmust not offer controls based on the operating-system name alone.",
      "signature": "# [doc = \" Playback features the selected native backend can actually honor.\"] # [doc = \"\"] # [doc = \" This is a snapshot rather than a target check. A build may include native\"] # [doc = \" playback while the runtime service or codecs are unavailable, and callers\"] # [doc = \" must not offer controls based on the operating-system name alone.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub struct MediaCapabilities { pub audio : bool, pub video : bool, pub seek : bool, pub volume : bool, pub rates : bool, pub native_tracks : bool, pub output_selection : bool, }",
      "cfg": []
    },
    {
      "id": "media::player::MediaCapabilities::none",
      "name": "none",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub const fn none () -> Self",
      "cfg": [],
      "target": "MediaCapabilities"
    },
    {
      "id": "media::player::MediaCommand",
      "name": "MediaCommand",
      "kind": "enum",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "A change requested of an already-created player.",
      "documentation": "A change requested of an already-created player.",
      "signature": "# [doc = \" A change requested of an already-created player.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub enum MediaCommand { Play, Pause, Seek (f64), SetVolume (f64), SetMuted (bool), SetRate (f64), }",
      "cfg": []
    },
    {
      "id": "media::player::MediaCommandOutcome",
      "name": "MediaCommandOutcome",
      "kind": "enum",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "The synchronous part of applying a command.",
      "documentation": "The synchronous part of applying a command.",
      "signature": "# [doc = \" The synchronous part of applying a command.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum MediaCommandOutcome { Applied, Refused (MediaError), Unsupported, }",
      "cfg": []
    },
    {
      "id": "media::player::MediaError",
      "name": "MediaError",
      "kind": "struct",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "A stable category and the native service's diagnostic sentence.",
      "documentation": "A stable category and the native service's diagnostic sentence.",
      "signature": "# [doc = \" A stable category and the native service's diagnostic sentence.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub struct MediaError { kind : MediaErrorKind, message : String, }",
      "cfg": []
    },
    {
      "id": "media::player::MediaError::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn kind (& self) -> MediaErrorKind",
      "cfg": [],
      "target": "MediaError"
    },
    {
      "id": "media::player::MediaError::message",
      "name": "message",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn message (& self) -> & str",
      "cfg": [],
      "target": "MediaError"
    },
    {
      "id": "media::player::MediaError::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (kind : MediaErrorKind, message : impl Into<String>) -> Self",
      "cfg": [],
      "target": "MediaError"
    },
    {
      "id": "media::player::MediaErrorKind",
      "name": "MediaErrorKind",
      "kind": "enum",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "The broad repair implied by a native media error.",
      "documentation": "The broad repair implied by a native media error.",
      "signature": "# [doc = \" The broad repair implied by a native media error.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum MediaErrorKind { # [doc = \" This target or its installed codecs cannot play the source.\"] NoBackend, # [doc = \" The source cannot be represented as a local file or media URL.\"] InvalidSource, # [doc = \" The native service could not open or initialize the source.\"] Open, # [doc = \" Playback was already initialized and an operation failed.\"] Playback, }",
      "cfg": []
    },
    {
      "id": "media::player::MediaEvent",
      "name": "MediaEvent",
      "kind": "enum",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "A signal that a host should read another snapshot.",
      "documentation": "A signal that a host should read another snapshot.",
      "signature": "# [doc = \" A signal that a host should read another snapshot.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum MediaEvent { Changed, Ended, }",
      "cfg": []
    },
    {
      "id": "media::player::MediaKind",
      "name": "MediaKind",
      "kind": "enum",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "Whether a player should open audio only or expose a native video view.",
      "documentation": "Whether a player should open audio only or expose a native video view.",
      "signature": "# [doc = \" Whether a player should open audio only or expose a native video view.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq)] pub enum MediaKind { Audio, Video, }",
      "cfg": []
    },
    {
      "id": "media::player::MediaPlayer",
      "name": "MediaPlayer",
      "kind": "struct",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "One native audio or video player.",
      "documentation": "One native audio or video player.\n\nThe service is intentionally `!Send`: the native view and the playback\ncontroller must remain on their creating UI thread. Its event callbacks are\nseparately thread-safe and may be delivered from native media threads.",
      "signature": "# [doc = \" One native audio or video player.\"] # [doc = \"\"] # [doc = \" The service is intentionally `!Send`: the native view and the playback\"] # [doc = \" controller must remain on their creating UI thread. Its event callbacks are\"] # [doc = \" separately thread-safe and may be delivered from native media threads.\"] pub struct MediaPlayer { kind : MediaKind, backend : Backend, events : Arc<EventHub>, _main_thread : PhantomData<Rc<()>>, }",
      "cfg": []
    },
    {
      "id": "media::player::MediaPlayer::capabilities",
      "name": "capabilities",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "Reports supported operations for this player and its selected backend.",
      "documentation": "Reports supported operations for this player and its selected backend.\n\nAn unavailable backend reports no capabilities even if this target\nnormally ships one. Runtime availability, not a compile-time target\ncheck, is the authority.",
      "signature": "pub fn capabilities (& self) -> MediaCapabilities",
      "cfg": [],
      "target": "MediaPlayer"
    },
    {
      "id": "media::player::MediaPlayer::command",
      "name": "command",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "Applies a playback command without waiting for decoding or rendering.",
      "documentation": "Applies a playback command without waiting for decoding or rendering.",
      "signature": "pub fn command (& self, command : MediaCommand) -> MediaCommandOutcome",
      "cfg": [],
      "target": "MediaPlayer"
    },
    {
      "id": "media::player::MediaPlayer::kind",
      "name": "kind",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn kind (& self) -> MediaKind",
      "cfg": [],
      "target": "MediaPlayer"
    },
    {
      "id": "media::player::MediaPlayer::load",
      "name": "load",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "Replaces the current source and begins opening it asynchronously.",
      "documentation": "Replaces the current source and begins opening it asynchronously.",
      "signature": "pub fn load (& self, source : MediaSource) -> Result<(), MediaError>",
      "cfg": [],
      "target": "MediaPlayer"
    },
    {
      "id": "media::player::MediaPlayer::native_video_view",
      "name": "native_video_view",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "Returns the view used by a video player. Audio and unsupported players return `None`.",
      "documentation": "Returns the view used by a video player. Audio and unsupported players\nreturn `None`.",
      "signature": "pub fn native_video_view (& self) -> Option<NativeVideoView>",
      "cfg": [],
      "target": "MediaPlayer"
    },
    {
      "id": "media::player::MediaPlayer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "Creates the platform player. Initialization failures remain observable through [`snapshot`](Self::snapshot), just like asynchronous open failures, so a UI always has a truthful state to render.",
      "documentation": "Creates the platform player. Initialization failures remain observable\nthrough [`snapshot`](Self::snapshot), just like asynchronous open\nfailures, so a UI always has a truthful state to render.",
      "signature": "pub fn new (kind : MediaKind) -> Self",
      "cfg": [],
      "target": "MediaPlayer"
    },
    {
      "id": "media::player::MediaPlayer::snapshot",
      "name": "snapshot",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "Reads native state without opening, decoding, or blocking for media.",
      "documentation": "Reads native state without opening, decoding, or blocking for media.",
      "signature": "pub fn snapshot (& self) -> MediaSnapshot",
      "cfg": [],
      "target": "MediaPlayer"
    },
    {
      "id": "media::player::MediaPlayer::subscribe",
      "name": "subscribe",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "Registers a non-blocking signal handler. Read [`snapshot`](Self::snapshot) after receiving a signal; events intentionally do not duplicate state.",
      "documentation": "Registers a non-blocking signal handler. Read [`snapshot`](Self::snapshot)\nafter receiving a signal; events intentionally do not duplicate state.",
      "signature": "pub fn subscribe (& self, handler : impl Fn (MediaEvent) + Send + Sync + 'static,) -> MediaSubscription",
      "cfg": [],
      "target": "MediaPlayer"
    },
    {
      "id": "media::player::MediaSnapshot",
      "name": "MediaSnapshot",
      "kind": "struct",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "A cheap, current view of native playback state.",
      "documentation": "A cheap, current view of native playback state.",
      "signature": "# [doc = \" A cheap, current view of native playback state.\"] # [derive (Debug, Clone, PartialEq)] pub struct MediaSnapshot { pub availability : MediaAvailability, pub state : PlaybackState, pub position : f64, # [doc = \" `None` is a live stream or media whose duration is not known yet.\"] pub duration : Option<f64>, pub volume : f64, pub muted : bool, pub rate : f64, pub buffered : Vec<TimeRange>, }",
      "cfg": []
    },
    {
      "id": "media::player::MediaSource",
      "name": "MediaSource",
      "kind": "enum",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "A local file or an operating-system-supported media URL.",
      "documentation": "A local file or an operating-system-supported media URL.",
      "signature": "# [doc = \" A local file or an operating-system-supported media URL.\"] # [derive (Debug, Clone, PartialEq, Eq)] pub enum MediaSource { File (PathBuf), Url (String), }",
      "cfg": []
    },
    {
      "id": "media::player::MediaSource::file",
      "name": "file",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn file (path : impl Into<PathBuf>) -> Self",
      "cfg": [],
      "target": "MediaSource"
    },
    {
      "id": "media::player::MediaSource::url",
      "name": "url",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn url (url : impl Into<String>) -> Self",
      "cfg": [],
      "target": "MediaSource"
    },
    {
      "id": "media::player::MediaSubscription",
      "name": "MediaSubscription",
      "kind": "struct",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "Removes one media event handler when dropped.",
      "documentation": "Removes one media event handler when dropped.",
      "signature": "# [doc = \" Removes one media event handler when dropped.\"] pub struct MediaSubscription { hub : Weak<EventHub>, id : u64, }",
      "cfg": []
    },
    {
      "id": "media::player::NativeVideoView",
      "name": "NativeVideoView",
      "kind": "struct",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "An opaque native video view borrowed from a [`MediaPlayer`].",
      "documentation": "An opaque native video view borrowed from a [`MediaPlayer`].\n\nOn macOS this is an `NSView`; on Windows it is a child `HWND`. The player\nremains its owner. A UI integration must retain the player until its host\nhas detached the view.",
      "signature": "# [doc = \" An opaque native video view borrowed from a [`MediaPlayer`].\"] # [doc = \"\"] # [doc = \" On macOS this is an `NSView`; on Windows it is a child `HWND`. The player\"] # [doc = \" remains its owner. A UI integration must retain the player until its host\"] # [doc = \" has detached the view.\"] # [derive (Clone, Copy, PartialEq, Eq)] pub struct NativeVideoView { raw : NonNull<c_void>, _main_thread : PhantomData<Rc<()>>, }",
      "cfg": []
    },
    {
      "id": "media::player::NativeVideoView::as_ptr",
      "name": "as_ptr",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn as_ptr (self) -> * mut c_void",
      "cfg": [],
      "target": "NativeVideoView"
    },
    {
      "id": "media::player::PlaybackState",
      "name": "PlaybackState",
      "kind": "enum",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "What the native clock is doing.",
      "documentation": "What the native clock is doing.",
      "signature": "# [doc = \" What the native clock is doing.\"] # [derive (Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum PlaybackState { Playing, Buffering, Ended, # [default] Paused, }",
      "cfg": []
    },
    {
      "id": "media::player::TimeRange",
      "name": "TimeRange",
      "kind": "struct",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "One buffered interval in seconds.",
      "documentation": "One buffered interval in seconds.",
      "signature": "# [doc = \" One buffered interval in seconds.\"] # [derive (Debug, Clone, Copy, PartialEq)] pub struct TimeRange { pub start : f64, pub end : f64, }",
      "cfg": []
    },
    {
      "id": "media::player::TimeRange::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-media",
      "crate": "media",
      "module": "player",
      "path": "media::player",
      "source": "crates/media/src/player.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (start : f64, end : f64) -> Self",
      "cfg": [],
      "target": "TimeRange"
    },
    {
      "id": "perf::implementation::FailKind",
      "name": "FailKind",
      "kind": "enum",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "Why or when did this test fail?",
      "documentation": "Why or when did this test fail?",
      "signature": "# [doc = \" Why or when did this test fail?\"] # [derive (Clone, Debug, Serialize, Deserialize)] pub enum FailKind { # [doc = \" Failed while triaging it to determine the iteration count.\"] Triage, # [doc = \" Failed while profiling it.\"] Profile, # [doc = \" Failed due to an incompatible version for the test.\"] VersionMismatch, # [doc = \" Could not parse metadata for a test.\"] BadMetadata, # [doc = \" Skipped due to filters applied on the perf run.\"] Skipped, }",
      "cfg": []
    },
    {
      "id": "perf::implementation::Importance",
      "name": "Importance",
      "kind": "enum",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "How relevant a benchmark is.",
      "documentation": "How relevant a benchmark is.",
      "signature": "# [doc = \" How relevant a benchmark is.\"] # [derive (Clone, Debug, Default, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)] pub enum Importance { # [doc = \" Regressions shouldn't be accepted without good reason.\"] Critical = 4, # [doc = \" Regressions should be paid extra attention.\"] Important = 3, # [doc = \" No extra attention should be paid to regressions, but they might still\"] # [doc = \" be indicative of something happening.\"] # [default] Average = 2, # [doc = \" Unclear if regressions are likely to be meaningful, but still worth keeping\"] # [doc = \" an eye on. Lowest level that's checked by default by the profiler.\"] Iffy = 1, # [doc = \" Regressions are likely to be spurious or don't affect core functionality.\"] # [doc = \" Only relevant if a lot of them happen, or as supplemental evidence for a\"] # [doc = \" higher-importance benchmark regressing. Not checked by default.\"] Fluff = 0, }",
      "cfg": []
    },
    {
      "id": "perf::implementation::Output",
      "name": "Output",
      "kind": "struct",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "Aggregate output of all tests run by this handler.",
      "documentation": "Aggregate output of all tests run by this handler.",
      "signature": "# [doc = \" Aggregate output of all tests run by this handler.\"] # [derive (Clone, Debug, Default, Serialize, Deserialize)] pub struct Output { # [doc = \" A list of test outputs. Format is `(test_name, mdata, timings)`.\"] # [doc = \" The latter being `Ok(_)` indicates the test succeeded.\"] # [doc = \"\"] # [doc = \" INVARIANT: If the test succeeded, the second field is `Some(mdata)` and\"] # [doc = \" `mdata.iterations` is `Some(_)`.\"] tests : Vec<(String, Option<TestMdata>, Result<Timings, FailKind>)>, }",
      "cfg": []
    },
    {
      "id": "perf::implementation::Output::blank",
      "name": "blank",
      "kind": "method",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "Instantiates an empty \"output\". Useful for merging.",
      "documentation": "Instantiates an empty \"output\". Useful for merging.",
      "signature": "pub fn blank () -> Self",
      "cfg": [],
      "target": "Output"
    },
    {
      "id": "perf::implementation::Output::compare_perf",
      "name": "compare_perf",
      "kind": "method",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "Evaluates the performance of `self` against `baseline`. The latter is taken as the comparison point, i.e. a positive resulting `PerfReport` means that `self` performed better.",
      "documentation": "Evaluates the performance of `self` against `baseline`. The latter is taken\nas the comparison point, i.e. a positive resulting `PerfReport` means that\n`self` performed better.\n\n# Panics\n`self` and `baseline` are assumed to have the iterations field on all\n`TestMdata`s set to `Some(_)` if the `TestMdata` is present itself.",
      "signature": "pub fn compare_perf (self, baseline : Self) -> PerfReport",
      "cfg": [],
      "target": "Output"
    },
    {
      "id": "perf::implementation::Output::failure",
      "name": "failure",
      "kind": "method",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "Reports a failure and adds it to this run's `Output`. If this test was tried with some number of iterations (i.e. this was not a version mismatch or skipped test), it should be reported also.",
      "documentation": "Reports a failure and adds it to this run's `Output`. If this test was tried\nwith some number of iterations (i.e. this was not a version mismatch or skipped\ntest), it should be reported also.\n\nUsing the `fail!()` macro is usually more convenient.",
      "signature": "pub fn failure (& mut self, name : impl AsRef<str>, mut mdata : Option<TestMdata>, attempted_iters : Option<NonZero<usize>>, kind : FailKind,)",
      "cfg": [],
      "target": "Output"
    },
    {
      "id": "perf::implementation::Output::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "True if no tests executed this run.",
      "documentation": "True if no tests executed this run.",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "Output"
    },
    {
      "id": "perf::implementation::Output::merge",
      "name": "merge",
      "kind": "method",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "Merges the output of two runs, appending a prefix to the results of the new run. To be used in conjunction with `Output::blank()`, or else only some tests will have a prefix set.",
      "documentation": "Merges the output of two runs, appending a prefix to the results of the new run.\nTo be used in conjunction with `Output::blank()`, or else only some tests will have\na prefix set.",
      "signature": "pub fn merge<'a> (& mut self, other : Self, pref_other : impl Into<Option<& 'a str>>)",
      "cfg": [],
      "target": "Output"
    },
    {
      "id": "perf::implementation::Output::sort",
      "name": "sort",
      "kind": "method",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "Sorts the runs in the output in the order that we want them printed.",
      "documentation": "Sorts the runs in the output in the order that we want them printed.",
      "signature": "pub fn sort (& mut self)",
      "cfg": [],
      "target": "Output"
    },
    {
      "id": "perf::implementation::Output::success",
      "name": "success",
      "kind": "method",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "Reports a success and adds it to this run's `Output`.",
      "documentation": "Reports a success and adds it to this run's `Output`.",
      "signature": "pub fn success (& mut self, name : impl AsRef<str>, mut mdata : TestMdata, iters : NonZero<usize>, timings : Timings,)",
      "cfg": [],
      "target": "Output"
    },
    {
      "id": "perf::implementation::PerfReport",
      "name": "PerfReport",
      "kind": "struct",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "Shim type for reporting all performance deltas across importance categories.",
      "documentation": "Shim type for reporting all performance deltas across importance categories.",
      "signature": "# [doc = \" Shim type for reporting all performance deltas across importance categories.\"] pub struct PerfReport { # [doc = \" Inner (group, diff) pairing.\"] deltas : HashMap<Importance, PerfDelta>, }",
      "cfg": []
    },
    {
      "id": "perf::implementation::TestMdata",
      "name": "TestMdata",
      "kind": "struct",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "Information about a given perf test.",
      "documentation": "Information about a given perf test.",
      "signature": "# [doc = \" Information about a given perf test.\"] # [derive (Clone, Debug, Serialize, Deserialize)] pub struct TestMdata { # [doc = \" A version number for when the test was generated. If this is greater\"] # [doc = \" than the version this test handler expects, one of the following will\"] # [doc = \" happen in an unspecified manner:\"] # [doc = \" - The test is skipped silently.\"] # [doc = \" - The handler exits with an error message indicating the version mismatch\"] # [doc = \" or inability to parse the metadata.\"] # [doc = \"\"] # [doc = \" INVARIANT: If `version` <= `MDATA_VER`, this tool *must* be able to\"] # [doc = \" correctly parse the output of this test.\"] pub version : u32, # [doc = \" How many iterations to pass this test if this is preset, or how many\"] # [doc = \" iterations a test ended up running afterwards if determined at runtime.\"] pub iterations : Option<NonZero<usize>>, # [doc = \" The importance of this particular test. See the docs on `Importance` for\"] # [doc = \" details.\"] pub importance : Importance, # [doc = \" The weight of this particular test within its importance category. Used\"] # [doc = \" when comparing across runs.\"] pub weight : u8, }",
      "cfg": []
    },
    {
      "id": "perf::implementation::Timings",
      "name": "Timings",
      "kind": "struct",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "The actual timings of a test, as measured by Hyperfine.",
      "documentation": "The actual timings of a test, as measured by Hyperfine.",
      "signature": "# [doc = \" The actual timings of a test, as measured by Hyperfine.\"] # [derive (Clone, Debug, Serialize, Deserialize)] pub struct Timings { # [doc = \" Mean runtime for `self.iter_total` runs of this test.\"] pub mean : Duration, # [doc = \" Standard deviation for the above.\"] pub stddev : Duration, }",
      "cfg": []
    },
    {
      "id": "perf::implementation::Timings::iters_per_sec",
      "name": "iters_per_sec",
      "kind": "method",
      "package": "perf",
      "crate": "perf",
      "module": "implementation",
      "path": "perf::implementation",
      "source": "tooling/perf/src/implementation.rs",
      "summary": "How many iterations does this test seem to do per second?",
      "documentation": "How many iterations does this test seem to do per second?",
      "signature": "pub fn iters_per_sec (& self, total_iters : NonZero<usize>) -> f64",
      "cfg": [],
      "target": "Timings"
    },
    {
      "id": "perf::reexport-1",
      "name": "implementation :: *",
      "kind": "reexport",
      "package": "perf",
      "crate": "perf",
      "module": "",
      "path": "perf",
      "source": "tooling/perf/src/lib.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use implementation::*;",
      "cfg": []
    },
    {
      "id": "refineable::refineable::Cascade",
      "name": "Cascade",
      "kind": "struct",
      "package": "gpui-box-refineable",
      "crate": "refineable",
      "module": "refineable",
      "path": "refineable::refineable",
      "source": "crates/refineable/src/refineable.rs",
      "summary": "A cascade of refinements that can be merged in priority order.",
      "documentation": "A cascade of refinements that can be merged in priority order.\n\nA cascade maintains a sequence of optional refinements where later entries\ntake precedence over earlier ones. The first slot (index 0) is always the\nbase refinement and is guaranteed to be present.\n\nThis is useful for implementing configuration hierarchies like CSS cascading,\nwhere styles from different sources (user agent, user, author) are combined\nwith specific precedence rules.",
      "signature": "# [doc = \" A cascade of refinements that can be merged in priority order.\"] # [doc = \"\"] # [doc = \" A cascade maintains a sequence of optional refinements where later entries\"] # [doc = \" take precedence over earlier ones. The first slot (index 0) is always the\"] # [doc = \" base refinement and is guaranteed to be present.\"] # [doc = \"\"] # [doc = \" This is useful for implementing configuration hierarchies like CSS cascading,\"] # [doc = \" where styles from different sources (user agent, user, author) are combined\"] # [doc = \" with specific precedence rules.\"] pub struct Cascade<S : Refineable> (Vec<Option<S::Refinement>>);",
      "cfg": []
    },
    {
      "id": "refineable::refineable::Cascade::base",
      "name": "base",
      "kind": "method",
      "package": "gpui-box-refineable",
      "crate": "refineable",
      "module": "refineable",
      "path": "refineable::refineable",
      "source": "crates/refineable/src/refineable.rs",
      "summary": "Returns a mutable reference to the base refinement (slot 0).",
      "documentation": "Returns a mutable reference to the base refinement (slot 0).\n\nThe base refinement is always present and serves as the foundation\nfor the cascade.",
      "signature": "pub fn base (& mut self) -> & mut S::Refinement",
      "cfg": [],
      "target": "Cascade<S>"
    },
    {
      "id": "refineable::refineable::Cascade::merged",
      "name": "merged",
      "kind": "method",
      "package": "gpui-box-refineable",
      "crate": "refineable",
      "module": "refineable",
      "path": "refineable::refineable",
      "source": "crates/refineable/src/refineable.rs",
      "summary": "Merges all refinements in the cascade into a single refinement.",
      "documentation": "Merges all refinements in the cascade into a single refinement.\n\nRefinements are applied in order, with later slots taking precedence.\nEmpty slots (`None`) are skipped during merging.",
      "signature": "pub fn merged (& self) -> S::Refinement",
      "cfg": [],
      "target": "Cascade<S>"
    },
    {
      "id": "refineable::refineable::Cascade::reserve",
      "name": "reserve",
      "kind": "method",
      "package": "gpui-box-refineable",
      "crate": "refineable",
      "module": "refineable",
      "path": "refineable::refineable",
      "source": "crates/refineable/src/refineable.rs",
      "summary": "Reserves a new slot in the cascade and returns a handle to it.",
      "documentation": "Reserves a new slot in the cascade and returns a handle to it.\n\nThe new slot is initially empty (`None`) and can be populated later\nusing `set()`.",
      "signature": "pub fn reserve (& mut self) -> CascadeSlot",
      "cfg": [],
      "target": "Cascade<S>"
    },
    {
      "id": "refineable::refineable::Cascade::set",
      "name": "set",
      "kind": "method",
      "package": "gpui-box-refineable",
      "crate": "refineable",
      "module": "refineable",
      "path": "refineable::refineable",
      "source": "crates/refineable/src/refineable.rs",
      "summary": "Sets the refinement for a specific slot in the cascade.",
      "documentation": "Sets the refinement for a specific slot in the cascade.\n\nSetting a slot to `None` effectively removes it from consideration\nduring merging.",
      "signature": "pub fn set (& mut self, slot : CascadeSlot, refinement : Option<S::Refinement>)",
      "cfg": [],
      "target": "Cascade<S>"
    },
    {
      "id": "refineable::refineable::CascadeSlot",
      "name": "CascadeSlot",
      "kind": "struct",
      "package": "gpui-box-refineable",
      "crate": "refineable",
      "module": "refineable",
      "path": "refineable::refineable",
      "source": "crates/refineable/src/refineable.rs",
      "summary": "A handle to a specific slot in a cascade.",
      "documentation": "A handle to a specific slot in a cascade.\n\nSlots are used to identify specific positions in the cascade where\nrefinements can be set or updated.",
      "signature": "# [doc = \" A handle to a specific slot in a cascade.\"] # [doc = \"\"] # [doc = \" Slots are used to identify specific positions in the cascade where\"] # [doc = \" refinements can be set or updated.\"] # [derive (Copy, Clone)] pub struct CascadeSlot (usize);",
      "cfg": []
    },
    {
      "id": "refineable::refineable::IsEmpty",
      "name": "IsEmpty",
      "kind": "trait",
      "package": "gpui-box-refineable",
      "crate": "refineable",
      "module": "refineable",
      "path": "refineable::refineable",
      "source": "crates/refineable/src/refineable.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub trait IsEmpty { # [doc = \" Returns `true` if applying this refinement would have no effect.\"] fn is_empty (& self) -> bool; }",
      "cfg": []
    },
    {
      "id": "refineable::refineable::Refineable",
      "name": "Refineable",
      "kind": "trait",
      "package": "gpui-box-refineable",
      "crate": "refineable",
      "module": "refineable",
      "path": "refineable::refineable",
      "source": "crates/refineable/src/refineable.rs",
      "summary": "A trait for types that can be refined with partial updates.",
      "documentation": "A trait for types that can be refined with partial updates.\n\nThe `Refineable` trait enables hierarchical configuration patterns where a base configuration\ncan be selectively overridden by refinements. This is particularly useful for styling and\nsettings, and theme hierarchies.\n\n# Derive Macro\n\nThe `#[derive(Refineable)]` macro automatically generates a companion refinement type and\nimplements this trait. For a struct `Style`, it creates `StyleRefinement` where each field is\nwrapped appropriately:\n\n- **Refineable fields** (marked with `#[refineable]`): Become the corresponding refinement type\n(e.g., `Bar` becomes `BarRefinement`, or `BarRefinement` remains `BarRefinement`)\n- **Optional fields** (`Option<T>`): Remain as `Option<T>`\n- **Regular fields**: Become `Option<T>`\n\n## Attributes\n\nThe derive macro supports these attributes on the struct:\n- `#[refineable(Debug)]`: Implements `Debug` for the refinement type\n- `#[refineable(Serialize)]`: Derives `Serialize` which skips serializing `None`\n- `#[refineable(OtherTrait)]`: Derives additional traits on the refinement type\n\nFields can be marked with:\n- `#[refineable]`: Field is itself refineable (uses nested refinement type)",
      "signature": "# [doc = \" A trait for types that can be refined with partial updates.\"] # [doc = \"\"] # [doc = \" The `Refineable` trait enables hierarchical configuration patterns where a base configuration\"] # [doc = \" can be selectively overridden by refinements. This is particularly useful for styling and\"] # [doc = \" settings, and theme hierarchies.\"] # [doc = \"\"] # [doc = \" # Derive Macro\"] # [doc = \"\"] # [doc = \" The `#[derive(Refineable)]` macro automatically generates a companion refinement type and\"] # [doc = \" implements this trait. For a struct `Style`, it creates `StyleRefinement` where each field is\"] # [doc = \" wrapped appropriately:\"] # [doc = \"\"] # [doc = \" - **Refineable fields** (marked with `#[refineable]`): Become the corresponding refinement type\"] # [doc = \" (e.g., `Bar` becomes `BarRefinement`, or `BarRefinement` remains `BarRefinement`)\"] # [doc = \" - **Optional fields** (`Option<T>`): Remain as `Option<T>`\"] # [doc = \" - **Regular fields**: Become `Option<T>`\"] # [doc = \"\"] # [doc = \" ## Attributes\"] # [doc = \"\"] # [doc = \" The derive macro supports these attributes on the struct:\"] # [doc = \" - `#[refineable(Debug)]`: Implements `Debug` for the refinement type\"] # [doc = \" - `#[refineable(Serialize)]`: Derives `Serialize` which skips serializing `None`\"] # [doc = \" - `#[refineable(OtherTrait)]`: Derives additional traits on the refinement type\"] # [doc = \"\"] # [doc = \" Fields can be marked with:\"] # [doc = \" - `#[refineable]`: Field is itself refineable (uses nested refinement type)\"] pub trait Refineable : Clone { type Refinement : Refineable<Refinement = Self::Refinement> + IsEmpty + Default; # [doc = \" Applies the given refinement to this instance, modifying it in place.\"] # [doc = \"\"] # [doc = \" Only non-empty values in the refinement are applied.\"] # [doc = \"\"] # [doc = \" * For refineable fields, this recursively calls `refine`.\"] # [doc = \" * For other fields, the value is replaced if present in the refinement.\"] fn refine (& mut self, refinement : & Self::Refinement); # [doc = \" Returns a new instance with the refinement applied, equivalent to cloning `self` and calling\"] # [doc = \" `refine` on it.\"] fn refined (self, refinement : Self::Refinement) -> Self; # [doc = \" Creates an instance from a cascade by merging all refinements atop the default value.\"] fn from_cascade (cascade : & Cascade<Self>) -> Self where Self : Default + Sized, { Self::default () . refined (cascade . merged ()) } # [doc = \" Returns `true` if this instance would contain all values from the refinement.\"] # [doc = \"\"] # [doc = \" For refineable fields, this recursively checks `is_superset_of`. For other fields, this\"] # [doc = \" checks if the refinement's `Some` values match this instance's values.\"] fn is_superset_of (& self, refinement : & Self::Refinement) -> bool; # [doc = \" Returns a refinement that represents the difference between this instance and the given\"] # [doc = \" refinement.\"] # [doc = \"\"] # [doc = \" For refineable fields, this recursively calls `subtract`. For other fields, the field is\"] # [doc = \" `None` if the field's value is equal to the refinement.\"] fn subtract (& self, refinement : & Self::Refinement) -> Self::Refinement; }",
      "cfg": []
    },
    {
      "id": "refineable::refineable::reexport-1",
      "name": "derive_refineable :: Refineable",
      "kind": "reexport",
      "package": "gpui-box-refineable",
      "crate": "refineable",
      "module": "refineable",
      "path": "refineable::refineable",
      "source": "crates/refineable/src/refineable.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use derive_refineable::Refineable;",
      "cfg": []
    },
    {
      "id": "scheduler::clock::Clock",
      "name": "Clock",
      "kind": "trait",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "clock",
      "path": "scheduler::clock",
      "source": "crates/scheduler/src/clock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub trait Clock { fn utc_now (& self) -> DateTime<Utc>; fn now (& self) -> Instant; }",
      "cfg": []
    },
    {
      "id": "scheduler::clock::TestClock",
      "name": "TestClock",
      "kind": "struct",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "clock",
      "path": "scheduler::clock",
      "source": "crates/scheduler/src/clock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct TestClock (Mutex<TestClockState>);",
      "cfg": []
    },
    {
      "id": "scheduler::clock::TestClock::advance",
      "name": "advance",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "clock",
      "path": "scheduler::clock",
      "source": "crates/scheduler/src/clock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn advance (& self, duration : Duration)",
      "cfg": [],
      "target": "TestClock"
    },
    {
      "id": "scheduler::clock::TestClock::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "clock",
      "path": "scheduler::clock",
      "source": "crates/scheduler/src/clock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new () -> Self",
      "cfg": [],
      "target": "TestClock"
    },
    {
      "id": "scheduler::clock::TestClock::set_utc_now",
      "name": "set_utc_now",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "clock",
      "path": "scheduler::clock",
      "source": "crates/scheduler/src/clock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_utc_now (& self, now : DateTime<Utc>)",
      "cfg": [],
      "target": "TestClock"
    },
    {
      "id": "scheduler::clock::reexport-1",
      "name": "web_time :: Instant",
      "kind": "reexport",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "clock",
      "path": "scheduler::clock",
      "source": "crates/scheduler/src/clock.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use web_time::Instant;",
      "cfg": []
    },
    {
      "id": "scheduler::executor::BackgroundExecutor",
      "name": "BackgroundExecutor",
      "kind": "struct",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone)] pub struct BackgroundExecutor { scheduler : Arc<dyn Scheduler>, }",
      "cfg": []
    },
    {
      "id": "scheduler::executor::BackgroundExecutor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (scheduler : Arc<dyn Scheduler>) -> Self",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "scheduler::executor::BackgroundExecutor::now",
      "name": "now",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn now (& self) -> Instant",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "scheduler::executor::BackgroundExecutor::scheduler",
      "name": "scheduler",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn scheduler (& self) -> & Arc<dyn Scheduler>",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "scheduler::executor::BackgroundExecutor::spawn",
      "name": "spawn",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn spawn<F> (& self, future : F) -> Task<F::Output> where F : Future + Send + 'static, F::Output : Send + 'static,",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "scheduler::executor::BackgroundExecutor::spawn_dedicated",
      "name": "spawn_dedicated",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Spawn a closure on a fresh session pinned to its own [`LocalExecutor`]. The closure runs on a new OS thread under `PlatformScheduler`, or on the test scheduler's loop under `TestScheduler`.",
      "documentation": "Spawn a closure on a fresh session pinned to its own [`LocalExecutor`].\nThe closure runs on a new OS thread under `PlatformScheduler`, or on\nthe test scheduler's loop under `TestScheduler`.\n\nThe returned `Task` represents the dedicated work: dropping it cancels\nthe dedicated closure, `.await`ing it yields the closure's return\nvalue, `.detach()`ing it lets the dedicated work run independently of\nthe caller.",
      "signature": "pub fn spawn_dedicated<F, Fut> (& self, f : F) -> Task<Fut::Output> where F : FnOnce (LocalExecutor) -> Fut + Send + 'static, Fut : Future + 'static, Fut::Output : Send + Sync + 'static,",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "scheduler::executor::BackgroundExecutor::spawn_realtime",
      "name": "spawn_realtime",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Spawns a future on a dedicated realtime thread for audio processing.",
      "documentation": "Spawns a future on a dedicated realtime thread for audio processing.",
      "signature": "pub fn spawn_realtime<F> (& self, future : F) -> Task<F::Output> where F : Future + Send + 'static, F::Output : Send + 'static,",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "scheduler::executor::BackgroundExecutor::spawn_with_priority",
      "name": "spawn_with_priority",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn spawn_with_priority<F> (& self, priority : Priority, future : F) -> Task<F::Output> where F : Future + Send + 'static, F::Output : Send + 'static,",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "scheduler::executor::BackgroundExecutor::timer",
      "name": "timer",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn timer (& self, duration : Duration) -> Timer",
      "cfg": [],
      "target": "BackgroundExecutor"
    },
    {
      "id": "scheduler::executor::FallibleTask",
      "name": "FallibleTask",
      "kind": "struct",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "A task that returns `Option<T>` instead of panicking when cancelled.",
      "documentation": "A task that returns `Option<T>` instead of panicking when cancelled.",
      "signature": "# [doc = \" A task that returns `Option<T>` instead of panicking when cancelled.\"] # [must_use] pub struct FallibleTask<T> (FallibleTaskState<T>);",
      "cfg": []
    },
    {
      "id": "scheduler::executor::FallibleTask::detach",
      "name": "detach",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Detaching a task runs it to completion in the background.",
      "documentation": "Detaching a task runs it to completion in the background.",
      "signature": "pub fn detach (self)",
      "cfg": [],
      "target": "FallibleTask<T>"
    },
    {
      "id": "scheduler::executor::FallibleTask::ready",
      "name": "ready",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Creates a new fallible task that will resolve with the value.",
      "documentation": "Creates a new fallible task that will resolve with the value.",
      "signature": "pub fn ready (val : T) -> Self",
      "cfg": [],
      "target": "FallibleTask<T>"
    },
    {
      "id": "scheduler::executor::LocalExecutor",
      "name": "LocalExecutor",
      "kind": "struct",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "A `!Send` executor pinned to a single session. Tasks spawned on it run in order on whichever thread drains the dispatch destination supplied at construction time — typically the main thread for the default session, or a dedicated OS thread for sessions created by `spawn_dedicated_thread`.",
      "documentation": "A `!Send` executor pinned to a single session. Tasks spawned on it run in\norder on whichever thread drains the dispatch destination supplied at\nconstruction time — typically the main thread for the default session, or\na dedicated OS thread for sessions created by `spawn_dedicated_thread`.",
      "signature": "# [doc = \" A `!Send` executor pinned to a single session. Tasks spawned on it run in\"] # [doc = \" order on whichever thread drains the dispatch destination supplied at\"] # [doc = \" construction time — typically the main thread for the default session, or\"] # [doc = \" a dedicated OS thread for sessions created by `spawn_dedicated_thread`.\"] # [derive (Clone)] pub struct LocalExecutor { session_id : SessionId, scheduler : Arc<dyn Scheduler>, dispatch : Arc<dyn Fn (Runnable<RunnableMeta>) + Send + Sync>, not_send : PhantomData<Rc<()>>, }",
      "cfg": []
    },
    {
      "id": "scheduler::executor::LocalExecutor::block_on",
      "name": "block_on",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn block_on<Fut : Future> (& self, future : Fut) -> Fut::Output",
      "cfg": [],
      "target": "LocalExecutor"
    },
    {
      "id": "scheduler::executor::LocalExecutor::block_with_timeout",
      "name": "block_with_timeout",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Block until the future completes or timeout occurs. Returns Ok(output) if completed, Err(future) if timed out.",
      "documentation": "Block until the future completes or timeout occurs.\nReturns Ok(output) if completed, Err(future) if timed out.",
      "signature": "pub fn block_with_timeout<Fut : Future> (& self, timeout : Duration, future : Fut,) -> Result<Fut::Output, impl Future<Output = Fut::Output> + use<Fut>>",
      "cfg": [],
      "target": "LocalExecutor"
    },
    {
      "id": "scheduler::executor::LocalExecutor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Constructs a local executor that runs spawned tasks by sending their runnables through `dispatch`. The `scheduler` is retained for access to clocks, timers, and other scheduler-level services.",
      "documentation": "Constructs a local executor that runs spawned tasks by sending their\nrunnables through `dispatch`. The `scheduler` is retained for access to\nclocks, timers, and other scheduler-level services.\n\nFor the common case of routing runnables through\n`Scheduler::schedule_local`, callers pass a closure that does exactly\nthat. `spawn_dedicated_thread` instead passes a closure that sends to\nthe dedicated thread's channel.",
      "signature": "pub fn new (session_id : SessionId, scheduler : Arc<dyn Scheduler>, dispatch : impl Fn (Runnable<RunnableMeta>) + Send + Sync + 'static,) -> Self",
      "cfg": [],
      "target": "LocalExecutor"
    },
    {
      "id": "scheduler::executor::LocalExecutor::now",
      "name": "now",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn now (& self) -> Instant",
      "cfg": [],
      "target": "LocalExecutor"
    },
    {
      "id": "scheduler::executor::LocalExecutor::scheduler",
      "name": "scheduler",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn scheduler (& self) -> & Arc<dyn Scheduler>",
      "cfg": [],
      "target": "LocalExecutor"
    },
    {
      "id": "scheduler::executor::LocalExecutor::session_id",
      "name": "session_id",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn session_id (& self) -> SessionId",
      "cfg": [],
      "target": "LocalExecutor"
    },
    {
      "id": "scheduler::executor::LocalExecutor::spawn",
      "name": "spawn",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn spawn<F> (& self, future : F) -> Task<F::Output> where F : Future + 'static, F::Output : 'static,",
      "cfg": [],
      "target": "LocalExecutor"
    },
    {
      "id": "scheduler::executor::LocalExecutor::spawn_dedicated",
      "name": "spawn_dedicated",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Spawn a closure on a fresh session pinned to its own [`LocalExecutor`]. The closure runs on a new OS thread under `PlatformScheduler`, or on the test scheduler's loop under `TestScheduler`.",
      "documentation": "Spawn a closure on a fresh session pinned to its own [`LocalExecutor`].\nThe closure runs on a new OS thread under `PlatformScheduler`, or on\nthe test scheduler's loop under `TestScheduler`.\n\nThe returned `Task` represents the dedicated work: dropping it cancels\nthe dedicated closure, `.await`ing it yields the closure's return\nvalue, `.detach()`ing it lets the dedicated work run independently of\nthe caller.",
      "signature": "pub fn spawn_dedicated<F, Fut> (& self, f : F) -> Task<Fut::Output> where F : FnOnce (LocalExecutor) -> Fut + Send + 'static, Fut : Future + 'static, Fut::Output : Send + Sync + 'static,",
      "cfg": [],
      "target": "LocalExecutor"
    },
    {
      "id": "scheduler::executor::LocalExecutor::spawn_with_dispatch",
      "name": "spawn_with_dispatch",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Like [`Self::spawn`], but routes the task's runnables through the given dispatch destination instead of this executor's own. The destination must deliver runnables to this executor's thread: the future is polled and dropped on the spawning thread.",
      "documentation": "Like [`Self::spawn`], but routes the task's runnables through the\ngiven dispatch destination instead of this executor's own. The\ndestination must deliver runnables to this executor's thread: the\nfuture is polled and dropped on the spawning thread.",
      "signature": "pub fn spawn_with_dispatch<F> (& self, future : F, dispatch : impl Fn (Runnable<RunnableMeta>) + Send + Sync + 'static,) -> Task<F::Output> where F : Future + 'static, F::Output : 'static,",
      "cfg": [],
      "target": "LocalExecutor"
    },
    {
      "id": "scheduler::executor::LocalExecutor::timer",
      "name": "timer",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn timer (& self, duration : Duration) -> Timer",
      "cfg": [],
      "target": "LocalExecutor"
    },
    {
      "id": "scheduler::executor::Task",
      "name": "Task",
      "kind": "struct",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Task is a primitive that allows work to happen in the background.",
      "documentation": "Task is a primitive that allows work to happen in the background.\n\nIt implements [`Future`] so you can `.await` on it.\n\nIf you drop a task it will be cancelled immediately. Calling [`Task::detach`] allows\nthe task to continue running, but with no way to return a value.",
      "signature": "# [doc = \" Task is a primitive that allows work to happen in the background.\"] # [doc = \"\"] # [doc = \" It implements [`Future`] so you can `.await` on it.\"] # [doc = \"\"] # [doc = \" If you drop a task it will be cancelled immediately. Calling [`Task::detach`] allows\"] # [doc = \" the task to continue running, but with no way to return a value.\"] # [must_use] pub struct Task<T> (TaskState<T>);",
      "cfg": []
    },
    {
      "id": "scheduler::executor::Task::detach",
      "name": "detach",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Detaching a task runs it to completion in the background",
      "documentation": "Detaching a task runs it to completion in the background",
      "signature": "pub fn detach (self)",
      "cfg": [],
      "target": "Task<T>"
    },
    {
      "id": "scheduler::executor::Task::downcast",
      "name": "downcast",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Reinterprets the boxed output as a concrete `T` via downcast on completion. Used by [`LocalExecutor::spawn_dedicated`] and [`BackgroundExecutor::spawn_dedicated`] to recover the user closure's `Fut::Output` from the dyn-safe [`Scheduler::spawn_dedicated`].",
      "documentation": "Reinterprets the boxed output as a concrete `T` via downcast on\ncompletion. Used by [`LocalExecutor::spawn_dedicated`] and\n[`BackgroundExecutor::spawn_dedicated`] to recover the user closure's\n`Fut::Output` from the dyn-safe [`Scheduler::spawn_dedicated`].\n\nPanics on poll if the inner output is not in fact a `T` -- a logic\nerror in whatever produced the inner task, since the downcast type is\nchosen by the caller of `downcast`.",
      "signature": "pub fn downcast<T : Send + Sync + 'static> (self) -> Task<T>",
      "cfg": [],
      "target": "Task<Box<dyn Any + Send + Sync>>"
    },
    {
      "id": "scheduler::executor::Task::fallible",
      "name": "fallible",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Converts this task into a fallible task that returns `Option<T>`.",
      "documentation": "Converts this task into a fallible task that returns `Option<T>`.",
      "signature": "pub fn fallible (self) -> FallibleTask<T>",
      "cfg": [],
      "target": "Task<T>"
    },
    {
      "id": "scheduler::executor::Task::from_async_task",
      "name": "from_async_task",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Creates a Task from an async_task::Task",
      "documentation": "Creates a Task from an async_task::Task",
      "signature": "pub fn from_async_task (task : async_task::Task<T, RunnableMeta>) -> Self",
      "cfg": [],
      "target": "Task<T>"
    },
    {
      "id": "scheduler::executor::Task::is_ready",
      "name": "is_ready",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_ready (& self) -> bool",
      "cfg": [],
      "target": "Task<T>"
    },
    {
      "id": "scheduler::executor::Task::ready",
      "name": "ready",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "executor",
      "path": "scheduler::executor",
      "source": "crates/scheduler/src/executor.rs",
      "summary": "Creates a new task that will resolve with the value",
      "documentation": "Creates a new task that will resolve with the value",
      "signature": "pub fn ready (val : T) -> Self",
      "cfg": [],
      "target": "Task<T>"
    },
    {
      "id": "scheduler::scheduler::DedicatedFuture",
      "name": "DedicatedFuture",
      "kind": "type",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "Type-erased future returned by a dedicated executor entry point.",
      "documentation": "Type-erased future returned by a dedicated executor entry point.",
      "signature": "# [doc = \" Type-erased future returned by a dedicated executor entry point.\"] pub type DedicatedFuture = Pin<Box<dyn Future<Output = Box<dyn Any + Send + Sync>> + 'static>>;",
      "cfg": []
    },
    {
      "id": "scheduler::scheduler::DedicatedTask",
      "name": "DedicatedTask",
      "kind": "type",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "Type-erased closure used to start work on a dedicated executor.",
      "documentation": "Type-erased closure used to start work on a dedicated executor.",
      "signature": "# [doc = \" Type-erased closure used to start work on a dedicated executor.\"] pub type DedicatedTask = Box<dyn FnOnce (LocalExecutor) -> DedicatedFuture + Send + 'static>;",
      "cfg": []
    },
    {
      "id": "scheduler::scheduler::Priority",
      "name": "Priority",
      "kind": "enum",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "Task priority for background tasks.",
      "documentation": "Task priority for background tasks.\n\nHigher priority tasks are more likely to be scheduled before lower priority tasks,\nbut this is not a strict guarantee - the scheduler may interleave tasks of different\npriorities to prevent starvation.",
      "signature": "# [doc = \" Task priority for background tasks.\"] # [doc = \"\"] # [doc = \" Higher priority tasks are more likely to be scheduled before lower priority tasks,\"] # [doc = \" but this is not a strict guarantee - the scheduler may interleave tasks of different\"] # [doc = \" priorities to prevent starvation.\"] # [derive (Clone, Copy, Debug, Default, PartialEq, Eq, Hash)] # [repr (u8)] pub enum Priority { # [doc = \" Realtime priority\"] # [doc = \"\"] # [doc = \" Spawning a task with this priority will spin it off on a separate thread dedicated just to that task. Only use for audio.\"] RealtimeAudio, # [doc = \" High priority - use for tasks critical to user experience/responsiveness.\"] High, # [doc = \" Medium priority - suitable for most use cases.\"] # [default] Medium, # [doc = \" Low priority - use for background work that can be deprioritized.\"] Low, }",
      "cfg": []
    },
    {
      "id": "scheduler::scheduler::Priority::weight",
      "name": "weight",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "Returns the relative probability weight for this priority level. Used by schedulers to determine task selection probability.",
      "documentation": "Returns the relative probability weight for this priority level.\nUsed by schedulers to determine task selection probability.",
      "signature": "pub const fn weight (self) -> u32",
      "cfg": [],
      "target": "Priority"
    },
    {
      "id": "scheduler::scheduler::RunnableMeta",
      "name": "RunnableMeta",
      "kind": "struct",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "Metadata attached to runnables for debugging and profiling.",
      "documentation": "Metadata attached to runnables for debugging and profiling.",
      "signature": "# [doc = \" Metadata attached to runnables for debugging and profiling.\"] # [derive (Clone, Debug)] pub struct RunnableMeta { # [doc = \" The source location where the task was spawned.\"] pub location : & 'static Location<'static>, # [doc = \" The moment the task was spawned.\"] pub spawned : SpawnTime, }",
      "cfg": []
    },
    {
      "id": "scheduler::scheduler::RunnableMeta::new_with_callers_location",
      "name": "new_with_callers_location",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new_with_callers_location () -> Self",
      "cfg": [],
      "target": "RunnableMeta"
    },
    {
      "id": "scheduler::scheduler::Scheduler",
      "name": "Scheduler",
      "kind": "trait",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub trait Scheduler : Send + Sync { # [doc = \" Block until the given future completes or timeout occurs.\"] # [doc = \"\"] # [doc = \" Returns `true` if the future completed, `false` if it timed out.\"] # [doc = \" The future is passed as a pinned mutable reference so the caller\"] # [doc = \" retains ownership and can continue polling or return it on timeout.\"] fn block (& self, session_id : Option<SessionId>, future : Pin<& mut dyn Future<Output = ()>>, timeout : Option<Duration>,) -> bool; # [doc = \" Schedule a runnable on the local (session-pinned) queue for `session_id`.\"] # [doc = \" Runnables scheduled here run in order on whichever thread drains the\"] # [doc = \" session — the main thread for ordinary sessions, or a dedicated OS\"] # [doc = \" thread for sessions created via `spawn_dedicated_thread`.\"] fn schedule_local (& self, session_id : SessionId, runnable : Runnable<RunnableMeta>); # [doc = \" Schedule a background task with the given priority.\"] fn schedule_background_with_priority (& self, runnable : Runnable<RunnableMeta>, priority : Priority,); # [doc = \" Spawn a closure on a dedicated realtime thread for audio processing.\"] fn spawn_realtime (& self, f : Box<dyn FnOnce () + Send>); # [doc = \" Schedule a background task with default (medium) priority.\"] fn schedule_background (& self, runnable : Runnable<RunnableMeta>) { self . schedule_background_with_priority (runnable, Priority::default ()); } # [track_caller] fn timer (& self, timeout : Duration) -> Timer; fn clock (& self) -> Arc<dyn Clock>; # [doc = \" Spawn a closure on a fresh session pinned to its own [`LocalExecutor`].\"] # [doc = \"\"] # [doc = \" `PlatformScheduler` runs the closure on a new OS thread (see\"] # [doc = \" [`spawn_dedicated_thread`]). `TestScheduler` runs it on the test\"] # [doc = \" scheduler's loop alongside everything else so determinism under\"] # [doc = \" `TestScheduler::many` is preserved.\"] # [doc = \"\"] # [doc = \" This is the dyn-safe entry point: the closure's output is type-erased\"] # [doc = \" as `Box<dyn Any + Send + Sync>` so the trait stays object-safe.\"] # [doc = \" Callers typically reach for the type-safe wrappers on\"] # [doc = \" [`LocalExecutor::spawn_dedicated`] and\"] # [doc = \" [`BackgroundExecutor::spawn_dedicated`], which compose this method\"] # [doc = \" with [`Task::downcast`] to recover the closure's concrete return type.\"] fn spawn_dedicated (self : Arc<Self>, f : DedicatedTask) -> Task<Box<dyn Any + Send + Sync>>; fn as_test (& self) -> Option<& TestScheduler> { None } }",
      "cfg": []
    },
    {
      "id": "scheduler::scheduler::SessionId",
      "name": "SessionId",
      "kind": "struct",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] pub struct SessionId (u16);",
      "cfg": []
    },
    {
      "id": "scheduler::scheduler::SessionId::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (id : u16) -> Self",
      "cfg": [],
      "target": "SessionId"
    },
    {
      "id": "scheduler::scheduler::SpawnTime",
      "name": "SpawnTime",
      "kind": "struct",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug)] pub struct SpawnTime (pub Instant);",
      "cfg": []
    },
    {
      "id": "scheduler::scheduler::Timer",
      "name": "Timer",
      "kind": "struct",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct Timer (oneshot::Receiver<()>);",
      "cfg": []
    },
    {
      "id": "scheduler::scheduler::Timer::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (rx : oneshot::Receiver<()>) -> Self",
      "cfg": [],
      "target": "Timer"
    },
    {
      "id": "scheduler::scheduler::reexport-1",
      "name": "clock :: *",
      "kind": "reexport",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use clock::*;",
      "cfg": []
    },
    {
      "id": "scheduler::scheduler::reexport-2",
      "name": "executor :: *",
      "kind": "reexport",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use executor::*;",
      "cfg": []
    },
    {
      "id": "scheduler::scheduler::reexport-3",
      "name": "test_scheduler :: *",
      "kind": "reexport",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use test_scheduler::*;",
      "cfg": []
    },
    {
      "id": "scheduler::scheduler::spawn_dedicated_thread",
      "name": "spawn_dedicated_thread",
      "kind": "function",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "scheduler",
      "path": "scheduler::scheduler",
      "source": "crates/scheduler/src/scheduler.rs",
      "summary": "Spawn work on a fresh OS thread that's exclusive to the returned task and anything spawned on the executor it provides. Blocking syscalls inside that work don't disturb any other executor in the process.",
      "documentation": "Spawn work on a fresh OS thread that's exclusive to the returned task and\nanything spawned on the executor it provides. Blocking syscalls inside that\nwork don't disturb any other executor in the process.\n\n`f` is called on the dedicated thread with a [`LocalExecutor`] pinned\nto it. The future `f` returns may freely be `!Send`. The returned `Task` is\nthat future's task: dropping it cancels the root, but detached children\nkeep running until they finish. The thread shuts down once the executor and\nevery task on it are gone.\n\nThe caller is responsible for supplying a `session_id` that's distinct from\nevery other live session on `scheduler`. Concrete schedulers typically wrap\nthis in an inherent method that allocates the id from their own counter.",
      "signature": "pub fn spawn_dedicated_thread<F, Fut> (session_id : SessionId, scheduler : Arc<dyn Scheduler>, f : F,) -> Task<Fut::Output> where F : FnOnce (LocalExecutor) -> Fut + Send + 'static, Fut : Future + 'static, Fut::Output : Send + 'static,",
      "cfg": []
    },
    {
      "id": "scheduler::test_scheduler::SharedRng",
      "name": "SharedRng",
      "kind": "struct",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "A wrapper around `Arc<Mutex<StdRng>>` that provides convenient methods for random number generation without requiring explicit locking.",
      "documentation": "A wrapper around `Arc<Mutex<StdRng>>` that provides convenient methods\nfor random number generation without requiring explicit locking.",
      "signature": "# [doc = \" A wrapper around `Arc<Mutex<StdRng>>` that provides convenient methods\"] # [doc = \" for random number generation without requiring explicit locking.\"] # [derive (Clone)] pub struct SharedRng (Arc<Mutex<StdRng>>);",
      "cfg": []
    },
    {
      "id": "scheduler::test_scheduler::SharedRng::lock",
      "name": "lock",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Lock the inner RNG for direct access. Use this when you need multiple random operations without re-locking between each one.",
      "documentation": "Lock the inner RNG for direct access. Use this when you need multiple\nrandom operations without re-locking between each one.",
      "signature": "pub fn lock (& self) -> MutexGuard<'_, StdRng>",
      "cfg": [],
      "target": "SharedRng"
    },
    {
      "id": "scheduler::test_scheduler::SharedRng::random",
      "name": "random",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Generate a random value of the given type.",
      "documentation": "Generate a random value of the given type.",
      "signature": "pub fn random<T> (& self) -> T where StandardUniform : Distribution<T>,",
      "cfg": [],
      "target": "SharedRng"
    },
    {
      "id": "scheduler::test_scheduler::SharedRng::random_bool",
      "name": "random_bool",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Generate a random boolean with the given probability of being true.",
      "documentation": "Generate a random boolean with the given probability of being true.",
      "signature": "pub fn random_bool (& self, p : f64) -> bool",
      "cfg": [],
      "target": "SharedRng"
    },
    {
      "id": "scheduler::test_scheduler::SharedRng::random_range",
      "name": "random_range",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Generate a random value in the given range.",
      "documentation": "Generate a random value in the given range.",
      "signature": "pub fn random_range<T, R> (& self, range : R) -> T where T : SampleUniform, R : SampleRange<T>,",
      "cfg": [],
      "target": "SharedRng"
    },
    {
      "id": "scheduler::test_scheduler::SharedRng::random_ratio",
      "name": "random_ratio",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Generate a random ratio - true with probability `numerator/denominator`.",
      "documentation": "Generate a random ratio - true with probability `numerator/denominator`.",
      "signature": "pub fn random_ratio (& self, numerator : u32, denominator : u32) -> bool",
      "cfg": [],
      "target": "SharedRng"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler",
      "name": "TestScheduler",
      "kind": "struct",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct TestScheduler { clock : Arc<TestClock>, rng : Arc<Mutex<StdRng>>, state : Arc<Mutex<SchedulerState>>, thread : Thread, }",
      "cfg": []
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::advance_clock",
      "name": "advance_clock",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn advance_clock (& self, duration : Duration)",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::advance_clock_to_next_timer",
      "name": "advance_clock_to_next_timer",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn advance_clock_to_next_timer (& self) -> bool",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::allocate_session_id",
      "name": "allocate_session_id",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn allocate_session_id (& self) -> SessionId",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::allow_parking",
      "name": "allow_parking",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn allow_parking (& self)",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::background",
      "name": "background",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Create a background executor for this scheduler",
      "documentation": "Create a background executor for this scheduler",
      "signature": "pub fn background (self : & Arc<Self>) -> BackgroundExecutor",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::clock",
      "name": "clock",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clock (& self) -> Arc<TestClock>",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::drain_tasks",
      "name": "drain_tasks",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Drops all runnable tasks from the scheduler.",
      "documentation": "Drops all runnable tasks from the scheduler.\n\nThis is used by the leak detector to ensure that all tasks have been dropped as tasks may keep entities alive otherwise.\nWhy do we even have tasks left when tests finish you may ask. The reason for that is simple, the scheduler itself is the executor and it retains the scheduled runnables.\nA lot of tasks, including every foreground task contain an executor handle that keeps the test scheduler alive, causing a reference cycle, thus the need for this function right now.",
      "signature": "pub fn drain_tasks (& self)",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::end_test",
      "name": "end_test",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn end_test (& self)",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::forbid_parking",
      "name": "forbid_parking",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn forbid_parking (& self)",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::foreground",
      "name": "foreground",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Create a local executor for this scheduler.",
      "documentation": "Create a local executor for this scheduler.",
      "signature": "pub fn foreground (self : & Arc<Self>) -> LocalExecutor",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::has_pending_tasks",
      "name": "has_pending_tasks",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Check if there are any pending tasks or timers that could run.",
      "documentation": "Check if there are any pending tasks or timers that could run.",
      "signature": "pub fn has_pending_tasks (& self) -> bool",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::is_main_thread",
      "name": "is_main_thread",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_main_thread (& self) -> bool",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::many",
      "name": "many",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Run a test multiple times with sequential seeds (0, 1, 2, ...)",
      "documentation": "Run a test multiple times with sequential seeds (0, 1, 2, ...)",
      "signature": "pub fn many<R> (default_iterations : usize, mut f : impl AsyncFnMut (Arc<TestScheduler>) -> R,) -> Vec<R>",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (config : TestSchedulerConfig) -> Self",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::once",
      "name": "once",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Run a test once with default configuration (seed 0)",
      "documentation": "Run a test once with default configuration (seed 0)",
      "signature": "pub fn once<R> (f : impl AsyncFnOnce (Arc<TestScheduler>) -> R) -> R",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::parking_allowed",
      "name": "parking_allowed",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn parking_allowed (& self) -> bool",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::pending_task_counts",
      "name": "pending_task_counts",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Returns counts of (foreground_tasks, background_tasks) currently queued. Foreground tasks are those with a session_id, background tasks have none.",
      "documentation": "Returns counts of (foreground_tasks, background_tasks) currently queued.\nForeground tasks are those with a session_id, background tasks have none.",
      "signature": "pub fn pending_task_counts (& self) -> (usize, usize)",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::rng",
      "name": "rng",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn rng (& self) -> SharedRng",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::run",
      "name": "run",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn run (& self)",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::run_with_clock_advancement",
      "name": "run_with_clock_advancement",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn run_with_clock_advancement (& self)",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::set_timeout_ticks",
      "name": "set_timeout_ticks",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn set_timeout_ticks (& self, timeout_ticks : RangeInclusive<usize>)",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::tick",
      "name": "tick",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Execute one tick of the scheduler, processing expired timers and running at most one task. Returns true if any work was done.",
      "documentation": "Execute one tick of the scheduler, processing expired timers and running\nat most one task. Returns true if any work was done.\n\nThis is the public interface for GPUI's TestDispatcher to drive task execution.",
      "signature": "pub fn tick (& self) -> bool",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::tick_background_only",
      "name": "tick_background_only",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "Execute one tick, but only run background tasks (no foreground/session tasks). Returns true if any work was done.",
      "documentation": "Execute one tick, but only run background tasks (no foreground/session tasks).\nReturns true if any work was done.",
      "signature": "pub fn tick_background_only (& self) -> bool",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestScheduler::yield_random",
      "name": "yield_random",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn yield_random (& self) -> Yield",
      "cfg": [],
      "target": "TestScheduler"
    },
    {
      "id": "scheduler::test_scheduler::TestSchedulerConfig",
      "name": "TestSchedulerConfig",
      "kind": "struct",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug)] pub struct TestSchedulerConfig { pub seed : u64, pub randomize_order : bool, pub allow_parking : bool, pub capture_pending_traces : bool, pub timeout_ticks : RangeInclusive<usize>, }",
      "cfg": []
    },
    {
      "id": "scheduler::test_scheduler::TestSchedulerConfig::with_seed",
      "name": "with_seed",
      "kind": "method",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn with_seed (seed : u64) -> Self",
      "cfg": [],
      "target": "TestSchedulerConfig"
    },
    {
      "id": "scheduler::test_scheduler::Yield",
      "name": "Yield",
      "kind": "struct",
      "package": "gpui-box-scheduler",
      "crate": "scheduler",
      "module": "test_scheduler",
      "path": "scheduler::test_scheduler",
      "source": "crates/scheduler/src/test_scheduler.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct Yield (usize);",
      "cfg": []
    },
    {
      "id": "sum_tree::cursor::Cursor",
      "name": "Cursor",
      "kind": "struct",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone)] pub struct Cursor<'a, 'b, T : Item, D> { tree : & 'a SumTree<T>, stack : ArrayVec<StackEntry<'a, T, D>, 16, u8>, pub position : D, did_seek : bool, at_end : bool, cx :<T::Summary as Summary>::Context<'b>, }",
      "cfg": []
    },
    {
      "id": "sum_tree::cursor::Cursor::did_seek",
      "name": "did_seek",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn did_seek (& self) -> bool",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::end",
      "name": "end",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn end (& self) -> D",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::item",
      "name": "item",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "Item is None, when the list is empty, or this cursor is at the end of the list.",
      "documentation": "Item is None, when the list is empty, or this cursor is at the end of the list.",
      "signature": "pub fn item (& self) -> Option<& 'a T>",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::item_summary",
      "name": "item_summary",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn item_summary (& self) -> Option<& 'a T::Summary>",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (tree : & 'a SumTree<T>, cx :<T::Summary as Summary>::Context<'b>) -> Self",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::next",
      "name": "next",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn next (& mut self)",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::next_item",
      "name": "next_item",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn next_item (& self) -> Option<& 'a T>",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::prev",
      "name": "prev",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn prev (& mut self)",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::prev_item",
      "name": "prev_item",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn prev_item (& self) -> Option<& 'a T>",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::reset",
      "name": "reset",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn reset (& mut self)",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::search_backward",
      "name": "search_backward",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn search_backward<F> (& mut self, mut filter_node : F) where F : FnMut (& T::Summary) -> bool,",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::search_forward",
      "name": "search_forward",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn search_forward<F> (& mut self, mut filter_node : F) where F : FnMut (& T::Summary) -> bool,",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::seek",
      "name": "seek",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "Returns whether we found the item you were seeking for.",
      "documentation": "Returns whether we found the item you were seeking for.",
      "signature": "pub fn seek<Target> (& mut self, pos : & Target, bias : Bias) -> bool where Target : SeekTarget<'a, T::Summary, D>,",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::seek_forward",
      "name": "seek_forward",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "Returns whether we found the item you were seeking for.",
      "documentation": "Returns whether we found the item you were seeking for.\n\n# Panics\n\nIf we did not seek before, use seek instead in that case.",
      "signature": "pub fn seek_forward<Target> (& mut self, pos : & Target, bias : Bias) -> bool where Target : SeekTarget<'a, T::Summary, D>,",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::slice",
      "name": "slice",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "Advances the cursor and returns traversed items as a tree.",
      "documentation": "Advances the cursor and returns traversed items as a tree.",
      "signature": "pub fn slice<Target> (& mut self, end : & Target, bias : Bias) -> SumTree<T> where Target : SeekTarget<'a, T::Summary, D>,",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::start",
      "name": "start",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn start (& self) -> & D",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::suffix",
      "name": "suffix",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn suffix (& mut self) -> SumTree<T>",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::Cursor::summary",
      "name": "summary",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn summary<Target, Output> (& mut self, end : & Target, bias : Bias) -> Output where Target : SeekTarget<'a, T::Summary, D>, Output : Dimension<'a, T::Summary>,",
      "cfg": [],
      "target": "Cursor<'a, 'b, T, D>"
    },
    {
      "id": "sum_tree::cursor::FilterCursor",
      "name": "FilterCursor",
      "kind": "struct",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct FilterCursor<'a, 'b, F, T : Item, D> { cursor : Cursor<'a, 'b, T, D>, filter_node : F, }",
      "cfg": []
    },
    {
      "id": "sum_tree::cursor::FilterCursor::end",
      "name": "end",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn end (& self) -> D",
      "cfg": [],
      "target": "FilterCursor<'a, 'b, F, T, D>"
    },
    {
      "id": "sum_tree::cursor::FilterCursor::item",
      "name": "item",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn item (& self) -> Option<& 'a T>",
      "cfg": [],
      "target": "FilterCursor<'a, 'b, F, T, D>"
    },
    {
      "id": "sum_tree::cursor::FilterCursor::item_summary",
      "name": "item_summary",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn item_summary (& self) -> Option<& 'a T::Summary>",
      "cfg": [],
      "target": "FilterCursor<'a, 'b, F, T, D>"
    },
    {
      "id": "sum_tree::cursor::FilterCursor::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (tree : & 'a SumTree<T>, cx :<T::Summary as Summary>::Context<'b>, filter_node : F,) -> Self",
      "cfg": [],
      "target": "FilterCursor<'a, 'b, F, T, D>"
    },
    {
      "id": "sum_tree::cursor::FilterCursor::next",
      "name": "next",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn next (& mut self)",
      "cfg": [],
      "target": "FilterCursor<'a, 'b, F, T, D>"
    },
    {
      "id": "sum_tree::cursor::FilterCursor::prev",
      "name": "prev",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn prev (& mut self)",
      "cfg": [],
      "target": "FilterCursor<'a, 'b, F, T, D>"
    },
    {
      "id": "sum_tree::cursor::FilterCursor::start",
      "name": "start",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn start (& self) -> & D",
      "cfg": [],
      "target": "FilterCursor<'a, 'b, F, T, D>"
    },
    {
      "id": "sum_tree::cursor::Iter",
      "name": "Iter",
      "kind": "struct",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "cursor",
      "path": "sum_tree::cursor",
      "source": "crates/sum_tree/src/cursor.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub struct Iter<'a, T : Item> { tree : & 'a SumTree<T>, stack : ArrayVec<StackEntry<'a, T, ()>, 16, u8>, }",
      "cfg": []
    },
    {
      "id": "sum_tree::property_test::sum_tree",
      "name": "sum_tree",
      "kind": "function",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "property_test",
      "path": "sum_tree::property_test",
      "source": "crates/sum_tree/src/property_test.rs",
      "summary": "A strategy for producing a [`SumTree`] with a given size.",
      "documentation": "A strategy for producing a [`SumTree`] with a given size.\n\nEquivalent to [`proptest::collection::vec`].",
      "signature": "pub fn sum_tree<S, T> (values : S, size : impl Into<SizeRange>) -> impl Strategy<Value = SumTree<T>> where T : Debug + Arbitrary + Item + 'static, T::Summary : Debug + Summary<Context<'static> = ()>, S : Strategy<Value = T>,",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::Bias",
      "name": "Bias",
      "kind": "enum",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "Bias is used to settle ambiguities when determining positions in an ordered sequence.",
      "documentation": "Bias is used to settle ambiguities when determining positions in an ordered sequence.\n\nThe primary use case is for text, where Bias influences\nwhich character an offset or anchor is associated with.\n\n# Examples\nGiven the buffer `AˇBCD`:\n- The offset of the cursor is 1\n- [Bias::Left] would attach the cursor to the character `A`\n- [Bias::Right] would attach the cursor to the character `B`\n\nGiven the buffer `A«BCˇ»D`:\n- The offset of the cursor is 3, and the selection is from 1 to 3\n- The left anchor of the selection has [Bias::Right], attaching it to the character `B`\n- The right anchor of the selection has [Bias::Left], attaching it to the character `C`\n\nGiven the buffer `{ˇ<...>`, where `<...>` is a folded region:\n- The display offset of the cursor is 1, but the offset in the buffer is determined by the bias\n- [Bias::Left] would attach the cursor to the character `{`, with a buffer offset of 1\n- [Bias::Right] would attach the cursor to the first character of the folded region,\nand the buffer offset would be the offset of the first character of the folded region",
      "signature": "# [doc = \" Bias is used to settle ambiguities when determining positions in an ordered sequence.\"] # [doc = \"\"] # [doc = \" The primary use case is for text, where Bias influences\"] # [doc = \" which character an offset or anchor is associated with.\"] # [doc = \"\"] # [doc = \" # Examples\"] # [doc = \" Given the buffer `AˇBCD`:\"] # [doc = \" - The offset of the cursor is 1\"] # [doc = \" - [Bias::Left] would attach the cursor to the character `A`\"] # [doc = \" - [Bias::Right] would attach the cursor to the character `B`\"] # [doc = \"\"] # [doc = \" Given the buffer `A«BCˇ»D`:\"] # [doc = \" - The offset of the cursor is 3, and the selection is from 1 to 3\"] # [doc = \" - The left anchor of the selection has [Bias::Right], attaching it to the character `B`\"] # [doc = \" - The right anchor of the selection has [Bias::Left], attaching it to the character `C`\"] # [doc = \"\"] # [doc = \" Given the buffer `{ˇ<...>`, where `<...>` is a folded region:\"] # [doc = \" - The display offset of the cursor is 1, but the offset in the buffer is determined by the bias\"] # [doc = \" - [Bias::Left] would attach the cursor to the character `{`, with a buffer offset of 1\"] # [doc = \" - [Bias::Right] would attach the cursor to the first character of the folded region,\"] # [doc = \" and the buffer offset would be the offset of the first character of the folded region\"] # [derive (Copy, Clone, Eq, PartialEq, PartialOrd, Ord, Debug, Hash, Default)] pub enum Bias { # [doc = \" Attach to the character on the left\"] # [default] Left, # [doc = \" Attach to the character on the right\"] Right, }",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::Bias::invert",
      "name": "invert",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn invert (self) -> Self",
      "cfg": [],
      "target": "Bias"
    },
    {
      "id": "sum_tree::sum_tree::ContextLessSummary",
      "name": "ContextLessSummary",
      "kind": "trait",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub trait ContextLessSummary : Clone { fn zero () -> Self; fn add_summary (& mut self, summary : & Self); }",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::Dimension",
      "name": "Dimension",
      "kind": "trait",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "Each [`Summary`] type can have more than one [`Dimension`] type that it measures.",
      "documentation": "Each [`Summary`] type can have more than one [`Dimension`] type that it measures.\n\nYou can use dimensions to seek to a specific location in the [`SumTree`]\n\n# Example:\nZed's rope has a `TextSummary` type that summarizes lines, characters, and bytes.\nEach of these are different dimensions we may want to seek to",
      "signature": "# [doc = \" Each [`Summary`] type can have more than one [`Dimension`] type that it measures.\"] # [doc = \"\"] # [doc = \" You can use dimensions to seek to a specific location in the [`SumTree`]\"] # [doc = \"\"] # [doc = \" # Example:\"] # [doc = \" Zed's rope has a `TextSummary` type that summarizes lines, characters, and bytes.\"] # [doc = \" Each of these are different dimensions we may want to seek to\"] pub trait Dimension<'a, S : Summary> : Clone { fn zero (cx : S::Context<'_>) -> Self; fn add_summary (& mut self, summary : & 'a S, cx : S::Context<'_>); # [must_use] fn with_added_summary (mut self, summary : & 'a S, cx : S::Context<'_>) -> Self { self . add_summary (summary, cx); self } fn from_summary (summary : & 'a S, cx : S::Context<'_>) -> Self { let mut dimension = Self::zero (cx); dimension . add_summary (summary, cx); dimension } }",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::Dimensions",
      "name": "Dimensions",
      "kind": "struct",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord)] pub struct Dimensions<D1, D2, D3 = ()> (pub D1, pub D2, pub D3);",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::Edit",
      "name": "Edit",
      "kind": "enum",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug)] pub enum Edit<T : KeyedItem> { Insert (T), Remove (T::Key), }",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::Item",
      "name": "Item",
      "kind": "trait",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "An item that can be stored in a [`SumTree`]",
      "documentation": "An item that can be stored in a [`SumTree`]\n\nMust be summarized by a type that implements [`Summary`]",
      "signature": "# [doc = \" An item that can be stored in a [`SumTree`]\"] # [doc = \"\"] # [doc = \" Must be summarized by a type that implements [`Summary`]\"] pub trait Item : Clone { type Summary : Summary; fn summary (& self, cx :<Self::Summary as Summary>::Context<'_>) -> Self::Summary; }",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::KeyedItem",
      "name": "KeyedItem",
      "kind": "trait",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "An [`Item`] whose summary has a specific key that can be used to identify it",
      "documentation": "An [`Item`] whose summary has a specific key that can be used to identify it",
      "signature": "# [doc = \" An [`Item`] whose summary has a specific key that can be used to identify it\"] pub trait KeyedItem : Item { type Key : for<'a> Dimension<'a, Self::Summary> + Ord; fn key (& self) -> Self::Key; }",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::NoSummary",
      "name": "NoSummary",
      "kind": "struct",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct NoSummary;",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::Node",
      "name": "Node",
      "kind": "enum",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone)] pub enum Node<T : Item> { Internal { height : u8, summary : T::Summary, child_summaries : ArrayVec<T::Summary, { 2 * TREE_BASE }, u8>, child_trees : ArrayVec<SumTree<T>, { 2 * TREE_BASE }, u8>, }, Leaf { summary : T::Summary, items : ArrayVec<T, { 2 * TREE_BASE }, u8>, item_summaries : ArrayVec<T::Summary, { 2 * TREE_BASE }, u8>, }, }",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::SeekTarget",
      "name": "SeekTarget",
      "kind": "trait",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub trait SeekTarget<'a, S : Summary, D : Dimension<'a, S>> { fn cmp (& self, cursor_location : & D, cx : S::Context<'_>) -> Ordering; }",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::SumTree",
      "name": "SumTree",
      "kind": "struct",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "A B+ tree in which each leaf node contains `Item`s of type `T` and a `Summary`s for each `Item`. Each internal node contains a `Summary` of the items in its subtree.",
      "documentation": "A B+ tree in which each leaf node contains `Item`s of type `T` and a `Summary`s for each `Item`.\nEach internal node contains a `Summary` of the items in its subtree.\n\nThe maximum number of items per node is `TREE_BASE * 2`.\n\nAny [`Dimension`] supported by the [`Summary`] type can be used to seek to a specific location in the tree.",
      "signature": "# [doc = \" A B+ tree in which each leaf node contains `Item`s of type `T` and a `Summary`s for each `Item`.\"] # [doc = \" Each internal node contains a `Summary` of the items in its subtree.\"] # [doc = \"\"] # [doc = \" The maximum number of items per node is `TREE_BASE * 2`.\"] # [doc = \"\"] # [doc = \" Any [`Dimension`] supported by the [`Summary`] type can be used to seek to a specific location in the tree.\"] # [derive (Clone)] pub struct SumTree<T : Item> (Arc<Node<T>>);",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::SumTree::append",
      "name": "append",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn append (& mut self, mut other : Self, cx :<T::Summary as Summary>::Context<'_>)",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::cursor",
      "name": "cursor",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn cursor<'a, 'b, D> (& 'a self, cx :<T::Summary as Summary>::Context<'b>,) -> Cursor<'a, 'b, T, D> where D : Dimension<'a, T::Summary>,",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::edit",
      "name": "edit",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn edit (& mut self, mut edits : Vec<Edit<T>>, cx :<T::Summary as Summary>::Context<'_>,) -> Vec<T>",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::extend",
      "name": "extend",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn extend<I> (& mut self, iter : I, cx :<T::Summary as Summary>::Context<'_>) where I : IntoIterator<Item = T>,",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::extent",
      "name": "extent",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn extent<'a, D : Dimension<'a, T::Summary>> (& 'a self, cx :<T::Summary as Summary>::Context<'_>,) -> D",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::filter",
      "name": "filter",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "Note: If the summary type requires a non `()` context, then the filter cursor that is returned cannot be used with Rust's iterators.",
      "documentation": "Note: If the summary type requires a non `()` context, then the filter cursor\nthat is returned cannot be used with Rust's iterators.",
      "signature": "pub fn filter<'a, 'b, F, U> (& 'a self, cx :<T::Summary as Summary>::Context<'b>, filter_node : F,) -> FilterCursor<'a, 'b, F, T, U> where F : FnMut (& T::Summary) -> bool, U : Dimension<'a, T::Summary>,",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::find",
      "name": "find",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "A more efficient version of `Cursor::new()` + `Cursor::seek()` + `Cursor::item()`",
      "documentation": "A more efficient version of `Cursor::new()` + `Cursor::seek()` + `Cursor::item()`",
      "signature": "pub fn find<'a, 'slf, D, Target> (& 'slf self, cx :<T::Summary as Summary>::Context<'a>, target : & Target, bias : Bias,) -> (D, D, Option<& 'slf T>) where D : Dimension<'slf, T::Summary>, Target : SeekTarget<'slf, T::Summary, D>,",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::find_exact",
      "name": "find_exact",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "A more efficient version of `Cursor::new()` + `Cursor::seek()` + `Cursor::item()`.",
      "documentation": "A more efficient version of `Cursor::new()` + `Cursor::seek()` + `Cursor::item()`.\n\nOnly returns the item that exactly has the target match.",
      "signature": "pub fn find_exact<'a, 'slf, D, Target> (& 'slf self, cx :<T::Summary as Summary>::Context<'a>, target : & Target, bias : Bias,) -> (D, D, Option<& 'slf T>) where D : Dimension<'slf, T::Summary>, Target : SeekTarget<'slf, T::Summary, D>,",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::find_with_prev",
      "name": "find_with_prev",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "A more efficient version of `Cursor::new()` + `Cursor::seek()` + `Cursor::item()`",
      "documentation": "A more efficient version of `Cursor::new()` + `Cursor::seek()` + `Cursor::item()`",
      "signature": "pub fn find_with_prev<'a, 'slf, D, Target> (& 'slf self, cx :<T::Summary as Summary>::Context<'a>, target : & Target, bias : Bias,) -> (D, D, Option<(Option<& 'slf T>, & 'slf T)>) where D : Dimension<'slf, T::Summary>, Target : SeekTarget<'slf, T::Summary, D>,",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::first",
      "name": "first",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn first (& self) -> Option<& T>",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::from_item",
      "name": "from_item",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_item (item : T, cx :<T::Summary as Summary>::Context<'_>) -> Self",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::from_iter",
      "name": "from_iter",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_iter<I : IntoIterator<Item = T>> (iter : I, cx :<T::Summary as Summary>::Context<'_>,) -> Self",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::from_par_iter",
      "name": "from_par_iter",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_par_iter<I, Iter> (iter : I, cx :<T::Summary as Summary>::Context<'_>) -> Self where I : IntoParallelIterator<Iter = Iter>, Iter : IndexedParallelIterator<Item = T>, T : Send + Sync, T::Summary : Send + Sync, for<'a><T::Summary as Summary>::Context<'a> : Sync,",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::from_summary",
      "name": "from_summary",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "Useful in cases where the item type has a non-trivial context type, but the zero value of the summary type doesn't depend on that context.",
      "documentation": "Useful in cases where the item type has a non-trivial context type, but the zero value of the summary type doesn't depend on that context.",
      "signature": "pub fn from_summary (summary : T::Summary) -> Self",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get<'a> (& 'a self, key : & T::Key, cx :<T::Summary as Summary>::Context<'a>,) -> Option<& 'a T>",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::insert_or_replace",
      "name": "insert_or_replace",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn insert_or_replace<'a, 'b> (& 'a mut self, item : T, cx :<T::Summary as Summary>::Context<'b>,) -> Option<T>",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::items",
      "name": "items",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn items<'a> (& 'a self, cx :<T::Summary as Summary>::Context<'a>) -> Vec<T>",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::iter",
      "name": "iter",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn iter (& self) -> Iter<'_, T>",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::last",
      "name": "last",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn last (& self) -> Option<& T>",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::last_summary",
      "name": "last_summary",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn last_summary (& self) -> Option<& T::Summary>",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::new",
      "name": "new",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn new (cx :<T::Summary as Summary>::Context<'_>) -> Self",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::par_extend",
      "name": "par_extend",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn par_extend<I, Iter> (& mut self, iter : I, cx :<T::Summary as Summary>::Context<'_>) where I : IntoParallelIterator<Iter = Iter>, Iter : IndexedParallelIterator<Item = T>, T : Send + Sync, T::Summary : Send + Sync, for<'a><T::Summary as Summary>::Context<'a> : Sync,",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::push",
      "name": "push",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn push (& mut self, item : T, cx :<T::Summary as Summary>::Context<'_>)",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::remove",
      "name": "remove",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn remove (& mut self, key : & T::Key, cx :<T::Summary as Summary>::Context<'_>) -> Option<T>",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::summary",
      "name": "summary",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn summary (& self) -> & T::Summary",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::update_first",
      "name": "update_first",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update_first (& mut self, f : impl FnOnce (& mut T), cx :<T::Summary as Summary>::Context<'_>,)",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::SumTree::update_last",
      "name": "update_last",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update_last (& mut self, f : impl FnOnce (& mut T), cx :<T::Summary as Summary>::Context<'_>,)",
      "cfg": [],
      "target": "SumTree<T>"
    },
    {
      "id": "sum_tree::sum_tree::Summary",
      "name": "Summary",
      "kind": "trait",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "A type that describes the Sum of all [`Item`]s in a subtree of the [`SumTree`]",
      "documentation": "A type that describes the Sum of all [`Item`]s in a subtree of the [`SumTree`]\n\nEach Summary type can have multiple [`Dimension`]s that it measures,\nwhich can be used to navigate the tree",
      "signature": "# [doc = \" A type that describes the Sum of all [`Item`]s in a subtree of the [`SumTree`]\"] # [doc = \"\"] # [doc = \" Each Summary type can have multiple [`Dimension`]s that it measures,\"] # [doc = \" which can be used to navigate the tree\"] pub trait Summary : Clone { type Context<'a> : Copy; fn zero<'a> (cx : Self::Context<'a>) -> Self; fn add_summary<'a> (& mut self, summary : & Self, cx : Self::Context<'a>); }",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::TREE_BASE",
      "name": "TREE_BASE",
      "kind": "constant",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "summary": "",
      "declarations": [
        {
          "source": "crates/sum_tree/src/sum_tree.rs",
          "documentation": "",
          "signature": "pub const TREE_BASE: usize",
          "cfg": [
            "cfg (not (test))"
          ]
        },
        {
          "source": "crates/sum_tree/src/sum_tree.rs",
          "documentation": "",
          "signature": "pub const TREE_BASE: usize",
          "cfg": [
            "cfg (test)"
          ]
        }
      ]
    },
    {
      "id": "sum_tree::sum_tree::reexport-1",
      "name": "cursor :: { Cursor , FilterCursor , Iter }",
      "kind": "reexport",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use cursor::{ Cursor, FilterCursor, Iter };",
      "cfg": []
    },
    {
      "id": "sum_tree::sum_tree::reexport-2",
      "name": "tree_map :: { MapSeekTarget , TreeMap , TreeSet }",
      "kind": "reexport",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "sum_tree",
      "path": "sum_tree::sum_tree",
      "source": "crates/sum_tree/src/sum_tree.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub use tree_map::{ MapSeekTarget, TreeMap, TreeSet };",
      "cfg": []
    },
    {
      "id": "sum_tree::tree_map::MapEntry",
      "name": "MapEntry",
      "kind": "struct",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq, Eq)] pub struct MapEntry<K, V> { key : K, value : V, }",
      "cfg": []
    },
    {
      "id": "sum_tree::tree_map::MapKey",
      "name": "MapKey",
      "kind": "struct",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct MapKey<K> (Option<K>);",
      "cfg": []
    },
    {
      "id": "sum_tree::tree_map::MapKeyRef",
      "name": "MapKeyRef",
      "kind": "struct",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug)] pub struct MapKeyRef<'a, K> (Option<& 'a K>);",
      "cfg": []
    },
    {
      "id": "sum_tree::tree_map::MapSeekTarget",
      "name": "MapSeekTarget",
      "kind": "trait",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub trait MapSeekTarget<K> { fn cmp_cursor (& self, cursor_location : & K) -> Ordering; }",
      "cfg": []
    },
    {
      "id": "sum_tree::tree_map::TreeMap",
      "name": "TreeMap",
      "kind": "struct",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "A cheaply-cloneable ordered map based on a [SumTree](crate::SumTree).",
      "documentation": "A cheaply-cloneable ordered map based on a [SumTree](crate::SumTree).",
      "signature": "# [doc = \" A cheaply-cloneable ordered map based on a [SumTree](crate::SumTree).\"] # [derive (Clone, PartialEq, Eq)] pub struct TreeMap<K, V> (SumTree<MapEntry<K, V>>) where K : Clone + Ord, V : Clone;",
      "cfg": []
    },
    {
      "id": "sum_tree::tree_map::TreeMap::clear",
      "name": "clear",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn clear (& mut self)",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::closest",
      "name": "closest",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "Returns the key-value pair with the greatest key less than or equal to the given key.",
      "documentation": "Returns the key-value pair with the greatest key less than or equal to the given key.",
      "signature": "pub fn closest (& self, key : & K) -> Option<(& K, & V)>",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::contains_key",
      "name": "contains_key",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn contains_key (& self, key : & K) -> bool",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::extend",
      "name": "extend",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn extend (& mut self, iter : impl IntoIterator<Item = (K, V)>)",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::first",
      "name": "first",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn first (& self) -> Option<(& K, & V)>",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::from_ordered_entries",
      "name": "from_ordered_entries",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_ordered_entries (entries : impl IntoIterator<Item = (K, V)>) -> Self",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::get",
      "name": "get",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn get (& self, key : & K) -> Option<& V>",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::insert",
      "name": "insert",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn insert (& mut self, key : K, value : V)",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::insert_or_replace",
      "name": "insert_or_replace",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn insert_or_replace (& mut self, key : K, value : V) -> Option<V>",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::insert_tree",
      "name": "insert_tree",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn insert_tree (& mut self, other : TreeMap<K, V>)",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::iter",
      "name": "iter",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn iter (& self) -> impl Iterator<Item = (& K, & V)> + '_",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::iter_from",
      "name": "iter_from",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn iter_from<'a> (& 'a self, from : & K) -> impl Iterator<Item = (& 'a K, & 'a V)> + 'a",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::last",
      "name": "last",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn last (& self) -> Option<(& K, & V)>",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::remove",
      "name": "remove",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn remove (& mut self, key : & K) -> Option<V>",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::remove_range",
      "name": "remove_range",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn remove_range (& mut self, start : & impl MapSeekTarget<K>, end : & impl MapSeekTarget<K>)",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::retain",
      "name": "retain",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn retain<F : FnMut (& K, & V) -> bool> (& mut self, mut predicate : F)",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::update",
      "name": "update",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn update<F, T> (& mut self, key : & K, f : F) -> Option<T> where F : FnOnce (& mut V) -> T,",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeMap::values",
      "name": "values",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn values (& self) -> impl Iterator<Item = & V> + '_",
      "cfg": [],
      "target": "TreeMap<K, V>"
    },
    {
      "id": "sum_tree::tree_map::TreeSet",
      "name": "TreeSet",
      "kind": "struct",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Clone, Debug, PartialEq, Eq)] pub struct TreeSet<K> (TreeMap<K, ()>) where K : Clone + Ord;",
      "cfg": []
    },
    {
      "id": "sum_tree::tree_map::TreeSet::contains",
      "name": "contains",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn contains (& self, key : & K) -> bool",
      "cfg": [],
      "target": "TreeSet<K>"
    },
    {
      "id": "sum_tree::tree_map::TreeSet::extend",
      "name": "extend",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn extend (& mut self, iter : impl IntoIterator<Item = K>)",
      "cfg": [],
      "target": "TreeSet<K>"
    },
    {
      "id": "sum_tree::tree_map::TreeSet::from_ordered_entries",
      "name": "from_ordered_entries",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn from_ordered_entries (entries : impl IntoIterator<Item = K>) -> Self",
      "cfg": [],
      "target": "TreeSet<K>"
    },
    {
      "id": "sum_tree::tree_map::TreeSet::insert",
      "name": "insert",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn insert (& mut self, key : K)",
      "cfg": [],
      "target": "TreeSet<K>"
    },
    {
      "id": "sum_tree::tree_map::TreeSet::is_empty",
      "name": "is_empty",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn is_empty (& self) -> bool",
      "cfg": [],
      "target": "TreeSet<K>"
    },
    {
      "id": "sum_tree::tree_map::TreeSet::iter",
      "name": "iter",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn iter (& self) -> impl Iterator<Item = & K> + '_",
      "cfg": [],
      "target": "TreeSet<K>"
    },
    {
      "id": "sum_tree::tree_map::TreeSet::iter_from",
      "name": "iter_from",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn iter_from<'a> (& 'a self, key : & K) -> impl Iterator<Item = & 'a K> + 'a",
      "cfg": [],
      "target": "TreeSet<K>"
    },
    {
      "id": "sum_tree::tree_map::TreeSet::remove",
      "name": "remove",
      "kind": "method",
      "package": "gpui-box-sum-tree",
      "crate": "sum_tree",
      "module": "tree_map",
      "path": "sum_tree::tree_map",
      "source": "crates/sum_tree/src/tree_map.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn remove (& mut self, key : & K) -> bool",
      "cfg": [],
      "target": "TreeSet<K>"
    },
    {
      "id": "util_macros::util_macros::line_endings",
      "name": "line_endings",
      "kind": "function",
      "package": "gpui-box-util-macros",
      "crate": "util_macros",
      "module": "util_macros",
      "path": "util_macros::util_macros",
      "source": "crates/util_macros/src/util_macros.rs",
      "summary": "This macro replaces the line endings `\\n` with `\\r\\n` for Windows. But if the target OS is not Windows, the line endings are returned as is.",
      "documentation": "This macro replaces the line endings `\\n` with `\\r\\n` for Windows.\nBut if the target OS is not Windows, the line endings are returned as is.\n\n# Example\n```rust\nuse util_macros::line_endings;\n\nlet text = line_endings!(\"Hello\\nWorld\");\n#[cfg(target_os = \"windows\")]\nassert_eq!(text, \"Hello\\r\\nWorld\");\n#[cfg(not(target_os = \"windows\"))]\nassert_eq!(text, \"Hello\\nWorld\");\n```",
      "signature": "pub fn line_endings (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "util_macros::util_macros::path",
      "name": "path",
      "kind": "function",
      "package": "gpui-box-util-macros",
      "crate": "util_macros",
      "module": "util_macros",
      "path": "util_macros::util_macros",
      "source": "crates/util_macros/src/util_macros.rs",
      "summary": "A macro used in tests for cross-platform path string literals in tests. On Windows it replaces `/` with `\\\\` and adds `C:` to the beginning of absolute paths. On other platforms, the path is returned unmodified.",
      "documentation": "A macro used in tests for cross-platform path string literals in tests. On Windows it replaces\n`/` with `\\\\` and adds `C:` to the beginning of absolute paths. On other platforms, the path is\nreturned unmodified.\n\n# Example\n```rust\nuse util_macros::path;\n\nlet path = path!(\"/Users/user/file.txt\");\n#[cfg(target_os = \"windows\")]\nassert_eq!(path, \"C:\\\\Users\\\\user\\\\file.txt\");\n#[cfg(not(target_os = \"windows\"))]\nassert_eq!(path, \"/Users/user/file.txt\");\n```",
      "signature": "pub fn path (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "util_macros::util_macros::perf",
      "name": "perf",
      "kind": "function",
      "package": "gpui-box-util-macros",
      "crate": "util_macros",
      "module": "util_macros",
      "path": "util_macros::util_macros",
      "source": "crates/util_macros/src/util_macros.rs",
      "summary": "Marks a test as perf-sensitive, to be triaged when checking the performance of a build. This also automatically applies `#[test]`.",
      "documentation": "Marks a test as perf-sensitive, to be triaged when checking the performance\nof a build. This also automatically applies `#[test]`.\n\n# Usage\nApplying this attribute to a test marks it as average importance by default.\nThere are 5 levels of importance (`Critical`, `Important`, `Average`, `Iffy`,\n`Fluff`); see the documentation on `Importance` for details. Add the importance\nas a parameter to override the default (e.g. `#[perf(important)]`).\n\nEach test also has a weight factor. This is irrelevant on its own, but is considered\nwhen comparing results across different runs. By default, this is set to 50;\npass `weight = n` as a parameter to override this. Note that this value is only\nrelevant within its importance category.\n\nBy default, the number of iterations when profiling this test is auto-determined.\nIf this needs to be overwritten, pass the desired iteration count as a parameter\n(`#[perf(iterations = n)]`). Note that the actual profiler may still run the test\nan arbitrary number times; this flag just sets the number of executions before the\nprocess is restarted and global state is reset.\n\nThis attribute should probably not be applied to tests that do any significant\ndisk IO, as locks on files may not be released in time when repeating a test many\ntimes. This might lead to spurious failures.\n\n# Examples\n```rust\nuse util_macros::perf;\n\n#[perf]\nfn generic_test() {\n// Test goes here.\n}\n\n#[perf(fluff, weight = 30)]\nfn cold_path_test() {\n// Test goes here.\n}\n```\n\nThis also works with `#[gpui::test]`s, though in most cases it shouldn't\nbe used with automatic iterations.\n```rust,ignore\nuse util_macros::perf;\n\n#[perf(iterations = 1, critical)]\n#[gpui::test]\nfn oneshot_test(_cx: &mut gpui::TestAppContext) {\n// Test goes here.\n}\n```",
      "signature": "pub fn perf (our_attr : TokenStream, input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "util_macros::util_macros::uri",
      "name": "uri",
      "kind": "function",
      "package": "gpui-box-util-macros",
      "crate": "util_macros",
      "module": "util_macros",
      "path": "util_macros::util_macros",
      "source": "crates/util_macros/src/util_macros.rs",
      "summary": "This macro replaces the path prefix `file:///` with `file:///C:/` for Windows. But if the target OS is not Windows, the URI is returned as is.",
      "documentation": "This macro replaces the path prefix `file:///` with `file:///C:/` for Windows.\nBut if the target OS is not Windows, the URI is returned as is.\n\n# Example\n```rust\nuse util_macros::uri;\n\nlet uri = uri!(\"file:///path/to/file\");\n#[cfg(target_os = \"windows\")]\nassert_eq!(uri, \"file:///C:/path/to/file\");\n#[cfg(not(target_os = \"windows\"))]\nassert_eq!(uri, \"file:///path/to/file\");\n```",
      "signature": "pub fn uri (input : TokenStream) -> TokenStream",
      "cfg": []
    },
    {
      "id": "xtask::api::check",
      "name": "check",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "api",
      "path": "xtask::api",
      "source": "xtask/src/api.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn check (root : & Path) -> Result<()>",
      "cfg": []
    },
    {
      "id": "xtask::api::generate",
      "name": "generate",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "api",
      "path": "xtask::api",
      "source": "xtask/src/api.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn generate (root : & Path) -> Result<()>",
      "cfg": []
    },
    {
      "id": "xtask::dependencies::check",
      "name": "check",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "dependencies",
      "path": "xtask::dependencies",
      "source": "xtask/src/dependencies.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn check (root : & Path, args : & [String]) -> Result<()>",
      "cfg": []
    },
    {
      "id": "xtask::icons::check",
      "name": "check",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "icons",
      "path": "xtask::icons",
      "source": "xtask/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn check (root : & Path) -> Result<()>",
      "cfg": []
    },
    {
      "id": "xtask::icons::generate",
      "name": "generate",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "icons",
      "path": "xtask::icons",
      "source": "xtask/src/icons.rs",
      "summary": "Regenerate Rust bindings from the frozen local catalogue without fetching or reimporting upstream assets.",
      "documentation": "Regenerate Rust bindings from the frozen local catalogue without fetching\nor reimporting upstream assets.",
      "signature": "pub fn generate (root : & Path) -> Result<()>",
      "cfg": []
    },
    {
      "id": "xtask::icons::import",
      "name": "import",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "icons",
      "path": "xtask::icons",
      "source": "xtask/src/icons.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn import (root : & Path, source_root : & Path) -> Result<()>",
      "cfg": []
    },
    {
      "id": "xtask::package::check",
      "name": "check",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "package",
      "path": "xtask::package",
      "source": "xtask/src/package.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn check (root : & Path) -> Result<()>",
      "cfg": []
    },
    {
      "id": "xtask::package::plan",
      "name": "plan",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "package",
      "path": "xtask::package",
      "source": "xtask/src/package.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn plan (root : & Path) -> Result<()>",
      "cfg": []
    },
    {
      "id": "xtask::package::publish",
      "name": "publish",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "package",
      "path": "xtask::package",
      "source": "xtask/src/package.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn publish (root : & Path, args : & [String]) -> Result<()>",
      "cfg": []
    },
    {
      "id": "xtask::site::check",
      "name": "check",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "site",
      "path": "xtask::site",
      "source": "xtask/src/site.rs",
      "summary": "Builds into a scratch directory and throws it away. The site's inputs are gate-checked already, so what is left to prove is that they still render.",
      "documentation": "Builds into a scratch directory and throws it away. The site's inputs are\ngate-checked already, so what is left to prove is that they still render.",
      "signature": "pub fn check (root : & Path) -> Result<()>",
      "cfg": []
    },
    {
      "id": "xtask::site::check_with_browser",
      "name": "check_with_browser",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "site",
      "path": "xtask::site",
      "source": "xtask/src/site.rs",
      "summary": "Checks the complete publishable site against an actual browser build.",
      "documentation": "Checks the complete publishable site against an actual browser build.",
      "signature": "pub fn check_with_browser (root : & Path, browser_gallery : & Path) -> Result<()>",
      "cfg": []
    },
    {
      "id": "xtask::site::generate",
      "name": "generate",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "site",
      "path": "xtask::site",
      "source": "xtask/src/site.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn generate (root : & Path, out : Option<& str>, browser_gallery : & Path) -> Result<PathBuf>",
      "cfg": []
    },
    {
      "id": "xtask::strings::Suspect",
      "name": "Suspect",
      "kind": "struct",
      "package": "xtask",
      "crate": "xtask",
      "module": "strings",
      "path": "xtask::strings",
      "source": "xtask/src/strings.rs",
      "summary": "",
      "documentation": "",
      "signature": "# [derive (Debug, PartialEq, Eq)] pub struct Suspect { pub file : String, pub line : usize, pub text : String, }",
      "cfg": []
    },
    {
      "id": "xtask::strings::check",
      "name": "check",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "strings",
      "path": "xtask::strings",
      "source": "xtask/src/strings.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn check (root : & Path) -> Result<()>",
      "cfg": []
    },
    {
      "id": "xtask::strings::generate",
      "name": "generate",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "strings",
      "path": "xtask::strings",
      "source": "xtask/src/strings.rs",
      "summary": "Rewrites the allowlist from what is in the tree, for the one case where that is honest: a reviewer who has just read every entry.",
      "documentation": "Rewrites the allowlist from what is in the tree, for the one case where\nthat is honest: a reviewer who has just read every entry.",
      "signature": "pub fn generate (root : & Path) -> Result<()>",
      "cfg": []
    },
    {
      "id": "xtask::strings::suspects",
      "name": "suspects",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "strings",
      "path": "xtask::strings",
      "source": "xtask/src/strings.rs",
      "summary": "Every suspect literal in one source, as (line, text).",
      "documentation": "Every suspect literal in one source, as (line, text).",
      "signature": "pub fn suspects (source : & str) -> Vec<(usize, String)>",
      "cfg": []
    },
    {
      "id": "xtask::typography::check",
      "name": "check",
      "kind": "function",
      "package": "xtask",
      "crate": "xtask",
      "module": "typography",
      "path": "xtask::typography",
      "source": "xtask/src/typography.rs",
      "summary": "",
      "documentation": "",
      "signature": "pub fn check (root : & Path) -> Result<()>",
      "cfg": []
    }
  ],
  "components": [
    {
      "name": "AbilityBar",
      "kind": "builder",
      "path": "gpui_kit::game::AbilityBar",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "Standard ability controls with cooldown, charge, cost, shortcut, and refusal presentation.",
      "construct": [
        "new(ident: impl Into<Ident>, abilities: AbilitySet) -> Self"
      ],
      "options": [
        "selected(selected: impl Into<AbilityId>) -> Self",
        "on_event(handler: impl Fn(&AbilityBarEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "Activate"
      ],
      "scenes": [
        "game-ui"
      ]
    },
    {
      "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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "accordion"
      ]
    },
    {
      "name": "ActionSheet",
      "kind": "view",
      "path": "gpui_kit::overlay::ActionSheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "A sheet of caller-owned actions. Choosing a row does not close the sheet or assume success; the caller supplies pending/loading/error and closes it.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [],
      "commands": [
        "set_actions(actions: Vec<SheetAction>, cx: &mut Context<Self>)",
        "set_state(state: SheetActionState, cx: &mut Context<Self>)",
        "open(window: &mut Window, cx: &mut Context<Self>)",
        "close(window: &mut Window, cx: &mut Context<Self>)"
      ],
      "queries": [
        "sheet() -> Entity<BottomSheet>"
      ],
      "slots": [],
      "reports": [
        "ActionRequested",
        "Sheet"
      ],
      "scenes": [
        "action-sheet"
      ]
    },
    {
      "name": "AgentActivityLine",
      "kind": "builder",
      "path": "gpui_kit::agent::AgentActivityLine",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "The localized execution sentence and its non-colour status mark.",
      "construct": [
        "new(ident: impl Into<Ident>, execution: AgentExecutionState) -> Self"
      ],
      "options": [
        "tint(tint: Hsla) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "agent-avatar"
      ]
    },
    {
      "name": "AgentAvatar",
      "kind": "builder",
      "path": "gpui_kit::agent::AgentAvatar",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "A status-coloured agent identity with a separate presence mark.",
      "construct": [
        "new(ident: impl Into<Ident>, agent: AgentSnapshot) -> Self"
      ],
      "options": [
        "image(image: impl Into<SharedString>) -> Self",
        "image_source(image: gpui::ImageSource) -> Self",
        "tint(tint: Hsla) -> Self",
        "size(size: f32) -> Self",
        "parent(parent: impl Into<Ident>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "agent-avatar"
      ]
    },
    {
      "name": "AgentCard",
      "kind": "builder",
      "path": "gpui_kit::agent::AgentCard",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "A complete summary of one agent and its current caller-owned task.",
      "construct": [
        "new(ident: impl Into<Ident>, agent: AgentSnapshot) -> Self"
      ],
      "options": [
        "task_label(label: impl Into<SharedString>) -> Self",
        "image(image: impl Into<SharedString>) -> Self",
        "image_source(image: gpui::ImageSource) -> Self",
        "tint(tint: Hsla) -> Self",
        "selected(selected: bool) -> Self",
        "on_action(handler: impl Fn(AgentUiAction, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "agent-roster"
      ]
    },
    {
      "name": "AgentDocument",
      "kind": "builder",
      "path": "gpui_kit::content::AgentDocument",
      "source": "crates/gpui-kit/src/content/agent_document.rs",
      "summary": "A read-only sequence of typed agent output blocks.",
      "construct": [
        "remeasure_block(ident: &Ident, block: &str, window: &mut Window, cx: &mut App)",
        "work(ident: &Ident, window: &Window, cx: &mut App) -> AgentDocumentWork",
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "configure_markdown(configure: impl Fn(&SharedString, Markdown) -> Markdown + 'static) -> Self",
        "virtualized(rows: usize) -> Self",
        "state(state: AgentDocumentState) -> Self",
        "block(block: AgentDocumentBlock) -> Self",
        "blocks(blocks: impl IntoIterator<Item = AgentDocumentBlock>) -> Self",
        "on_event(handler: impl Fn(&AgentDocumentEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [
        "duplicate_ids() -> Vec<SharedString>"
      ],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [
        "Markdown"
      ],
      "scenes": [
        "agent-document"
      ]
    },
    {
      "name": "AgentGroup",
      "kind": "builder",
      "path": "gpui_kit::agent::AgentGroup",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "A compact overlapping group of agent identities with an overflow count.",
      "construct": [
        "new(ident: impl Into<Ident>, agents: impl IntoIterator<Item = AgentSnapshot>) -> Self"
      ],
      "options": [
        "max_visible(max_visible: usize) -> Self",
        "appearances(appearances: impl IntoIterator<Item = AgentAppearance>) -> Self",
        "size(size: f32) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "agent-roster"
      ]
    },
    {
      "name": "AgentPlan",
      "kind": "builder",
      "path": "gpui_kit::agent::AgentPlan",
      "source": "crates/gpui-kit/src/agent/plan.rs",
      "summary": "A plan, as a run of marks and one line about the item in flight.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "item(item: PlanItem) -> Self",
        "items(items: impl IntoIterator<Item = PlanItem>) -> Self",
        "on_pick(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [
        "done() -> usize"
      ],
      "slots": [],
      "reports": [],
      "scenes": [
        "agent-plan"
      ]
    },
    {
      "name": "AgentRoster",
      "kind": "builder",
      "path": "gpui_kit::agent::AgentRoster",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "A virtualized list of agents with standard identity and activity rows.",
      "construct": [
        "new(ident: impl Into<Ident>, agents: impl IntoIterator<Item = AgentSnapshot>) -> Self",
        "from_run(ident: impl Into<Ident>, run: &AgentRunSnapshot) -> Self"
      ],
      "options": [
        "tasks(tasks: impl IntoIterator<Item = AgentTaskSnapshot>) -> Self",
        "appearances(appearances: impl IntoIterator<Item = AgentAppearance>) -> Self",
        "selected(selected: impl Into<AgentId>) -> Self",
        "visible_rows(rows: usize) -> Self",
        "on_action(handler: impl Fn(AgentUiAction, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "agent-roster"
      ]
    },
    {
      "name": "AgentRunCanvas",
      "kind": "builder",
      "path": "gpui_kit::agent::AgentRunCanvas",
      "source": "crates/gpui-kit/src/agent/canvas.rs",
      "summary": "A typed, read-mostly view of an AgentRunSnapshot on a node canvas.",
      "construct": [
        "new(ident: impl Into<Ident>, run: AgentRunSnapshot) -> Self"
      ],
      "options": [
        "layout(layout: AgentRunLayout) -> Self",
        "position(subject: RunSubjectId, x: f32, y: f32) -> Self",
        "selected(selected: impl IntoIterator<Item = RunSubjectId>) -> Self",
        "viewport(viewport: GraphViewport) -> Self",
        "arrangeable(arrangeable: bool) -> Self",
        "on_event(handler: impl Fn(&AgentRunCanvasEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "SelectionChanged",
        "ViewportChanged",
        "PositionChanged"
      ],
      "scenes": [
        "agent-run-canvas"
      ]
    },
    {
      "name": "AgentRunIssues",
      "kind": "builder",
      "path": "gpui_kit::agent::AgentRunIssues",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "A single truthful notice for malformed multi-agent snapshot structure.",
      "construct": [
        "new(ident: impl Into<Ident>, issues: impl IntoIterator<Item = AgentModelIssue>) -> Self",
        "from_run(ident: impl Into<Ident>, run: &AgentRunSnapshot) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "agent-run-issues"
      ]
    },
    {
      "name": "AnchorList",
      "kind": "builder",
      "path": "gpui_kit::navigation::AnchorList",
      "source": "crates/gpui-kit/src/navigation/anchor_list.rs",
      "summary": "A horizontal reading-order list of links to sections in the current page.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "anchor(anchor: Anchor) -> Self",
        "anchors(anchors: impl IntoIterator<Item = Anchor>) -> Self",
        "active(id: impl Into<SharedString>) -> Self",
        "on_navigate(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "overflow_after(count: usize) -> Self",
        "overflow_menu(menu: Entity<Menu>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "anchor-list"
      ]
    },
    {
      "name": "AnimatedNumber",
      "kind": "builder",
      "path": "gpui_kit::display::animated_number::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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "animated-number"
      ]
    },
    {
      "name": "AppBar",
      "kind": "builder",
      "path": "gpui_kit::layout::AppBar",
      "source": "crates/gpui-kit/src/layout/app_bar.rs",
      "summary": "A page title with caller-owned leading and trailing actions. Slots should contain accessible controls. Safe areas belong to the enclosing PageLayout.",
      "construct": [
        "new(ident: impl Into<Ident>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "leading(content: impl IntoElement) -> Self",
        "trailing(content: impl IntoElement) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "mobile-page"
      ]
    },
    {
      "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"
      ],
      "slots": [],
      "reports": [],
      "scenes": [
        "approval"
      ]
    },
    {
      "name": "AreaChart",
      "kind": "builder",
      "path": "gpui_kit::display::chart::AreaChart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A filled area chart over one or more host-owned series.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: ChartState) -> Self"
      ],
      "options": [
        "axes(axes: ChartAxes) -> Self",
        "polyline() -> Self",
        "crosshair() -> Self",
        "current(series_id: impl Into<SharedString>, point_id: impl Into<SharedString>) -> Self",
        "on_current(handler: impl Fn(ChartSelection, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "chart"
      ]
    },
    {
      "name": "ArtifactPreview",
      "kind": "builder",
      "path": "gpui_kit::agent::ArtifactPreview",
      "source": "crates/gpui-kit/src/agent/artifact.rs",
      "summary": "A titled pane for a generated artifact.",
      "construct": [
        "new(ident: impl Into<Ident>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "kind(kind: ArtifactKind) -> Self",
        "language(language: Language) -> Self",
        "body(body: impl Into<SharedString>) -> Self",
        "state(state: ArtifactPreviewState) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "artifact-preview"
      ]
    },
    {
      "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"
      ],
      "slots": [],
      "reports": [],
      "scenes": [
        "aspect-ratio"
      ]
    },
    {
      "name": "AttachmentTile",
      "kind": "builder",
      "path": "gpui_kit::display::attachment::AttachmentTile",
      "source": "crates/gpui-kit/src/display/attachment.rs",
      "summary": "A standalone attachment tile, separate from message-list attachment metadata. All four slots compose native elements: media, title, description, and actions. A supplied preview remains visible on failure because already-known media is not erased by a failed transfer or refresh.",
      "construct": [
        "new(ident: impl Into<Ident>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "description(description: impl Into<SharedString>) -> Self",
        "state(state: AttachmentState) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "media",
        "title",
        "description",
        "actions"
      ],
      "reports": [],
      "scenes": [
        "attachment"
      ]
    },
    {
      "name": "AudioPlayer",
      "kind": "builder",
      "path": "gpui_kit::media::AudioPlayer",
      "source": "crates/gpui-kit/src/media/audio_player.rs",
      "summary": "A player for one piece of audio.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "title(title: impl Into<SharedString>) -> Self",
        "subtitle(subtitle: impl Into<SharedString>) -> Self",
        "transport(transport: Rc<dyn MediaTransport>) -> Self",
        "elapsed(elapsed: impl Into<SharedString>) -> Self",
        "remaining(remaining: impl Into<SharedString>) -> Self",
        "peaks(peaks: impl IntoIterator<Item = f32>) -> Self",
        "step_seconds(seconds: f32) -> Self",
        "speeds(speeds: impl IntoIterator<Item = f32>) -> Self",
        "on_event(handler: impl Fn(&MediaEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "audio-player"
      ]
    },
    {
      "name": "AudioWaveform",
      "kind": "builder",
      "path": "gpui_kit::media::AudioWaveform",
      "source": "crates/gpui-kit/src/media/waveform.rs",
      "summary": "A measured waveform the host already sampled.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "peaks(peaks: impl IntoIterator<Item = f32>) -> Self",
        "playhead(fraction: f32) -> Self",
        "state(state: AudioWaveformState) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty"
      ],
      "reports": [],
      "scenes": [
        "audio-waveform"
      ]
    },
    {
      "name": "Avatar",
      "kind": "builder",
      "path": "gpui_kit::display::avatar::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": [
        "presence(presence: AvatarPresence) -> Self",
        "id(ident: impl Into<Ident>) -> Self",
        "image(image: impl Into<SharedString>) -> Self",
        "image_source(image: gpui::ImageSource) -> Self",
        "size(size: f32) -> Self",
        "tint(tint: Hsla) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "avatar"
      ]
    },
    {
      "name": "AvatarGroup",
      "kind": "builder",
      "path": "gpui_kit::display::avatar::AvatarGroup",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "Several identities in one place, overlapping, with the rest counted.",
      "construct": [
        "new() -> Self"
      ],
      "options": [
        "id(ident: impl Into<Ident>) -> Self",
        "members(members: impl IntoIterator<Item = Avatar>) -> Self",
        "size(size: f32) -> Self",
        "overflow(overflow: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "avatar"
      ]
    },
    {
      "name": "Badge",
      "kind": "builder",
      "path": "gpui_kit::display::badge::Badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "A compact status label.",
      "construct": [
        "new(label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "count() -> Self",
        "icon(glyph: Glyph) -> Self",
        "dot(dot: bool) -> Self",
        "id(ident: impl Into<Ident>) -> Self",
        "tone(tone: Tone) -> Self",
        "neutral() -> Self",
        "accent() -> Self",
        "success() -> Self",
        "warning() -> Self",
        "danger() -> Self",
        "info() -> Self",
        "tint(tint: Hsla) -> Self",
        "variant(variant: Variant) -> Self",
        "color(color: impl Into<ColorChoice>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "badge"
      ]
    },
    {
      "name": "Banner",
      "kind": "builder",
      "path": "gpui_kit::display::status::Banner",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "A page-level tinted report: title, action, and a way to close it.",
      "construct": [
        "new(ident: impl Into<Ident>, message: impl Into<SharedString>, tone: Tone) -> Self"
      ],
      "options": [
        "title(title: impl Into<SharedString>) -> Self",
        "action(action: impl IntoElement) -> Self",
        "on_dismiss(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "banner"
      ]
    },
    {
      "name": "BarChart",
      "kind": "builder",
      "path": "gpui_kit::display::chart::BarChart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A bar chart over one host-owned series of categorized values.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: ChartState) -> Self"
      ],
      "options": [
        "axes(axes: ChartAxes) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "chart"
      ]
    },
    {
      "name": "BarLoader",
      "kind": "builder",
      "path": "gpui_kit::display::loading::BarLoader",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "A thin working strip for the edge of a region that is filling in.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "tint(tint: impl Into<Hsla>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "loading"
      ]
    },
    {
      "name": "BottomNavigation",
      "kind": "builder",
      "path": "gpui_kit::navigation::BottomNavigation",
      "source": "crates/gpui-kit/src/navigation/bottom_navigation.rs",
      "summary": "Equal-width destination actions for compact pages. No safe-area padding is added here: PageLayout consumes system insets once for all its slots. Without a handler destinations are disabled rather than falsely operable.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "items(items: impl IntoIterator<Item = NavigationItem>) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "bottom-navigation"
      ]
    },
    {
      "name": "BottomSheet",
      "kind": "view",
      "path": "gpui_kit::overlay::BottomSheet",
      "source": "crates/gpui-kit/src/overlay/sheet.rs",
      "summary": "A retained bottom Drawer with explicit detents and cancellable drag preview.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [],
      "commands": [
        "set_detents(detents: Vec<SheetDetent>, selected: impl Into<SharedString>, cx: &mut Context<Self>) -> bool",
        "set_detent(id: impl Into<SharedString>, cx: &mut Context<Self>) -> bool",
        "set_title(title: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_content(content: Option<Body>, cx: &mut Context<Self>)",
        "set_scroll_handle(scroll: Option<ScrollHandle>, cx: &mut Context<Self>)",
        "set_focus_stops(stops: impl IntoIterator<Item = FocusHandle>, cx: &mut Context<Self>)",
        "set_dismissable(dismissable: bool, cx: &mut Context<Self>)",
        "open(window: &mut Window, cx: &mut Context<Self>)",
        "close(window: &mut Window, cx: &mut Context<Self>)",
        "settle(cx: &mut Context<Self>)"
      ],
      "queries": [
        "selected_detent() -> &SharedString",
        "is_open(cx: &App) -> bool"
      ],
      "slots": [],
      "reports": [
        "Opened",
        "Dismissed",
        "Closed",
        "DetentRequested"
      ],
      "scenes": [
        "bottom-sheet"
      ]
    },
    {
      "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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "breadcrumb"
      ]
    },
    {
      "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": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "browser-panel"
      ]
    },
    {
      "name": "Bubble",
      "kind": "builder",
      "path": "gpui_kit::display::bubble::Bubble",
      "source": "crates/gpui-kit/src/display/bubble.rs",
      "summary": "A token-backed message surface with caller-owned content.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "content(content: impl IntoElement) -> Self",
        "actions(actions: impl IntoIterator<Item = impl IntoElement>) -> Self",
        "placement(placement: BubblePlacement) -> Self",
        "grouped(grouped: bool) -> Self",
        "max_width(width: f32) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "bubble"
      ]
    },
    {
      "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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "data-grid"
      ]
    },
    {
      "name": "Button",
      "kind": "builder",
      "path": "gpui_kit::controls::button::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",
        "accessible_description(description: 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: impl Into<ButtonStyle>) -> Self",
        "color(color: impl Into<ColorChoice>) -> Self",
        "ground(ground: Surface) -> 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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "button"
      ]
    },
    {
      "name": "ButtonGroup",
      "kind": "builder",
      "path": "gpui_kit::controls::button::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: impl Into<EffectScoped<Button>>) -> Self",
        "children<B: Into<EffectScoped<Button>>>(buttons: impl IntoIterator<Item = B>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "actions"
      ]
    },
    {
      "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_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "set_multi(multi: bool, cx: &mut Context<Self>)",
        "reset_navigation(cx: &mut Context<Self>)",
        "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": [
        "is_disabled() -> bool",
        "adapter() -> &SharedDateAdapter",
        "selection() -> &[Day]",
        "cursor() -> Option<Day>",
        "hovered_day() -> Option<Day>",
        "shown_month() -> Option<MonthKey>"
      ],
      "slots": [
        "empty"
      ],
      "reports": [
        "Picked",
        "MonthShown",
        "Hovered"
      ],
      "scenes": [
        "calendar"
      ]
    },
    {
      "name": "Callout",
      "kind": "builder",
      "path": "gpui_kit::display::status::Callout",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "A tinted message block.",
      "construct": [
        "new(message: impl Into<SharedString>, tone: Tone) -> Self"
      ],
      "options": [
        "id(ident: impl Into<Ident>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "status"
      ]
    },
    {
      "name": "CandlestickChart",
      "kind": "builder",
      "path": "gpui_kit::display::plot::CandlestickChart",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Candlesticks over caller-owned normalized OHLC readings.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: PlotState<Vec<Candlestick>>) -> Self"
      ],
      "options": [
        "body_width(normalized: f32) -> Self",
        "rising_tint(tint: Hsla) -> Self",
        "falling_tint(tint: Hsla) -> Self",
        "current(id: impl Into<SharedString>) -> Self",
        "on_current(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "plot"
      ]
    },
    {
      "name": "CanvasToolbar",
      "kind": "builder",
      "path": "gpui_kit::canvas::CanvasToolbar",
      "source": "crates/gpui-kit/src/canvas/toolbar.rs",
      "summary": "Compact canvas chrome: a host-formatted zoom and the intents the host can actually carry out.",
      "construct": [
        "new(ident: impl Into<Ident>, zoom: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "actions(actions: impl IntoIterator<Item = CanvasToolbarAction>) -> Self",
        "snap(snap: bool) -> Self",
        "glass(preset: GlassPreset) -> Self",
        "on_action(handler: impl Fn(CanvasToolbarAction, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "Action"
      ],
      "scenes": [
        "canvas-tools"
      ]
    },
    {
      "name": "Card",
      "kind": "builder",
      "path": "gpui_kit::display::card::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",
        "name(name: impl Into<SharedString>) -> Self",
        "variant(variant: CardVariant) -> Self",
        "ground(ground: Surface) -> Self",
        "header(header: CardHeader) -> Self",
        "media(media: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "footer(footer: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "padded(padded: bool) -> Self",
        "padding(padding: impl Into<Option<Space>>) -> Self",
        "on_click(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "card"
      ]
    },
    {
      "name": "Carousel",
      "kind": "builder",
      "path": "gpui_kit::navigation::Carousel",
      "source": "crates/gpui-kit/src/navigation/carousel.rs",
      "summary": "A token-backed paged viewport.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "items(items: impl IntoIterator<Item = CarouselItem>) -> Self",
        "active(id: impl Into<SharedString>) -> Self",
        "phase(phase: Phase) -> Self",
        "reason(reason: impl Into<SharedString>) -> Self",
        "stale(stale: bool) -> Self",
        "looped(looped: bool) -> Self",
        "on_event(handler: impl Fn(CarouselEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "Previous",
        "Next",
        "Selected"
      ],
      "scenes": [
        "carousel"
      ]
    },
    {
      "name": "CartesianChart",
      "kind": "builder",
      "path": "gpui_kit::display::chart::cartesian::CartesianChart",
      "source": "crates/gpui-kit/src/display/chart/cartesian.rs",
      "summary": "Shared-coordinate line/area/bar/scatter layers over raw f64 observations. Missing samples break paths. All-zero data is ready, not empty. An invalid dataset is an explicit error. Stale data remains visible with its reason.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, x: ChartScale, axes: impl IntoIterator<Item = ValueAxis>) -> Self"
      ],
      "options": [
        "series(series: impl IntoIterator<Item = RawSeries>) -> Self",
        "shared_series(series: Rc<Vec<RawSeries>>) -> Self",
        "animate(enabled: bool) -> Self",
        "motion(motion: CartesianMotion) -> Self",
        "sampling(sampling: PathSampling) -> Self",
        "custom_marks(build: impl Fn(&RawSeries, &RawPoint) -> Option<CustomMark> + 'static) -> Self",
        "orientation(orientation: ChartOrientation) -> Self",
        "x_axis_side(side: AxisSide) -> Self",
        "axis_side(axis: impl Into<SharedString>, side: AxisSide) -> Result<Self, DataError>",
        "state(state: impl HasPhase) -> Self",
        "hidden(ids: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "hovered(point: Option<ChartSelection>) -> Self",
        "selected(point: Option<ChartSelection>) -> Self",
        "emphasized(series: Option<impl Into<SharedString>>) -> Self",
        "tooltip(mode: TooltipMode) -> Self",
        "tooltip_content(build: impl Fn(&ChartTooltipData, &mut Window, &mut App) -> gpui::AnyElement + 'static) -> Self",
        "floating_tooltip(visible: bool) -> Self",
        "range(range: CartesianRange) -> Self",
        "references(references: impl IntoIterator<Item = ChartReference>) -> Self",
        "stale(reason: impl Into<SharedString>) -> Self",
        "height(height: f32) -> Self",
        "format_ticks(format: impl Fn(&str, f64) -> SharedString + 'static) -> Self",
        "x_ticks(ticks: impl IntoIterator<Item = ChartTick>) -> Result<Self, TickError>",
        "axis_ticks(axis: impl Into<SharedString>, ticks: impl IntoIterator<Item = ChartTick>) -> Result<Self, TickError>",
        "on_event(handler: impl Fn(CartesianEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "cartesian",
        "cartesian-linked",
        "cartesian-layout",
        "cartesian-lifecycle",
        "cartesian-dense",
        "cartesian-states",
        "raw-candlestick"
      ]
    },
    {
      "name": "Cascader",
      "kind": "view",
      "path": "gpui_kit::controls::cascader::Cascader",
      "source": "crates/gpui-kit/src/controls/cascader.rs",
      "summary": "A menu of progressively revealed caller-owned option columns.",
      "construct": [
        "new(ident: impl Into<Ident>, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "options(options: impl IntoIterator<Item = CascaderOption>) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "name(name: impl Into<SharedString>) -> Self",
        "placeholder(placeholder: impl Into<SharedString>) -> Self"
      ],
      "commands": [
        "set_options(options: Vec<CascaderOption>, cx: &mut Context<Self>)",
        "set_selected(selected: Option<SharedString>, cx: &mut Context<Self>)",
        "set_name(name: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_placeholder(placeholder: Option<SharedString>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "open(window: &mut Window, cx: &mut Context<Self>)",
        "close(cx: &mut Context<Self>)"
      ],
      "queries": [
        "selected_id() -> Option<&SharedString>",
        "is_disabled() -> bool",
        "is_open() -> bool",
        "open_path() -> &[SharedString]"
      ],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [
        "Selected",
        "Expanded",
        "Retry",
        "Opened",
        "Closed"
      ],
      "scenes": [
        "cascader"
      ]
    },
    {
      "name": "ChartLegend",
      "kind": "builder",
      "path": "gpui_kit::display::chart::ChartLegend",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A standalone legend that reports series hide and show.",
      "construct": [
        "new(ident: impl Into<Ident>, series: impl IntoIterator<Item = ChartSeries>) -> Self"
      ],
      "options": [
        "hidden(ids: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "on_toggle(handler: impl Fn(SharedString, bool, &mut Window, &mut App) + 'static) -> Self",
        "on_emphasis(handler: impl Fn(Option<SharedString>, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "chart"
      ]
    },
    {
      "name": "Checkbox",
      "kind": "builder",
      "path": "gpui_kit::controls::toggle::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",
        "bind(binding: &Binding<bool>, cx: &App) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "choice"
      ]
    },
    {
      "name": "CinematicEffect",
      "kind": "builder",
      "path": "gpui_kit::effects::CinematicEffect",
      "source": "crates/gpui-kit/src/effects/dotlottie.rs",
      "summary": "A semantic one-shot effect with an optional prepared dotLottie clip.",
      "construct": [
        "new(ident: impl Into<Ident>, plan: EffectPlan) -> Self"
      ],
      "options": [
        "clip(clip: Rc<dyn DotLottieClip>) -> Self",
        "resolved(clip: Result<Rc<dyn DotLottieClip>, DotLottieError>) -> Self",
        "unavailable(error: DotLottieError) -> Self",
        "sample_at(elapsed: Duration) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "cinematic-effects"
      ]
    },
    {
      "name": "ClarificationPanel",
      "kind": "view",
      "path": "gpui_kit::agent::ClarificationPanel",
      "source": "crates/gpui-kit/src/agent/clarification.rs",
      "summary": "One clarifying question, with the answer left to the caller.",
      "construct": [
        "new(ident: impl Into<Ident>, question: impl Into<SharedString>, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "option(option: ClarificationOption) -> Self",
        "options(options: impl IntoIterator<Item = ClarificationOption>) -> Self",
        "multiple() -> Self",
        "skippable() -> Self",
        "status(status: ClarificationStatus) -> Self"
      ],
      "commands": [
        "set_status(status: ClarificationStatus, cx: &mut Context<Self>)",
        "choose(id: impl Into<SharedString>, cx: &mut Context<Self>)",
        "answer(cx: &mut Context<Self>)",
        "skip(cx: &mut Context<Self>)"
      ],
      "queries": [
        "current_status() -> &ClarificationStatus",
        "candidates() -> &[ClarificationOption]",
        "chosen() -> &[SharedString]"
      ],
      "slots": [],
      "reports": [],
      "scenes": [
        "clarification"
      ]
    },
    {
      "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"
      ],
      "slots": [
        "empty"
      ],
      "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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "collapsible"
      ]
    },
    {
      "name": "ColorPicker",
      "kind": "builder",
      "path": "gpui_kit::controls::color_picker::ColorPicker",
      "source": "crates/gpui-kit/src/controls/color_picker.rs",
      "summary": "Hue, saturation-brightness, optional opacity, and host-owned swatches.",
      "construct": [
        "new(ident: impl Into<Ident>, value: Hsla) -> Self"
      ],
      "options": [
        "alpha(alpha: bool) -> Self",
        "presets(colors: impl IntoIterator<Item = Hsla>) -> Self",
        "recent(colors: impl IntoIterator<Item = Hsla>) -> Self",
        "on_change(handler: impl Fn(Hsla, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "color-picker"
      ]
    },
    {
      "name": "ColorSwatch",
      "kind": "builder",
      "path": "gpui_kit::controls::color_picker::ColorSwatch",
      "source": "crates/gpui-kit/src/controls/color_picker.rs",
      "summary": "A clickable colour chip. Reports the colour it was given; applies nothing.",
      "construct": [
        "new(ident: impl Into<Ident>, color: Hsla) -> Self"
      ],
      "options": [
        "selected(selected: bool) -> Self",
        "on_click(handler: impl Fn(Hsla, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "color-picker"
      ]
    },
    {
      "name": "Combobox",
      "kind": "view",
      "path": "gpui_kit::controls::combobox::Combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "A 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",
        "presentation(presentation: popover::PickerPresentation) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "name(name: impl Into<SharedString>) -> Self",
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "invalid(invalid: bool) -> Self",
        "allow_custom(allow_custom: bool) -> Self"
      ],
      "commands": [
        "set_presentation(presentation: popover::PickerPresentation, cx: &mut Context<Self>)",
        "set_name(name: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_invalid(invalid: bool, cx: &mut Context<Self>)",
        "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_placeholder(placeholder: Option<SharedString>, cx: &mut Context<Self>)",
        "set_allow_custom(allow: bool, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, 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>",
        "is_disabled() -> bool"
      ],
      "slots": [
        "empty"
      ],
      "reports": [
        "QueryChanged",
        "Selected",
        "Custom",
        "Opened",
        "Closed"
      ],
      "scenes": [
        "touch-pickers",
        "touch-pickers-open",
        "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>"
      ],
      "slots": [
        "empty"
      ],
      "reports": [
        "QueryChanged",
        "Invoked",
        "Dismissed"
      ],
      "scenes": [
        "command-palette"
      ]
    },
    {
      "name": "Container",
      "kind": "builder",
      "path": "gpui_kit::layout::Container",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "A centered, token-backed page container.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "width(width: ContainerWidth) -> Self",
        "padding(padding: Space) -> Self",
        "child(child: impl IntoElement) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "container"
      ]
    },
    {
      "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>"
      ],
      "slots": [],
      "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",
        "presentation(presentation: ContextMenuPresentation) -> Self",
        "name(name: impl Into<SharedString>) -> Self",
        "target(target: impl Into<SharedString>) -> Self",
        "content(content: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self"
      ],
      "commands": [
        "set_name(name: impl Into<SharedString>, window: &mut Window, cx: &mut Context<Self>) -> Result<(), NativeMenuError>",
        "set_presentation(presentation: ContextMenuPresentation, window: &mut Window, cx: &mut Context<Self>) -> Result<(), NativeMenuError>",
        "set_target(target: Option<SharedString>, window: &mut Window, cx: &mut Context<Self>) -> Result<(), NativeMenuError>",
        "set_content(content: Option<Content>, window: &mut Window, cx: &mut Context<Self>) -> Result<(), NativeMenuError>",
        "set_items(items: Vec<MenuItem>, window: &mut Window, cx: &mut Context<Self>) -> Result<(), NativeMenuError>",
        "open_at(position: Point<Pixels>, window: &mut Window, cx: &mut Context<Self>) -> Result<(), NativeMenuError>",
        "close(window: &mut Window, cx: &mut Context<Self>) -> Result<(), NativeMenuError>",
        "dismiss(window: &mut Window, cx: &mut Context<Self>) -> Result<(), NativeMenuError>"
      ],
      "queries": [
        "is_open() -> bool",
        "position() -> Point<Pixels>"
      ],
      "slots": [],
      "reports": [
        "Opened",
        "Invoked",
        "Dismissed",
        "Closed",
        "Unavailable"
      ],
      "scenes": [
        "context-menu"
      ]
    },
    {
      "name": "ContinuousHeatmap",
      "kind": "builder",
      "path": "gpui_kit::display::heatmap::ContinuousHeatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "A raw-valued matrix with visible cell values and a numeric color legend. Selection is caller controlled. Invalid coordinates, identities, and readings produce an explicit error; a stale refresh retains verified cells and reason.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, scale: HeatColorScale, state: super::plot::PlotState<Vec<ContinuousHeatCell>>) -> Self"
      ],
      "options": [
        "motion(enabled: bool) -> Self",
        "animate(enabled: bool) -> Self",
        "animation(spec: crate::motion::MotionSpec) -> Self",
        "rows(rows: impl IntoIterator<Item = impl Into<HeatAxis>>) -> Self",
        "columns(columns: impl IntoIterator<Item = impl Into<HeatAxis>>) -> Self",
        "current(id: impl Into<SharedString>) -> Self",
        "on_current(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "continuous-heatmap-transition",
        "heatmap-reordering",
        "continuous-heatmap"
      ]
    },
    {
      "name": "CopyButton",
      "kind": "view",
      "path": "gpui_kit::controls::copy_button::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_label(label: Option<SharedString>, cx: &mut Context<Self>)",
        "set_glyph_only(name: Option<SharedString>, cx: &mut Context<Self>)",
        "set_variant(variant: ButtonVariant, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "set_confirmation(confirmation: Duration, cx: &mut Context<Self>)",
        "set_copier(copier: impl Fn(&str, &mut App) -> Result<(), SharedString> + 'static, cx: &mut Context<Self>)",
        "clear_copier(cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "copy(cx: &mut Context<Self>)"
      ],
      "queries": [
        "state() -> &CopyState",
        "is_disabled() -> bool"
      ],
      "slots": [],
      "reports": [],
      "scenes": [
        "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": [],
      "slots": [],
      "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 virtualizes rows and columns over caller-owned data.",
      "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",
        "group(group: ColumnGroup) -> Self",
        "groups(groups: impl IntoIterator<Item = ColumnGroup>) -> Self",
        "footer_cell(key: impl Into<SharedString>, value: impl Into<SharedString>) -> 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",
        "scroll_to_cell(row: usize, column: impl Into<SharedString>) -> 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",
        "range(range: Option<CellRange>) -> Self",
        "on_range_change(handler: impl Fn(&CellRange, &mut Window, &mut App) + 'static) -> Self",
        "on_copy(handler: impl Fn(SharedString, &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": [],
      "slots": [
        "empty",
        "failed",
        "loading",
        "header_extra"
      ],
      "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": [
        "name(name: impl Into<SharedString>) -> Self",
        "value(day: Day) -> Self",
        "presentation(presentation: popover::PickerPresentation) -> Self",
        "required(required: bool) -> Self",
        "invalid(invalid: bool) -> Self"
      ],
      "commands": [
        "set_name(name: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_presentation(presentation: popover::PickerPresentation, cx: &mut Context<Self>)",
        "set_required(required: bool, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "set_invalid(invalid: bool, cx: &mut Context<Self>)",
        "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": [
        "is_disabled() -> bool",
        "field() -> &Entity<TextInput>",
        "calendar() -> &Entity<Calendar>",
        "current() -> Option<Day>",
        "parsed_day(cx: &App) -> Option<Day>",
        "message() -> Option<&SharedString>",
        "is_open() -> bool",
        "shown_text(cx: &App) -> SharedString",
        "is_invalid() -> bool"
      ],
      "slots": [],
      "reports": [
        "Changed",
        "Unparsable",
        "Opened",
        "Closed",
        "Submit"
      ],
      "scenes": [
        "date-time",
        "touch-dates"
      ]
    },
    {
      "name": "DescriptionList",
      "kind": "builder",
      "path": "gpui_kit::display::description_list::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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "detail"
      ]
    },
    {
      "name": "DesktopTitlebar",
      "kind": "builder",
      "path": "gpui_kit::layout::DesktopTitlebar",
      "source": "crates/gpui-kit/src/layout/titlebar.rs",
      "summary": "A client-rendered desktop titlebar with native window-control hit testing.",
      "construct": [
        "new(ident: impl Into<Ident>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "subtitle(subtitle: impl Into<SharedString>) -> Self",
        "left(content: impl IntoElement) -> Self",
        "right(content: impl IntoElement) -> Self",
        "button_layout(layout: WindowButtonLayout) -> Self",
        "controls(controls: WindowControls) -> Self",
        "on_event(handler: impl Fn(DesktopTitlebarEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "Minimize",
        "ToggleMaximize",
        "Close"
      ],
      "scenes": [
        "desktop-titlebar"
      ]
    },
    {
      "name": "DiagnosticsList",
      "kind": "builder",
      "path": "gpui_kit::data::DiagnosticsList",
      "source": "crates/gpui-kit/src/data/diagnostics_list.rs",
      "summary": "A diagnostic list whose data and state remain owned by its caller.",
      "construct": [
        "new(ident: impl Into<Ident>, diagnostics: Loadable<Vec<Diagnostic>, SharedString>) -> Self"
      ],
      "options": [
        "filter(filter: DiagnosticFilter) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "visible_rows(rows: usize) -> Self",
        "on_filter(handler: impl Fn(DiagnosticFilter, &mut Window, &mut App) + 'static) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_action(handler: impl Fn(SharedString, SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_retry(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "diagnostics-list"
      ]
    },
    {
      "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>)",
        "set_content(content: Option<Body>, cx: &mut Context<Self>)",
        "set_confirm_label(label: Option<SharedString>, cx: &mut Context<Self>)",
        "set_cancel_label(label: Option<SharedString>, cx: &mut Context<Self>)",
        "set_dismissable(dismissable: bool, cx: &mut Context<Self>)",
        "set_destructive(destructive: bool, 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"
      ],
      "slots": [],
      "reports": [
        "Opened",
        "Confirmed",
        "Cancelled",
        "Dismissed",
        "Closed"
      ],
      "scenes": [
        "dialog"
      ]
    },
    {
      "name": "DiffView",
      "kind": "builder",
      "path": "gpui_kit::content::DiffView",
      "source": "crates/gpui-kit/src/content/diff_view.rs",
      "summary": "A virtualized, read-only diff presentation.",
      "construct": [
        "new(ident: impl Into<Ident>, files: impl IntoIterator<Item = DiffFile>) -> Self",
        "shared(ident: impl Into<Ident>, files: Arc<Vec<DiffFile>>) -> Self"
      ],
      "options": [
        "cursor(cursor: DiffCursor) -> Self",
        "presentation(presentation: DiffPresentation) -> Self",
        "visible_rows(rows: usize) -> Self",
        "fills() -> Self",
        "wrapping(wrapping: bool) -> Self",
        "language(language: impl Into<SharedString>) -> Self",
        "on_event(handler: impl Fn(DiffViewEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty"
      ],
      "reports": [
        "FileActivated",
        "HunkActivated",
        "LineActivated",
        "ExpandHunk",
        "UnfoldFile"
      ],
      "scenes": [
        "diff-view"
      ]
    },
    {
      "name": "Divider",
      "kind": "builder",
      "path": "gpui_kit::display::empty::Divider",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "A soft rule between groups.",
      "construct": [
        "new() -> Self"
      ],
      "options": [
        "id(ident: impl Into<Ident>) -> Self",
        "label(label: impl Into<SharedString>) -> Self",
        "axis(axis: DividerAxis) -> Self",
        "vertical() -> Self",
        "inset(inset: Space) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "divider"
      ]
    },
    {
      "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": [],
      "slots": [],
      "reports": [
        "PanelSelected",
        "PanelMoved",
        "RegionCollapsed",
        "RegionResized"
      ],
      "scenes": [
        "ide-shell"
      ]
    },
    {
      "name": "DockTree",
      "kind": "builder",
      "path": "gpui_kit::layout::DockTree",
      "source": "crates/gpui-kit/src/layout/dock_tree.rs",
      "summary": "Draws a recursive DockTopology without owning it.",
      "construct": [
        "new(ident: impl Into<Ident>, topology: DockTopology) -> Self"
      ],
      "options": [
        "panel(panel: DockPanel) -> Self",
        "floating(tiles: impl IntoIterator<Item = FloatingDock>) -> Result<Self, DockRecordError>",
        "panels(panels: impl IntoIterator<Item = DockPanel>) -> Self",
        "on_event(handler: impl Fn(DockTreeEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "FloatingRaised",
        "FloatingChanged",
        "FloatingCancelled",
        "PanelSelected",
        "PanelMoved",
        "PanelSplit",
        "SplitResized",
        "StackCollapsed"
      ],
      "scenes": [
        "dock-tree",
        "dock-floating"
      ]
    },
    {
      "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",
        "avoid_insets(avoid: bool) -> Self",
        "close_control_size(size: ControlSize) -> Self",
        "body_padding_x(padding: Space) -> 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",
        "resizable(resizable: bool) -> Self",
        "focus_stops(stops: impl IntoIterator<Item = FocusHandle>) -> Self"
      ],
      "commands": [
        "set_avoid_insets(avoid: bool, cx: &mut Context<Self>)",
        "set_size(size: f32, cx: &mut Context<Self>)",
        "set_focus_stops(stops: impl IntoIterator<Item = FocusHandle>, cx: &mut Context<Self>)",
        "set_title(title: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_edge(edge: Edge, cx: &mut Context<Self>)",
        "set_description(description: Option<SharedString>, cx: &mut Context<Self>)",
        "set_content(body: Option<Body>, cx: &mut Context<Self>)",
        "set_footer(footer: Option<Body>, cx: &mut Context<Self>)",
        "set_dismissable(dismissable: bool, cx: &mut Context<Self>)",
        "set_resizable(resizable: bool, 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"
      ],
      "slots": [],
      "reports": [
        "Opened",
        "Dismissed",
        "Closed",
        "ResizeRequested"
      ],
      "scenes": [
        "drawer"
      ]
    },
    {
      "name": "Dropzone",
      "kind": "builder",
      "path": "gpui_kit::controls::dropzone::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",
        "invalid(invalid: bool) -> 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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "dropzone"
      ]
    },
    {
      "name": "Editor",
      "kind": "view",
      "path": "gpui_kit::controls::editor::Editor",
      "source": "crates/gpui-kit/src/controls/editor.rs",
      "summary": "Plain source editing with caller-owned language policy.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, text: impl Into<SharedString>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "language_services(enabled: bool) -> Self",
        "rows(rows: usize) -> Self",
        "line_numbers(visible: bool) -> Self",
        "read_only(read_only: bool) -> Self",
        "indent_with(indenter: impl Fn(EditorIndentRequest) -> Option<EditorIndentation> + 'static) -> Self",
        "highlights(highlights: EditorHighlights) -> Self",
        "syntax(syntax: EditorSyntax) -> Self"
      ],
      "commands": [
        "set_folds(revision: u64, mut folds: Vec<EditorFold>, cx: &mut Context<Self>) -> bool",
        "set_fold_collapsed(id: &str, collapsed: bool, cx: &mut Context<Self>) -> bool",
        "request_service(kind: EditorServiceKind, position: usize, cx: &mut Context<Self>) -> Option<EditorServiceRequest>",
        "set_service_result(request: u64, mut result: AsyncValue<EditorServiceResult, SharedString>, cx: &mut Context<Self>) -> bool",
        "dismiss_service(cx: &mut Context<Self>)",
        "accept_service_item(id: &str, cx: &mut Context<Self>) -> bool",
        "set_diagnostics(revision: u64, diagnostics: Vec<EditorDiagnostic>, cx: &mut Context<Self>) -> bool",
        "set_semantic_tokens(revision: u64, mut tokens: Vec<EditorSemanticToken>, cx: &mut Context<Self>) -> bool",
        "set_label(label: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_rows(rows: usize, cx: &mut Context<Self>)",
        "set_line_numbers(visible: bool, cx: &mut Context<Self>)",
        "set_read_only(read_only: bool, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_indent_with(indenter: Option<Rc<dyn Fn(EditorIndentRequest) -> Option<EditorIndentation>>>, cx: &mut Context<Self>)",
        "set_syntax(syntax: Option<EditorSyntax>, cx: &mut Context<Self>)",
        "set_language_services(enabled: bool, cx: &mut Context<Self>)",
        "set_selections(selections: impl IntoIterator<Item = (Range<usize>, bool)>, cx: &mut Context<Self>) -> bool",
        "select_rectangle(anchor: Point<Pixels>, focus: Point<Pixels>, cx: &mut Context<Self>) -> bool",
        "apply_edits(revision: u64, edits: impl IntoIterator<Item = (Range<usize>, SharedString)>, cx: &mut Context<Self>) -> bool",
        "set_value(value: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_highlights(highlights: EditorHighlights, cx: &mut Context<Self>) -> bool"
      ],
      "queries": [
        "is_fold_collapsed(id: &str) -> bool",
        "is_disabled() -> bool",
        "is_read_only() -> bool",
        "syntax_state() -> Option<&EditorSyntax>",
        "text_area() -> &Entity<TextArea>",
        "snapshot(cx: &App) -> TextAreaSnapshot",
        "selected_range(cx: &App) -> Range<usize>",
        "selections(cx: &App) -> Vec<(Range<usize>, bool)>",
        "geometry(cx: &App) -> Option<EditorGeometry>"
      ],
      "slots": [],
      "reports": [
        "ServiceRequested",
        "ServiceAccepted",
        "DefinitionRequested",
        "CodeActionRequested",
        "Edited",
        "Changed",
        "SelectionChanged",
        "FoldChanged",
        "Pasted",
        "Submitted",
        "Cancelled",
        "Focused",
        "Blurred",
        "Parsed",
        "SyntaxUnavailable"
      ],
      "scenes": [
        "editor",
        "editor-multicursor",
        "editor-services",
        "editor-folding",
        "editor-options"
      ]
    },
    {
      "name": "EffectParticles",
      "kind": "builder",
      "path": "gpui_kit::effects::EffectParticles",
      "source": "crates/gpui-kit/src/effects.rs",
      "summary": "Decorative, batched particles for one policy-resolved EffectPlan.",
      "construct": [
        "new(plan: EffectPlan) -> Self"
      ],
      "options": [
        "sample_at(elapsed: Duration) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "visual-effects"
      ]
    },
    {
      "name": "EmptyState",
      "kind": "builder",
      "path": "gpui_kit::display::empty::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",
        "icon(glyph: Icon) -> Self",
        "detail(detail: impl Into<SharedString>) -> Self",
        "action(action: impl IntoElement) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "empty-state"
      ]
    },
    {
      "name": "FailurePanel",
      "kind": "builder",
      "path": "gpui_kit::display::failure_panel::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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "failure-panel"
      ]
    },
    {
      "name": "FeedbackRating",
      "kind": "builder",
      "path": "gpui_kit::agent::FeedbackRating",
      "source": "crates/gpui-kit/src/agent/feedback.rs",
      "summary": "A helpful / not-helpful control with optional host-owned reason tags.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "vote(vote: Option<FeedbackVote>) -> Self",
        "tags(tags: impl IntoIterator<Item = (impl Into<SharedString>, impl Into<SharedString>)>) -> Self",
        "current_tag(tag: impl Into<SharedString>) -> Self",
        "on_vote(handler: impl Fn(FeedbackVote, &mut Window, &mut App) + 'static) -> Self",
        "on_tag(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "Voted",
        "Tagged"
      ],
      "scenes": [
        "feedback-rating"
      ]
    },
    {
      "name": "FilterBar",
      "kind": "builder",
      "path": "gpui_kit::controls::filter_bar::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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "filter-bar"
      ]
    },
    {
      "name": "FindReplace",
      "kind": "view",
      "path": "gpui_kit::controls::search::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_control_size(size: ControlSize, 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",
        "is_disabled() -> bool"
      ],
      "slots": [],
      "reports": [
        "Search",
        "ReplacementChanged",
        "ReplaceOne",
        "ReplaceAll",
        "Close"
      ],
      "scenes": [
        "find-replace"
      ]
    },
    {
      "name": "Flow",
      "kind": "builder",
      "path": "gpui_kit::data::Flow",
      "source": "crates/gpui-kit/src/data/flow.rs",
      "summary": "Rows drawn by their caller, laid out only where the viewport reaches.",
      "construct": [
        "new(ident: impl Into<Ident>, count: usize, render_row: impl Fn(usize, &mut Window, &mut App) -> AnyElement + 'static) -> Self"
      ],
      "options": [
        "keys(keys: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "revisions(revisions: Vec<u64>) -> Self",
        "estimate(height: f32) -> Self",
        "anchored_to_end() -> Self",
        "visible_rows(rows: usize) -> Self",
        "fills() -> Self",
        "content_inset(top: f32, bottom: f32) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "flow"
      ]
    },
    {
      "name": "FormField",
      "kind": "builder",
      "path": "gpui_kit::controls::form_field::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",
        "validation(validation: ValidationState) -> Self",
        "error(error: impl Into<SharedString>) -> Self",
        "hint(keystroke: impl Into<SharedString>) -> Self",
        "required(required: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "is_invalid() -> bool",
        "is_validating() -> bool"
      ],
      "slots": [],
      "reports": [],
      "scenes": [
        "form"
      ]
    },
    {
      "name": "Frost",
      "kind": "builder",
      "path": "gpui_kit::overlay::Frost",
      "source": "crates/gpui-kit/src/overlay/frost.rs",
      "summary": "A frosted-glass surface: blurred backdrop, tinted fill, caller's content.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "surface(surface: Surface) -> Self",
        "radius(radius: Radius) -> Self",
        "blur(blur: f32) -> Self",
        "child(child: impl IntoElement) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "frost"
      ]
    },
    {
      "name": "GaugeChart",
      "kind": "builder",
      "path": "gpui_kit::display::chart::GaugeChart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A single already-normalized reading on a semicircle.",
      "construct": [
        "from_raw(ident: impl Into<Ident>, label: impl Into<SharedString>, reading: data::RawPoint, domain: scale::NumericScale) -> Result<Self, data::DataError>",
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: ChartState) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "chart",
        "cartesian-states"
      ]
    },
    {
      "name": "GeoMap",
      "kind": "builder",
      "path": "gpui_kit::display::GeoMap",
      "source": "crates/gpui-kit/src/display/geography/view.rs",
      "summary": "A controlled local map with choropleth legend, selectable feature readout, and point overlays. Click selects projected geometry; captured drag/touch pans and pinch/Ctrl-wheel zooms about the pointer. Arrow keys pan, +/- zoom, Home resets, F fits, / cycle selection. Escape cancels a drag or clears selection. No handler means a read-only map.",
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "state(state: GeoState) -> Self",
        "viewport(viewport: GeoViewport) -> Self",
        "selected(selected: Option<SharedString>) -> Self",
        "animate(animate: bool) -> Self",
        "status_text(text: impl Into<SharedString>) -> Self",
        "on_event(handler: impl Fn(GeoEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "geography",
        "geography-scale"
      ]
    },
    {
      "name": "Glass",
      "kind": "builder",
      "path": "gpui_kit::overlay::Glass",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "A glass surface: optionally scattered and bent backdrop, optional fill, and caller-owned content.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "surface(surface: Surface) -> Self",
        "focused(focused: bool) -> Self",
        "elevation(elevation: Elevation) -> Self",
        "radius(radius: Radius) -> Self",
        "radius_px(radius: f32) -> Self",
        "blur(blur: f32) -> Self",
        "preset(preset: GlassPreset) -> Self",
        "thickness(thickness: f32) -> Self",
        "refractive_index(refractive_index: f32) -> Self",
        "backdrop_depth(backdrop_depth: f32) -> Self",
        "refraction(refraction: f32) -> Self",
        "dispersion(dispersion: f32) -> Self",
        "specular(specular: f32) -> Self",
        "light_angle(radians: f32) -> Self",
        "track_pointer(track_pointer: bool) -> Self",
        "pressable(pressable: bool) -> Self",
        "adaptive(adaptive: bool) -> Self",
        "adaptive_appearance(adaptive: bool) -> Self",
        "dimmed(dimmed: bool) -> Self",
        "protect_text_contrast(protect: bool) -> Self",
        "tint(tint: impl Into<Hsla>) -> Self",
        "edge_mask(edge: GlassEdge, band: f32) -> Self",
        "child(child: impl IntoElement) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "glass",
        "glass-optics",
        "glass-materials"
      ]
    },
    {
      "name": "GlassGroup",
      "kind": "builder",
      "path": "gpui_kit::overlay::GlassGroup",
      "source": "crates/gpui-kit/src/overlay/glass.rs",
      "summary": "Several glass panes fused into one body.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "surface(surface: Surface) -> Self",
        "radius(radius: Radius) -> Self",
        "blur(blur: f32) -> Self",
        "preset(preset: GlassPreset) -> Self",
        "thickness(thickness: f32) -> Self",
        "refractive_index(refractive_index: f32) -> Self",
        "backdrop_depth(backdrop_depth: f32) -> Self",
        "merge(merge: f32) -> Self",
        "gap(gap: f32) -> Self",
        "pressable(pressable: bool) -> Self",
        "adaptive(adaptive: bool) -> Self",
        "adaptive_appearance(adaptive: bool) -> Self",
        "dimmed(dimmed: bool) -> Self",
        "protect_text_contrast(protect: bool) -> Self",
        "tint(tint: impl Into<Hsla>) -> Self",
        "pane(ident: impl Into<Ident>, child: impl IntoElement) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "glass-optics",
        "glass-materials"
      ]
    },
    {
      "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": [
        "icon(icon: Icon) -> Self",
        "thumbnail(thumbnail: impl IntoElement) -> Self",
        "thumbnail_ratio(ratio: f32) -> Self",
        "action(action: impl Into<SharedString>) -> Self",
        "state(state: NodeState) -> Self",
        "color(category: impl Into<ColorChoice>) -> Self",
        "kind(kind: impl Into<SharedString>) -> Self",
        "metric(label: impl Into<SharedString>, value: impl Into<SharedString>) -> Self",
        "metrics(metrics: impl IntoIterator<Item = NodeMetric>) -> Self",
        "note(text: impl Into<SharedString>) -> Self",
        "note_lines(n: usize) -> Self",
        "port(port: GraphPort) -> Self",
        "ports(ports: impl IntoIterator<Item = GraphPort>) -> Self",
        "diff(diff: Diff) -> Self",
        "status(status: impl Into<SharedString>) -> Self",
        "progress(fraction: Option<f32>) -> Self",
        "child(child: impl IntoElement) -> Self",
        "children(children: impl IntoIterator<Item = impl IntoElement>) -> Self",
        "active_glass(preset: GlassPreset) -> Self",
        "width(width: f32) -> Self",
        "on_click(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "node-graph",
        "node-graph-layout",
        "node-graph-routing",
        "node-graph-motion"
      ]
    },
    {
      "name": "Grid",
      "kind": "builder",
      "path": "gpui_kit::layout::Grid",
      "source": "crates/gpui-kit/src/layout/grid.rs",
      "summary": "A measured, token-guttered grid that retains caller item order.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "items(items: impl IntoIterator<Item = GridItem>) -> Self",
        "columns(columns: u16) -> Self",
        "columns_at(breakpoint: Breakpoint, columns: u16) -> Self",
        "gap(gap: Space) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "grid"
      ]
    },
    {
      "name": "Heatmap",
      "kind": "builder",
      "path": "gpui_kit::display::heatmap::Heatmap",
      "source": "crates/gpui-kit/src/display/heatmap.rs",
      "summary": "A labelled grid of intensity cells.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "tint(tint: gpui::Hsla) -> Self",
        "rows(rows: impl IntoIterator<Item = impl Into<HeatAxis>>) -> Self",
        "columns(columns: impl IntoIterator<Item = impl Into<HeatAxis>>) -> Self",
        "cells(cells: impl IntoIterator<Item = HeatCell>) -> Self",
        "state(state: HeatmapState) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty"
      ],
      "reports": [],
      "scenes": [
        "heatmap"
      ]
    },
    {
      "name": "HighlightedText",
      "kind": "builder",
      "path": "gpui_kit::display::highlight::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",
        "selectable(ident: impl Into<Ident>) -> Self",
        "in_document(order: u64, virtualized: bool) -> Self",
        "hits(hits: impl IntoIterator<Item = Range<usize>>) -> Self",
        "current(index: usize) -> Self",
        "monospace(monospace: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "published_hits() -> usize"
      ],
      "slots": [],
      "reports": [],
      "scenes": [
        "search-field"
      ]
    },
    {
      "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",
        "hang(hang: Hang) -> Self",
        "open_delay(delay: Duration) -> Self",
        "grace(grace: Duration) -> Self"
      ],
      "commands": [
        "set_name(name: Option<SharedString>, cx: &mut Context<Self>)",
        "set_trigger(trigger: Option<Content>, cx: &mut Context<Self>)",
        "set_content(content: Option<Content>, cx: &mut Context<Self>)",
        "set_placement(placement: Placement, cx: &mut Context<Self>)",
        "set_hang(hang: Hang, cx: &mut Context<Self>)",
        "set_open_delay(delay: Duration, cx: &mut Context<Self>)",
        "set_grace(grace: Duration, cx: &mut Context<Self>)",
        "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"
      ],
      "slots": [],
      "reports": [
        "Opened",
        "Closed"
      ],
      "scenes": [
        "hover-card"
      ]
    },
    {
      "name": "Icon",
      "kind": "builder",
      "path": "gpui_kit::display::icon::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",
        "reacting(ident: impl Into<Ident>, reaction: motion::Micro) -> 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"
      ],
      "slots": [],
      "reports": [],
      "scenes": [
        "icon"
      ]
    },
    {
      "name": "IconButton",
      "kind": "builder",
      "path": "gpui_kit::controls::button::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: impl Into<ButtonStyle>) -> Self",
        "color(color: impl Into<ColorChoice>) -> Self",
        "ground(ground: Surface) -> 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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "actions"
      ]
    },
    {
      "name": "ImageList",
      "kind": "builder",
      "path": "gpui_kit::data::ImageList",
      "source": "crates/gpui-kit/src/data/image_list.rs",
      "summary": "A token-spaced image tile collection.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "items(items: impl IntoIterator<Item = ImageListItem>) -> Self",
        "columns(columns: usize) -> Self",
        "columns_at(breakpoint: Breakpoint, columns: usize) -> Self",
        "gap(gap: Space) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "image-list"
      ]
    },
    {
      "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": [],
      "slots": [],
      "reports": [
        "FitChanged",
        "Stepped",
        "ImageRequested"
      ],
      "scenes": [
        "image-viewer"
      ]
    },
    {
      "name": "InlineEdit",
      "kind": "builder",
      "path": "gpui_kit::controls::inline_edit::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": [],
      "slots": [],
      "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>"
      ],
      "slots": [],
      "reports": [],
      "scenes": [
        "json-view"
      ]
    },
    {
      "name": "KanbanBoard",
      "kind": "builder",
      "path": "gpui_kit::data::KanbanBoard",
      "source": "crates/gpui-kit/src/data/kanban.rs",
      "summary": "A board of host-owned columns and cards.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "held(card: impl Into<SharedString>) -> Self",
        "columns(columns: impl IntoIterator<Item = KanbanColumn>) -> Self",
        "cards(cards: impl IntoIterator<Item = KanbanCard>) -> Self",
        "state(state: KanbanState) -> Self",
        "on_card(handler: impl Fn(&KanbanCard, &mut Window, &mut App) + 'static) -> Self",
        "on_move(handler: impl Fn(&KanbanCard, SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_add(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty"
      ],
      "reports": [],
      "scenes": [
        "kanban"
      ]
    },
    {
      "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>"
      ],
      "slots": [],
      "reports": [],
      "scenes": [
        "kbd"
      ]
    },
    {
      "name": "KeybindingRecorder",
      "kind": "view",
      "path": "gpui_kit::controls::keybinding_recorder::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>)",
        "set_label(label: Option<SharedString>, cx: &mut Context<Self>)",
        "set_placeholder(placeholder: Option<SharedString>, cx: &mut Context<Self>)",
        "set_allow_escape(allow: bool, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "start(window: &mut Window, cx: &mut Context<Self>)",
        "cancel(cx: &mut Context<Self>)"
      ],
      "queries": [
        "is_disabled() -> bool",
        "is_recording() -> bool",
        "current_binding() -> Option<&SharedString>"
      ],
      "slots": [],
      "reports": [
        "Started",
        "Captured",
        "Cancelled"
      ],
      "scenes": [
        "keybinding"
      ]
    },
    {
      "name": "KeymapEditor",
      "kind": "view",
      "path": "gpui_kit::controls::keymap_editor::KeymapEditor",
      "source": "crates/gpui-kit/src/controls/keymap_editor.rs",
      "summary": "Coordinates one recorder over caller-owned keymap rows; it never applies a binding.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "commands(commands: impl IntoIterator<Item = KeymapCommand>) -> Self",
        "query(query: impl Into<SharedString>) -> Self"
      ],
      "commands": [
        "set_commands(commands: Vec<KeymapCommand>, cx: &mut Context<Self>)",
        "set_query(query: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "active_command() -> Option<&SharedString>",
        "is_disabled() -> bool",
        "current_commands() -> &[KeymapCommand]"
      ],
      "slots": [],
      "reports": [
        "AddCaptured",
        "Remove",
        "Reset",
        "RecordingCancelled"
      ],
      "scenes": [
        "keymap-editor"
      ]
    },
    {
      "name": "LineChart",
      "kind": "builder",
      "path": "gpui_kit::display::chart::LineChart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A line chart over one or more host-owned series.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: ChartState) -> Self"
      ],
      "options": [
        "axes(axes: ChartAxes) -> Self",
        "area() -> Self",
        "smooth() -> Self",
        "crosshair() -> Self",
        "current(series_id: impl Into<SharedString>, point_id: impl Into<SharedString>) -> Self",
        "on_current(handler: impl Fn(ChartSelection, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "chart"
      ]
    },
    {
      "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",
        "flowing() -> Self",
        "anchored_to_end() -> Self",
        "keys(keys: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "revisions(revisions: Vec<u64>) -> Self",
        "visible_rows(rows: usize) -> Self",
        "fills() -> Self",
        "arriving() -> 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",
        "deferred_acceptance(controller: dnd::DeferredDrop, revision: u64) -> Self",
        "on_reorder(handler: impl Fn(&DropIntent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "list",
        "drag-list"
      ]
    },
    {
      "name": "ListRow",
      "kind": "builder",
      "path": "gpui_kit::display::card::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",
        "leading(leading: impl IntoElement) -> Self",
        "trailing(trailing: impl IntoElement) -> Self",
        "on_click(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "card"
      ]
    },
    {
      "name": "LoadMore",
      "kind": "builder",
      "path": "gpui_kit::display::loading::LoadMore",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "The tail row of an incrementally loaded list.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "state(state: LoadMoreState) -> Self",
        "on_more(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "loading"
      ]
    },
    {
      "name": "LogStream",
      "kind": "builder",
      "path": "gpui_kit::content::LogStream",
      "source": "crates/gpui-kit/src/content/log_stream.rs",
      "summary": "A virtualized, read-only log presentation.",
      "construct": [
        "new(ident: impl Into<Ident>, entries: impl IntoIterator<Item = LogEntry>) -> Self"
      ],
      "options": [
        "state(state: LogStreamState) -> Self",
        "visible_rows(rows: usize) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_copy(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "ansi(ansi: bool) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading",
        "header_extra"
      ],
      "reports": [],
      "scenes": [
        "log-stream"
      ]
    },
    {
      "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": [
        "block_renderer(renderer: impl Fn(&Ident, &Block, u64, &mut Window, &mut App) -> Option<AnyElement> + 'static) -> Self",
        "max_lines(lines: usize) -> Self",
        "selection_order_start(order: u64) -> 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",
        "streaming(streaming: bool) -> Self",
        "code_presentation(presentation: MarkdownCodePresentation) -> Self",
        "highlight(highlighter: impl Fn(&CodeBlock) -> Vec<CodeSpan> + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "LinkClicked",
        "ImageRequested",
        "CodeCopied",
        "CodeCopyRefused",
        "MoreRequested"
      ],
      "scenes": [
        "markdown"
      ]
    },
    {
      "name": "Masonry",
      "kind": "builder",
      "path": "gpui_kit::data::Masonry",
      "source": "crates/gpui-kit/src/data/masonry.rs",
      "summary": "A measured masonry layout over caller-owned content.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "items(items: impl IntoIterator<Item = MasonryItem>) -> Self",
        "columns(columns: usize) -> Self",
        "columns_at(breakpoint: Breakpoint, columns: usize) -> Self",
        "gap(gap: Space) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "masonry"
      ]
    },
    {
      "name": "MentionInput",
      "kind": "view",
      "path": "gpui_kit::controls::mention::MentionInput",
      "source": "crates/gpui-kit/src/controls/mention.rs",
      "summary": "A multiline editor with one caret-anchored mention completion surface.",
      "construct": [
        "new(ident: impl Into<Ident>, editor: Entity<TextArea>, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "suggestions(suggestions: AsyncValue<Vec<MentionCandidate>, SharedString>) -> Self",
        "candidates(candidates: impl IntoIterator<Item = MentionCandidate>) -> Self"
      ],
      "commands": [
        "set_suggestions(suggestions: AsyncValue<Vec<MentionCandidate>, SharedString>, cx: &mut Context<Self>)"
      ],
      "queries": [
        "suggestions_state() -> &AsyncValue<Vec<MentionCandidate>, SharedString>",
        "editor() -> &Entity<TextArea>",
        "active_query() -> Option<&MentionQuery>",
        "is_open() -> bool"
      ],
      "slots": [],
      "reports": [
        "Changed",
        "Submitted",
        "Cancelled",
        "Pasted",
        "Focused",
        "Blurred",
        "QueryChanged",
        "Accepted"
      ],
      "scenes": [
        "mention-input"
      ]
    },
    {
      "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",
        "hang(hang: Hang) -> 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_trigger(label: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_trigger_icon(icon: Option<Icon>, cx: &mut Context<Self>)",
        "set_trigger_join(join: ButtonJoin, cx: &mut Context<Self>)",
        "set_placement(placement: Placement, cx: &mut Context<Self>)",
        "set_hang(hang: Hang, 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"
      ],
      "slots": [],
      "reports": [
        "Opened",
        "Invoked",
        "Dismissed",
        "Closed"
      ],
      "scenes": [
        "menu"
      ]
    },
    {
      "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>)",
        "set_control_size(size: ControlSize, 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]"
      ],
      "slots": [],
      "reports": [
        "Opened",
        "Invoked",
        "Closed"
      ],
      "scenes": [
        "menubar"
      ]
    },
    {
      "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",
        "grows_to_fit() -> 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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "conversation",
        "conversation-growing"
      ]
    },
    {
      "name": "MetricCard",
      "kind": "builder",
      "path": "gpui_kit::display::metric::MetricCard",
      "source": "crates/gpui-kit/src/display/metric.rs",
      "summary": "A compact KPI card.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: MetricState) -> Self"
      ],
      "options": [
        "tint(tint: Hsla) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "metric-card"
      ]
    },
    {
      "name": "MicroMark",
      "kind": "builder",
      "path": "gpui_kit::motion::MicroMark",
      "source": "crates/gpui-kit/src/motion/micro.rs",
      "summary": "A labelled glyph that plays one named micro-motion.",
      "construct": [
        "new(ident: impl Into<Ident>, kind: Micro, label: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "micro"
      ]
    },
    {
      "name": "Minimap",
      "kind": "builder",
      "path": "gpui_kit::canvas::Minimap",
      "source": "crates/gpui-kit/src/canvas/minimap.rs",
      "summary": "A compact overview of host-owned marks.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "marks(marks: impl IntoIterator<Item = MinimapMark>) -> Self",
        "view(view: MinimapView) -> Self",
        "on_pan(handler: impl Fn(f32, f32, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "Pan"
      ],
      "scenes": [
        "canvas-tools"
      ]
    },
    {
      "name": "ModelViewer",
      "kind": "builder",
      "path": "gpui_kit::media::ModelViewer",
      "source": "crates/gpui-kit/src/media/model_viewer.rs",
      "summary": "A bounded viewer for one 3D model.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "title(title: impl Into<SharedString>) -> Self",
        "state(state: ModelState) -> Self",
        "scene(scene: Rc<ModelScene>) -> Self",
        "rejected(error: ModelError) -> Self",
        "loading() -> Self",
        "shading(shading: ModelShading) -> Self",
        "orbit(yaw: f32, pitch: f32) -> Self",
        "height(height: f32) -> Self",
        "on_event(handler: impl Fn(&ModelViewerEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "OrbitChanged",
        "ShadingChanged"
      ],
      "scenes": [
        "model-viewer"
      ]
    },
    {
      "name": "MultiSelect",
      "kind": "view",
      "path": "gpui_kit::controls::multi_select::MultiSelect",
      "source": "crates/gpui-kit/src/controls/multi_select.rs",
      "summary": "A selectable option set with search, chips, and listbox semantics.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "options(options: impl IntoIterator<Item = SelectOption>) -> Self",
        "presentation(presentation: popover::PickerPresentation) -> Self",
        "selected(selected: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "name(name: impl Into<SharedString>) -> Self",
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "invalid(invalid: bool) -> Self",
        "clearable(clearable: bool) -> Self"
      ],
      "commands": [
        "set_presentation(presentation: popover::PickerPresentation, cx: &mut Context<Self>)",
        "set_selected(selected: impl IntoIterator<Item = impl Into<SharedString>>, cx: &mut Context<Self>)",
        "set_options(options: Vec<SelectOption>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_name(name: SharedString, cx: &mut Context<Self>)",
        "set_placeholder(placeholder: Option<SharedString>, cx: &mut Context<Self>)",
        "set_invalid(invalid: bool, cx: &mut Context<Self>)",
        "set_clearable(clearable: bool, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "open(window: &mut Window, cx: &mut Context<Self>)"
      ],
      "queries": [
        "selected_ids() -> &[SharedString]",
        "query_input() -> &Entity<TextInput>",
        "is_disabled() -> bool",
        "is_open() -> bool"
      ],
      "slots": [],
      "reports": [
        "Toggled",
        "Removed",
        "Cleared",
        "QueryChanged",
        "Opened",
        "Closed"
      ],
      "scenes": [
        "multi-select",
        "touch-pickers"
      ]
    },
    {
      "name": "NavStack",
      "kind": "builder",
      "path": "gpui_kit::navigation::NavStack",
      "source": "crates/gpui-kit/src/navigation/nav_stack.rs",
      "summary": "Active navigation content. Inactive pages are not mounted, so their input handlers and accessibility nodes cannot remain active during a transition. Uses a token-backed fade on each accepted history change; reduced motion settles immediately. It restores the last focused descendant on revisits when focus was inside the outgoing page, and never steals external focus.",
      "construct": [
        "new(ident: impl Into<Ident>, history: &NavHistory, label: impl Into<SharedString>, focus: FocusHandle, content: impl IntoElement) -> Self"
      ],
      "options": [
        "back_transition(transition: &BackTransition) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "nav-stack",
        "nav-back-preview"
      ]
    },
    {
      "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": [
        "animate_layout(animate: bool) -> Self",
        "node(node: GraphNode, x: f32, y: f32) -> Self",
        "placed(placed: Placed) -> Self",
        "edge(edge: GraphEdge) -> Self",
        "edges(edges: impl IntoIterator<Item = GraphEdge>) -> Self",
        "source(source: GraphSource) -> Self",
        "band(band: GraphBand) -> Self",
        "bands(bands: impl IntoIterator<Item = GraphBand>) -> Self",
        "state(state: GraphState) -> Self",
        "empty(empty: EmptyState) -> Self",
        "grid(grid: bool) -> Self",
        "axes(axes: bool) -> Self",
        "ground_light(ground_light: bool) -> Self",
        "offset(x: f32, y: f32) -> Self",
        "viewport(viewport: GraphViewport) -> Self",
        "zoom(zoom: f32) -> Self",
        "zoom_range(min: f32, max: f32) -> Self",
        "interaction(interaction: GraphInteraction) -> Self",
        "on_event(handler: impl Fn(&NodeGraphEvent, &mut Window, &mut App) + 'static) -> Self",
        "can_connect(validator: impl Fn(&GraphEndpoint, &GraphEndpoint) -> bool + 'static) -> Self",
        "minimap(show: bool) -> Self",
        "toolbar(toolbar: CanvasToolbar) -> Self",
        "fit(fit: GraphFit) -> Self",
        "fit_clearance(clearance: Edges<f32>) -> Self",
        "routing(routing: GraphRouting) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [
        "ViewportChanged",
        "SelectionChanged",
        "NodeMoved",
        "NodeResized",
        "NodeDeleted",
        "SurfacePressed",
        "ConnectionRequested",
        "ConnectionDropped",
        "DisconnectRequested"
      ],
      "scenes": [
        "node-graph",
        "node-graph-layout",
        "node-graph-routing",
        "node-graph-motion",
        "canvas-regions"
      ]
    },
    {
      "name": "NodeGroup",
      "kind": "builder",
      "path": "gpui_kit::canvas::NodeGroup",
      "source": "crates/gpui-kit/src/canvas/group.rs",
      "summary": "A labelled group drawn over a canvas region the host already decided.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "selected(selected: bool) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "canvas-tools"
      ]
    },
    {
      "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": [
        "set_capacity(capacity: usize, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "show(notification: Notification, window: &Window, 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"
      ],
      "slots": [
        "empty"
      ],
      "reports": [
        "Read",
        "Dismissed",
        "Cleared",
        "ActionTaken"
      ],
      "scenes": [
        "notification-center"
      ]
    },
    {
      "name": "NumberInput",
      "kind": "view",
      "path": "gpui_kit::controls::number_input::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",
        "bind(field: &Entity<Self>, signal: &Signal<f64>, cx: &mut App) -> Vec<Subscription>"
      ],
      "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",
        "prefix(prefix: impl Into<SharedString>) -> Self",
        "required(required: bool) -> Self",
        "invalid(invalid: bool) -> Self"
      ],
      "commands": [
        "set_invalid(invalid: bool, cx: &mut Context<Self>)",
        "set_range(min: Option<f64>, max: Option<f64>, cx: &mut Context<Self>)",
        "set_steps(step: f64, page_step: Option<f64>, cx: &mut Context<Self>)",
        "set_precision(precision: usize, cx: &mut Context<Self>)",
        "set_presentation(name: Option<SharedString>, unit: Option<SharedString>, prefix: Option<SharedString>, size: ControlSize, cx: &mut Context<Self>)",
        "set_required(required: bool, cx: &mut Context<Self>)",
        "set_value(value: f64, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "is_disabled() -> bool",
        "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"
      ],
      "slots": [],
      "reports": [
        "Changed",
        "Unparsable",
        "Submit"
      ],
      "scenes": [
        "form"
      ]
    },
    {
      "name": "ObjectiveTracker",
      "kind": "builder",
      "path": "gpui_kit::game::ObjectiveTracker",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "A hierarchical objective tracker with strict identity validation.",
      "construct": [
        "new(ident: impl Into<Ident>, snapshot: ObjectiveSnapshot) -> Self"
      ],
      "options": [
        "selected(selected: impl Into<ObjectiveId>) -> Self",
        "on_event(handler: impl Fn(&ObjectiveTrackerEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "Select"
      ],
      "scenes": [
        "game-ui"
      ]
    },
    {
      "name": "OfferingCatalog",
      "kind": "builder",
      "path": "gpui_kit::agent::OfferingCatalog",
      "source": "crates/gpui-kit/src/agent/offering_catalog.rs",
      "summary": "A searchable, kind-filterable catalog of offerings from multiple servers.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "source(source: OfferingSource) -> Self",
        "sources(sources: impl IntoIterator<Item = OfferingSource>) -> Self",
        "query(query: impl Into<SharedString>) -> Self",
        "kinds(kinds: impl IntoIterator<Item = OfferingKind>) -> Self",
        "selected(identity: OfferingIdentity) -> Self",
        "on_activate(handler: impl Fn(OfferingIdentity, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "offering-catalog"
      ]
    },
    {
      "name": "OneTimeCodeInput",
      "kind": "view",
      "path": "gpui_kit::controls::auth::OneTimeCodeInput",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "One sensitive editor presented as a bounded run of visual slots.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "input_options(options: gpui::TextInputOptions) -> Self",
        "name(name: impl Into<SharedString>) -> Self",
        "text(text: impl Into<SharedString>) -> Self",
        "slots(slots: usize) -> Self",
        "invalid(invalid: bool) -> Self",
        "required(required: bool) -> Self",
        "read_only(read_only: bool) -> Self"
      ],
      "commands": [
        "set_input_options(options: gpui::TextInputOptions, cx: &mut Context<Self>)",
        "set_name(name: Option<SharedString>, cx: &mut Context<Self>)",
        "set_slots(slots: usize, cx: &mut Context<Self>)",
        "set_required(required: bool, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "set_value(value: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_read_only(read_only: bool, cx: &mut Context<Self>)",
        "set_invalid(invalid: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "value(cx: &App) -> SharedString",
        "len(cx: &App) -> usize",
        "is_empty(cx: &App) -> bool",
        "is_complete(cx: &App) -> bool",
        "slot_count() -> usize",
        "is_disabled() -> bool"
      ],
      "slots": [],
      "reports": [
        "Change",
        "Submit"
      ],
      "scenes": [
        "touch-inputs",
        "auth-verification"
      ]
    },
    {
      "name": "OutcomePanel",
      "kind": "builder",
      "path": "gpui_kit::display::outcome::OutcomePanel",
      "source": "crates/gpui-kit/src/display/outcome.rs",
      "summary": "A panel that states what finished, including a partial success.",
      "construct": [
        "new(ident: impl Into<Ident>, kind: OutcomeKind) -> Self"
      ],
      "options": [
        "title(title: impl Into<SharedString>) -> Self",
        "detail(detail: impl Into<SharedString>) -> Self",
        "count(count: impl Into<SharedString>) -> Self",
        "action(action: impl IntoElement) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "outcome-panel"
      ]
    },
    {
      "name": "Outline",
      "kind": "builder",
      "path": "gpui_kit::content::Outline",
      "source": "crates/gpui-kit/src/content/outline.rs",
      "summary": "The outline of a long surface. Reports the mark that was chosen, and travels there.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "over(list: impl Into<Ident>) -> Self",
        "marks(marks: impl IntoIterator<Item = Mark>) -> Self",
        "mark(mark: Mark) -> Self",
        "slots(slots: usize) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "outline"
      ]
    },
    {
      "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",
        "stack(depth: usize) -> Self",
        "placement(placement: Placement) -> Self",
        "hang(hang: Hang) -> Self",
        "window_snap_margin(margin: Pixels) -> Self",
        "scrim(scrim: bool) -> Self",
        "progress(progress: f32) -> Self",
        "child(content: impl IntoElement) -> Self",
        "on_dismiss(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "overlay"
      ]
    },
    {
      "name": "PageLayout",
      "kind": "builder",
      "path": "gpui_kit::layout::PageLayout",
      "source": "crates/gpui-kit/src/layout/page.rs",
      "summary": "A full-height page with fixed header/footer and a bounded body. Insets are residual obscuration in this viewport's logical pixels, not physical screen coordinates. A keyboard that already resized the viewport has zero residual overlap; floating keyboards must not be approximated by edge padding.",
      "construct": [
        "new(ident: impl Into<Ident>, body: impl IntoElement) -> Self"
      ],
      "options": [
        "insets(insets: WindowInsets) -> Self",
        "header(content: impl IntoElement) -> Self",
        "footer(content: impl IntoElement) -> Self",
        "hide_footer(hidden: bool) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "mobile-page"
      ]
    },
    {
      "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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "pagination"
      ]
    },
    {
      "name": "PartyRoster",
      "kind": "builder",
      "path": "gpui_kit::game::PartyRoster",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "A responsive party roster over standard agent and persona presentation.",
      "construct": [
        "new(ident: impl Into<Ident>, party: PartySnapshot) -> Self"
      ],
      "options": [
        "selected(selected: impl Into<AgentId>) -> Self",
        "on_event(handler: impl Fn(&PartyRosterEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "SelectMember"
      ],
      "scenes": [
        "game-ui"
      ]
    },
    {
      "name": "PasswordInput",
      "kind": "view",
      "path": "gpui_kit::controls::auth::PasswordInput",
      "source": "crates/gpui-kit/src/controls/auth.rs",
      "summary": "One sensitive password editor with a visual reveal action.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self",
        "bind(field: &Entity<Self>, signal: &Signal<String>, cx: &mut App) -> Vec<Subscription>"
      ],
      "options": [
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "input_options(options: gpui::TextInputOptions) -> Self",
        "name(name: impl Into<SharedString>) -> Self",
        "text(text: impl Into<SharedString>) -> Self",
        "invalid(invalid: bool) -> Self",
        "required(required: bool) -> Self",
        "read_only(read_only: bool) -> Self"
      ],
      "commands": [
        "set_input_options(options: gpui::TextInputOptions, cx: &mut Context<Self>)",
        "set_name(name: Option<SharedString>, cx: &mut Context<Self>)",
        "set_placeholder(placeholder: Option<SharedString>, cx: &mut Context<Self>)",
        "set_required(required: bool, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "set_value(value: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_read_only(read_only: bool, cx: &mut Context<Self>)",
        "set_invalid(invalid: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "value(cx: &App) -> SharedString",
        "is_revealed() -> bool",
        "selected_range(cx: &App) -> Range<usize>",
        "is_disabled() -> bool"
      ],
      "slots": [],
      "reports": [
        "Change",
        "Submit",
        "Cancel",
        "BackspaceAtStart",
        "Focus",
        "Blur"
      ],
      "scenes": [
        "touch-inputs",
        "auth-sign-in"
      ]
    },
    {
      "name": "PerformanceHud",
      "kind": "builder",
      "path": "gpui_kit::display::performance_hud::PerformanceHud",
      "source": "crates/gpui-kit/src/display/performance_hud.rs",
      "summary": "A compact or expanded frame diagnostics surface.",
      "construct": [
        "new(ident: impl Into<Ident>, state: PerformanceHudState) -> Self"
      ],
      "options": [
        "expanded(expanded: bool) -> Self",
        "on_expanded(handler: impl Fn(bool, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "performance-hud"
      ]
    },
    {
      "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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "permission-matrix"
      ]
    },
    {
      "name": "PersonaDialogue",
      "kind": "builder",
      "path": "gpui_kit::agent::PersonaDialogue",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "Persona-aware dialogue over the safe Markdown renderer.",
      "construct": [
        "new(ident: impl Into<Ident>, turn: DialogueTurn) -> Self"
      ],
      "options": [
        "expression(expression: PersonaExpression) -> Self",
        "voice(sample: VoiceSample) -> Self",
        "image(image: impl Into<SharedString>) -> Self",
        "image_source(image: gpui::ImageSource) -> Self",
        "tint(tint: Hsla) -> Self",
        "on_event(handler: impl Fn(&PersonaDialogueEvent, &mut Window, &mut App) + 'static) -> Self",
        "markdown_image(source: impl Fn(&SharedString, &ImageRequest, &mut Window, &mut App) -> Option<AnyElement> + 'static) -> Self",
        "markdown_highlighter(highlighter: impl Fn(&SharedString, &CodeBlock) -> Vec<CodeSpan> + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "ChoiceRequested",
        "Markdown"
      ],
      "scenes": [
        "persona"
      ]
    },
    {
      "name": "PersonaPortrait",
      "kind": "builder",
      "path": "gpui_kit::agent::PersonaPortrait",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "A large expressive portrait built on the standard AgentAvatar.",
      "construct": [
        "new(ident: impl Into<Ident>, agent: AgentSnapshot) -> Self"
      ],
      "options": [
        "expression(expression: PersonaExpression) -> Self",
        "voice(sample: VoiceSample) -> Self",
        "image(image: impl Into<SharedString>) -> Self",
        "image_source(image: gpui::ImageSource) -> Self",
        "tint(tint: Hsla) -> Self",
        "effect(plan: EffectPlan) -> Self",
        "sample_at(elapsed: Duration) -> Self",
        "size(size: f32) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "persona"
      ]
    },
    {
      "name": "PieChart",
      "kind": "builder",
      "path": "gpui_kit::display::chart::PieChart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A pie or donut over one host-owned series of shares.",
      "construct": [
        "from_raw(ident: impl Into<Ident>, label: impl Into<SharedString>, series: data::RawSeries) -> Result<Self, data::DataError>",
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: ChartState) -> Self"
      ],
      "options": [
        "donut() -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "chart",
        "cartesian-states"
      ]
    },
    {
      "name": "Plot",
      "kind": "builder",
      "path": "gpui_kit::display::plot::Plot",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "A measured plot with caller-painted content and semantic marks.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: PlotState<Vec<PlotMark>>) -> Self"
      ],
      "options": [
        "selected(id: Option<SharedString>) -> Self",
        "hit_test(picker: impl Fn(Point<f32>, Bounds<Pixels>) -> Option<SharedString> + 'static) -> Self",
        "on_hover(handler: impl Fn(Option<SharedString>, &mut Window, &mut App) + 'static) -> Self",
        "paint(painter: impl Fn(PlotFrame, &mut Window, &mut App) + 'static) -> Self",
        "labels(enabled: bool) -> Self",
        "current(mark_id: impl Into<SharedString>) -> Self",
        "on_current(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "plot"
      ]
    },
    {
      "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",
        "hang(hang: Hang) -> Self",
        "dismissable(dismissable: bool) -> Self"
      ],
      "commands": [
        "set_trigger(label: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_trigger_icon(icon: Option<Icon>, cx: &mut Context<Self>)",
        "set_content(content: Option<Content>, cx: &mut Context<Self>)",
        "set_placement(placement: Placement, cx: &mut Context<Self>)",
        "set_hang(hang: Hang, cx: &mut Context<Self>)",
        "set_dismissable(dismissable: bool, cx: &mut Context<Self>)",
        "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"
      ],
      "slots": [],
      "reports": [
        "Opened",
        "Dismissed",
        "Closed"
      ],
      "scenes": [
        "popover"
      ]
    },
    {
      "name": "ProgressBar",
      "kind": "builder",
      "path": "gpui_kit::display::progress::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",
        "stalled(stalled: bool) -> Self",
        "paused(paused: bool) -> Self",
        "on_cancel(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "progress-bar"
      ]
    },
    {
      "name": "ProgressCircle",
      "kind": "builder",
      "path": "gpui_kit::display::progress_circle::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",
        "stalled(stalled: bool) -> Self",
        "paused(paused: bool) -> Self",
        "on_cancel(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "progress-circle"
      ]
    },
    {
      "name": "PromptBuilder",
      "kind": "builder",
      "path": "gpui_kit::agent::PromptBuilder",
      "source": "crates/gpui-kit/src/agent/prompt.rs",
      "summary": "A template with host-owned slots.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "body(body: impl Into<SharedString>) -> Self",
        "slots(slots: impl IntoIterator<Item = PromptSlot>) -> Self",
        "state(state: PromptBuilderState) -> Self",
        "on_slot(handler: impl Fn(&PromptSlot, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty"
      ],
      "reports": [
        "SlotActivated"
      ],
      "scenes": [
        "prompt-builder"
      ]
    },
    {
      "name": "PullToRefresh",
      "kind": "view",
      "path": "gpui_kit::interaction::refresh::PullToRefresh",
      "source": "crates/gpui-kit/src/interaction/refresh.rs",
      "summary": "Retains its caller-built content in every state, including a failed refresh. The supplied scroll handle must be the handle used by that content.",
      "construct": [
        "new(ident: impl Into<Ident>, scroll: ScrollHandle, label: impl Into<SharedString>, armed_label: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [
        "set_content(body: Option<Body>, cx: &mut Context<Self>)",
        "set_state(state: RefreshState, cx: &mut Context<Self>)",
        "set_enabled(enabled: bool, cx: &mut Context<Self>)",
        "set_threshold(threshold: f32, cx: &mut Context<Self>) -> bool"
      ],
      "queries": [],
      "slots": [],
      "reports": [
        "RefreshRequested"
      ],
      "scenes": [
        "pull-to-refresh"
      ]
    },
    {
      "name": "PulseLoader",
      "kind": "builder",
      "path": "gpui_kit::display::loading::PulseLoader",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "A row of breathing dots, used while a request is in flight.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "tint(tint: impl Into<Hsla>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "loading"
      ]
    },
    {
      "name": "RadarChart",
      "kind": "builder",
      "path": "gpui_kit::display::chart::RadarChart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "A polar reading over host-owned axes.",
      "construct": [
        "from_raw(ident: impl Into<Ident>, label: impl Into<SharedString>, series: impl IntoIterator<Item = data::RawSeries>, axes: &[data::ValueAxis]) -> Result<Self, data::DataError>",
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: ChartState) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "chart",
        "cartesian-states"
      ]
    },
    {
      "name": "Radio",
      "kind": "builder",
      "path": "gpui_kit::controls::toggle::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",
        "bind_value<T>(binding: &Binding<T>, value: T, cx: &App) -> Self where T: Clone + PartialEq + 'static,"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "choice"
      ]
    },
    {
      "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",
        "invalid(invalid: bool) -> Self"
      ],
      "commands": [
        "set_control_size(size: gpui_kit_theme::ControlSize, 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_invalid(invalid: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "is_disabled() -> bool",
        "calendar() -> &Entity<Calendar>",
        "current_range() -> Option<DayRange>",
        "state() -> RangeState",
        "blocked() -> BlockedReport"
      ],
      "slots": [],
      "reports": [
        "StartPicked",
        "EndPicked"
      ],
      "scenes": [
        "date-range",
        "touch-dates"
      ]
    },
    {
      "name": "Rating",
      "kind": "builder",
      "path": "gpui_kit::display::rating::Rating",
      "source": "crates/gpui-kit/src/display/rating.rs",
      "summary": "A controlled scalar rating rendered as token-sized stars.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "value(value: Option<f32>) -> Self",
        "maximum(maximum: usize) -> Self",
        "precision(precision: RatingPrecision) -> Self",
        "clearable(clearable: bool) -> Self",
        "on_change(handler: impl Fn(Option<f32>, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "rating"
      ]
    },
    {
      "name": "RefreshVeil",
      "kind": "builder",
      "path": "gpui_kit::display::loading::RefreshVeil",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "A veil over content that is still the last verified value.",
      "construct": [
        "new(ident: impl Into<Ident>, content: impl IntoElement) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "loading"
      ]
    },
    {
      "name": "Responsive",
      "kind": "builder",
      "path": "gpui_kit::layout::Responsive",
      "source": "crates/gpui-kit/src/layout/responsive.rs",
      "summary": "A container that builds its content from its own measured width.",
      "construct": [
        "new(ident: impl Into<Ident>, build: impl FnOnce(ContainerSize, &mut Window, &mut App) -> AnyElement + 'static) -> Self"
      ],
      "options": [
        "fill() -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "responsive"
      ]
    },
    {
      "name": "RewardReveal",
      "kind": "builder",
      "path": "gpui_kit::game::RewardReveal",
      "source": "crates/gpui-kit/src/game/presentation.rs",
      "summary": "A complete reward reveal composition with optional policy-resolved effects.",
      "construct": [
        "new(ident: impl Into<Ident>, reward: RewardSnapshot) -> Self"
      ],
      "options": [
        "effect(effect: EffectPlan) -> Self",
        "sample_at(elapsed: Duration) -> Self",
        "on_event(handler: impl Fn(&RewardRevealEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [
        "RevealRequested",
        "ClaimRequested"
      ],
      "scenes": [
        "game-ui"
      ]
    },
    {
      "name": "RichTextEditor",
      "kind": "view",
      "path": "gpui_kit::controls::rich_text_editor::RichTextEditor",
      "source": "crates/gpui-kit/src/controls/rich_text_editor/mod.rs",
      "summary": "The visible projection over a caller-owned rich-text editing session.",
      "construct": [
        "new(ident: impl Into<Ident>, session: Entity<RichTextEditSession>, new_block_id: impl Fn() -> RichTextBlockId + 'static, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "name(name: impl Into<SharedString>) -> Self",
        "frame(frame: Frame) -> Self",
        "toolbar(toolbar: bool) -> Self",
        "rows(rows: usize) -> Self",
        "max_rows(max_rows: usize) -> Self",
        "invalid(invalid: bool) -> Self",
        "required(required: bool) -> Self",
        "read_only(read_only: bool) -> Self",
        "diagnostics(diagnostics: impl IntoIterator<Item = RichTextDiagnostic>) -> Self"
      ],
      "commands": [
        "set_name(name: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_placeholder(placeholder: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_frame(frame: Frame, cx: &mut Context<Self>)",
        "set_toolbar(toolbar: bool, cx: &mut Context<Self>)",
        "set_rows(rows: usize, cx: &mut Context<Self>)",
        "set_max_rows(max_rows: Option<usize>, cx: &mut Context<Self>)",
        "set_diagnostics(diagnostics: impl IntoIterator<Item = RichTextDiagnostic>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_read_only(read_only: bool, cx: &mut Context<Self>)",
        "set_invalid(invalid: bool, cx: &mut Context<Self>)",
        "set_required(required: bool, cx: &mut Context<Self>)",
        "apply_intent(intent: RichTextIntent, cx: &mut Context<Self>)"
      ],
      "queries": [
        "session() -> &Entity<RichTextEditSession>",
        "is_disabled() -> bool",
        "is_read_only() -> bool"
      ],
      "slots": [],
      "reports": [
        "IntentApplied",
        "IntentRefused",
        "LinkRequested",
        "Focus",
        "Blur"
      ],
      "scenes": [
        "editor-options",
        "rich-text-editor"
      ]
    },
    {
      "name": "SankeyChart",
      "kind": "builder",
      "path": "gpui_kit::display::plot::SankeyChart",
      "source": "crates/gpui-kit/src/display/plot.rs",
      "summary": "Sankey ribbons over caller-owned normalized layout.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: PlotState<SankeyData>) -> Self"
      ],
      "options": [
        "animate(enabled: bool) -> Self",
        "animation(spec: crate::motion::MotionSpec) -> Self",
        "selected(id: Option<SharedString>) -> Self",
        "labels(show: bool) -> Self",
        "current(id: impl Into<SharedString>) -> Self",
        "on_current(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "plot",
        "sankey-motion",
        "sankey-layout"
      ]
    },
    {
      "name": "ScatterChart",
      "kind": "builder",
      "path": "gpui_kit::display::chart::ScatterChart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Scatter or bubble marks over one or more host-owned series.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: ChartState) -> Self"
      ],
      "options": [
        "axes(axes: ChartAxes) -> Self",
        "crosshair() -> Self",
        "current(series_id: impl Into<SharedString>, point_id: impl Into<SharedString>) -> Self",
        "on_current(handler: impl Fn(ChartSelection, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "chart"
      ]
    },
    {
      "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_files(path: impl Into<SharedString>, files: Vec<PathBuf>, cx: &mut Context<Self>) -> Result<bool, SharedString>",
        "add_list_item(path: impl Into<SharedString>, window: &mut Window, cx: &mut Context<Self>) -> bool",
        "remove_list_item(path: impl Into<SharedString>, index: usize, cx: &mut Context<Self>) -> bool",
        "move_list_item(path: impl Into<SharedString>, from: usize, to: usize, cx: &mut Context<Self>) -> bool",
        "set_field_validation(path: impl Into<SharedString>, validation: ValidationState, cx: &mut Context<Self>) -> bool",
        "clear_field_validation(path: impl Into<SharedString>, cx: &mut Context<Self>) -> bool",
        "set_field_visibility(path: impl Into<SharedString>, visibility: FieldVisibility, cx: &mut Context<Self>) -> bool",
        "set_validation(validation: ValidationState, cx: &mut Context<Self>)",
        "clear_validation(cx: &mut Context<Self>)",
        "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": [
        "field_validation(path: &str, cx: &App) -> Option<ValidationState>",
        "field_visibility(path: &str, cx: &App) -> Option<FieldVisibility>",
        "validation() -> Option<&ValidationState>",
        "values(cx: &App) -> Vec<(SharedString, FieldValue)>",
        "submission_values(cx: &App) -> Vec<(SharedString, FieldValue)>",
        "unrenderable() -> &[UnrenderableField]",
        "has_unrenderable_required() -> bool"
      ],
      "slots": [],
      "reports": [
        "Changed",
        "FilesRequested",
        "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": [
        "bound_to(target: impl ScrollTarget + 'static) -> Self",
        "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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "scroll-area",
        "scroll-shadow"
      ]
    },
    {
      "name": "ScrollEdgeEffect",
      "kind": "builder",
      "path": "gpui_kit::layout::ScrollEdgeEffect",
      "source": "crates/gpui-kit/src/layout/scroll_edge.rs",
      "summary": "A visual ramp at the edges where floating glass overlaps scrolling content.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "edges(edges: FadeEdges) -> Self",
        "top(fade: bool) -> Self",
        "bottom(fade: bool) -> Self",
        "left(fade: bool) -> Self",
        "right(fade: bool) -> Self",
        "kind(kind: ScrollEdgeKind) -> Self",
        "soft() -> Self",
        "hard() -> Self",
        "band(band: f32) -> Self",
        "blur(blur: f32) -> Self",
        "child(child: impl IntoElement) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "scroll-edge-effect"
      ]
    },
    {
      "name": "ScrollFade",
      "kind": "builder",
      "path": "gpui_kit::layout::ScrollFade",
      "source": "crates/gpui-kit/src/layout/scroll_fade.rs",
      "summary": "A region whose content fades towards the edges it is scrolled past.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "edges(edges: FadeEdges) -> Self",
        "top(fade: bool) -> Self",
        "bottom(fade: bool) -> Self",
        "left(fade: bool) -> Self",
        "right(fade: bool) -> Self",
        "band(band: f32) -> Self",
        "fit_height() -> Self",
        "child(child: impl IntoElement) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "scroll-fade"
      ]
    },
    {
      "name": "SearchField",
      "kind": "view",
      "path": "gpui_kit::controls::search::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_match_case(on: Option<bool>, cx: &mut Context<Self>)",
        "set_whole_word(on: Option<bool>, cx: &mut Context<Self>)",
        "set_count(count: HitCount, cx: &mut Context<Self>)",
        "set_placeholder(placeholder: Option<SharedString>, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, 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>",
        "is_disabled() -> bool",
        "focus(window: &mut Window, cx: &mut Context<Self>)"
      ],
      "slots": [],
      "reports": [
        "QueryChanged",
        "Next",
        "Previous",
        "Cancelled",
        "MatchCaseToggled",
        "WholeWordToggled"
      ],
      "scenes": [
        "search-field"
      ]
    },
    {
      "name": "SearchInput",
      "kind": "view",
      "path": "gpui_kit::controls::search::SearchInput",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "An in-content query with a magnifier and a clear action when nonempty.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "name(name: impl Into<SharedString>) -> Self",
        "placeholder(placeholder: impl Into<SharedString>) -> Self"
      ],
      "commands": [
        "set_name(name: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_placeholder(placeholder: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_value(value: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_presentation(name: Option<SharedString>, placeholder: Option<SharedString>, size: ControlSize, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "value(cx: &App) -> SharedString",
        "input() -> &Entity<TextInput>",
        "is_disabled() -> bool"
      ],
      "slots": [],
      "reports": [
        "Change",
        "Submit",
        "Cancel",
        "BackspaceAtStart",
        "Focus",
        "Blur"
      ],
      "scenes": [
        "search-input"
      ]
    },
    {
      "name": "SegmentedControl",
      "kind": "builder",
      "path": "gpui_kit::controls::segmented::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",
        "bind(binding: &Binding<SharedString>, cx: &App) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "form"
      ]
    },
    {
      "name": "Select",
      "kind": "view",
      "path": "gpui_kit::controls::select::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",
        "bind(select: &Entity<Self>, signal: &Signal<Option<SharedString>>, cx: &mut App) -> Vec<Subscription>"
      ],
      "options": [
        "presentation(presentation: popover::PickerPresentation) -> Self",
        "options(options: impl IntoIterator<Item = SelectOption>) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "name(name: impl Into<SharedString>) -> Self",
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "invalid(invalid: bool) -> Self",
        "clearable(clearable: bool) -> Self"
      ],
      "commands": [
        "set_presentation(presentation: popover::PickerPresentation, cx: &mut Context<Self>)",
        "set_name(name: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_invalid(invalid: bool, cx: &mut Context<Self>)",
        "set_placeholder(placeholder: Option<SharedString>, cx: &mut Context<Self>)",
        "set_clearable(clearable: bool, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "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>)",
        "close(cx: &mut Context<Self>)"
      ],
      "queries": [
        "selected_id() -> Option<&SharedString>",
        "selected_option() -> Option<&SelectOption>",
        "is_open() -> bool",
        "is_disabled() -> bool"
      ],
      "slots": [],
      "reports": [
        "Selected",
        "Cleared",
        "Opened",
        "Closed"
      ],
      "scenes": [
        "input",
        "touch-pickers"
      ]
    },
    {
      "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": [],
      "slots": [
        "empty",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "server-list"
      ]
    },
    {
      "name": "SettingsList",
      "kind": "builder",
      "path": "gpui_kit::controls::settings_row::SettingsList",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "Settings sections filtered by one caller-owned query.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "query(query: impl Into<SharedString>) -> Self",
        "section(section: impl Into<EffectScoped<SettingsSection>>) -> Self",
        "sections<S: Into<EffectScoped<SettingsSection>>>(sections: impl IntoIterator<Item = S>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "header",
        "sidebar",
        "footer"
      ],
      "reports": [],
      "scenes": [
        "settings",
        "settings-page"
      ]
    },
    {
      "name": "SettingsRow",
      "kind": "builder",
      "path": "gpui_kit::controls::settings_row::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",
        "label_width(width: Pixels) -> Self",
        "badge(badge: impl Into<SharedString>) -> Self",
        "value(value: impl Into<SharedString>) -> Self",
        "control(control: impl IntoElement) -> Self",
        "search_terms(terms: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "managed(controller: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "settings"
      ]
    },
    {
      "name": "SettingsSection",
      "kind": "builder",
      "path": "gpui_kit::controls::settings_row::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: impl Into<EffectScoped<SettingsRow>>) -> Self",
        "rows<R: Into<EffectScoped<SettingsRow>>>(rows: impl IntoIterator<Item = R>) -> Self",
        "label_width(width: Pixels) -> Self",
        "child(child: impl IntoElement) -> Self",
        "action(action: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "settings"
      ]
    },
    {
      "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",
        "width(width: f32) -> Self",
        "fill_width() -> Self",
        "fit_height() -> Self",
        "expanded_ids(ids: &[&str]) -> Self",
        "on_toggle(handler: impl Fn(SharedString, bool, &mut Window, &mut App) + 'static) -> Self",
        "on_collapse(handler: impl Fn(bool, &mut Window, &mut App) + 'static) -> 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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "sidebar",
        "sidebar-overflow"
      ]
    },
    {
      "name": "Skeleton",
      "kind": "builder",
      "path": "gpui_kit::display::loading::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<SharedString>) -> Self",
        "rows(rows: usize) -> Self",
        "row_height(row_height: f32) -> Self",
        "widths(widths: impl IntoIterator<Item = f32>) -> Self",
        "shapes(shapes: impl IntoIterator<Item = SkeletonShape>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "loading"
      ]
    },
    {
      "name": "Slider",
      "kind": "builder",
      "path": "gpui_kit::controls::slider::Slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "A track with one or two handles.",
      "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",
        "orientation(orientation: SliderOrientation) -> Self",
        "length(length: f32) -> Self",
        "display(display: impl Into<SharedString>) -> Self",
        "on_change(handler: impl Fn(f32, &mut Window, &mut App) + 'static) -> Self",
        "bind(binding: &Binding<f32>, cx: &App) -> Self",
        "high(high: f32) -> Self",
        "values(low: f32, high: f32) -> Self",
        "marks(marks: impl IntoIterator<Item = f32>) -> Self",
        "on_range_change(handler: impl Fn(f32, f32, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "choice"
      ]
    },
    {
      "name": "SpanTimeline",
      "kind": "builder",
      "path": "gpui_kit::display::trace::SpanTimeline",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "The waterfall alone: bars and a time axis, with each span named at its own bar instead of in a gutter.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "spans(spans: impl IntoIterator<Item = TraceSpan>) -> Self",
        "shared_spans(spans: Rc<Vec<TraceSpan>>) -> Self",
        "time_viewport(domain: [f64; 2]) -> Result<Self, ScaleError>",
        "animate_viewport(animate: bool) -> Self",
        "animate_layout(animate: bool) -> Self",
        "layout_animation(spec: motion::MotionSpec) -> Self",
        "selected_time(value: Option<[f64; 2]>) -> Result<Self, crate::interaction::range::RangeError>",
        "on_time_selection(handler: impl Fn(crate::interaction::range::RangeEvent, &mut Window, &mut App) + 'static) -> Self",
        "format_time(format: impl Fn(f64) -> SharedString + 'static) -> Self",
        "on_viewport(handler: impl Fn(NumericScale, &mut Window, &mut App) + 'static) -> Self",
        "collapsed(ids: impl IntoIterator<Item = SharedString>) -> Self",
        "on_toggle(handler: impl Fn(SharedString, bool, &mut Window, &mut App) + 'static) -> Self",
        "visible_rows(count: usize) -> Self",
        "axis(start: impl Into<SharedString>, end: impl Into<SharedString>) -> Self",
        "ticks<S: Into<SharedString>>(ticks: impl IntoIterator<Item = (f32, S)>) -> Self",
        "current(id: impl Into<SharedString>) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty"
      ],
      "reports": [],
      "scenes": [
        "trace",
        "trace-time"
      ]
    },
    {
      "name": "Sparkline",
      "kind": "builder",
      "path": "gpui_kit::display::sparkline::Sparkline",
      "source": "crates/gpui-kit/src/display/sparkline.rs",
      "summary": "A compact, accessible trend reading.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: SparklineState) -> Self"
      ],
      "options": [
        "tint(tint: Hsla) -> Self",
        "embedded() -> Self",
        "stale(stale: bool) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "sparkline"
      ]
    },
    {
      "name": "SpecializedChart",
      "kind": "builder",
      "path": "gpui_kit::display::specialized::SpecializedChart",
      "source": "crates/gpui-kit/src/display/specialized.rs",
      "summary": "Specialized raw-value presentations with a persistent labeled value key, keyboard selection, semantic marks, and retained-data refresh failures.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: PlotState<SpecializedData>) -> Self"
      ],
      "options": [
        "selected(id: Option<SharedString>) -> Self",
        "motion(enabled: bool) -> Self",
        "animate(enabled: bool) -> Self",
        "animation(spec: crate::motion::MotionSpec) -> Self",
        "labels(enabled: bool) -> Self",
        "on_navigate(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_hover(handler: impl Fn(Option<SharedString>, &mut Window, &mut App) + 'static) -> Self",
        "current(id: impl Into<SharedString>) -> Self",
        "on_current(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "specialized",
        "specialized-distribution",
        "specialized-exploration"
      ]
    },
    {
      "name": "Spinner",
      "kind": "builder",
      "path": "gpui_kit::display::loading::Spinner",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "An inline turn, for a wait that sits next to a label.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "tint(tint: impl Into<Hsla>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "loading"
      ]
    },
    {
      "name": "SplitButton",
      "kind": "view",
      "path": "gpui_kit::controls::split_button::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_label(label: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_icon(icon: Option<Icon>, cx: &mut Context<Self>)",
        "set_variant(variant: ButtonVariant, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "set_default_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_items(items: Vec<MenuItem>, cx: &mut Context<Self>)",
        "set_menu_name(name: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_on_click(handler: impl Fn(&mut Window, &mut App) + 'static, cx: &mut Context<Self>)",
        "clear_on_click(cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, window: &mut Window, cx: &mut Context<Self>)"
      ],
      "queries": [
        "is_disabled() -> bool",
        "menu() -> &Entity<Menu>",
        "is_open(cx: &App) -> bool",
        "open_menu(window: &mut Window, cx: &mut Context<Self>)"
      ],
      "slots": [],
      "reports": [],
      "scenes": [
        "actions"
      ]
    },
    {
      "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": [],
      "slots": [],
      "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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "split-tree"
      ]
    },
    {
      "name": "StackedBarChart",
      "kind": "builder",
      "path": "gpui_kit::display::chart::StackedBarChart",
      "source": "crates/gpui-kit/src/display/chart.rs",
      "summary": "Bars stacked from the same category identity across series.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, state: ChartState) -> Self"
      ],
      "options": [
        "axes(axes: ChartAxes) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "chart"
      ]
    },
    {
      "name": "StageProgress",
      "kind": "builder",
      "path": "gpui_kit::display::stage_progress::StageProgress",
      "source": "crates/gpui-kit/src/display/stage_progress.rs",
      "summary": "A run of named stages, all of them supplied by the caller.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "stages(stages: impl IntoIterator<Item = ProgressStage>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "stage-progress"
      ]
    },
    {
      "name": "StaleMark",
      "kind": "builder",
      "path": "gpui_kit::display::status::StaleMark",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "The mark that a verified value is still on screen after a failed refresh.",
      "construct": [
        "new(ident: impl Into<Ident>, reason: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "updated(updated: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "state-ladder"
      ]
    },
    {
      "name": "StateView",
      "kind": "builder",
      "path": "gpui_kit::display::state_view::StateView",
      "source": "crates/gpui-kit/src/display/state_view.rs",
      "summary": "A region that picks the truthful waiting, empty, failed, or ready surface.",
      "construct": [
        "new(ident: impl Into<Ident>, phase: impl HasPhase) -> Self",
        "from_async<T, E: AsRef<str>>(ident: impl Into<Ident>, value: &AsyncValue<T, E>, ready: impl FnOnce(&T) -> AnyElement) -> Self"
      ],
      "options": [
        "content(content: impl IntoElement) -> Self",
        "elapsed(elapsed: Duration) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "state-ladder"
      ]
    },
    {
      "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",
        "height() -> gpui::Pixels"
      ],
      "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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "ide-shell"
      ]
    },
    {
      "name": "StatusDot",
      "kind": "builder",
      "path": "gpui_kit::display::status::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": [
        "tint(tint: Hsla) -> Self",
        "busy(ident: impl Into<Ident>) -> Self",
        "activity(activity: motion::Activity) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "status"
      ]
    },
    {
      "name": "StatusLine",
      "kind": "builder",
      "path": "gpui_kit::display::status::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",
        "tint(tint: Hsla) -> Self",
        "busy(ident: impl Into<Ident>) -> Self",
        "activity(activity: motion::Activity) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "status"
      ]
    },
    {
      "name": "SubagentTree",
      "kind": "builder",
      "path": "gpui_kit::agent::SubagentTree",
      "source": "crates/gpui-kit/src/agent/presentation.rs",
      "summary": "A caller-controlled hierarchy derived from Spawn links in a run.",
      "construct": [
        "new(ident: impl Into<Ident>, run: AgentRunSnapshot) -> Self"
      ],
      "options": [
        "expanded(expanded: impl IntoIterator<Item = AgentId>) -> Self",
        "selected(selected: impl Into<AgentId>) -> Self",
        "visible_rows(rows: usize) -> Self",
        "on_toggle(handler: impl Fn(AgentId, bool, &mut Window, &mut App) + 'static) -> Self",
        "on_action(handler: impl Fn(AgentUiAction, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "agent-roster"
      ]
    },
    {
      "name": "SwipeActions",
      "kind": "view",
      "path": "gpui_kit::interaction::swipe::SwipeActions",
      "source": "crates/gpui-kit/src/interaction/swipe.rs",
      "summary": "A stable row with two optional action trays. Revealing is transient visual state, never selection or deletion. Vertical gestures remain scroll gestures.",
      "construct": [
        "new(ident: impl Into<Ident>, reveal_label: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [
        "set_content(body: Option<Body>, cx: &mut Context<Self>)",
        "set_actions(side: SwipeSide, actions: Vec<SheetAction>, cx: &mut Context<Self>)",
        "set_state(state: SheetActionState, cx: &mut Context<Self>)",
        "set_enabled(enabled: bool, cx: &mut Context<Self>)",
        "reveal(side: Option<SwipeSide>, cx: &mut Context<Self>) -> bool"
      ],
      "queries": [
        "revealed() -> Option<SwipeSide>"
      ],
      "slots": [],
      "reports": [
        "Revealed",
        "ActionRequested"
      ],
      "scenes": [
        "swipe-actions"
      ]
    },
    {
      "name": "Switch",
      "kind": "builder",
      "path": "gpui_kit::controls::toggle::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",
        "invalid(invalid: bool) -> Self",
        "on_change(handler: impl Fn(bool, &mut Window, &mut App) + 'static) -> Self",
        "bind(binding: &Binding<bool>, cx: &App) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "choice"
      ]
    },
    {
      "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",
        "lines(lines: GridLines) -> 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(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading",
        "header_extra"
      ],
      "reports": [],
      "scenes": [
        "table"
      ]
    },
    {
      "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": [
        "capsules() -> Self",
        "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",
        "scrolling() -> Self",
        "overflow_menu(menu: Entity<Menu>) -> Self",
        "reorderable(reorderable: bool) -> Self",
        "accepts(predicate: impl Fn(&DragItem, &DropPosition) -> bool + 'static) -> Self",
        "deferred_acceptance(controller: dnd::DeferredDrop, revision: u64) -> Self",
        "on_reorder(handler: impl Fn(&DropIntent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "tabs",
        "document-tabs"
      ]
    },
    {
      "name": "Tag",
      "kind": "builder",
      "path": "gpui_kit::display::tag::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",
        "tint(tint: Hsla) -> Self",
        "variant(variant: Variant) -> Self",
        "color(color: impl Into<ColorChoice>) -> Self",
        "on_remove(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "tag"
      ]
    },
    {
      "name": "TagInput",
      "kind": "view",
      "path": "gpui_kit::controls::tag_input::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",
        "bind(field: &Entity<Self>, signal: &Signal<Vec<SharedString>>, cx: &mut App) -> Vec<Subscription>"
      ],
      "options": [
        "tags(tags: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "max(max: usize) -> Self",
        "invalid(invalid: bool) -> Self",
        "reorderable(reorderable: bool) -> Self",
        "collapse_at(visible: usize) -> Self"
      ],
      "commands": [
        "set_invalid(invalid: bool, cx: &mut Context<Self>)",
        "set_tags(tags: Vec<SharedString>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_placeholder(placeholder: Option<SharedString>, cx: &mut Context<Self>)",
        "set_max(max: Option<usize>, cx: &mut Context<Self>)",
        "set_reorderable(reorderable: bool, cx: &mut Context<Self>)",
        "set_collapse_at(visible: Option<usize>, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)"
      ],
      "queries": [
        "current() -> &[SharedString]",
        "is_disabled() -> bool",
        "field() -> &Entity<TextInput>",
        "targeted() -> Option<&SharedString>",
        "refusal() -> Option<&SharedString>"
      ],
      "slots": [],
      "reports": [
        "Added",
        "Removed",
        "Duplicate",
        "Refused",
        "Moved",
        "EditRequested"
      ],
      "scenes": [
        "form"
      ]
    },
    {
      "name": "Terminal",
      "kind": "builder",
      "path": "gpui_kit::content::Terminal",
      "source": "crates/gpui-kit/src/content/terminal/view.rs",
      "summary": "A terminal grid.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "state(state: TerminalState) -> Self",
        "grid(grid: impl Fn(GridGeometry, &mut App) -> Option<GridSnapshot> + 'static) -> Self",
        "focused(focused: bool) -> Self",
        "scrollback(scrollback: bool) -> Self",
        "on_event(handler: impl Fn(TerminalEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [
        "SelectionStarted",
        "SelectionUpdated",
        "SelectionCleared",
        "Scrolled"
      ],
      "scenes": [
        "terminal"
      ]
    },
    {
      "name": "TextArea",
      "kind": "view",
      "path": "gpui_kit::controls::textarea::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",
        "detached(ident: impl Into<Ident>, cx: &mut Context<Self>) -> Self",
        "bind(area: &Entity<Self>, signal: &Signal<String>, cx: &mut App) -> Vec<Subscription>"
      ],
      "options": [
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "input_options(options: gpui::TextInputOptions) -> Self",
        "frame(frame: Frame) -> Self",
        "wrap(wrap: TextAreaWrap) -> Self",
        "text(text: impl Into<SharedString>) -> Self",
        "invalid(invalid: bool) -> Self",
        "required(required: bool) -> Self",
        "read_only(read_only: bool) -> Self",
        "rows(rows: usize) -> Self",
        "max_rows(max_rows: usize) -> Self",
        "autosize(min_rows: usize, max_rows: usize) -> Self",
        "enter(enter: Enter) -> Self",
        "max_length(max_length: usize) -> Self"
      ],
      "commands": [
        "set_input_options(options: gpui::TextInputOptions, cx: &mut Context<Self>)",
        "set_placeholder(placeholder: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_frame(frame: Frame, cx: &mut Context<Self>)",
        "set_wrap(wrap: TextAreaWrap, cx: &mut Context<Self>)",
        "set_required(required: bool, cx: &mut Context<Self>)",
        "set_rows(rows: usize, cx: &mut Context<Self>)",
        "set_max_rows(max_rows: Option<usize>, cx: &mut Context<Self>)",
        "set_autosize(rows: Option<(usize, usize)>, cx: &mut Context<Self>)",
        "set_enter(enter: Enter, cx: &mut Context<Self>)",
        "set_max_length(max_length: Option<usize>, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "set_arrows_claimed(claimed: bool)",
        "set_completion_claimed(claimed: bool)",
        "set_value(value: impl Into<SharedString>, cx: &mut Context<Self>)",
        "insert(text: &str, cx: &mut Context<Self>)",
        "replace_range(range: Range<usize>, text: &str, cx: &mut Context<Self>) -> Option<Range<usize>>",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_read_only(read_only: bool, cx: &mut Context<Self>)",
        "set_invalid(invalid: bool, cx: &mut Context<Self>)",
        "set_selected_range(range: Range<usize>, cx: &mut Context<Self>)",
        "replace_ranges(edits: impl IntoIterator<Item = (Range<usize>, SharedString)>, cx: &mut Context<Self>) -> bool",
        "set_selections(selections: impl IntoIterator<Item = (Range<usize>, bool)>, cx: &mut Context<Self>) -> bool",
        "select_rectangle(anchor: Point<Pixels>, focus: Point<Pixels>, cx: &mut Context<Self>) -> bool"
      ],
      "queries": [
        "arrows_claimed() -> bool",
        "completion_claimed() -> bool",
        "value() -> &SharedString",
        "document() -> gpui::EditSnapshot",
        "snapshot() -> TextAreaSnapshot",
        "revision() -> u64",
        "wrap_mode() -> TextAreaWrap",
        "is_empty() -> bool",
        "is_disabled() -> bool",
        "is_read_only() -> bool",
        "selected_range() -> Range<usize>",
        "cursor_offset() -> usize",
        "selections() -> Vec<(Range<usize>, bool)>",
        "bounds_for_range(range: Range<usize>) -> Option<Vec<Bounds<Pixels>>>",
        "caret_bounds() -> Option<Bounds<Pixels>>",
        "bounds_for_position(offset: usize) -> Option<Bounds<Pixels>>",
        "cursor_row() -> usize",
        "shaping_work() -> Option<gpui::EditableTextWork>",
        "accessibility_work() -> gpui::AccessibleTextWork",
        "row_index_work() -> usize",
        "wrapped_index_work() -> usize",
        "measured() -> Option<Measured>",
        "horizontal_scroll_offset() -> Pixels"
      ],
      "slots": [],
      "reports": [
        "Edited",
        "Change",
        "Submit",
        "Cancel",
        "Pasted",
        "MoveUp",
        "MoveDown",
        "AcceptCompletion",
        "DismissCompletion",
        "IndentRequested",
        "OutdentRequested",
        "SelectionChanged",
        "GeometryChanged",
        "Focus",
        "Blur"
      ],
      "scenes": [
        "touch-inputs",
        "textarea",
        "editor-options"
      ]
    },
    {
      "name": "TextInput",
      "kind": "view",
      "path": "gpui_kit::controls::input::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",
        "bind(input: &Entity<Self>, signal: &Signal<String>, cx: &mut App) -> Vec<Subscription>"
      ],
      "options": [
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "input_options(options: gpui::TextInputOptions) -> Self",
        "name(name: impl Into<SharedString>) -> Self",
        "text(text: impl Into<SharedString>) -> Self",
        "invalid(invalid: bool) -> Self",
        "required(required: bool) -> Self",
        "read_only(read_only: bool) -> Self",
        "secret(secret: bool) -> Self",
        "bare(bare: bool) -> Self",
        "max_length(max_length: usize) -> Self"
      ],
      "commands": [
        "set_input_options(options: gpui::TextInputOptions, cx: &mut Context<Self>)",
        "set_name(name: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_secret(secret: bool, cx: &mut Context<Self>)",
        "set_max_length(max_length: Option<usize>, cx: &mut Context<Self>)",
        "set_bare(bare: bool, 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_read_only(read_only: bool, cx: &mut Context<Self>)",
        "set_required(required: bool, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, 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"
      ],
      "slots": [],
      "reports": [
        "Change",
        "Submit",
        "Cancel",
        "BackspaceAtStart",
        "Focus",
        "Blur"
      ],
      "scenes": [
        "input",
        "touch-inputs"
      ]
    },
    {
      "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",
        "presentation(presentation: AgentDisclosurePresentation) -> Self",
        "thinking(thinking: bool) -> Self",
        "elapsed(elapsed: impl Into<SharedString>) -> Self",
        "on_toggle(handler: impl Fn(bool, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "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",
        "invalid(invalid: bool) -> Self"
      ],
      "commands": [
        "set_value(value: TimeOfDay, cx: &mut Context<Self>)",
        "set_seconds(seconds: bool, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_invalid(invalid: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "is_disabled() -> bool",
        "current() -> TimeOfDay",
        "active_segment() -> Segment",
        "clock() -> Clock"
      ],
      "slots": [],
      "reports": [
        "Changed"
      ],
      "scenes": [
        "date-time",
        "touch-dates"
      ]
    },
    {
      "name": "Timeline",
      "kind": "builder",
      "path": "gpui_kit::display::timeline::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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "detail"
      ]
    },
    {
      "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(window: &Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "corner(corner: ToastCorner) -> Self",
        "capacity(capacity: usize) -> Self",
        "reserved_edges(edges: impl Into<Edges<Pixels>>) -> Self"
      ],
      "commands": [
        "set_corner(corner: ToastCorner, cx: &mut Context<Self>)",
        "set_capacity(capacity: usize, cx: &mut Context<Self>)",
        "set_reserved_edges(edges: impl Into<Edges<Pixels>>, cx: &mut Context<Self>)",
        "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>"
      ],
      "slots": [],
      "reports": [],
      "scenes": [
        "toast"
      ]
    },
    {
      "name": "Toggle",
      "kind": "builder",
      "path": "gpui_kit::controls::toggle_button::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",
        "ground(ground: Surface) -> 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",
        "bind(binding: &Binding<bool>, cx: &App) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "toggle"
      ]
    },
    {
      "name": "ToggleGroup",
      "kind": "builder",
      "path": "gpui_kit::controls::toggle_button::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",
        "ground(ground: Surface) -> Self",
        "on_change(handler: impl Fn(Vec<SharedString>, SharedString, &mut Window, &mut App) + 'static) -> Self",
        "bind(binding: &Binding<Vec<SharedString>>, cx: &App) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "toggle"
      ]
    },
    {
      "name": "ToolCall",
      "kind": "builder",
      "path": "gpui_kit::agent::ToolCall",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "One quiet evidence row for a tool invocation.",
      "construct": [
        "new(ident: impl Into<Ident>, family: ToolFamily, tool: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "summary(summary: impl Into<SharedString>) -> Self",
        "arguments(arguments: impl Into<ToolBody>) -> Self",
        "state(state: ToolCallState) -> Self",
        "elapsed(elapsed: impl Into<Elapsed>) -> Self",
        "diff(diff: impl IntoElement) -> Self",
        "expanded(expanded: bool) -> Self",
        "presentation(presentation: AgentDisclosurePresentation) -> Self",
        "on_toggle(handler: impl Fn(bool, &mut Window, &mut App) + 'static) -> Self",
        "on_retry(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "tool-call"
      ]
    },
    {
      "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"
      ],
      "slots": [],
      "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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "tooltip"
      ]
    },
    {
      "name": "TraceView",
      "kind": "builder",
      "path": "gpui_kit::display::trace::TraceView",
      "source": "crates/gpui-kit/src/display/trace.rs",
      "summary": "Hierarchical labels beside a waterfall of caller-owned spans.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "spans(spans: impl IntoIterator<Item = TraceSpan>) -> Self",
        "shared_spans(spans: Rc<Vec<TraceSpan>>) -> Self",
        "time_viewport(domain: [f64; 2]) -> Result<Self, ScaleError>",
        "animate_viewport(animate: bool) -> Self",
        "animate_layout(animate: bool) -> Self",
        "layout_animation(spec: motion::MotionSpec) -> Self",
        "selected_time(value: Option<[f64; 2]>) -> Result<Self, crate::interaction::range::RangeError>",
        "on_time_selection(handler: impl Fn(crate::interaction::range::RangeEvent, &mut Window, &mut App) + 'static) -> Self",
        "format_time(format: impl Fn(f64) -> SharedString + 'static) -> Self",
        "on_viewport(handler: impl Fn(NumericScale, &mut Window, &mut App) + 'static) -> Self",
        "collapsed(ids: impl IntoIterator<Item = SharedString>) -> Self",
        "on_toggle(handler: impl Fn(SharedString, bool, &mut Window, &mut App) + 'static) -> Self",
        "visible_rows(count: usize) -> Self",
        "axis(start: impl Into<SharedString>, end: impl Into<SharedString>) -> Self",
        "ticks<S: Into<SharedString>>(ticks: impl IntoIterator<Item = (f32, S)>) -> Self",
        "current(id: impl Into<SharedString>) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty"
      ],
      "reports": [],
      "scenes": [
        "trace",
        "trace-time"
      ]
    },
    {
      "name": "TransferList",
      "kind": "view",
      "path": "gpui_kit::controls::transfer_list::TransferList",
      "source": "crates/gpui-kit/src/controls/transfer_list.rs",
      "summary": "A controlled source/target assignment control.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "source(items: impl IntoIterator<Item = TransferItem>) -> Self",
        "target(items: impl IntoIterator<Item = TransferItem>) -> Self",
        "source_selected(ids: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "target_selected(ids: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "source_label(label: impl Into<SharedString>) -> Self",
        "target_label(label: impl Into<SharedString>) -> Self"
      ],
      "commands": [
        "set_items(source: Vec<TransferItem>, target: Vec<TransferItem>, cx: &mut Context<Self>)",
        "set_selection(source: Vec<SharedString>, target: Vec<SharedString>, cx: &mut Context<Self>)",
        "set_labels(source: SharedString, target: SharedString, cx: &mut Context<Self>)",
        "set_control_size(size: ControlSize, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_query(query: impl Into<SharedString>, cx: &mut Context<Self>)"
      ],
      "queries": [
        "is_disabled() -> bool"
      ],
      "slots": [],
      "reports": [
        "ToggleSource",
        "ToggleTarget",
        "MoveToTarget",
        "MoveToSource",
        "QueryChanged"
      ],
      "scenes": [
        "transfer-list"
      ]
    },
    {
      "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",
        "seekable(seekable: bool) -> Self",
        "volume_control(available: bool) -> Self",
        "has_previous(has_previous: bool) -> Self",
        "has_next(has_next: bool) -> Self",
        "presentation(state: MediaPresentation, label: impl Into<SharedString>) -> Self",
        "presentation_refused(reason: impl Into<SharedString>) -> Self",
        "on_event(handler: impl Fn(&TransportEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "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",
        "deferred_acceptance(controller: dnd::DeferredDrop, revision: u64) -> Self",
        "on_move(handler: impl Fn(&DropIntent, &mut Window, &mut App) + 'static) -> Self",
        "loading(loading: bool) -> Self",
        "failure(failure: impl Into<SharedString>) -> Self",
        "empty(empty: EmptyState) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading",
        "header_extra"
      ],
      "reports": [],
      "scenes": [
        "tree",
        "drag-tree"
      ]
    },
    {
      "name": "TreeGrid",
      "kind": "builder",
      "path": "gpui_kit::data::TreeGrid",
      "source": "crates/gpui-kit/src/data/tree_grid.rs",
      "summary": "A product-neutral, caller-owned virtualized treegrid adapter.",
      "construct": [
        "new(ident: impl Into<Ident>, visible_row_count: usize, render_row: impl Fn(usize, &mut Window, &mut App) -> TreeGridRow + 'static) -> Self"
      ],
      "options": [
        "column(column: GridColumn) -> Self",
        "columns(columns: impl IntoIterator<Item = GridColumn>) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "visible_rows(rows: usize) -> Self",
        "row_height(height: f32) -> Self",
        "lines(lines: GridLines) -> Self",
        "loading(loading: bool) -> Self",
        "failure(detail: impl Into<SharedString>) -> Self",
        "empty(state: EmptyState) -> Self",
        "unavailable(title: impl Into<SharedString>) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_expand(handler: impl Fn(SharedString, bool, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [
        "empty",
        "failed",
        "loading"
      ],
      "reports": [],
      "scenes": [
        "tree-grid"
      ]
    },
    {
      "name": "UndoHistory",
      "kind": "builder",
      "path": "gpui_kit::navigation::UndoHistory",
      "source": "crates/gpui-kit/src/navigation/undo_history.rs",
      "summary": "A history list that reports jump intents and changes no document state.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "entry(entry: HistoryEntry) -> Self",
        "entries(entries: impl IntoIterator<Item = HistoryEntry>) -> Self",
        "current(id: impl Into<SharedString>) -> Self",
        "on_jump(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "undo-history"
      ]
    },
    {
      "name": "UploadList",
      "kind": "builder",
      "path": "gpui_kit::controls::upload_list::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: impl Into<EffectScoped<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"
      ],
      "slots": [
        "empty"
      ],
      "reports": [],
      "scenes": [
        "upload-list"
      ]
    },
    {
      "name": "VideoPlayer",
      "kind": "builder",
      "path": "gpui_kit::media::VideoPlayer",
      "source": "crates/gpui-kit/src/media/video_player.rs",
      "summary": "A player for one piece of video.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "title(title: impl Into<SharedString>) -> Self",
        "transport(transport: Rc<dyn MediaTransport>) -> Self",
        "frame(supplier: impl Fn(&mut Window, &mut App) -> Option<AnyElement> + 'static) -> Self",
        "poster(supplier: impl Fn(&mut Window, &mut App) -> Option<AnyElement> + 'static) -> Self",
        "ratio(ratio: f32) -> Self",
        "ratio_of(width: f32, height: f32) -> Self",
        "elapsed(elapsed: impl Into<SharedString>) -> Self",
        "remaining(remaining: impl Into<SharedString>) -> Self",
        "step_seconds(seconds: f32) -> Self",
        "speeds(speeds: impl IntoIterator<Item = f32>) -> Self",
        "presentation(state: MediaPresentation, label: impl Into<SharedString>) -> Self",
        "presentation_refused(reason: impl Into<SharedString>) -> Self",
        "on_presentation_request(handler: impl Fn(MediaPresentation, &mut Window, &mut App) + 'static) -> Self",
        "on_event(handler: impl Fn(&MediaEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "video-player"
      ]
    },
    {
      "name": "VoiceReactive",
      "kind": "builder",
      "path": "gpui_kit::agent::VoiceReactive",
      "source": "crates/gpui-kit/src/agent/persona.rs",
      "summary": "A standard voice-reactive visualization from a normalized host sample.",
      "construct": [
        "new(ident: impl Into<Ident>, sample: VoiceSample) -> Self"
      ],
      "options": [
        "sample_at(elapsed: Duration) -> Self"
      ],
      "commands": [],
      "queries": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "persona"
      ]
    },
    {
      "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": [],
      "slots": [],
      "reports": [],
      "scenes": [
        "wizard"
      ]
    }
  ],
  "types": [
    {
      "name": "Ability",
      "path": "gpui_kit::game::Ability",
      "summary": "Stable identity of an ability.",
      "variants": [],
      "construct": [
        "new(id: impl Into<AbilityId>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "detail(detail: impl Into<SharedString>) -> Self",
        "icon(icon: Icon) -> Self",
        "shortcut(shortcut: impl Into<SharedString>) -> Self",
        "cost(cost: impl Into<SharedString>) -> Self",
        "charges(charges: AbilityCharges) -> Self",
        "state(state: AbilityState) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &AbilityId"
      ]
    },
    {
      "name": "AbilityBarEvent",
      "path": "gpui_kit::game::AbilityBarEvent",
      "summary": "What an ability bar reports without applying cooldown, charge, or cost.",
      "variants": [
        "Activate"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "AbilityCharges",
      "path": "gpui_kit::game::AbilityCharges",
      "summary": "Remaining and maximum charges for one ability.",
      "variants": [],
      "construct": [
        "new(current: usize, maximum: usize) -> Result<Self, AbilityChargesError>"
      ],
      "options": [
        "current() -> usize",
        "maximum() -> usize"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "AbilityChargesError",
      "path": "gpui_kit::game::AbilityChargesError",
      "summary": "Why charge counts were rejected.",
      "variants": [
        "ZeroMaximum",
        "AboveMaximum"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "AbilitySet",
      "path": "gpui_kit::game::AbilitySet",
      "summary": "A caller-owned ability set.",
      "variants": [],
      "construct": [
        "new(abilities: impl IntoIterator<Item = Ability>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "abilities() -> &[Ability]",
        "issues() -> Vec<AbilitySetIssue>"
      ]
    },
    {
      "name": "AbilitySetIssue",
      "path": "gpui_kit::game::AbilitySetIssue",
      "summary": "A duplicate ability fact.",
      "variants": [
        "DuplicateId"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "AbilityState",
      "path": "gpui_kit::game::AbilityState",
      "summary": "Caller-owned ability availability.",
      "variants": [
        "Ready",
        "CoolingDown",
        "Disabled",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ActionSheetEvent",
      "path": "gpui_kit::overlay::ActionSheetEvent",
      "summary": "",
      "variants": [
        "ActionRequested",
        "Sheet"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ActiveDrag",
      "path": "gpui_kit::interaction::ActiveDrag",
      "summary": "The drag as anything outside the module can see it.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Activity",
      "path": "gpui_kit::motion::Activity",
      "summary": "The shape of a piece of work that is currently under way.",
      "variants": [
        "Advancing",
        "Working",
        "Deliberating",
        "Signaling",
        "Transmitting"
      ],
      "construct": [],
      "options": [
        "period_ms(theme: &Theme) -> u64",
        "curve(theme: &Theme) -> CubicBezier"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "AgentActivity",
      "path": "gpui_kit::agent::AgentActivity",
      "summary": "What useful work an active agent is visibly doing.",
      "variants": [
        "Idle",
        "Planning",
        "Thinking",
        "UsingTool",
        "Speaking",
        "Aggregating",
        "Custom"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str"
      ]
    },
    {
      "name": "AgentAppearance",
      "path": "gpui_kit::agent::AgentAppearance",
      "summary": "Optional caller-owned art for an agent identity.",
      "variants": [],
      "construct": [
        "new(id: impl Into<AgentId>) -> Self"
      ],
      "options": [
        "image(image: impl Into<SharedString>) -> Self",
        "image_source(image: gpui::ImageSource) -> Self",
        "tint(tint: Hsla) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "AgentBlockKind",
      "path": "gpui_kit::content::AgentBlockKind",
      "summary": "The semantic kind of one document block.",
      "variants": [
        "Text",
        "Markdown",
        "Code",
        "ToolCall",
        "Diff",
        "Artifact",
        "Schema",
        "Chart",
        "Image",
        "Notice",
        "Choice",
        "Custom"
      ],
      "construct": [],
      "options": [
        "as_str() -> &'static str",
        "is_evidence() -> bool"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "AgentDescriptor",
      "path": "gpui_kit::agent::AgentDescriptor",
      "summary": "Identity and caller-owned description of one agent.",
      "variants": [],
      "construct": [
        "new(id: impl Into<AgentId>, name: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "role(role: impl Into<SharedString>) -> Self",
        "capabilities(capabilities: impl IntoIterator<Item = impl Into<SharedString>>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "AgentDisclosurePresentation",
      "path": "gpui_kit::agent::AgentDisclosurePresentation",
      "summary": "How agent evidence is presented when a disclosure is open.",
      "variants": [
        "Inset",
        "Flow"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "AgentDocumentBlock",
      "path": "gpui_kit::content::AgentDocumentBlock",
      "summary": "One stable part of an AgentDocument.",
      "variants": [],
      "construct": [
        "text(id: impl Into<SharedString>, text: impl Into<SharedString>) -> Self",
        "markdown(id: impl Into<SharedString>, source: impl Into<SharedString>) -> Self",
        "element(id: impl Into<SharedString>, kind: AgentBlockKind, build: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "code(id: impl Into<SharedString>, build: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "tool_call(id: impl Into<SharedString>, build: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "diff(id: impl Into<SharedString>, build: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "artifact(id: impl Into<SharedString>, build: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "schema(id: impl Into<SharedString>, build: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "chart(id: impl Into<SharedString>, build: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "image(id: impl Into<SharedString>, build: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "choice(id: impl Into<SharedString>, build: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "custom(id: impl Into<SharedString>, build: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "notice(id: impl Into<SharedString>, message: impl Into<SharedString>, tone: Tone) -> Self"
      ],
      "options": [
        "revision(revision: u64) -> Self",
        "streaming(streaming: bool) -> Self",
        "label(label: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "kind() -> AgentBlockKind"
      ]
    },
    {
      "name": "AgentDocumentEvent",
      "path": "gpui_kit::content::AgentDocumentEvent",
      "summary": "An action originating in a typed document block.",
      "variants": [
        "Markdown"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "AgentDocumentState",
      "path": "gpui_kit::content::AgentDocumentState",
      "summary": "What is known about the document as a whole.",
      "variants": [
        "Idle",
        "Loading",
        "Ready",
        "Empty",
        "Unavailable",
        "Failed"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str"
      ]
    },
    {
      "name": "AgentDocumentWork",
      "path": "gpui_kit::content::agent_document::AgentDocumentWork",
      "summary": "Work performed by a mounted virtual document's retained plans. Input checks are linear comparisons of caller records, not byte scans. Parser totals cover currently retained Markdown blocks. These counters do not include GPUI layout, key-vector copies into List, or wall-clock time.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "AgentExecutionState",
      "path": "gpui_kit::agent::AgentExecutionState",
      "summary": "Mutually exclusive execution state for an agent, task, or run.",
      "variants": [
        "Idle",
        "Queued",
        "Starting",
        "Active",
        "Waiting",
        "Blocked",
        "Cancelling",
        "Completed",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str",
        "busy() -> bool",
        "terminal() -> bool"
      ]
    },
    {
      "name": "AgentId",
      "path": "gpui_kit::agent::AgentId",
      "summary": "The stable identity of an agent, independent of its role or display name.",
      "variants": [],
      "construct": [
        "new(value: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &str"
      ]
    },
    {
      "name": "AgentModelIssue",
      "path": "gpui_kit::agent::AgentModelIssue",
      "summary": "A structural problem found in an AgentRunSnapshot.",
      "variants": [
        "MissingRoot",
        "DuplicateAgent",
        "DuplicateTask",
        "DuplicateLink",
        "MissingTaskOwner",
        "MissingLinkEndpoint",
        "SelfLink"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "AgentOutcome",
      "path": "gpui_kit::agent::AgentOutcome",
      "summary": "The terminal result of an agent, task, or run.",
      "variants": [
        "Succeeded",
        "Partial",
        "Failed",
        "Refused",
        "Cancelled",
        "TimedOut"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str"
      ]
    },
    {
      "name": "AgentPresence",
      "path": "gpui_kit::agent::AgentPresence",
      "summary": "Whether the host can presently reach an agent.",
      "variants": [
        "Unknown",
        "Online",
        "Away",
        "Offline",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str"
      ]
    },
    {
      "name": "AgentRunCanvasEvent",
      "path": "gpui_kit::agent::AgentRunCanvasEvent",
      "summary": "A controlled change proposed by AgentRunCanvas.",
      "variants": [
        "SelectionChanged",
        "ViewportChanged",
        "PositionChanged"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "AgentRunLayout",
      "path": "gpui_kit::agent::AgentRunLayout",
      "summary": "The reading axis used by the built-in deterministic run layout.",
      "variants": [
        "LayeredHorizontal",
        "LayeredVertical"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "AgentRunSnapshot",
      "path": "gpui_kit::agent::AgentRunSnapshot",
      "summary": "A complete observed run. The caller replaces or updates it as facts change.",
      "variants": [],
      "construct": [
        "new(id: impl Into<RunId>, root: impl Into<AgentId>) -> Self"
      ],
      "options": [
        "execution(execution: AgentExecutionState) -> Self",
        "agents(agents: impl IntoIterator<Item = AgentSnapshot>) -> Self",
        "tasks(tasks: impl IntoIterator<Item = AgentTaskSnapshot>) -> Self",
        "links(links: impl IntoIterator<Item = RunLink>) -> Self",
        "aggregation(aggregation: AggregationSnapshot) -> Self"
      ],
      "commands": [],
      "queries": [
        "issues() -> Vec<AgentModelIssue>"
      ]
    },
    {
      "name": "AgentSnapshot",
      "path": "gpui_kit::agent::AgentSnapshot",
      "summary": "One agent at one observed point in a run.",
      "variants": [],
      "construct": [
        "new(descriptor: AgentDescriptor) -> Self"
      ],
      "options": [
        "presence(presence: AgentPresence) -> Self",
        "execution(execution: AgentExecutionState) -> Self",
        "current_task(task: impl Into<TaskId>) -> Self",
        "progress(progress: f32) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "AgentTaskSnapshot",
      "path": "gpui_kit::agent::AgentTaskSnapshot",
      "summary": "One caller-owned task in a run.",
      "variants": [],
      "construct": [
        "new(id: impl Into<TaskId>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "owner(owner: impl Into<AgentId>) -> Self",
        "execution(execution: AgentExecutionState) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "AgentUiAction",
      "path": "gpui_kit::agent::AgentUiAction",
      "summary": "An action a multi-agent surface asks the host to consider.",
      "variants": [
        "SelectAgent",
        "OpenTask",
        "RequestCancel",
        "RequestRetry",
        "FocusResult"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "AgentVisualEvent",
      "path": "gpui_kit::agent::AgentVisualEvent",
      "summary": "A semantic event ready for the shared effects policy.",
      "variants": [],
      "construct": [
        "new(id: impl Into<VisualEventId>, surface: impl Into<SharedString>, kind: AgentVisualEventKind, target: RunSubjectId) -> Self"
      ],
      "options": [
        "origin(origin: RunSubjectId) -> Self"
      ],
      "commands": [],
      "queries": [
        "effect_event() -> EffectEvent"
      ]
    },
    {
      "name": "AgentVisualEventKind",
      "path": "gpui_kit::agent::AgentVisualEventKind",
      "summary": "The agent-domain meaning of one transient visual event.",
      "variants": [
        "AgentSpawned",
        "DelegationStarted",
        "HandoffCommitted",
        "ResultAggregated",
        "AgentSucceeded",
        "AgentRefused",
        "AgentFailed",
        "RewardGranted"
      ],
      "construct": [],
      "options": [
        "cue() -> VisualCue"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Aggregate",
      "path": "gpui_kit::display::chart::data::transform::Aggregate",
      "summary": "",
      "variants": [
        "Count",
        "Sum",
        "Mean",
        "Min",
        "Max",
        "Quantile"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "AggregationSnapshot",
      "path": "gpui_kit::agent::AggregationSnapshot",
      "summary": "A caller-owned count of the results being combined.",
      "variants": [],
      "construct": [
        "new(expected: usize, received: usize) -> Self"
      ],
      "options": [
        "conflicts(conflicts: usize) -> Self",
        "outcome(outcome: AgentOutcome) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Align",
      "path": "gpui_kit::data::Align",
      "summary": "Where a cell's content sits inside its column.",
      "variants": [
        "Start",
        "Center",
        "End"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "name() -> &'static str",
        "subject() -> Option<&SharedString>",
        "label(cx: &App) -> SharedString"
      ]
    },
    {
      "name": "Anchor",
      "path": "gpui_kit::navigation::Anchor",
      "summary": "One caller-owned document destination, identified independently of order.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "disabled(disabled: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString",
        "is_disabled() -> bool"
      ]
    },
    {
      "name": "Animator",
      "path": "gpui_kit::motion::Animator",
      "summary": "A scrubbable playhead over a run of a known length.",
      "variants": [],
      "construct": [
        "new(duration: Duration) -> Self",
        "over(theme: &Theme, motion: &Motion) -> Self",
        "across(sequence: &Sequence) -> Self"
      ],
      "options": [
        "duration() -> Duration",
        "speed() -> f32",
        "is_reversed() -> bool",
        "is_playing() -> bool",
        "head(now: Instant) -> f32",
        "running(now: Instant) -> bool",
        "finished(now: Instant) -> bool",
        "elapsed(now: Instant) -> Duration",
        "sample(theme: &Theme, motion: &Motion, now: Instant) -> MotionSample"
      ],
      "commands": [
        "play(now: Instant)",
        "pause(now: Instant)",
        "toggle(now: Instant)",
        "reverse(now: Instant)",
        "scrub(now: Instant, head: f32)",
        "set_speed(now: Instant, speed: f32)",
        "finish()",
        "rewind()"
      ],
      "queries": []
    },
    {
      "name": "AnsiRun",
      "path": "gpui_kit::content::AnsiRun",
      "summary": "One coloured run of the stripped text.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ApprovalDecision",
      "path": "gpui_kit::agent::ApprovalDecision",
      "summary": "How far an approval reaches.",
      "variants": [
        "Once",
        "Always"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "label(cx: &App) -> SharedString"
      ]
    },
    {
      "name": "ApprovalEvent",
      "path": "gpui_kit::agent::ApprovalEvent",
      "summary": "What the prompt reports. It applies none of it.",
      "variants": [
        "Approved",
        "Declined"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ApprovalStatus",
      "path": "gpui_kit::agent::ApprovalStatus",
      "summary": "What has happened to this request.",
      "variants": [
        "Pending",
        "Declined",
        "Approved",
        "Expired",
        "Superseded"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "ArtifactKind",
      "path": "gpui_kit::agent::ArtifactKind",
      "summary": "What kind of artifact the host is showing.",
      "variants": [
        "Code",
        "Document",
        "Markup"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ArtifactPreviewState",
      "path": "gpui_kit::agent::ArtifactPreviewState",
      "summary": "How the artifact was asked for.",
      "variants": [
        "Loading",
        "Ready",
        "Empty",
        "Unavailable",
        "Error"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "AspectFit",
      "path": "gpui_kit::layout::AspectFit",
      "summary": "Which dimension the parent decides, leaving the other to the ratio.",
      "variants": [
        "Width",
        "Height"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "AsyncValue",
      "path": "gpui_kit::state::AsyncValue",
      "summary": "A value and, separately, what is currently happening to it.",
      "variants": [],
      "construct": [
        "idle() -> Self",
        "loading() -> Self",
        "ready(value: T) -> Self",
        "empty() -> Self",
        "refused(reason: impl Into<String>) -> Self",
        "error(error: E) -> Self"
      ],
      "options": [],
      "commands": [
        "refresh()",
        "fail_refresh(error: E)",
        "record_attempt()"
      ],
      "queries": [
        "is_stale() -> bool"
      ]
    },
    {
      "name": "AtEnd",
      "path": "gpui_kit::motion::AtEnd",
      "summary": "What one frame found out about a surface's relationship to its end.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "AttachmentState",
      "path": "gpui_kit::display::attachment::AttachmentState",
      "summary": "Facts reported by the caller. Finishing a transfer does not imply that processing finished; only Ready makes that claim. Unknown totals stay indeterminate, including a supplied zero total.",
      "variants": [
        "Ready",
        "Queued",
        "Transferring",
        "Paused",
        "Processing",
        "Unavailable",
        "Failed",
        "Cancelled"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "is_busy() -> bool",
        "name() -> &'static str"
      ]
    },
    {
      "name": "AudioWaveformState",
      "path": "gpui_kit::media::AudioWaveformState",
      "summary": "How the envelope was asked for.",
      "variants": [
        "Loading",
        "Ready",
        "Empty",
        "Unavailable",
        "Error"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "AvatarPresence",
      "path": "gpui_kit::display::avatar::AvatarPresence",
      "summary": "Whether the identity behind the mark is reachable, in the host's terms.",
      "variants": [
        "Unknown",
        "Online",
        "Away",
        "Busy",
        "Offline"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "AxisSide",
      "path": "gpui_kit::display::chart::cartesian::AxisSide",
      "summary": "Leading means left for a vertical lane, top for a horizontal lane. Trailing means right or bottom respectively.",
      "variants": [
        "Leading",
        "Trailing"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "BackTransition",
      "path": "gpui_kit::navigation::BackTransition",
      "summary": "A cancellable back preview bound to the exact history it began with. Platform gesture recognition and completion thresholds belong to the host. Cancellation drops this transient value; history and focus remain unchanged.",
      "variants": [],
      "construct": [
        "begin(history: &NavHistory) -> Option<Self>"
      ],
      "options": [
        "commit(history: &mut NavHistory) -> bool",
        "cancel()"
      ],
      "commands": [
        "update(progress: f32)"
      ],
      "queries": [
        "progress() -> f32",
        "is_current(history: &NavHistory) -> bool"
      ]
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Binding",
      "path": "gpui_kit::reactive::Binding",
      "summary": "A read and a write of one value, without saying where the value lives.",
      "variants": [],
      "construct": [
        "new(get: impl Fn(&App) -> T + 'static, set: impl Fn(T, &mut App) + 'static) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "get(cx: &App) -> T",
        "set(cx: &mut App, value: T)",
        "map<U: 'static>(from: impl Fn(&T) -> U + 'static, into: impl Fn(&mut T, U) + 'static) -> Binding<U>"
      ]
    },
    {
      "name": "Block",
      "path": "gpui_kit::content::Block",
      "summary": "One block of a document.",
      "variants": [
        "Frontmatter",
        "Heading",
        "Paragraph",
        "Code",
        "Quote",
        "List",
        "Rule",
        "Table",
        "Html"
      ],
      "construct": [
        "new(kind: BlockKind) -> Self",
        "at(kind: BlockKind, indent: u8) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "text() -> Option<&Text>",
        "lines() -> usize"
      ]
    },
    {
      "name": "BlockKind",
      "path": "gpui_kit::content::markdown::doc::BlockKind",
      "summary": "The block vocabulary. Closed by design — it is exactly what a block editor's insert menu offers, and a consumer that needs a block of its own is a reason to widen this enum rather than to grow an extension system.",
      "variants": [
        "Paragraph",
        "Heading",
        "Bullet",
        "Ordered",
        "Task",
        "Quote",
        "Code",
        "Image",
        "Table",
        "Rule"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "BottomSheetEvent",
      "path": "gpui_kit::overlay::BottomSheetEvent",
      "summary": "Sheet lifecycle plus a request that never changes caller selection itself.",
      "variants": [
        "Opened",
        "Dismissed",
        "Closed",
        "DetentRequested"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "BoxSummary",
      "path": "gpui_kit::display::specialized::BoxSummary",
      "summary": "R-7 quantiles (linear interpolation at (n - 1) p), Tukey 1.5-IQR fences, and whiskers at the outermost samples within those fences.",
      "variants": [],
      "construct": [
        "from_samples(samples: &[f64]) -> Result<Self, SpecializedError>"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "BranchState",
      "path": "gpui_kit::data::BranchState",
      "summary": "What is known about the children under a node.",
      "variants": [
        "Ready",
        "Loading",
        "Unavailable",
        "Failed"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "Breakpoint",
      "path": "gpui_kit::layout::Breakpoint",
      "summary": "A theme-defined container width at which a grid may change arrangement.",
      "variants": [
        "Small",
        "Medium",
        "Large",
        "ExtraLarge"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "BubblePlacement",
      "path": "gpui_kit::display::bubble::BubblePlacement",
      "summary": "Which reading edge a bubble is placed against.",
      "variants": [
        "Start",
        "End"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ButtonJoin",
      "path": "gpui_kit::controls::button::ButtonJoin",
      "summary": "Where a button sits in a joined run of them.",
      "variants": [
        "Alone",
        "Leading",
        "Middle",
        "Trailing"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ButtonStyle",
      "path": "gpui_kit::controls::button::ButtonStyle",
      "summary": "Either presentation vocabulary a button accepts.",
      "variants": [
        "Weight",
        "Tier"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ButtonVariant",
      "path": "gpui_kit::controls::button::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": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CalendarInterval",
      "path": "gpui_kit::display::chart::scale::calendar::CalendarInterval",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CalendarTick",
      "path": "gpui_kit::display::chart::scale::calendar::CalendarTick",
      "summary": "A unique instant. Repeated wall-clock labels during a fall-back retain both instants with different offsets. Nonexistent local boundaries are omitted.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CalendarTickError",
      "path": "gpui_kit::display::chart::scale::calendar::CalendarTickError",
      "summary": "",
      "variants": [
        "NotTimeScale",
        "InvalidInterval",
        "OutOfRange",
        "LimitExceeded"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CalendarUnit",
      "path": "gpui_kit::display::chart::scale::calendar::CalendarUnit",
      "summary": "Wall-clock boundary unit. Weeks start on Monday; months/quarters/years start on their first day. Multiples align to 1970 (weeks to 1969-12-29).",
      "variants": [
        "Second",
        "Minute",
        "Hour",
        "Day",
        "Week",
        "Month",
        "Quarter",
        "Year"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Candlestick",
      "path": "gpui_kit::display::plot::Candlestick",
      "summary": "One caller-normalized OHLC reading.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, x: f32, open: f32, high: f32, low: f32, close: f32, label: impl Into<SharedString>, value: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "is_bounded() -> bool"
      ]
    },
    {
      "name": "CanvasToolbarAction",
      "path": "gpui_kit::canvas::CanvasToolbarAction",
      "summary": "A canvas chrome action the host already knows how to apply.",
      "variants": [
        "Fit",
        "Snap",
        "Arrange"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "CanvasToolbarEvent",
      "path": "gpui_kit::canvas::CanvasToolbarEvent",
      "summary": "What the toolbar reported.",
      "variants": [
        "Action"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CardHeader",
      "path": "gpui_kit::display::card::CardHeader",
      "summary": "The titled top of a card.",
      "variants": [],
      "construct": [
        "new(title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "subtitle(subtitle: impl Into<SharedString>) -> Self",
        "action(action: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "CardVariant",
      "path": "gpui_kit::foundation::CardVariant",
      "summary": "How a card separates itself from what is behind it.",
      "variants": [
        "Elevated",
        "Filled",
        "Ghost"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CarouselEvent",
      "path": "gpui_kit::navigation::CarouselEvent",
      "summary": "What a carousel reports. The caller changes the active item or phase.",
      "variants": [
        "Previous",
        "Next",
        "Selected"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CarouselItem",
      "path": "gpui_kit::navigation::CarouselItem",
      "summary": "One page in a Carousel.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>, content: impl IntoElement) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Carry",
      "path": "gpui_kit::content::Carry",
      "summary": "What the scanner is in the middle of, carried from one line to the next.",
      "variants": [
        "None",
        "Comment",
        "Text"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CartesianEvent",
      "path": "gpui_kit::display::chart::cartesian::CartesianEvent",
      "summary": "",
      "variants": [
        "Hover",
        "Select",
        "Visibility",
        "Emphasis",
        "Viewport",
        "Brush",
        "Range",
        "Reset"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CartesianMotion",
      "path": "gpui_kit::display::chart::cartesian::CartesianMotion",
      "summary": "Visualization lifecycle timing resolved through the existing motion engine. Domain/orientation changes remain direct; reduced motion settles immediately.",
      "variants": [],
      "construct": [
        "themed(theme: &gpui_kit_theme::Theme) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CartesianRange",
      "path": "gpui_kit::display::chart::cartesian::CartesianRange",
      "summary": "Caller-owned persistent selection over a numeric overview domain. The range uses ascending raw Start/End identity even when the overview domain descends. No selection is installed by the chart. Accept CartesianEvent::Range in caller state and optionally derive a linked viewport from its exact values.",
      "variants": [],
      "construct": [
        "new(domain: NumericScale, value: Option<[f64; 2]>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CascaderEvent",
      "path": "gpui_kit::controls::cascader::CascaderEvent",
      "summary": "",
      "variants": [
        "Selected",
        "Expanded",
        "Retry",
        "Opened",
        "Closed"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CascaderOption",
      "path": "gpui_kit::controls::cascader::CascaderOption",
      "summary": "One caller-owned node in a cascader.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "disabled(disabled: bool) -> Self",
        "idle_children() -> Self",
        "loading_children() -> Self",
        "empty_children() -> Self",
        "unavailable_children(reason: impl Into<SharedString>) -> Self",
        "error_children(reason: impl Into<SharedString>) -> Self",
        "children(children: impl IntoIterator<Item = CascaderOption>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Catalog",
      "path": "gpui_kit::agent::Catalog",
      "summary": "What is known about what a server offers.",
      "variants": [
        "Unasked",
        "Asking",
        "Offers",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CategoryScale",
      "path": "gpui_kit::display::chart::scale::CategoryScale",
      "summary": "Equal-width category bands. Order and identity are caller-owned.",
      "variants": [],
      "construct": [
        "new(categories: impl IntoIterator<Item = impl Into<SharedString>>) -> Result<Self, ScaleError>"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "categories() -> &[SharedString]",
        "bandwidth() -> f64",
        "map(id: &str) -> Option<f64>",
        "invert(fraction: f64) -> Option<&SharedString>"
      ]
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "CellAlign",
      "path": "gpui_kit::content::CellAlign",
      "summary": "Which way a table column's cells are set.",
      "variants": [
        "Start",
        "Center",
        "End"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CellColor",
      "path": "gpui_kit::content::terminal::CellColor",
      "summary": "What a cell says its colour is, before a theme decides what that means.",
      "variants": [
        "Foreground",
        "Background",
        "Indexed",
        "Rgb"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CellHit",
      "path": "gpui_kit::content::CellHit",
      "summary": "Which cell a pointer landed on, and which edge of it an anchor takes.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CellRange",
      "path": "gpui_kit::data::CellRange",
      "summary": "A caller-owned rectangle of cells, named by row and column identity.",
      "variants": [],
      "construct": [
        "new(start_row: impl Into<SharedString>, start_column: impl Into<SharedString>, end_row: impl Into<SharedString>, end_column: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CellSide",
      "path": "gpui_kit::content::CellSide",
      "summary": "Which edge of a cell an anchor sits on.",
      "variants": [
        "Left",
        "Right"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CellSnapshot",
      "path": "gpui_kit::content::CellSnapshot",
      "summary": "One cell as it stands: the character, its colours, and the attributes that change how it is painted.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "display_colors() -> (CellColor, CellColor)"
      ]
    },
    {
      "name": "ChartAxes",
      "path": "gpui_kit::display::chart::ChartAxes",
      "summary": "Host-supplied wording for the two axes. Empty labels are omitted, not replaced with a guessed scale.",
      "variants": [],
      "construct": [],
      "options": [
        "x_label(label: impl Into<SharedString>) -> Self",
        "y_label(label: impl Into<SharedString>) -> Self",
        "x_ends(start: impl Into<SharedString>, end: impl Into<SharedString>) -> Self",
        "y_ends(start: impl Into<SharedString>, end: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ChartOrientation",
      "path": "gpui_kit::display::chart::cartesian::ChartOrientation",
      "summary": "",
      "variants": [
        "Vertical",
        "Horizontal"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ChartPoint",
      "path": "gpui_kit::display::chart::ChartPoint",
      "summary": "One host-owned point in a chart series.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, x: f32, y: f32, label: impl Into<SharedString>, value: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "weight(weight: f32) -> Self"
      ],
      "commands": [],
      "queries": [
        "is_bounded() -> bool"
      ]
    },
    {
      "name": "ChartReference",
      "path": "gpui_kit::display::chart::cartesian::ChartReference",
      "summary": "A line or shaded interval on an identified value axis. Its screen direction follows the chart orientation.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ChartScale",
      "path": "gpui_kit::display::chart::data::ChartScale",
      "summary": "",
      "variants": [
        "Numeric",
        "Category"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "map(value: &ChartValue) -> Option<f64>",
        "invert(fraction: f64) -> Option<ChartValue>"
      ]
    },
    {
      "name": "ChartSelection",
      "path": "gpui_kit::display::chart::ChartSelection",
      "summary": "The business identity of the point under the crosshair.",
      "variants": [],
      "construct": [
        "new(series_id: impl Into<SharedString>, point_id: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ChartSeries",
      "path": "gpui_kit::display::chart::ChartSeries",
      "summary": "One named series. Identity is the caller's, never the draw order.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "points(points: impl IntoIterator<Item = ChartPoint>) -> Self",
        "tint(color: Hsla) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ChartState",
      "path": "gpui_kit::display::chart::ChartState",
      "summary": "The complete state of one cartesian reading.",
      "variants": [
        "Loading",
        "Ready",
        "Empty",
        "Unavailable",
        "Error",
        "Stale"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "ChartTick",
      "path": "gpui_kit::display::chart::cartesian::ChartTick",
      "summary": "A caller-owned tick, including calendar/locale policy where required.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ChartTooltipData",
      "path": "gpui_kit::display::chart::cartesian::ChartTooltipData",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ChartTooltipRow",
      "path": "gpui_kit::display::chart::cartesian::ChartTooltipRow",
      "summary": "Current caller data for one rich tooltip row. Values are never interpolated.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ChartValue",
      "path": "gpui_kit::display::chart::data::ChartValue",
      "summary": "",
      "variants": [
        "Number",
        "Category"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Chase",
      "path": "gpui_kit::motion::Chase",
      "summary": "The scroll velocity of a surface being held against a moving end.",
      "variants": [],
      "construct": [
        "new() -> Self"
      ],
      "options": [],
      "commands": [
        "reset()",
        "step(mut position: f32, target: f32, mut frames: f32) -> f32"
      ],
      "queries": [
        "is_idle() -> bool",
        "growth() -> f32"
      ]
    },
    {
      "name": "CinematicRecipe",
      "path": "gpui_kit::effects::CinematicRecipe",
      "summary": "Semantic cinematic recipe selected from an EffectPlan.",
      "variants": [
        "Arrival",
        "Delegation",
        "Handoff",
        "Aggregation",
        "Success",
        "Reward",
        "Attention",
        "Refusal",
        "Failure"
      ],
      "construct": [],
      "options": [
        "duration(theme: &Theme) -> Duration"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ClarificationEvent",
      "path": "gpui_kit::agent::ClarificationEvent",
      "summary": "What the panel reports without applying it.",
      "variants": [
        "Answered",
        "Skipped"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ClarificationOption",
      "path": "gpui_kit::agent::ClarificationOption",
      "summary": "One candidate answer the agent is offering.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "detail(detail: impl Into<SharedString>) -> Self",
        "unavailable(reason: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString",
        "detail_text() -> Option<&SharedString>",
        "unavailable_reason() -> Option<&SharedString>",
        "is_available() -> bool"
      ]
    },
    {
      "name": "ClarificationStatus",
      "path": "gpui_kit::agent::ClarificationStatus",
      "summary": "What happened to the question.",
      "variants": [
        "Pending",
        "Answered",
        "Skipped",
        "Withdrawn",
        "Superseded"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "is_pending() -> bool",
        "name() -> &'static str",
        "answer() -> Option<&[SharedString]>"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "is_twelve_hour() -> bool",
        "meridiem_label(index: usize) -> Option<SharedString>"
      ]
    },
    {
      "name": "CodeBlock",
      "path": "gpui_kit::content::CodeBlock",
      "summary": "A fenced block, as handed to a host that colours code.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "CodeSpan",
      "path": "gpui_kit::content::CodeSpan",
      "summary": "One coloured run of a code block, in byte offsets into its text.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ColumnGroup",
      "path": "gpui_kit::data::ColumnGroup",
      "summary": "A header that names several columns at once.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "columns(keys: impl IntoIterator<Item = impl Into<SharedString>>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ComboboxEvent",
      "path": "gpui_kit::controls::combobox::ComboboxEvent",
      "summary": "What a combobox reports. The owner decides what any of it means.",
      "variants": [
        "QueryChanged",
        "Selected",
        "Custom",
        "Opened",
        "Closed"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString",
        "reason() -> Option<&SharedString>",
        "is_available() -> bool"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ContainerSize",
      "path": "gpui_kit::layout::ContainerSize",
      "summary": "The space a container was given on the previous frame.",
      "variants": [
        "Unmeasured",
        "Measured"
      ],
      "construct": [],
      "options": [
        "width() -> Option<f32>",
        "height() -> Option<f32>",
        "at_least(width: f32) -> bool",
        "narrower_than(width: f32) -> bool"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ContainerWidth",
      "path": "gpui_kit::layout::ContainerWidth",
      "summary": "The max-width and padding recipe used by page-level content.",
      "variants": [
        "Full",
        "Readable",
        "Dialog",
        "Custom"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ContextMenuEvent",
      "path": "gpui_kit::overlay::ContextMenuEvent",
      "summary": "What a context menu reports.",
      "variants": [
        "Opened",
        "Invoked",
        "Dismissed",
        "Closed",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ContextMenuPresentation",
      "path": "gpui_kit::overlay::ContextMenuPresentation",
      "summary": "Where a ContextMenu is presented.",
      "variants": [
        "Native",
        "InWindow"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ContinuousHeatCell",
      "path": "gpui_kit::display::heatmap::ContinuousHeatCell",
      "summary": "A raw observation; None is missing, not zero. The existing five-level HeatCell contract remains unchanged and is not used as a numeric bin.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, row: impl Into<SharedString>, column: impl Into<SharedString>, label: impl Into<SharedString>, reading: Option<f64>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CopyEvent",
      "path": "gpui_kit::controls::copy_button::CopyEvent",
      "summary": "What a copy button reports. The owner decides what any of it means.",
      "variants": [
        "Copied",
        "Failed"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CopyState",
      "path": "gpui_kit::controls::copy_button::CopyState",
      "summary": "What the button is currently claiming.",
      "variants": [
        "Idle",
        "Copied",
        "Failed"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "is_copied() -> bool",
        "is_failed() -> bool"
      ]
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "reading() -> &Reading"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Cursor",
      "path": "gpui_kit::content::markdown::doc::Cursor",
      "summary": "A caret: which block, and how far into its text.",
      "variants": [],
      "construct": [
        "new(block: usize, offset: usize) -> Self"
      ],
      "options": [
        "clamp(doc: &Doc) -> Self",
        "left(doc: &Doc) -> Self",
        "right(doc: &Doc) -> Self",
        "up(doc: &Doc) -> Self",
        "down(doc: &Doc) -> Self",
        "home() -> Self",
        "end(doc: &Doc) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "CursorSnapshot",
      "path": "gpui_kit::content::CursorSnapshot",
      "summary": "Where the cursor is, in viewport rows (row 0 is the top of what is visible).",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Curve",
      "path": "gpui_kit::display::chart::data::Curve",
      "summary": "",
      "variants": [
        "Linear",
        "StepBefore",
        "StepAfter",
        "Monotone"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "CustomMark",
      "path": "gpui_kit::display::chart::cartesian::CustomMark",
      "summary": "A caller-painted scatter glyph, centered at the shared projected point. Painting is clipped to this physical-pixel rectangle and the plot. Its exact visible rectangle also owns hit testing and semantics, including during motion.",
      "variants": [],
      "construct": [
        "new(width: f32, height: f32, paint: impl Fn(Bounds<Pixels>, Hsla, &mut Window, &mut App) + 'static) -> Result<Self, InvalidMarkSize>"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DataError",
      "path": "gpui_kit::display::chart::data::DataError",
      "summary": "",
      "variants": [
        "DuplicateIdentity",
        "UnknownAxis",
        "InvalidPoint",
        "InvalidStack",
        "Scale"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Day",
      "path": "gpui_kit::datetime::Day",
      "summary": "One day, meaningful only to the adapter that produced it.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DefaultSchemaFilePolicy",
      "path": "gpui_kit::structured::DefaultSchemaFilePolicy",
      "summary": "Opt-in policy for ordinary files with no host-specific restrictions.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DeferredDrop",
      "path": "gpui_kit::interaction::dnd::DeferredDrop",
      "summary": "Retained, nonblocking acceptance shared by List and Tabs.",
      "variants": [],
      "construct": [
        "new(timeout: Duration, validate: impl Fn(&DropIntent, &mut Window, &mut App) -> bool + 'static, on_event: impl Fn(&DropDecisionEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "status() -> Option<(DropRequest, DropDecision)>",
        "cancel(window: &mut Window, cx: &mut App)",
        "revoke(window: &mut Window, cx: &mut App)",
        "resolve(id: DropRequestId, decision: DropDecision, window: &mut Window, cx: &mut App) -> bool",
        "request(intent: DropIntent, window: &mut Window, cx: &mut App) -> Option<DropRequestId>"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "name() -> &'static str",
        "failed() -> bool"
      ]
    },
    {
      "name": "DeltaDirection",
      "path": "gpui_kit::display::metric::DeltaDirection",
      "summary": "Which way a delta points.",
      "variants": [
        "Up",
        "Down",
        "Flat"
      ],
      "construct": [
        "from_text(delta: &str) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DerivedPoint",
      "path": "gpui_kit::display::chart::data::transform::DerivedPoint",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DescriptionItem",
      "path": "gpui_kit::display::description_list::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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "value() -> &DescriptionValue"
      ]
    },
    {
      "name": "DescriptionValue",
      "path": "gpui_kit::display::description_list::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": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str"
      ]
    },
    {
      "name": "DesktopTitlebarEvent",
      "path": "gpui_kit::layout::DesktopTitlebarEvent",
      "summary": "A standard desktop-window request.",
      "variants": [
        "Minimize",
        "ToggleMaximize",
        "Close"
      ],
      "construct": [],
      "options": [
        "apply(window: &mut Window)"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Diagnostic",
      "path": "gpui_kit::data::Diagnostic",
      "summary": "One caller-owned diagnostic.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, severity: DiagnosticSeverity, location: DiagnosticLocation, message: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "action(action: DiagnosticAction) -> Self",
        "actions(actions: impl IntoIterator<Item = DiagnosticAction>) -> Self",
        "disabled(disabled: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "severity() -> DiagnosticSeverity",
        "location() -> &DiagnosticLocation",
        "message() -> &SharedString",
        "diagnostic_actions() -> &[DiagnosticAction]",
        "is_disabled() -> bool"
      ]
    },
    {
      "name": "DiagnosticAction",
      "path": "gpui_kit::data::DiagnosticAction",
      "summary": "A caller-owned action that can be reported for a diagnostic.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "disabled(disabled: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString",
        "is_disabled() -> bool"
      ]
    },
    {
      "name": "DiagnosticFilter",
      "path": "gpui_kit::data::DiagnosticFilter",
      "summary": "Selected severities, stored as a compact bit set.",
      "variants": [],
      "construct": [
        "from_severities(values: impl IntoIterator<Item = DiagnosticSeverity>) -> Self"
      ],
      "options": [
        "includes(diagnostic: &Diagnostic) -> bool",
        "severities() -> impl Iterator<Item = DiagnosticSeverity>"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "DiagnosticLocation",
      "path": "gpui_kit::data::DiagnosticLocation",
      "summary": "Caller-formatted location text. No path interpretation is performed.",
      "variants": [],
      "construct": [
        "new(label: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "label() -> &SharedString"
      ]
    },
    {
      "name": "DiagnosticSeverity",
      "path": "gpui_kit::data::DiagnosticSeverity",
      "summary": "Severity assigned by the caller.",
      "variants": [
        "Error",
        "Warning",
        "Information",
        "Hint"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str",
        "tone() -> Tone"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DialogueChoice",
      "path": "gpui_kit::agent::DialogueChoice",
      "summary": "One caller-owned action offered after a dialogue turn.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "detail(detail: impl Into<SharedString>) -> Self",
        "unavailable(reason: impl Into<SharedString>) -> Self",
        "selected(selected: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString"
      ]
    },
    {
      "name": "DialogueChoiceAvailability",
      "path": "gpui_kit::agent::DialogueChoiceAvailability",
      "summary": "Whether a dialogue choice can presently be requested.",
      "variants": [
        "Available",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DialogueTurn",
      "path": "gpui_kit::agent::DialogueTurn",
      "summary": "One complete caller-owned persona turn.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, agent: AgentSnapshot, body: impl Into<MessageBody>) -> Self",
        "markdown(id: impl Into<SharedString>, agent: AgentSnapshot, source: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "streaming(streaming: bool) -> Self",
        "choice(choice: DialogueChoice) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString"
      ]
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "DiffCursor",
      "path": "gpui_kit::content::DiffCursor",
      "summary": "Where the reader is in a diff they are stepping through.",
      "variants": [
        "File",
        "Hunk",
        "Line"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DiffFile",
      "path": "gpui_kit::content::DiffFile",
      "summary": "",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>, hunks: impl IntoIterator<Item = DiffHunk>) -> Self"
      ],
      "options": [
        "notes(notes: impl IntoIterator<Item = DiffNote>) -> Self",
        "language(language: impl Into<SharedString>) -> Self",
        "folded(folded: bool) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "DiffHunk",
      "path": "gpui_kit::content::DiffHunk",
      "summary": "One caller-supplied hunk.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, header: impl Into<SharedString>, lines: impl IntoIterator<Item = DiffLine>) -> Self"
      ],
      "options": [
        "collapsed(collapsed: bool) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "DiffLine",
      "path": "gpui_kit::content::DiffLine",
      "summary": "One stable, caller-supplied logical diff row.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, text: impl Into<SharedString>) -> Self",
        "added(id: impl Into<SharedString>, text: impl Into<SharedString>) -> Self",
        "removed(id: impl Into<SharedString>, text: impl Into<SharedString>) -> Self",
        "paired(id: impl Into<SharedString>, old: impl Into<SharedString>, new: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "old_number(number: usize) -> Self",
        "new_number(number: usize) -> Self",
        "spans(spans: impl IntoIterator<Item = CodeSpan>) -> Self",
        "old_spans(spans: impl IntoIterator<Item = CodeSpan>) -> Self",
        "new_spans(spans: impl IntoIterator<Item = CodeSpan>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "DiffNote",
      "path": "gpui_kit::content::DiffNote",
      "summary": "One caller-supplied file and its hunks. Something a diff says about a file rather than about its lines.",
      "variants": [
        "Added",
        "Removed",
        "Renamed",
        "Binary",
        "Mode"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DiffPresentation",
      "path": "gpui_kit::content::DiffPresentation",
      "summary": "How the same caller-supplied lines are arranged.",
      "variants": [
        "Unified",
        "Split"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "DiffViewEvent",
      "path": "gpui_kit::content::DiffViewEvent",
      "summary": "An action on caller-owned diff identity.",
      "variants": [
        "FileActivated",
        "HunkActivated",
        "LineActivated",
        "ExpandHunk",
        "UnfoldFile"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DividerAxis",
      "path": "gpui_kit::display::empty::DividerAxis",
      "summary": "Which way a rule runs.",
      "variants": [
        "Horizontal",
        "Vertical"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Doc",
      "path": "gpui_kit::content::markdown::doc::Doc",
      "summary": "A markdown document: blocks in document order.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [
        "split(ix: usize, at: usize) -> usize",
        "merge_back(ix: usize) -> Option<usize>",
        "edit_text(ix: usize, edit: impl FnOnce(&mut Text))",
        "normalize()",
        "indent(ix: usize) -> bool",
        "repair()",
        "outdent(ix: usize) -> bool"
      ],
      "queries": [
        "ceiling(ix: usize) -> u8"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "title() -> &SharedString",
        "is_unavailable() -> bool"
      ]
    },
    {
      "name": "DockPlacement",
      "path": "gpui_kit::layout::DockPlacement",
      "summary": "Which side of an existing stack a dropped panel should split into.",
      "variants": [
        "Left",
        "Right",
        "Top",
        "Bottom"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DockRecord",
      "path": "gpui_kit::layout::DockRecord",
      "summary": "One node of a DockTopology as plain caller-serializable fields.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DockRecordError",
      "path": "gpui_kit::layout::DockRecordError",
      "summary": "Why persisted dock records do not form one valid topology.",
      "variants": [
        "NoRoot",
        "ManyRoots",
        "DuplicateId",
        "MissingParent",
        "WrongChildCount",
        "StackWithChildren",
        "SplitWithPanels",
        "DuplicatePanel",
        "MissingActive",
        "Unreachable",
        "InvalidFloatingBounds"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DockRecordKind",
      "path": "gpui_kit::layout::DockRecordKind",
      "summary": "What one DockRecord describes.",
      "variants": [
        "Stack",
        "Horizontal",
        "Vertical"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DockRegion",
      "path": "gpui_kit::layout::DockRegion",
      "summary": "Where a panel sits.",
      "variants": [
        "Left",
        "Centre",
        "Right",
        "Bottom"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "DockStack",
      "path": "gpui_kit::layout::DockStack",
      "summary": "One tab stack at a leaf of a DockTopology.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, panels: impl IntoIterator<Item = impl Into<SharedString>>) -> Self"
      ],
      "options": [
        "active(panel: impl Into<SharedString>) -> Self",
        "min(minimum: f32) -> Self",
        "min_width(minimum: f32) -> Self",
        "min_height(minimum: f32) -> Self",
        "rail(extent: f32) -> Self",
        "collapsed(collapsed: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "panels() -> &[SharedString]",
        "active_panel() -> Option<&SharedString>",
        "is_collapsed() -> bool"
      ]
    },
    {
      "name": "DockTopology",
      "path": "gpui_kit::layout::DockTopology",
      "summary": "A recursive arrangement of tab stacks.",
      "variants": [
        "Stack",
        "Split"
      ],
      "construct": [
        "restore_with_floating(records: &[DockRecord], floating: &[FloatingDockRecord]) -> Result<(Self, Vec<FloatingDock>), DockRecordError>",
        "stack(id: impl Into<SharedString>, panels: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "split(id: impl Into<SharedString>, axis: SplitAxis, ratio: f32, start: DockTopology, end: DockTopology) -> Self",
        "horizontal(id: impl Into<SharedString>, ratio: f32, start: DockTopology, end: DockTopology) -> Self",
        "vertical(id: impl Into<SharedString>, ratio: f32, start: DockTopology, end: DockTopology) -> Self",
        "from_records(records: &[DockRecord]) -> Result<Self, DockRecordError>"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "stacks() -> Vec<&DockStack>",
        "find_stack(id: &str) -> Option<&DockStack>",
        "split_layout() -> SplitLayout",
        "to_records() -> Vec<DockRecord>"
      ]
    },
    {
      "name": "DockTreeEvent",
      "path": "gpui_kit::layout::DockTreeEvent",
      "summary": "Caller-owned changes requested through DockTree.",
      "variants": [
        "FloatingRaised",
        "FloatingChanged",
        "FloatingCancelled",
        "PanelSelected",
        "PanelMoved",
        "PanelSplit",
        "SplitResized",
        "StackCollapsed"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Document",
      "path": "gpui_kit::content::Document",
      "summary": "A parsed document.",
      "variants": [],
      "construct": [
        "parse(source: &str) -> Self",
        "block_ranges(source: &str) -> Option<Vec<std::ops::Range<usize>>>"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "lines() -> usize",
        "truncate(max: usize) -> (Self, usize)"
      ]
    },
    {
      "name": "DotLottieAsset",
      "path": "gpui_kit::effects::DotLottieAsset",
      "summary": "Resolved .lottie bytes supplied by the host.",
      "variants": [],
      "construct": [
        "new(bytes: impl Into<Arc<[u8]>>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "encoded_len() -> usize",
        "is_empty() -> bool",
        "bytes() -> &[u8]"
      ]
    },
    {
      "name": "DotLottieError",
      "path": "gpui_kit::effects::DotLottieError",
      "summary": "Typed adapter failure with an optional host-facing diagnostic.",
      "variants": [],
      "construct": [
        "new(kind: DotLottieErrorKind, detail: impl Into<SharedString>) -> Self",
        "kind(kind: DotLottieErrorKind) -> Self",
        "runtime_unavailable() -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "detail() -> &str"
      ]
    },
    {
      "name": "DotLottieErrorKind",
      "path": "gpui_kit::effects::DotLottieErrorKind",
      "summary": "Stable category for validation, preparation, and rendering failures.",
      "variants": [
        "RuntimeUnavailable",
        "InvalidLimits",
        "EmptyAsset",
        "EncodedSize",
        "ArchiveInvalid",
        "ArchiveEntries",
        "ArchiveEntrySize",
        "ArchiveExpandedSize",
        "ArchiveCompressionRatio",
        "AnimationCount",
        "StateMachineCount",
        "ImageCount",
        "ImageSize",
        "CanvasSize",
        "FrameRate",
        "FrameCount",
        "Duration",
        "UnsupportedFeature",
        "InvalidInput",
        "RenderFailed"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DotLottieInput",
      "path": "gpui_kit::effects::DotLottieInput",
      "summary": "A bounded state-machine input name and value.",
      "variants": [],
      "construct": [
        "new(name: impl Into<SharedString>, value: DotLottieInputValue) -> Result<Self, DotLottieError>"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &str"
      ]
    },
    {
      "name": "DotLottieInputValue",
      "path": "gpui_kit::effects::DotLottieInputValue",
      "summary": "Values a host runtime may route into an already-selected state machine.",
      "variants": [
        "Boolean",
        "Number",
        "Trigger"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DotLottieLimits",
      "path": "gpui_kit::effects::DotLottieLimits",
      "summary": "Limits applied before a host-provided .lottie archive is prepared.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DotLottieMetadata",
      "path": "gpui_kit::effects::DotLottieMetadata",
      "summary": "Validated metadata for the animation selected by the archive manifest.",
      "variants": [],
      "construct": [],
      "options": [
        "frame_rate() -> f32"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "DotLottiePlayback",
      "path": "gpui_kit::effects::DotLottiePlayback",
      "summary": "A truthful playback snapshot. It does not mutate or advance itself.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DotLottiePlaybackState",
      "path": "gpui_kit::effects::DotLottiePlaybackState",
      "summary": "Caller-owned transport facts for a stateful dotLottie host runtime.",
      "variants": [
        "Stopped",
        "Playing",
        "Paused",
        "Completed",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DotLottieRequest",
      "path": "gpui_kit::effects::DotLottieRequest",
      "summary": "Typed requests for a host-owned playback or state-machine runtime.",
      "variants": [
        "Play",
        "Pause",
        "Stop",
        "Seek",
        "Input"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DotLottieSample",
      "path": "gpui_kit::effects::DotLottieSample",
      "summary": "One exact, normalized sample requested from a prepared clip.",
      "variants": [],
      "construct": [
        "at_progress(progress: f32, mirror_x: bool) -> Result<Self, DotLottieError>"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "DrawerEvent",
      "path": "gpui_kit::overlay::DrawerEvent",
      "summary": "What the drawer reports. The owner decides what any of it means.",
      "variants": [
        "Opened",
        "Dismissed",
        "Closed",
        "ResizeRequested"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DropAxis",
      "path": "gpui_kit::interaction::DropAxis",
      "summary": "Which way a target's slots are laid out.",
      "variants": [
        "Vertical",
        "Horizontal"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DropDecision",
      "path": "gpui_kit::interaction::dnd::DropDecision",
      "summary": "",
      "variants": [
        "Pending",
        "Accepted",
        "Refused"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DropDecisionEvent",
      "path": "gpui_kit::interaction::dnd::DropDecisionEvent",
      "summary": "Every request has at most one terminal event, including cancellation.",
      "variants": [
        "Requested",
        "Finished"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DropIntent",
      "path": "gpui_kit::interaction::DropIntent",
      "summary": "One drop, as it is reported to the host.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DropPosition",
      "path": "gpui_kit::interaction::DropPosition",
      "summary": "Where a dropped item goes, expressed against something already there.",
      "variants": [
        "Before",
        "After",
        "Into"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "anchor() -> &SharedString",
        "verb() -> &'static str"
      ]
    },
    {
      "name": "DropRefusal",
      "path": "gpui_kit::interaction::dnd::DropRefusal",
      "summary": "",
      "variants": [
        "Policy",
        "Stale",
        "Cancelled",
        "TimedOut",
        "Superseded",
        "Revoked"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DropRequest",
      "path": "gpui_kit::interaction::dnd::DropRequest",
      "summary": "A released candidate, not a committed reorder. Replies must name its id.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "DropRequestId",
      "path": "gpui_kit::interaction::dnd::DropRequestId",
      "summary": "A single-use, process-local request identity, safe to carry as protocol data.",
      "variants": [],
      "construct": [],
      "options": [
        "get() -> u64"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "DropzoneState",
      "path": "gpui_kit::controls::dropzone::DropzoneState",
      "summary": "What a dropzone is currently saying.",
      "variants": [
        "Idle",
        "Accepting",
        "Refusing"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "EdgeKind",
      "path": "gpui_kit::canvas::EdgeKind",
      "summary": "The routing treatment of an edge.",
      "variants": [
        "Flow",
        "Feedback"
      ],
      "construct": [],
      "options": [
        "color(theme: &Theme) -> Hsla",
        "active_color(theme: &Theme) -> Hsla"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "EdgeMarker",
      "path": "gpui_kit::canvas::EdgeMarker",
      "summary": "The terminal mark a connection places at its destination.",
      "variants": [
        "None",
        "Dot",
        "Arrow"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EdgeState",
      "path": "gpui_kit::canvas::EdgeState",
      "summary": "The caller-owned state of one connection.",
      "variants": [
        "Idle",
        "Active",
        "Succeeded",
        "Failed"
      ],
      "construct": [],
      "options": [
        "value() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditIntent",
      "path": "gpui_kit::data::EditIntent",
      "summary": "One finished edit, as it is reported to the host.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditOutcome",
      "path": "gpui_kit::data::EditOutcome",
      "summary": "How an edit ended.",
      "variants": [
        "Commit",
        "Revert"
      ],
      "construct": [],
      "options": [
        "as_str() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorDiagnostic",
      "path": "gpui_kit::controls::editor::EditorDiagnostic",
      "summary": "Diagnostics are caller claims about one revision, not parser error nodes.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorDiagnosticSeverity",
      "path": "gpui_kit::controls::editor::EditorDiagnosticSeverity",
      "summary": "",
      "variants": [
        "Error",
        "Warning",
        "Information",
        "Hint"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorEvent",
      "path": "gpui_kit::controls::editor::EditorEvent",
      "summary": "What a source editor reports to its owner.",
      "variants": [
        "ServiceRequested",
        "ServiceAccepted",
        "DefinitionRequested",
        "CodeActionRequested",
        "Edited",
        "Changed",
        "SelectionChanged",
        "FoldChanged",
        "Pasted",
        "Submitted",
        "Cancelled",
        "Focused",
        "Blurred",
        "Parsed",
        "SyntaxUnavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorFold",
      "path": "gpui_kit::controls::editor::EditorFold",
      "summary": "A fold header and its body, in zero-based, half-open source line indices. The first line remains visible. Identities must be unique and stable across caller updates. Nested folds are supported; crossing ranges are refused.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorGeometry",
      "path": "gpui_kit::controls::editor::EditorGeometry",
      "summary": "The measured source viewport, tagged with the revision it describes.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorHighlight",
      "path": "gpui_kit::controls::editor::EditorHighlight",
      "summary": "One caller-owned style range in an editor revision.",
      "variants": [],
      "construct": [
        "new(range: Range<usize>, style: HighlightStyle) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "range() -> &Range<usize>",
        "style() -> HighlightStyle"
      ]
    },
    {
      "name": "EditorHighlights",
      "path": "gpui_kit::controls::editor::EditorHighlights",
      "summary": "Syntax and diagnostic styles tagged with the text revision they describe.",
      "variants": [],
      "construct": [
        "new(revision: u64, spans: impl IntoIterator<Item = EditorHighlight>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "revision() -> u64",
        "spans() -> &[EditorHighlight]"
      ]
    },
    {
      "name": "EditorHover",
      "path": "gpui_kit::controls::editor::EditorHover",
      "summary": "Hover content is plain caller text, not interpreted HTML or executable code.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorIndentDirection",
      "path": "gpui_kit::controls::editor::EditorIndentDirection",
      "summary": "Which indentation chord the source editor received.",
      "variants": [
        "Indent",
        "Outdent"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorIndentRequest",
      "path": "gpui_kit::controls::editor::EditorIndentRequest",
      "summary": "The immutable input to a caller-owned indentation policy.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorIndentation",
      "path": "gpui_kit::controls::editor::EditorIndentation",
      "summary": "One synchronous replacement returned by an indentation policy.",
      "variants": [],
      "construct": [
        "new(range: Range<usize>, text: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "selection(selection: Range<usize>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorLineGeometry",
      "path": "gpui_kit::controls::editor::EditorLineGeometry",
      "summary": "Current-frame geometry for one hard source line.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorParseWork",
      "path": "gpui_kit::controls::editor::EditorParseWork",
      "summary": "Observed input work and reuse for the last syntax parse. Offered bytes may be requested more than once by Tree-sitter; no source bytes are copied.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorReplacement",
      "path": "gpui_kit::controls::editor::EditorReplacement",
      "summary": "Current-document replacement in the request's original UTF-8 coordinates.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorSemanticToken",
      "path": "gpui_kit::controls::editor::EditorSemanticToken",
      "summary": "Caller-classified semantic token using the shared theme's code palette.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorServiceEffect",
      "path": "gpui_kit::controls::editor::EditorServiceEffect",
      "summary": "Effects are either local atomic edits or caller-owned navigation/actions.",
      "variants": [
        "Edits",
        "Definition",
        "Action"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorServiceItem",
      "path": "gpui_kit::controls::editor::EditorServiceItem",
      "summary": "Stable caller identity, display label, and the effect of accepting a result.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorServiceKind",
      "path": "gpui_kit::controls::editor::EditorServiceKind",
      "summary": "A caller-owned language operation requested by the editing surface.",
      "variants": [
        "Completion",
        "Hover",
        "Definition",
        "CodeActions"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorServiceRequest",
      "path": "gpui_kit::controls::editor::EditorServiceRequest",
      "summary": "Immutable request identity. Replies must match this id and text revision.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorServiceResult",
      "path": "gpui_kit::controls::editor::EditorServiceResult",
      "summary": "Service result paired with a request by Editor::set_service_result.",
      "variants": [
        "Items",
        "Hover"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorSyntax",
      "path": "gpui_kit::controls::editor::EditorSyntax",
      "summary": "Revision-aware Tree-sitter adapter, available with the syntax feature.",
      "variants": [],
      "construct": [
        "new(language: Language, highlights: &str) -> Result<Self, SharedString>",
        "json() -> Self"
      ],
      "options": [
        "capture_style(name: impl Into<SharedString>, style: HighlightStyle) -> Self"
      ],
      "commands": [
        "update(revision: u64, document: EditSnapshot, edit: Option<&TextAreaEdit>) -> bool"
      ],
      "queries": [
        "revision() -> Option<u64>",
        "work() -> EditorParseWork",
        "captures(range: Range<usize>) -> Result<Vec<EditorSyntaxCapture>, SharedString>",
        "errors() -> Vec<EditorSyntaxError>"
      ]
    },
    {
      "name": "EditorSyntaxCapture",
      "path": "gpui_kit::controls::editor::EditorSyntaxCapture",
      "summary": "One query capture in UTF-8 source coordinates.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EditorSyntaxError",
      "path": "gpui_kit::controls::editor::EditorSyntaxError",
      "summary": "A grammar error or missing node, not an LSP diagnostic.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EffectCost",
      "path": "gpui_kit::effects::EffectCost",
      "summary": "Estimated renderer work consumed by one animated recipe.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EffectEvent",
      "path": "gpui_kit::effects::EffectEvent",
      "summary": "One normalized event submitted to the effects policy.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, surface: impl Into<SharedString>, target: impl Into<SharedString>, cue: VisualCue) -> Self"
      ],
      "options": [
        "origin(origin: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "EffectFallback",
      "path": "gpui_kit::effects::EffectFallback",
      "summary": "Why the full animated recipe resolved to its static counterpart.",
      "variants": [
        "Quality",
        "ReducedMotion",
        "Budget"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EffectImportance",
      "path": "gpui_kit::effects::EffectImportance",
      "summary": "Why a cue matters when the active quality tier decides how to present it.",
      "variants": [
        "Essential",
        "Expressive",
        "Decorative"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EffectPlan",
      "path": "gpui_kit::effects::EffectPlan",
      "summary": "The complete deterministic answer for one semantic event.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "cinematic_recipe() -> CinematicRecipe",
        "animated() -> bool",
        "visible() -> bool"
      ]
    },
    {
      "name": "EffectPlanner",
      "path": "gpui_kit::effects::EffectPlanner",
      "summary": "Stateful resolver used by the installed global and available for isolated runtimes or deterministic tests.",
      "variants": [],
      "construct": [
        "new(policy: EffectPolicy) -> Self"
      ],
      "options": [],
      "commands": [
        "set_policy(policy: EffectPolicy)",
        "plan(event: EffectEvent, frame: u64, reduce_motion: bool) -> EffectPlan"
      ],
      "queries": [
        "policy() -> &EffectPolicy"
      ]
    },
    {
      "name": "EffectPolicy",
      "path": "gpui_kit::effects::EffectPolicy",
      "summary": "Quality, replay, and frame/surface budget policy installed by the host.",
      "variants": [],
      "construct": [
        "new(quality: EffectQuality) -> Self"
      ],
      "options": [
        "budgets(global: EffectBudget, per_surface: EffectBudget) -> Self",
        "replay_capacity(capacity: usize) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "EffectPresentation",
      "path": "gpui_kit::effects::EffectPresentation",
      "summary": "How the chosen recipe is allowed to appear.",
      "variants": [
        "Suppressed",
        "Static",
        "Animated"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EffectQuality",
      "path": "gpui_kit::effects::EffectQuality",
      "summary": "How much optional visual richness the host permits.",
      "variants": [
        "Off",
        "Essential",
        "Balanced",
        "Cinematic"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EffectRecipe",
      "path": "gpui_kit::effects::EffectRecipe",
      "summary": "Renderer-facing recipe selected from a semantic cue.",
      "variants": [
        "ArrivalHalo",
        "DelegationTrace",
        "HandoffTrace",
        "AggregationPulse",
        "SuccessBurst",
        "RewardCelebration",
        "AttentionPulse",
        "RefusalMark",
        "FailurePulse"
      ],
      "construct": [],
      "options": [
        "cost() -> EffectCost"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "EffectSuppression",
      "path": "gpui_kit::effects::EffectSuppression",
      "summary": "Why no visual presentation should be emitted at all.",
      "variants": [
        "Replay"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Elapsed",
      "path": "gpui_kit::agent::Elapsed",
      "summary": "How long a call took, as far as anyone has said.",
      "variants": [
        "Took",
        "Unknown"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str"
      ]
    },
    {
      "name": "EmptyKind",
      "path": "gpui_kit::display::empty::EmptyKind",
      "summary": "Which fact the surface is reporting.",
      "variants": [
        "Empty",
        "Unstarted",
        "Queued",
        "Blocked",
        "Cancelled",
        "Unavailable",
        "Failed",
        "Unauthorized"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Emulator",
      "path": "gpui_kit::content::Emulator",
      "summary": "A terminal's state: a pure fold of output bytes into a grid.",
      "variants": [],
      "construct": [
        "new(cols: u16, rows: u16) -> Self"
      ],
      "options": [],
      "commands": [
        "feed(bytes: &[u8]) -> Vec<u8>",
        "resize(cols: u16, rows: u16)",
        "take_bell() -> bool",
        "scroll(delta: i32)",
        "scroll_to_bottom()",
        "start_selection(kind: SelectionKind, point: GridPoint, side: CellSide)",
        "update_selection(point: GridPoint, side: CellSide)",
        "clear_selection()"
      ],
      "queries": [
        "cols() -> usize",
        "rows() -> usize",
        "title() -> Option<&str>",
        "app_cursor_mode() -> bool",
        "bracketed_paste_mode() -> bool",
        "display_offset() -> usize",
        "history_lines() -> usize",
        "grid_point(viewport_row: usize, col: usize) -> GridPoint",
        "selection_text() -> Option<String>",
        "has_selection() -> bool",
        "line(viewport_row: usize) -> Vec<CellSnapshot>",
        "lines() -> Vec<Vec<CellSnapshot>>",
        "cursor() -> Option<CursorSnapshot>",
        "row_text(viewport_row: usize) -> String"
      ]
    },
    {
      "name": "EnglishNumbers",
      "path": "gpui_kit::strings::EnglishNumbers",
      "summary": "English digits and English plurals. Installed when a host supplies none.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EnglishSearch",
      "path": "gpui_kit::strings::EnglishSearch",
      "summary": "English prefix, word-start, containment, then subsequence.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Enter",
      "path": "gpui_kit::controls::textarea::Enter",
      "summary": "What the enter key does.",
      "variants": [
        "Opens",
        "Submits"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Entrance",
      "path": "gpui_kit::motion::Entrance",
      "summary": "How an element arrives.",
      "variants": [
        "Fade",
        "Rise",
        "Menu",
        "Dialog"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "EntryTime",
      "path": "gpui_kit::display::timeline::EntryTime",
      "summary": "When an entry happened, as far as anyone knows.",
      "variants": [
        "At",
        "Unknown"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "FadeEdges",
      "path": "gpui_kit::layout::FadeEdges",
      "summary": "Which edges of a region its content fades towards.",
      "variants": [],
      "construct": [
        "vertical() -> Self",
        "horizontal() -> Self"
      ],
      "options": [
        "any() -> bool",
        "names() -> Vec<&'static str>"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "FeedbackRatingEvent",
      "path": "gpui_kit::agent::FeedbackRatingEvent",
      "summary": "What the rating reported.",
      "variants": [
        "Voted",
        "Tagged"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "FeedbackVote",
      "path": "gpui_kit::agent::FeedbackVote",
      "summary": "The two-way vote a reader can cast.",
      "variants": [
        "Up",
        "Down"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "FieldState",
      "path": "gpui_kit::controls::field::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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "FieldValue",
      "path": "gpui_kit::structured::FieldValue",
      "summary": "What one field currently holds.",
      "variants": [
        "Text",
        "Number",
        "Boolean",
        "Choice",
        "List",
        "Files",
        "ItemCount",
        "Day",
        "Time",
        "Range",
        "Absent",
        "Unrenderable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "FieldVisibility",
      "path": "gpui_kit::structured::FieldVisibility",
      "summary": "Whether one schema field participates in this form presentation.",
      "variants": [
        "Visible",
        "Hidden"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "FilterCondition",
      "path": "gpui_kit::controls::filter_bar::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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> SharedString"
      ]
    },
    {
      "name": "FindReplaceEvent",
      "path": "gpui_kit::controls::search::FindReplaceEvent",
      "summary": "What a find-and-replace surface reports. It replaces nothing.",
      "variants": [
        "Search",
        "ReplacementChanged",
        "ReplaceOne",
        "ReplaceAll",
        "Close"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "FixtureDateAdapter",
      "path": "gpui_kit::datetime::fixture::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"
      ],
      "commands": [],
      "queries": [
        "day(year: i32, month: u32, day: u32) -> Day",
        "month(year: i32, month: u32) -> MonthKey"
      ]
    },
    {
      "name": "FixtureTransport",
      "path": "gpui_kit::media::FixtureTransport",
      "summary": "A transport that plays nothing, on purpose.",
      "variants": [],
      "construct": [
        "new() -> Self",
        "ready(duration: f32) -> Self",
        "live() -> Self"
      ],
      "options": [
        "state(state: TransportState) -> Self",
        "position(seconds: f32) -> Self",
        "volume(volume: f32) -> Self",
        "muted(muted: bool) -> Self",
        "speed(speed: f32) -> Self",
        "buffered(ranges: impl IntoIterator<Item = BufferedRange>) -> Self",
        "loading() -> Self",
        "no_backend(reason: impl Into<SharedString>) -> Self",
        "failed(reason: impl Into<SharedString>) -> Self",
        "refusing(reason: impl Into<SharedString>) -> Self",
        "with_capabilities(capabilities: MediaCapabilities) -> Self",
        "unsupported(commands: impl IntoIterator<Item = &'static str>) -> Self",
        "shared() -> Rc<dyn MediaTransport>"
      ],
      "commands": [],
      "queries": [
        "commands() -> Vec<MediaCommand>"
      ]
    },
    {
      "name": "Flick",
      "path": "gpui_kit::motion::Flick",
      "summary": "Which way a flick went.",
      "variants": [
        "Left",
        "Right",
        "Up",
        "Down"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Flip",
      "path": "gpui_kit::motion::Flip",
      "summary": "A handle to one element's slide, keyed by semantic id.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "offset() -> Point<Pixels>",
        "size() -> Option<Size<Pixels>>",
        "shape(target: Shape, window: &mut Window, cx: &App) -> Shape",
        "drawn_shape() -> Option<Shape>",
        "target_size() -> Option<Size<Pixels>>",
        "is_contended() -> bool",
        "is_animating() -> bool"
      ]
    },
    {
      "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": [
        "animate(enabled: bool) -> Self",
        "animation(spec: MotionSpec) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "FloatingDock",
      "path": "gpui_kit::layout::FloatingDock",
      "summary": "An in-surface floating stack. Bounds are fractions of the dock viewport, preserved across window-size changes. Tile order is caller-owned z-order. This does not create operating-system windows.",
      "variants": [],
      "construct": [
        "new(stack: DockStack, bounds: Bounds<f32>) -> Result<Self, DockRecordError>",
        "from_record(record: &FloatingDockRecord) -> Result<Self, DockRecordError>"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "stack() -> &DockStack",
        "bounds() -> Bounds<f32>",
        "to_record() -> FloatingDockRecord"
      ]
    },
    {
      "name": "FloatingDockRecord",
      "path": "gpui_kit::layout::FloatingDockRecord",
      "summary": "Caller-persisted state. Storage and serialization remain host policy.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "FocusTrap",
      "path": "gpui_kit::overlay::FocusTrap",
      "summary": "The focus stops of one open overlay, in tab order.",
      "variants": [],
      "construct": [
        "new() -> Self"
      ],
      "options": [],
      "commands": [
        "engage(window: &Window, cx: &App)",
        "release(window: &mut Window, cx: &mut App)",
        "begin_frame()",
        "register(handle: FocusHandle)"
      ],
      "queries": [
        "is_engaged() -> bool",
        "stops() -> &[FocusHandle]",
        "focus_first(window: &mut Window, cx: &mut App)",
        "focus_next(window: &mut Window, cx: &mut App)",
        "focus_prev(window: &mut Window, cx: &mut App)",
        "contains_focus(window: &Window, cx: &App) -> bool"
      ]
    },
    {
      "name": "Form",
      "path": "gpui_kit::reactive::Form",
      "summary": "A set of named text fields and the rules that judge them.",
      "variants": [],
      "construct": [
        "new() -> Self"
      ],
      "options": [
        "field(cx: &mut App, name: impl Into<SharedString>, initial: impl Into<String>) -> Self",
        "rule(name: &str, rule: impl Fn(&str, &FormValues, &App) -> Result<(), SharedString> + 'static) -> Self"
      ],
      "commands": [],
      "queries": [
        "names() -> Vec<SharedString>",
        "signal(name: &str) -> Option<Signal<String>>",
        "validation_signal(name: &str) -> Option<Signal<ValidationState>>",
        "validation(name: &str, cx: &App) -> ValidationState",
        "set_validation(cx: &mut App, name: &str, state: ValidationState)",
        "values(cx: &App) -> FormValues",
        "validate(cx: &mut App) -> bool",
        "submit(cx: &mut App) -> Option<BTreeMap<String, String>>",
        "watch<V: 'static>(cx: &mut Context<V>) -> Vec<Subscription>"
      ]
    },
    {
      "name": "FormValues",
      "path": "gpui_kit::reactive::FormValues",
      "summary": "Every field's current text, by name.",
      "variants": [],
      "construct": [],
      "options": [
        "into_map() -> BTreeMap<String, String>"
      ],
      "commands": [],
      "queries": [
        "get(name: &str) -> Option<&str>",
        "value(name: &str) -> &str",
        "names() -> impl Iterator<Item = &SharedString>",
        "len() -> usize",
        "is_empty() -> bool"
      ]
    },
    {
      "name": "Frame",
      "path": "gpui_kit::controls::textarea::Frame",
      "summary": "Who draws the frame the text sits in.",
      "variants": [
        "Own",
        "Host"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "opacity(index: usize) -> f32",
        "hit_test(viewport: GeoViewport, size: [f64; 2], at: [f64; 2]) -> Option<SharedString>"
      ]
    },
    {
      "name": "GameFraction",
      "path": "gpui_kit::game::GameFraction",
      "summary": "A validated scalar in the closed interval from zero to one.",
      "variants": [],
      "construct": [
        "new(value: f32) -> Result<Self, GameFractionError>"
      ],
      "options": [
        "get() -> f32"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "GameFractionError",
      "path": "gpui_kit::game::GameFractionError",
      "summary": "Why a game fraction was rejected instead of clamped into a believable progress fact.",
      "variants": [
        "NonFinite",
        "OutOfRange"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GeoColorDomain",
      "path": "gpui_kit::display::GeoColorDomain",
      "summary": "Finite, strictly increasing choropleth domain with caller-owned endpoint text.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GeoData",
      "path": "gpui_kit::display::GeoData",
      "summary": "Validated immutable data. Validation failures must be presented as refusal.",
      "variants": [],
      "construct": [
        "from_geojson(json: &str, projection: GeoProjection, world: GeoWorldPolicy, domain: GeoColorDomain, mut properties: impl FnMut(&str, &Value) -> Result<GeoProperties, GeoRefusal>) -> Result<Self, GeoRefusal>",
        "with_world(projection: GeoProjection, features: Vec<GeoFeature>, points: Vec<GeoPoint>, domain: GeoColorDomain, world: GeoWorldPolicy) -> Result<Self, GeoRefusal>",
        "new(projection: GeoProjection, features: Vec<GeoFeature>, points: Vec<GeoPoint>, domain: GeoColorDomain) -> Result<Self, GeoRefusal>"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "central_longitude() -> f64",
        "project_position(position: GeoPosition) -> Result<GeoProjected, GeoRefusal>",
        "unproject_position(position: GeoProjected) -> Result<GeoPosition, GeoRefusal>",
        "visible_indices(viewport: GeoViewport, size: [f64; 2]) -> Vec<usize>",
        "fit_viewport(size: [f64; 2], padding: f64) -> Option<GeoViewport>",
        "simplified(tolerance: f64) -> Result<Self, GeoRefusal>",
        "vertex_count() -> usize",
        "projection() -> GeoProjection",
        "features() -> &[GeoFeature]",
        "points() -> &[GeoPoint]",
        "color_domain() -> &GeoColorDomain",
        "point_reading(id: &str) -> Option<&GeoProperties>",
        "hit_test(viewport: GeoViewport, size: [f64; 2], position: [f64; 2]) -> Option<SharedString>"
      ]
    },
    {
      "name": "GeoEvent",
      "path": "gpui_kit::display::GeoEvent",
      "summary": "Proposals only. The caller must apply an event and rerender to accept it.",
      "variants": [
        "Select",
        "Viewport"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GeoFeature",
      "path": "gpui_kit::display::GeoFeature",
      "summary": "Multiple polygons allow caller-cut antimeridian features and islands. Polygon overlaps are allowed and painted as a union under one identity.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GeoPoint",
      "path": "gpui_kit::display::GeoPoint",
      "summary": "Caller-owned point overlay. Painted above all polygons; last point wins ties.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GeoPolygon",
      "path": "gpui_kit::display::GeoPolygon",
      "summary": "One polygon, with explicit closed rings. Winding direction does not matter.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GeoPosition",
      "path": "gpui_kit::display::GeoPosition",
      "summary": "A position in degrees, east and north positive. No altitude is implied.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GeoProjected",
      "path": "gpui_kit::display::GeoProjected",
      "summary": "Projected unit-world position; x increases east, y south.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GeoProjection",
      "path": "gpui_kit::display::GeoProjection",
      "summary": "Supported spherical projections with zero central meridian.",
      "variants": [
        "Equirectangular",
        "WebMercator"
      ],
      "construct": [],
      "options": [
        "latitude_limit() -> f64",
        "project(position: GeoPosition) -> Result<GeoProjected, GeoRefusal>",
        "unproject(position: GeoProjected) -> Result<GeoPosition, GeoRefusal>"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "GeoProperties",
      "path": "gpui_kit::display::GeoProperties",
      "summary": "Caller interpretation of a GeoJSON feature's properties. No application property names, numeric formatting, or fallback IDs are invented by Kit.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GeoRefusal",
      "path": "gpui_kit::display::GeoRefusal",
      "summary": "Explicit input refusal. The whole data set is refused, never partly shown.",
      "variants": [
        "CoordinateBounds",
        "AntimeridianEdge",
        "InvalidRing",
        "InvalidHoles",
        "DuplicateIdentity",
        "InvalidValue",
        "InvalidViewport",
        "InvalidGeoJson",
        "DocumentLimit",
        "InvalidSimplification",
        "Unsupported"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GeoState",
      "path": "gpui_kit::display::GeoState",
      "summary": "Caller-owned loading and verified-data states. Stale retains the last data.",
      "variants": [
        "Loading",
        "Empty",
        "Ready",
        "Stale",
        "Unavailable",
        "Error",
        "Refused"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GeoViewport",
      "path": "gpui_kit::display::GeoViewport",
      "summary": "Controlled unit-world camera. Uniform scale preserves projection aspect. The full unit square fits initially; equirectangular has unused polar bands.",
      "variants": [],
      "construct": [],
      "options": [
        "validate() -> Result<(), GeoRefusal>",
        "screen(position: GeoProjected, size: [f64; 2]) -> [f64; 2]",
        "world(position: [f64; 2], size: [f64; 2]) -> GeoProjected",
        "pan(dx: f64, dy: f64) -> Self",
        "zoom_at(factor: f64, anchor: GeoProjected) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "GeoWorldPolicy",
      "path": "gpui_kit::display::GeoWorldPolicy",
      "summary": "One finite, non-repeating world. Auto chooses a longitude cut in the largest empty vertex gap, putting seam-crossing local regions together. It does not infer spherical interiors: if any edge still crosses the chosen cut or spans more than a hemisphere the collection is refused.",
      "variants": [
        "Fixed",
        "Auto",
        "Centered"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GlassAppearance",
      "path": "gpui_kit::overlay::GlassAppearance",
      "summary": "Which appearance a glass surface is currently painting.",
      "variants": [
        "Inherited",
        "Light",
        "Dark"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GlassPreset",
      "path": "gpui_kit::overlay::GlassPreset",
      "summary": "How a glass surface responds to light.",
      "variants": [
        "Frosted",
        "Liquid",
        "Clear",
        "Lens"
      ],
      "construct": [],
      "options": [
        "tint_alpha(theme: &Theme) -> f32",
        "material(theme: &Theme) -> GlassMaterial<Pixels>"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "GlassSurface",
      "path": "gpui_kit::overlay::GlassSurface",
      "summary": "A styleable overlay body whose sole material authority is surface.",
      "variants": [],
      "construct": [],
      "options": [
        "focused(focused: bool) -> Self",
        "id(id: impl Into<ElementId>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Glide",
      "path": "gpui_kit::motion::Glide",
      "summary": "A curve's progress, expressed as how much of what is left to go.",
      "variants": [],
      "construct": [
        "new() -> Self"
      ],
      "options": [],
      "commands": [
        "step(eased: f32) -> f32"
      ],
      "queries": [
        "arrived() -> bool",
        "progress() -> f32"
      ]
    },
    {
      "name": "GraphBand",
      "path": "gpui_kit::canvas::GraphBand",
      "summary": "A labelled rectangle of canvas world space.",
      "variants": [],
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>, x: f32, y: f32, width: f32, height: f32) -> Self"
      ],
      "options": [
        "color(color: impl Into<ColorChoice>) -> Self",
        "selected(selected: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "ident() -> &Ident",
        "label() -> &SharedString",
        "bounds() -> Bounds<f32>"
      ]
    },
    {
      "name": "GraphCyclePolicy",
      "path": "gpui_kit::canvas::GraphCyclePolicy",
      "summary": "How a layered layout handles a component without a remaining source.",
      "variants": [
        "Reject",
        "BreakIncoming",
        "Condense"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GraphEdge",
      "path": "gpui_kit::canvas::GraphEdge",
      "summary": "A controlled connection between two graph nodes.",
      "variants": [],
      "construct": [
        "new(from: impl Into<SharedString>, to: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "id(id: impl Into<SharedString>) -> Self",
        "ports(from: impl Into<SharedString>, to: impl Into<SharedString>) -> Self",
        "label(label: impl Into<SharedString>) -> Self",
        "active(active: bool) -> Self",
        "state(state: EdgeState) -> Self",
        "marker(marker: EdgeMarker) -> Self",
        "selected(selected: bool) -> Self",
        "lane(lane: i16) -> Self",
        "feedback() -> Self",
        "color(color: impl Into<ColorChoice>) -> Self"
      ],
      "commands": [],
      "queries": [
        "from() -> &SharedString",
        "to() -> &SharedString",
        "kind() -> EdgeKind",
        "edge_id() -> SharedString"
      ]
    },
    {
      "name": "GraphEndpoint",
      "path": "gpui_kit::canvas::GraphEndpoint",
      "summary": "A caller-owned node and port identity used by connection proposals.",
      "variants": [],
      "construct": [
        "new(node: impl Into<SharedString>, port: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GraphFit",
      "path": "gpui_kit::canvas::GraphFit",
      "summary": "Whether a canvas frames its own content before the reader touches it.",
      "variants": [
        "Never",
        "Whole"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GraphInteraction",
      "path": "gpui_kit::canvas::GraphInteraction",
      "summary": "Which controlled changes an interactive graph may propose.",
      "variants": [
        "Inspect",
        "Arrange",
        "Edit"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GraphLayoutError",
      "path": "gpui_kit::canvas::GraphLayoutError",
      "summary": "Invalid input to layered_layout_sized.",
      "variants": [
        "DuplicateId",
        "InvalidSize",
        "UnknownEndpoint",
        "InvalidGap",
        "Cycle",
        "Overflow"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GraphPort",
      "path": "gpui_kit::canvas::GraphPort",
      "summary": "A typed connection point on a GraphNode.",
      "variants": [],
      "construct": [
        "input(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self",
        "output(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "side(side: PortSide) -> Self",
        "typed(port_type: PortType) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString",
        "direction() -> PortDirection",
        "port_side() -> PortSide",
        "port_type() -> Option<&PortType>"
      ]
    },
    {
      "name": "GraphRouting",
      "path": "gpui_kit::canvas::GraphRouting",
      "summary": "How the connections on one graph are drawn.",
      "variants": [
        "Lanes",
        "Curves"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GraphSource",
      "path": "gpui_kit::canvas::GraphSource",
      "summary": "Reusable graph data. GraphNode remains the metadata authority; explicit finite sizes make offscreen nodes routable without mounting their content. One-use children/thumbnails are rejected; use lazy factory setters instead. Edges may name absent nodes and remain caller-owned through node removal.",
      "variants": [],
      "construct": [
        "new(nodes: impl IntoIterator<Item = Placed>, edges: impl IntoIterator<Item = GraphEdge>) -> Result<Self, GraphSourceError>"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "revision() -> u64",
        "len() -> usize",
        "is_empty() -> bool",
        "same_source(other: &Self) -> bool",
        "upsert(placed: Placed) -> Result<(), GraphSourceError>",
        "remove(id: &str) -> bool",
        "replace_edges(edges: impl IntoIterator<Item = GraphEdge>) -> Result<(), GraphSourceError>",
        "set_content(id: &str, build: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Result<(), GraphSourceError>",
        "set_thumbnail(id: &str, build: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Result<(), GraphSourceError>"
      ]
    },
    {
      "name": "GraphSourceError",
      "path": "gpui_kit::canvas::GraphSourceError",
      "summary": "Rejected source mutation. Validation is atomic: neither metadata, factory ownership, ordering nor revision changes on error.",
      "variants": [
        "DuplicateNode",
        "DuplicateEdge",
        "DuplicatePort",
        "MissingNode",
        "InvalidGeometry",
        "MissingHeight",
        "OpaqueContent"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GraphState",
      "path": "gpui_kit::canvas::GraphState",
      "summary": "What the canvas can currently say about itself.",
      "variants": [
        "Ready",
        "Loading",
        "Refused",
        "Failed"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "GraphViewport",
      "path": "gpui_kit::canvas::GraphViewport",
      "summary": "Caller-owned pan and zoom values for a NodeGraph.",
      "variants": [],
      "construct": [
        "new(offset: Point<f32>, zoom: f32) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "key() -> &SharedString"
      ]
    },
    {
      "name": "GridColumns",
      "path": "gpui_kit::layout::GridColumns",
      "summary": "Number of columns at the base width and at optional token breakpoints.",
      "variants": [],
      "construct": [
        "new(base: u16) -> Self"
      ],
      "options": [
        "at(breakpoint: Breakpoint, columns: u16) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "GridGeometry",
      "path": "gpui_kit::content::GridGeometry",
      "summary": "The grid the element measured, in the coordinates a pointer arrives in.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GridItem",
      "path": "gpui_kit::layout::GridItem",
      "summary": "One item in a declarative Grid.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, content: impl IntoElement) -> Self"
      ],
      "options": [
        "span(span: u16) -> Self",
        "span_at(breakpoint: Breakpoint, span: u16) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "GridLines",
      "path": "gpui_kit::data::GridLines",
      "summary": "Whether a table or grid draws rules between its rows.",
      "variants": [
        "None",
        "Rows"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GridPoint",
      "path": "gpui_kit::content::GridPoint",
      "summary": "A place on the grid, in the coordinates a selection anchors to.",
      "variants": [],
      "construct": [
        "new(line: i32, column: usize) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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",
        "cells_with(render: impl Fn(&SharedString, &mut Window, &mut App) -> Cell + 'static) -> Self",
        "text(text: impl Into<SharedString>) -> Self",
        "disabled(disabled: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString"
      ]
    },
    {
      "name": "GridSize",
      "path": "gpui_kit::content::GridSize",
      "summary": "The viewport, in cells.",
      "variants": [],
      "construct": [
        "new(cols: u16, rows: u16) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "GridSnapshot",
      "path": "gpui_kit::content::GridSnapshot",
      "summary": "What the host hands back to be painted.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Hang",
      "path": "gpui_kit::overlay::Hang",
      "summary": "Which of its anchor's edges a floating surface hangs from.",
      "variants": [
        "Start",
        "End"
      ],
      "construct": [],
      "options": [
        "opposite() -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "HeatAxis",
      "path": "gpui_kit::display::heatmap::HeatAxis",
      "summary": "One row or column of the grid: what a cell joins on, and what is printed.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "group(group: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "HeatCell",
      "path": "gpui_kit::display::heatmap::HeatCell",
      "summary": "One observation in the matrix, or the absence of one.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, row: impl Into<SharedString>, column: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "level(level: u8) -> Self",
        "empty() -> Self",
        "label(label: impl Into<SharedString>) -> Self",
        "value(value: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "HeatColorScale",
      "path": "gpui_kit::display::heatmap::HeatColorScale",
      "summary": "A continuous color encoding with a required finite, strictly increasing domain. Diverging maps interpolate each side independently: the neutral color corresponds to the explicit center, not the arithmetic midpoint. Errors are stable StringKey::name values, not display text; resolve them through the active strings when presenting them outside ContinuousHeatmap.",
      "variants": [],
      "construct": [
        "sequential(domain: [f64; 2], low: gpui::Hsla, high: gpui::Hsla) -> Result<Self, &'static str>",
        "diverging(domain: [f64; 3], low: gpui::Hsla, center: gpui::Hsla, high: gpui::Hsla) -> Result<Self, &'static str>"
      ],
      "options": [
        "domain() -> [f64; 3]",
        "color(value: f64) -> Result<gpui::Hsla, &'static str>"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "HeatmapState",
      "path": "gpui_kit::display::heatmap::HeatmapState",
      "summary": "How the matrix was asked for.",
      "variants": [
        "Loading",
        "Ready",
        "Empty",
        "Unavailable",
        "Error"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "HiddenSubmission",
      "path": "gpui_kit::structured::HiddenSubmission",
      "summary": "Whether a hidden field's held value belongs in the caller's submission.",
      "variants": [
        "Omit",
        "Include"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "HierarchyNode",
      "path": "gpui_kit::display::specialized::HierarchyNode",
      "summary": "Internal nodes contain children only; their quantity is the sum of leaves. A leaf's weight is nonnegative. Zero leaves are retained in the textual key.",
      "variants": [],
      "construct": [
        "leaf(item: WeightedValue) -> Self",
        "branch(id: impl Into<SharedString>, label: impl Into<SharedString>, children: Vec<Self>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "History",
      "path": "gpui_kit::reactive::History",
      "summary": "A bounded stack of caller-owned reversible records.",
      "variants": [],
      "construct": [
        "new(capacity: usize) -> Self"
      ],
      "options": [],
      "commands": [
        "push(record: T) -> bool",
        "undo() -> Option<T> where T: Clone,",
        "redo() -> Option<T> where T: Clone,",
        "set_ignoring(ignoring: bool)",
        "clear()"
      ],
      "queries": [
        "is_ignoring() -> bool",
        "can_undo() -> bool",
        "can_redo() -> bool",
        "undo_len() -> usize",
        "redo_len() -> usize"
      ]
    },
    {
      "name": "HistoryEntry",
      "path": "gpui_kit::navigation::HistoryEntry",
      "summary": "One caller-owned point in an undo history.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "description(description: impl Into<SharedString>) -> Self",
        "time(time: impl Into<SharedString>) -> Self",
        "source(source: impl Into<SharedString>) -> Self",
        "unavailable(reason: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString"
      ]
    },
    {
      "name": "HitCount",
      "path": "gpui_kit::controls::search::HitCount",
      "summary": "How many hits the host says the query has.",
      "variants": [
        "Unsearched",
        "Counting",
        "None",
        "Known",
        "TooMany",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str",
        "exact() -> Option<usize>"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "IconPosition",
      "path": "gpui_kit::controls::button::IconPosition",
      "summary": "Which side of the label the glyph sits on.",
      "variants": [
        "Leading",
        "Trailing"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "IconTone",
      "path": "gpui_kit::display::icon::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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "child(suffix: impl AsRef<str>) -> Self",
        "element_id() -> ElementId",
        "indexed_element_id(index: usize) -> ElementId",
        "semantic_id() -> SharedString",
        "as_str() -> &str"
      ]
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString"
      ]
    },
    {
      "name": "ImageListItem",
      "path": "gpui_kit::data::ImageListItem",
      "summary": "One tile in an ImageList.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>, image: impl IntoElement) -> Self"
      ],
      "options": [
        "disabled(disabled: bool) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ImageRequest",
      "path": "gpui_kit::content::ImageRequest",
      "summary": "An image the document referred to and this crate did not fetch.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ImageState",
      "path": "gpui_kit::content::ImageState",
      "summary": "What the host knows about one image right now.",
      "variants": [
        "Loading",
        "Unavailable",
        "Failed",
        "Ready"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "ImageViewerEvent",
      "path": "gpui_kit::content::ImageViewerEvent",
      "summary": "What a viewer reports. It applies none of it.",
      "variants": [
        "FitChanged",
        "Stepped",
        "ImageRequested"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "InputCoalescer",
      "path": "gpui_kit::content::terminal::InputCoalescer",
      "summary": "Holds keyboard bytes between flushes.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [
        "push(bytes: &[u8]) -> bool",
        "take() -> Vec<u8>"
      ],
      "queries": [
        "is_empty() -> bool"
      ]
    },
    {
      "name": "InvalidMarkSize",
      "path": "gpui_kit::display::chart::cartesian::InvalidMarkSize",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "InvocationId",
      "path": "gpui_kit::agent::InvocationId",
      "summary": "The stable identity of one tool or capability invocation.",
      "variants": [],
      "construct": [
        "new(value: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &str"
      ]
    },
    {
      "name": "JsonMember",
      "path": "gpui_kit::structured::JsonMember",
      "summary": "One identified object member. IDs must be nonempty and unique among siblings. A key may repeat; the ID must survive reorder and value or key edits.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, key: impl Into<SharedString>, value: JsonValue) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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",
        "IdentifiedObject",
        "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",
        "identified_object(members: impl IntoIterator<Item = JsonMember>) -> Self",
        "redacted(shape: impl Into<SharedString>) -> Self",
        "redacted_from(value: &JsonValue, cx: &App) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "kind() -> ValueKind"
      ]
    },
    {
      "name": "KanbanCard",
      "path": "gpui_kit::data::KanbanCard",
      "summary": "One card on the board. Identity is the host's.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, title: impl Into<SharedString>, column: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "detail(detail: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "KanbanColumn",
      "path": "gpui_kit::data::KanbanColumn",
      "summary": "One named column. Identity is the host's.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "limit(limit: usize) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "KanbanEvent",
      "path": "gpui_kit::data::KanbanEvent",
      "summary": "What the board reported.",
      "variants": [
        "CardActivated",
        "CardMoved"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "KanbanState",
      "path": "gpui_kit::data::KanbanState",
      "summary": "How the board was asked for.",
      "variants": [
        "Loading",
        "Ready",
        "Empty",
        "Unavailable",
        "Error"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "KeybindingRecorderEvent",
      "path": "gpui_kit::controls::keybinding_recorder::KeybindingRecorderEvent",
      "summary": "What a KeybindingRecorder reports.",
      "variants": [
        "Started",
        "Captured",
        "Cancelled"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "sample(progress: f32) -> T",
        "offsets() -> Vec<f32>"
      ]
    },
    {
      "name": "KeymapBinding",
      "path": "gpui_kit::controls::keymap_editor::KeymapBinding",
      "summary": "One effective binding, identified independently of its position.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, keystroke: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "conflict(value: impl Into<SharedString>) -> Self",
        "provenance(value: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "keystroke() -> &SharedString",
        "conflict_reason() -> Option<&SharedString>",
        "provenance_label() -> Option<&SharedString>"
      ]
    },
    {
      "name": "KeymapCommand",
      "path": "gpui_kit::controls::keymap_editor::KeymapCommand",
      "summary": "Caller-owned command metadata and binding facts.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "context(value: impl Into<SharedString>) -> Self",
        "defaults(values: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "bindings(values: impl IntoIterator<Item = KeymapBinding>) -> Self",
        "searchable(text: impl Into<SharedString>, keywords: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "refused(reason: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label_text() -> &SharedString",
        "context_label() -> Option<&SharedString>",
        "default_bindings() -> &[SharedString]",
        "effective_bindings() -> &[KeymapBinding]",
        "search_text() -> &SharedString",
        "keywords() -> &[SharedString]",
        "refusal_reason() -> Option<&SharedString>"
      ]
    },
    {
      "name": "KeymapEditorEvent",
      "path": "gpui_kit::controls::keymap_editor::KeymapEditorEvent",
      "summary": "",
      "variants": [
        "AddCaptured",
        "Remove",
        "Reset",
        "RecordingCancelled"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Language",
      "path": "gpui_kit::content::Language",
      "summary": "A language this can scan.",
      "variants": [
        "Rust",
        "TypeScript",
        "Python",
        "Go",
        "Json",
        "Shell",
        "Toml",
        "Yaml",
        "Markdown"
      ],
      "construct": [
        "named(tag: &str) -> Option<Self>"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "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>"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "quantity() -> Option<&Quantity>",
        "is_known() -> bool"
      ]
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ListEntry",
      "path": "gpui_kit::content::ListEntry",
      "summary": "One entry of a bulleted or numbered list.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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",
        "within(row: impl Into<SharedString>) -> Self",
        "disabled(disabled: bool) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "LoadMoreState",
      "path": "gpui_kit::display::loading::LoadMoreState",
      "summary": "What the tail of a list is doing.",
      "variants": [
        "Idle",
        "Loading",
        "Exhausted"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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>",
        "into_async() -> AsyncValue<T, E>"
      ],
      "commands": [],
      "queries": [
        "value() -> Option<&T>",
        "is_loading() -> bool"
      ]
    },
    {
      "name": "LogEntry",
      "path": "gpui_kit::content::LogEntry",
      "summary": "One caller-owned log entry.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, message: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "prepare_ansi() -> Self",
        "timestamp(timestamp: impl Into<SharedString>) -> Self",
        "level(level: impl Into<SharedString>, tone: Tone) -> Self",
        "source(source: impl Into<SharedString>) -> Self",
        "search_hits(hits: impl IntoIterator<Item = Range<usize>>) -> Self",
        "current_hit(hit: usize) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "LogStreamState",
      "path": "gpui_kit::content::LogStreamState",
      "summary": "What is known about the stream as a whole.",
      "variants": [
        "Loading",
        "Empty",
        "Unavailable",
        "Error",
        "Stale",
        "Ready"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "MakeWay",
      "path": "gpui_kit::interaction::dnd::MakeWay",
      "summary": "An element painted beside where layout put it.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Mark",
      "path": "gpui_kit::content::Mark",
      "summary": "A place in the mapped surface worth returning to.",
      "variants": [
        "Bold",
        "Italic",
        "Strike",
        "Code",
        "Link",
        "Image"
      ],
      "construct": [
        "new(id: impl Into<SharedString>, row: usize, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "detail(detail: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "row() -> usize"
      ]
    },
    {
      "name": "MarkSpan",
      "path": "gpui_kit::content::markdown::doc::MarkSpan",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MarkdownCodePresentation",
      "path": "gpui_kit::content::MarkdownCodePresentation",
      "summary": "How fenced code blocks are presented inside a Markdown document.",
      "variants": [
        "Card",
        "Flat"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MarkdownEvent",
      "path": "gpui_kit::content::MarkdownEvent",
      "summary": "What a rendered document reports. It applies none of it.",
      "variants": [
        "LinkClicked",
        "ImageRequested",
        "CodeCopied",
        "CodeCopyRefused",
        "MoreRequested"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MarkdownStream",
      "path": "gpui_kit::content::markdown::MarkdownStream",
      "summary": "A document being read as it arrives.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [
        "append(delta: &str)",
        "read(source: &str)"
      ],
      "queries": [
        "revision() -> u64",
        "work() -> MarkdownWork",
        "document() -> &Document"
      ]
    },
    {
      "name": "MarkdownWork",
      "path": "gpui_kit::content::markdown::MarkdownWork",
      "summary": "Cumulative parser and source-buffer work, not a CPU-time estimate. Parsed bytes include boundary discovery and display-mending passes. Copied bytes count source-buffer writes, not allocations inside the syntax tree.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MasonryItem",
      "path": "gpui_kit::data::MasonryItem",
      "summary": "A measured masonry item.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, content: impl IntoElement, height: f32) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Measured",
      "path": "gpui_kit::controls::textarea::Measured",
      "summary": "What a text area measured the last time it was laid out.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MediaAvailability",
      "path": "gpui_kit::media::MediaAvailability",
      "summary": "Whether there is anything to play, and whether anything could play it.",
      "variants": [
        "Idle",
        "Loading",
        "NoBackend",
        "Failed",
        "Ready"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str",
        "is_ready() -> bool",
        "reason() -> Option<SharedString>",
        "error() -> Option<&MediaError>"
      ]
    },
    {
      "name": "MediaCapabilities",
      "path": "gpui_kit::media::MediaCapabilities",
      "summary": "Playback features one transport can actually honor.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MediaCommand",
      "path": "gpui_kit::media::MediaCommand",
      "summary": "What a surface asks a transport for. It decides none of it.",
      "variants": [
        "Play",
        "Pause",
        "Seek",
        "SetVolume",
        "ToggleMute",
        "SetSpeed",
        "Step"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "MediaError",
      "path": "gpui_kit::media::MediaError",
      "summary": "A machine-readable media category and a caller-facing diagnostic.",
      "variants": [],
      "construct": [
        "new(kind: MediaErrorKind, detail: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "detail() -> &str"
      ]
    },
    {
      "name": "MediaErrorKind",
      "path": "gpui_kit::media::MediaErrorKind",
      "summary": "Stable category for a media backend failure or refusal.",
      "variants": [
        "NoBackend",
        "InvalidSource",
        "Open",
        "Playback",
        "Refused",
        "Failed"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MediaEvent",
      "path": "gpui_kit::media::MediaEvent",
      "summary": "What a player surface reports. It applies none of it: the transport already did or already refused, and this says which.",
      "variants": [
        "Applied",
        "Refused",
        "Unsupported"
      ],
      "construct": [
        "of(command: MediaCommand, outcome: MediaOutcome) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "command() -> MediaCommand"
      ]
    },
    {
      "name": "MediaOrigin",
      "path": "gpui_kit::media::MediaOrigin",
      "summary": "Where a surface's playback facts came from.",
      "variants": [
        "Platform",
        "Fixture"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str",
        "is_fixture() -> bool"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "MediaOutcome",
      "path": "gpui_kit::media::MediaOutcome",
      "summary": "What the transport did with a command.",
      "variants": [
        "Applied",
        "Refused",
        "Unsupported"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "MediaPresentation",
      "path": "gpui_kit::content::MediaPresentation",
      "summary": "The host's actual video presentation, independent of playback and window fullscreen.",
      "variants": [
        "Inline",
        "Fullscreen"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "MediaSnapshot",
      "path": "gpui_kit::media::MediaSnapshot",
      "summary": "Everything a player surface draws, as the transport reports it.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MentionCandidate",
      "path": "gpui_kit::controls::mention::MentionCandidate",
      "summary": "One caller-owned answer to a mention query.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "description(description: impl Into<SharedString>) -> Self",
        "replacement(replacement: impl Into<SharedString>) -> Self",
        "search_terms(terms: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "unavailable(reason: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [
        "refusal() -> Option<&SharedString>"
      ]
    },
    {
      "name": "MentionInputEvent",
      "path": "gpui_kit::controls::mention::MentionInputEvent",
      "summary": "What a mention editor reports without applying caller-owned meaning.",
      "variants": [
        "Changed",
        "Submitted",
        "Cancelled",
        "Pasted",
        "Focused",
        "Blurred",
        "QueryChanged",
        "Accepted"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MentionQuery",
      "path": "gpui_kit::controls::mention::MentionQuery",
      "summary": "The active token, in UTF-8 byte offsets into the editor's current value.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "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",
        "destructive(destructive: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString",
        "is_disabled() -> bool",
        "is_destructive() -> bool"
      ]
    },
    {
      "name": "MenuKey",
      "path": "gpui_kit::overlay::popover::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": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString",
        "is_disabled() -> bool"
      ]
    },
    {
      "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",
        "tint(tint: Hsla) -> Self",
        "streaming(streaming: bool) -> Self",
        "attachment(attachment: Attachment) -> Self",
        "reaction(reaction: Reaction) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString"
      ]
    },
    {
      "name": "MessageBody",
      "path": "gpui_kit::content::MessageBody",
      "summary": "What a message says.",
      "variants": [
        "Text",
        "Markdown"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "source() -> &SharedString"
      ]
    },
    {
      "name": "MetricReading",
      "path": "gpui_kit::display::metric::MetricReading",
      "summary": "One verified KPI the host already formatted.",
      "variants": [],
      "construct": [
        "new(value: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "delta(delta: impl Into<SharedString>, tone: Tone) -> Self",
        "direction(direction: DeltaDirection) -> Self",
        "trend(points: impl IntoIterator<Item = SparklinePoint>) -> Self"
      ],
      "commands": [],
      "queries": [
        "resolved_direction() -> DeltaDirection"
      ]
    },
    {
      "name": "MetricState",
      "path": "gpui_kit::display::metric::MetricState",
      "summary": "How the reading was asked for.",
      "variants": [
        "Loading",
        "Ready",
        "Empty",
        "Unavailable",
        "Error",
        "Stale"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "Micro",
      "path": "gpui_kit::motion::Micro",
      "summary": "A named procedural reaction.",
      "variants": [
        "Heartbeat",
        "Bounce",
        "Wobble",
        "Pop",
        "Sparkle"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "MinimapEvent",
      "path": "gpui_kit::canvas::MinimapEvent",
      "summary": "What a click on the overview reported.",
      "variants": [
        "Pan"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MinimapMark",
      "path": "gpui_kit::canvas::MinimapMark",
      "summary": "One already-normalized mark on the overview.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, x: f32, y: f32, width: f32, height: f32) -> Self"
      ],
      "options": [
        "color(color: impl Into<ColorChoice>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "MinimapView",
      "path": "gpui_kit::canvas::MinimapView",
      "summary": "The visible window, already normalized.",
      "variants": [],
      "construct": [
        "new(x: f32, y: f32, width: f32, height: f32) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MissingPolicy",
      "path": "gpui_kit::display::chart::data::transform::MissingPolicy",
      "summary": "",
      "variants": [
        "Skip",
        "Propagate"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ModalScope",
      "path": "gpui_kit::overlay::ModalScope",
      "summary": "A custom modal's membership in the same per-window stack as super::Dialog and super::Drawer. This handle owns no content or input policy.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "open(window: &Window, cx: &mut App)",
        "close(window: &mut Window, cx: &mut App)",
        "is_open(window: &Window, cx: &App) -> bool",
        "is_top(window: &Window, cx: &App) -> bool",
        "depth(window: &Window, cx: &App) -> usize"
      ]
    },
    {
      "name": "ModelAabb",
      "path": "gpui_kit::media::gltf::ModelAabb",
      "summary": "An axis-aligned box around everything the reader accepted.",
      "variants": [],
      "construct": [],
      "options": [
        "centre() -> [f32; 3]",
        "radius() -> f32"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ModelBounds",
      "path": "gpui_kit::media::ModelBounds",
      "summary": "How much of a document this reader will take.",
      "variants": [],
      "construct": [],
      "options": [
        "max_bytes(bytes: usize) -> Self",
        "max_nodes(nodes: usize) -> Self",
        "max_depth(depth: usize) -> Self",
        "max_primitives(primitives: usize) -> Self",
        "max_vertices(vertices: usize) -> Self",
        "max_triangles(triangles: usize) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ModelDefect",
      "path": "gpui_kit::media::ModelDefect",
      "summary": "Why a document is not one this reader will draw.",
      "variants": [
        "NotJson",
        "BadContainer",
        "NotGltf",
        "UnsupportedVersion",
        "ExternalResource",
        "UnsupportedEncoding",
        "SparseAccessor",
        "UnsupportedPrimitive",
        "UnsupportedComponentType",
        "UnsupportedAccessorType",
        "MissingPositions",
        "DanglingIndex",
        "TruncatedBuffer",
        "IndexOutOfRange",
        "EmptyScene"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ModelError",
      "path": "gpui_kit::media::ModelError",
      "summary": "Why a document was not read.",
      "variants": [
        "TooLarge",
        "Rejected"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str",
        "code() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ModelLimit",
      "path": "gpui_kit::media::ModelLimit",
      "summary": "Which cap a document ran into.",
      "variants": [
        "Bytes",
        "Nodes",
        "Depth",
        "Primitives",
        "Vertices",
        "Triangles"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ModelMesh",
      "path": "gpui_kit::media::ModelMesh",
      "summary": "One primitive's triangles, already in the document's world space.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &SharedString",
        "positions() -> &[[f32; 3]]",
        "indices() -> &[u32]",
        "triangle_count() -> usize"
      ]
    },
    {
      "name": "ModelScene",
      "path": "gpui_kit::media::ModelScene",
      "summary": "Everything the reader accepted out of one document.",
      "variants": [],
      "construct": [
        "parse(bytes: &[u8], bounds: ModelBounds) -> Result<Self, ModelError>"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "meshes() -> &[ModelMesh]",
        "mesh_count() -> usize",
        "vertex_count() -> usize",
        "triangle_count() -> usize",
        "aabb() -> ModelAabb"
      ]
    },
    {
      "name": "ModelShading",
      "path": "gpui_kit::media::ModelShading",
      "summary": "How the model is drawn.",
      "variants": [
        "Flat",
        "Wireframe"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ModelState",
      "path": "gpui_kit::media::ModelState",
      "summary": "What the viewer has, as the host reports it.",
      "variants": [
        "Empty",
        "Loading",
        "Ready",
        "Rejected"
      ],
      "construct": [
        "read(bytes: &[u8], bounds: ModelBounds) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "ModelViewerEvent",
      "path": "gpui_kit::media::ModelViewerEvent",
      "summary": "What a model viewer reports. It applies none of it.",
      "variants": [
        "OrbitChanged",
        "ShadingChanged"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "is_empty() -> bool",
        "position_of(day: Day) -> Option<(usize, usize)>"
      ]
    },
    {
      "name": "MonthKey",
      "path": "gpui_kit::datetime::MonthKey",
      "summary": "One month, meaningful only to the adapter that produced it.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Motion",
      "path": "gpui_kit::motion::Motion",
      "summary": "A motion written as what moves rather than as a closure that moves it.",
      "variants": [],
      "construct": [
        "new(duration_ms: u64) -> Self"
      ],
      "options": [
        "duration(duration_ms: u64) -> Self",
        "delay(delay_ms: u64) -> Self",
        "eased(easing: impl Into<Easing>) -> Self",
        "alternating() -> Self",
        "tween(property: MotionProperty, from: f32, to: f32) -> Self",
        "track(property: MotionProperty, stops: impl IntoIterator<Item = (f32, f32)>) -> Self"
      ],
      "commands": [],
      "queries": [
        "duration_ms() -> u64",
        "delay_ms() -> u64",
        "easing() -> Easing",
        "is_alternating() -> bool",
        "properties() -> Vec<MotionProperty>",
        "spec(theme: &Theme) -> MotionSpec",
        "progress(theme: &Theme, raw: f32) -> f32",
        "sample(theme: &Theme, raw: f32) -> MotionSample"
      ]
    },
    {
      "name": "MotionDisposition",
      "path": "gpui_kit::motion::MotionDisposition",
      "summary": "What the resolved policy permits the renderer to do.",
      "variants": [
        "Animate",
        "Settle",
        "Suppress",
        "Poster"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MotionPolicy",
      "path": "gpui_kit::motion::MotionPolicy",
      "summary": "The sole mapping from semantic roles to motion tokens and preferences.",
      "variants": [],
      "construct": [
        "resolve(role: MotionRole, cx: &App) -> ResolvedMotion",
        "resolve_for(role: MotionRole, theme: &Theme, reduce_motion: bool) -> ResolvedMotion",
        "spec(role: MotionRole, theme: &Theme) -> MotionSpec"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MotionProperty",
      "path": "gpui_kit::motion::MotionProperty",
      "summary": "A property a described motion can move.",
      "variants": [
        "Opacity",
        "X",
        "Y",
        "Scale"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str",
        "neutral() -> f32"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "MotionRole",
      "path": "gpui_kit::motion::MotionRole",
      "summary": "Why a surface is moving.",
      "variants": [
        "Entrance",
        "MenuEnter",
        "ModalEnter",
        "ModalTransition",
        "Exit",
        "StateChange",
        "Resize",
        "Tracking",
        "Navigation",
        "Streaming",
        "Feedback",
        "Celebration",
        "Activity",
        "Micro"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "MotionSample",
      "path": "gpui_kit::motion::MotionSample",
      "summary": "Where a described motion has got to: one value per property, ready to be applied to an element.",
      "variants": [],
      "construct": [],
      "options": [
        "get(property: MotionProperty) -> f32",
        "apply<E: Styled + IntoElement>(element: E) -> E"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "MultiSelectEvent",
      "path": "gpui_kit::controls::multi_select::MultiSelectEvent",
      "summary": "What a multi-select reports. The owner decides whether the intent changes its selected ids or query.",
      "variants": [
        "Toggled",
        "Removed",
        "Cleared",
        "QueryChanged",
        "Opened",
        "Closed"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "NavHistory",
      "path": "gpui_kit::navigation::NavHistory",
      "summary": "Durable visit identities. Store this data at the call site, not in a component; serialization and route resolution belong to the host.",
      "variants": [],
      "construct": [
        "new(root: impl Into<SharedString>) -> Self",
        "restore(entries: Vec<SharedString>, cursor: usize) -> Option<Self>"
      ],
      "options": [],
      "commands": [
        "push(visit: impl Into<SharedString>) -> bool",
        "pop() -> bool",
        "forward() -> bool",
        "replace(visit: impl Into<SharedString>) -> bool"
      ],
      "queries": [
        "current() -> &SharedString",
        "entries() -> &[SharedString]",
        "cursor() -> usize",
        "can_pop() -> bool",
        "can_forward() -> bool"
      ]
    },
    {
      "name": "NavigationItem",
      "path": "gpui_kit::navigation::NavigationItem",
      "summary": "A destination identified by caller identity, never list position.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "icon(icon: Icon) -> Self",
        "disabled(disabled: bool) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "NodeGraphEvent",
      "path": "gpui_kit::canvas::NodeGraphEvent",
      "summary": "A proposed controlled graph change.",
      "variants": [
        "ViewportChanged",
        "SelectionChanged",
        "NodeMoved",
        "NodeResized",
        "NodeDeleted",
        "SurfacePressed",
        "ConnectionRequested",
        "ConnectionDropped",
        "DisconnectRequested"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [
        "labelled() -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "NodeState",
      "path": "gpui_kit::canvas::NodeState",
      "summary": "The exact execution state a step reports.",
      "variants": [
        "Pending",
        "Idle",
        "Queued",
        "Starting",
        "Running",
        "Waiting",
        "Blocked",
        "Succeeded",
        "Partial",
        "Failed",
        "Refused",
        "Cancelling",
        "Cancelled",
        "TimedOut",
        "Unavailable"
      ],
      "construct": [],
      "options": [
        "color(theme: &gpui_kit_theme::Theme) -> Hsla"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "id() -> SharedString",
        "is_read() -> bool",
        "message() -> &SharedString",
        "toast() -> Toast"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "NumberInputEvent",
      "path": "gpui_kit::controls::number_input::NumberInputEvent",
      "summary": "What a number field reports. The owner decides what any of it means.",
      "variants": [
        "Changed",
        "Unparsable",
        "Submit"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "NumericScale",
      "path": "gpui_kit::display::chart::scale::NumericScale",
      "summary": "An invertible f64 scale. Constant input expands by 5% (one unit at zero).",
      "variants": [],
      "construct": [
        "new(kind: ScaleKind, mut domain: [f64; 2]) -> Result<Self, ScaleError>",
        "extent(kind: ScaleKind, values: impl IntoIterator<Item = Option<f64>>, include_zero: bool) -> Result<Self, ScaleError>"
      ],
      "options": [
        "domain() -> [f64; 2]",
        "kind() -> ScaleKind",
        "map(value: f64) -> Option<f64>",
        "invert(fraction: f64) -> Option<f64>",
        "pan(fraction: f64) -> Result<Self, ScaleError>",
        "zoom(anchor: f64, factor: f64) -> Result<Self, ScaleError>",
        "window(fractions: [f64; 2]) -> Result<Self, ScaleError>",
        "ticks(count: usize) -> Vec<f64>"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Objective",
      "path": "gpui_kit::game::Objective",
      "summary": "One stable objective and its optional parent relationship.",
      "variants": [],
      "construct": [
        "new(id: impl Into<ObjectiveId>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "detail(detail: impl Into<SharedString>) -> Self",
        "parent(parent: impl Into<ObjectiveId>) -> Self",
        "state(state: ObjectiveState) -> Self",
        "progress(progress: GameFraction) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &ObjectiveId"
      ]
    },
    {
      "name": "ObjectiveIssue",
      "path": "gpui_kit::game::ObjectiveIssue",
      "summary": "A malformed objective relationship.",
      "variants": [
        "DuplicateId",
        "DanglingParent",
        "ParentCycle"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ObjectiveSnapshot",
      "path": "gpui_kit::game::ObjectiveSnapshot",
      "summary": "A caller-owned objective document with structural validation.",
      "variants": [],
      "construct": [
        "new(objectives: impl IntoIterator<Item = Objective>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "objectives() -> &[Objective]",
        "issues() -> Vec<ObjectiveIssue>"
      ]
    },
    {
      "name": "ObjectiveState",
      "path": "gpui_kit::game::ObjectiveState",
      "summary": "Caller-owned objective state. Rules decide it; the tracker only presents it.",
      "variants": [
        "Locked",
        "Active",
        "Completed",
        "Failed",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "ObjectiveTrackerEvent",
      "path": "gpui_kit::game::ObjectiveTrackerEvent",
      "summary": "What an objective tracker reports without selecting or completing it.",
      "variants": [
        "Select"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "kind() -> OfferingKind",
        "name() -> &SharedString",
        "summary_text() -> Option<&SharedString>",
        "qualifier_text() -> Option<&SharedString>"
      ]
    },
    {
      "name": "OfferingIdentity",
      "path": "gpui_kit::agent::OfferingIdentity",
      "summary": "Stable identity for one server-owned offering.",
      "variants": [],
      "construct": [
        "new(server_id: impl Into<SharedString>, offering_id: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "OfferingSource",
      "path": "gpui_kit::agent::OfferingSource",
      "summary": "One attributed source and its independently truthful state.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, name: impl Into<SharedString>, state: OfferingSourceState) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "state() -> &OfferingSourceState"
      ]
    },
    {
      "name": "OfferingSourceState",
      "path": "gpui_kit::agent::OfferingSourceState",
      "summary": "What is truthfully known about one source's offerings.",
      "variants": [
        "Loading",
        "Empty",
        "Unavailable",
        "Error",
        "Ready",
        "Stale"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "OhlcError",
      "path": "gpui_kit::display::plot::OhlcError",
      "summary": "An invalid observation or repeated business identity rejects the series.",
      "variants": [
        "InvalidReading",
        "DuplicateIdentity"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "OneTimeCodeInputEvent",
      "path": "gpui_kit::controls::auth::OneTimeCodeInputEvent",
      "summary": "What a one-time code field reports to its owner.",
      "variants": [
        "Change",
        "Submit"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "OutcomeKind",
      "path": "gpui_kit::display::outcome::OutcomeKind",
      "summary": "Which of the three outcomes the host is reporting.",
      "variants": [
        "Success",
        "Partial",
        "Failed"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "OverallProgress",
      "path": "gpui_kit::controls::upload_list::OverallProgress",
      "summary": "How much of the whole batch is done, if anybody knows.",
      "variants": [
        "Known",
        "Indeterminate",
        "Settled"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "OverlaySurface",
      "path": "gpui_kit::overlay::OverlaySurface",
      "summary": "The complete token recipe for an overlay entity.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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>"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ParticleBurst",
      "path": "gpui_kit::effects::ParticleBurst",
      "summary": "Resolves and consumes one semantic event against the active policy. A click-scale particle flavour resolved through the same policy as cues.",
      "variants": [
        "Confetti",
        "Hearts",
        "Stars"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "PartyGauge",
      "path": "gpui_kit::game::PartyGauge",
      "summary": "One stable caller-named gauge on a party member.",
      "variants": [],
      "construct": [
        "known(id: impl Into<SharedString>, label: impl Into<SharedString>, fraction: GameFraction, display: impl Into<SharedString>) -> Self",
        "unknown(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self",
        "unavailable(id: impl Into<SharedString>, label: impl Into<SharedString>, reason: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "id() -> &SharedString"
      ]
    },
    {
      "name": "PartyGaugeState",
      "path": "gpui_kit::game::PartyGaugeState",
      "summary": "What is known about one party gauge such as health, guard, or mana.",
      "variants": [
        "Unknown",
        "Known",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "PartyIssue",
      "path": "gpui_kit::game::PartyIssue",
      "summary": "A malformed party fact that must be shown instead of collapsed.",
      "variants": [
        "DuplicateMember",
        "DuplicateGauge"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "PartyMember",
      "path": "gpui_kit::game::PartyMember",
      "summary": "One caller-owned party member over the shared agent identity vocabulary.",
      "variants": [],
      "construct": [
        "new(agent: AgentSnapshot) -> Self"
      ],
      "options": [
        "expression(expression: PersonaExpression) -> Self",
        "image(image: impl Into<SharedString>) -> Self",
        "image_source(image: gpui::ImageSource) -> Self",
        "tint(tint: Hsla) -> Self",
        "gauge(gauge: PartyGauge) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &AgentId"
      ]
    },
    {
      "name": "PartyRosterEvent",
      "path": "gpui_kit::game::PartyRosterEvent",
      "summary": "What a party roster reports without changing its caller-owned selection.",
      "variants": [
        "SelectMember"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "PartySnapshot",
      "path": "gpui_kit::game::PartySnapshot",
      "summary": "The complete party snapshot consumed by PartyRoster.",
      "variants": [],
      "construct": [
        "new(members: impl IntoIterator<Item = PartyMember>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "issues() -> Vec<PartyIssue>",
        "members() -> &[PartyMember]"
      ]
    },
    {
      "name": "PasswordInputEvent",
      "path": "gpui_kit::controls::auth::PasswordInputEvent",
      "summary": "What a password field reports to its owner.",
      "variants": [
        "Change",
        "Submit",
        "Cancel",
        "BackspaceAtStart",
        "Focus",
        "Blur"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Pasted",
      "path": "gpui_kit::controls::textarea::Pasted",
      "summary": "What a paste carried, when it was not text.",
      "variants": [
        "Images",
        "Paths"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "PathSampling",
      "path": "gpui_kit::display::chart::cartesian::PathSampling",
      "summary": "Sampling changes paths, never source marks, identities or readouts.",
      "variants": [
        "Exact",
        "MinMax"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "PerformanceHudState",
      "path": "gpui_kit::display::performance_hud::PerformanceHudState",
      "summary": "The diagnostics fact a host currently has.",
      "variants": [
        "Waiting",
        "Ready",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "key() -> &SharedString"
      ]
    },
    {
      "name": "PermissionChange",
      "path": "gpui_kit::agent::PermissionChange",
      "summary": "What operating a cell asks for. Nothing is applied.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "state() -> PermissionState",
        "source() -> &PermissionSource"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "name() -> &'static str",
        "label(cx: &App) -> SharedString"
      ]
    },
    {
      "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>"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString"
      ]
    },
    {
      "name": "PersonaDialogueEvent",
      "path": "gpui_kit::agent::PersonaDialogueEvent",
      "summary": "What persona dialogue reports without applying it.",
      "variants": [
        "ChoiceRequested",
        "Markdown"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "PersonaExpression",
      "path": "gpui_kit::agent::PersonaExpression",
      "summary": "A caller-observed expression, independent of execution state.",
      "variants": [
        "Neutral",
        "Warm",
        "Focused",
        "Concerned",
        "Celebrating",
        "Custom"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &str"
      ]
    },
    {
      "name": "Phase",
      "path": "gpui_kit::state::Phase",
      "summary": "What a surface knows about its own content.",
      "variants": [
        "Idle",
        "Queued",
        "Blocked",
        "Loading",
        "Refreshing",
        "Ready",
        "Empty",
        "Unavailable",
        "Error",
        "Cancelled"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "PickerPresentation",
      "path": "gpui_kit::overlay::PickerPresentation",
      "summary": "How an existing picker presents its choices. The caller chooses from its measured layout; this policy never guesses an operating system or viewport.",
      "variants": [
        "Anchored",
        "Bottom"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Placement",
      "path": "gpui_kit::overlay::Placement",
      "summary": "Where a floating surface sits.",
      "variants": [
        "Below",
        "Above",
        "At",
        "Center",
        "Edge"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "PlanItem",
      "path": "gpui_kit::agent::PlanItem",
      "summary": "One item of a plan.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "state(state: PlanState) -> Self",
        "doing() -> Self",
        "done() -> Self",
        "blocked(reason: impl Into<SharedString>) -> Self",
        "dropped(reason: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [
        "label() -> &SharedString"
      ]
    },
    {
      "name": "PlanState",
      "path": "gpui_kit::agent::PlanState",
      "summary": "Where one item of a plan stands.",
      "variants": [
        "Ahead",
        "Doing",
        "Done",
        "Blocked",
        "Dropped"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str",
        "reason() -> Option<&SharedString>"
      ]
    },
    {
      "name": "PlatformMediaTransport",
      "path": "gpui_kit::media::PlatformMediaTransport",
      "summary": "The AVFoundation or Media Foundation player used by media components.",
      "variants": [],
      "construct": [
        "audio() -> Rc<Self>",
        "video() -> Rc<Self>",
        "shared(: &Rc<Self>) -> Rc<dyn MediaTransport>"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "load(source: impl Into<MediaSource>) -> Result<(), NativeMediaError>",
        "subscribe(handler: impl Fn(NativeMediaEvent) + Send + Sync + 'static) -> NativeMediaSubscription",
        "frame() -> Option<AnyElement>",
        "player() -> &NativeMediaPlayer"
      ]
    },
    {
      "name": "PlotFrame",
      "path": "gpui_kit::display::plot::PlotFrame",
      "summary": "The measured pixel frame handed to a plot painter.",
      "variants": [],
      "construct": [
        "new(bounds: Bounds<Pixels>) -> Self"
      ],
      "options": [
        "bounds() -> Bounds<Pixels>",
        "point(normalized: Point<f32>) -> Point<Pixels>",
        "mark_bounds(normalized: Bounds<f32>) -> Bounds<Pixels>"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "PlotMark",
      "path": "gpui_kit::display::plot::PlotMark",
      "summary": "One semantic target inside a plot.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>, value: impl Into<SharedString>, bounds: Bounds<f32>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "is_bounded() -> bool"
      ]
    },
    {
      "name": "PlotState",
      "path": "gpui_kit::display::plot::PlotState",
      "summary": "Loading and refresh truth for arbitrary caller-owned plot data.",
      "variants": [
        "Loading",
        "Ready",
        "Empty",
        "Unavailable",
        "Error",
        "Stale"
      ],
      "construct": [],
      "options": [
        "map<U>(map: impl FnOnce(T) -> U) -> PlotState<U>"
      ],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "Plural",
      "path": "gpui_kit::strings::Plural",
      "summary": "Which plural form a count takes in the host's language.",
      "variants": [
        "Zero",
        "One",
        "Two",
        "Few",
        "Many",
        "Other"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "PortDirection",
      "path": "gpui_kit::canvas::PortDirection",
      "summary": "Whether a port receives or produces data.",
      "variants": [
        "Input",
        "Output"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "PortSide",
      "path": "gpui_kit::canvas::PortSide",
      "summary": "The side of a node on which a port is placed.",
      "variants": [
        "Top",
        "Right",
        "Bottom",
        "Left"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "PortType",
      "path": "gpui_kit::canvas::PortType",
      "summary": "What a port carries, in the caller's taxonomy.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, color: impl Into<ColorChoice>) -> Self"
      ],
      "options": [
        "glyph(glyph: Icon) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "icon() -> Option<Icon>",
        "color() -> &ColorChoice"
      ]
    },
    {
      "name": "Positioner",
      "path": "gpui_kit::overlay::Positioner",
      "summary": "What a surface asked for.",
      "variants": [],
      "construct": [
        "below(height: f32) -> Self"
      ],
      "options": [
        "side(side: Side) -> Self",
        "hang(hang: Hang) -> Self",
        "min_width(width: f32) -> Self",
        "spacing(margin: f32, gap: f32) -> Self",
        "resolve(window: &Window, trigger: Bounds<Pixels>) -> Room",
        "resolve_in(width: f32, height: f32, trigger: Bounds<Pixels>) -> Room"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [
        "show()",
        "hide()",
        "toggle()",
        "settle()",
        "advance(delta: Duration)",
        "animate(window: &mut Window, cx: &mut App) -> f32"
      ],
      "queries": [
        "phase() -> Phase",
        "is_rendered() -> bool",
        "is_animating() -> bool",
        "progress() -> f32"
      ]
    },
    {
      "name": "Presenting",
      "path": "gpui_kit::motion::Presenting",
      "summary": "A floating surface's whole life, from its arrival to the frame after it is dismissed.",
      "variants": [],
      "construct": [
        "closed(theme: &gpui_kit_theme::Theme, role: super::MotionRole) -> Self",
        "opened(theme: &gpui_kit_theme::Theme, role: super::MotionRole) -> Self"
      ],
      "options": [],
      "commands": [
        "open()",
        "close()",
        "toggle()",
        "settle()",
        "animate(window: &mut Window, cx: &mut App) -> f32",
        "advance(delta: Duration)"
      ],
      "queries": [
        "is_rendered() -> bool",
        "is_open() -> bool",
        "phase() -> Phase",
        "progress() -> f32"
      ]
    },
    {
      "name": "ProgressStage",
      "path": "gpui_kit::display::stage_progress::ProgressStage",
      "summary": "One host-owned stage of a longer piece of work.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>, status: StageStatus) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ProjectedPoint",
      "path": "gpui_kit::display::chart::data::ProjectedPoint",
      "summary": "Geometry references the original series/point indexes; never synthetic IDs.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ProjectedSeries",
      "path": "gpui_kit::display::chart::data::ProjectedSeries",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "PromptBuilderEvent",
      "path": "gpui_kit::agent::PromptBuilderEvent",
      "summary": "What a slot activation reports.",
      "variants": [
        "SlotActivated"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "PromptBuilderState",
      "path": "gpui_kit::agent::PromptBuilderState",
      "summary": "How the template was asked for.",
      "variants": [
        "Loading",
        "Ready",
        "Empty",
        "Unavailable",
        "Error"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "PromptSlot",
      "path": "gpui_kit::agent::PromptSlot",
      "summary": "One named hole in a template. Identity is the host's, never the draw order.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, name: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "value(value: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "PullToRefreshEvent",
      "path": "gpui_kit::interaction::refresh::PullToRefreshEvent",
      "summary": "",
      "variants": [
        "RefreshRequested"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "basis() -> Basis",
        "amount() -> f64",
        "text() -> &SharedString",
        "display(cx: &App) -> SharedString"
      ]
    },
    {
      "name": "RangeError",
      "path": "gpui_kit::interaction::range::RangeError",
      "summary": "",
      "variants": [
        "NonFinite",
        "MissingRange",
        "InvalidRange",
        "InvalidIntent",
        "Unrepresentable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RangeEvent",
      "path": "gpui_kit::interaction::range::RangeEvent",
      "summary": "These are proposals only. Cancellation never proposes a rollback: earlier updates may already have been accepted by a controlled host.",
      "variants": [
        "Update",
        "Commit",
        "Cancel"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RangeIntent",
      "path": "gpui_kit::interaction::range::RangeIntent",
      "summary": "",
      "variants": [
        "Create",
        "Resize",
        "Move"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RangeInteraction",
      "path": "gpui_kit::interaction::range::RangeInteraction",
      "summary": "Retain this transient state alongside a caller-controlled range. The host remains authoritative; only Self::preview holds an unaccepted proposal.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [
        "begin(mapping: S, value: Option<[f64; 2]>, intent: RangeIntent, pointer: f64) -> Result<RangeEvent, RangeError>",
        "sync(mapping: &S, value: Option<[f64; 2]>) -> Option<RangeEvent>",
        "update(pointer: f64) -> Result<Option<RangeEvent>, RangeError>",
        "release(pointer: f64) -> Result<Option<RangeEvent>, RangeError>",
        "cancel() -> Option<RangeEvent>",
        "keyboard(mapping: &S, value: [f64; 2], target: RangeTarget, key: RangeKey) -> Result<RangeEvent, RangeError>"
      ],
      "queries": [
        "preview() -> Option<[f64; 2]>"
      ]
    },
    {
      "name": "RangeKey",
      "path": "gpui_kit::interaction::range::RangeKey",
      "summary": "",
      "variants": [
        "Step",
        "Home",
        "End"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "RangeTarget",
      "path": "gpui_kit::interaction::range::RangeTarget",
      "summary": "",
      "variants": [
        "Start",
        "End",
        "Window"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RasterDotLottieAdapter",
      "path": "gpui_kit::effects::RasterDotLottieAdapter",
      "summary": "Pure-Rust deterministic dotLottie adapter enabled by the dotlottie Cargo feature.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RatingPrecision",
      "path": "gpui_kit::display::rating::RatingPrecision",
      "summary": "The smallest step a rating can report.",
      "variants": [
        "Whole",
        "Half"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RawOhlc",
      "path": "gpui_kit::display::plot::RawOhlc",
      "summary": "One raw OHLC reading. The x coordinate may be Unix milliseconds on a shared Time scale or any caller-defined numeric coordinate. Negative readings are accepted; financial/calendar/domain policy is not inferred.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, x: f64, ohlc: [f64; 4], label: impl Into<SharedString>, formatted: impl Into<SharedString>) -> Self",
        "series(id: impl Into<SharedString>, axis: impl Into<SharedString>, readings: impl IntoIterator<Item = Self>, rising: Hsla, falling: Hsla) -> Result<super::chart::data::RawSeries, OhlcError>"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RawPoint",
      "path": "gpui_kit::display::chart::data::RawPoint",
      "summary": "",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, x: ChartValue, y: Option<f64>) -> Self"
      ],
      "options": [
        "text(label: impl Into<SharedString>, value: impl Into<SharedString>) -> Self",
        "error(interval: [f64; 2]) -> Self",
        "baseline(value: f64) -> Self",
        "tint(color: Hsla) -> Self"
      ],
      "commands": [],
      "queries": [
        "values() -> impl Iterator<Item = Option<f64>>"
      ]
    },
    {
      "name": "RawSeries",
      "path": "gpui_kit::display::chart::data::RawSeries",
      "summary": "",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, axis: impl Into<SharedString>, mark: SeriesMark) -> Self"
      ],
      "options": [
        "points(points: impl IntoIterator<Item = RawPoint>) -> Self",
        "curve(curve: Curve) -> Self",
        "stack(stack: Stack) -> Self",
        "tint(color: Hsla) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "quantity() -> Option<&Quantity>",
        "name() -> &'static str"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str",
        "is_disclosable() -> bool"
      ]
    },
    {
      "name": "RefreshState",
      "path": "gpui_kit::interaction::refresh::RefreshState",
      "summary": "Refresh activity is separate from the retained list's data state.",
      "variants": [
        "Ready",
        "Pending",
        "Loading",
        "Error",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ResolvedMotion",
      "path": "gpui_kit::motion::ResolvedMotion",
      "summary": "One role resolved against a theme and the user's motion preference.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ResultCount",
      "path": "gpui_kit::controls::filter_bar::ResultCount",
      "summary": "How many rows the host says the filter matched.",
      "variants": [
        "Unknown",
        "Counting",
        "Known",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str"
      ]
    },
    {
      "name": "RewardItem",
      "path": "gpui_kit::game::RewardItem",
      "summary": "One reward item. Quantity is a count, not a formatted string, so Kit can present it consistently without interpreting the item.",
      "variants": [],
      "construct": [
        "new(id: impl Into<RewardItemId>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "detail(detail: impl Into<SharedString>) -> Self",
        "quantity(quantity: usize) -> Self",
        "icon(icon: Icon) -> Self",
        "image(image: impl Into<SharedString>) -> Self",
        "image_source(image: gpui::ImageSource) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &RewardItemId"
      ]
    },
    {
      "name": "RewardRevealEvent",
      "path": "gpui_kit::game::RewardRevealEvent",
      "summary": "What a reward reveal reports without revealing or claiming anything.",
      "variants": [
        "RevealRequested",
        "ClaimRequested"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RewardSnapshot",
      "path": "gpui_kit::game::RewardSnapshot",
      "summary": "One reward composition and all caller-owned items it may reveal.",
      "variants": [],
      "construct": [
        "new(id: impl Into<RewardId>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "detail(detail: impl Into<SharedString>) -> Self",
        "item(item: RewardItem) -> Self",
        "state(state: RewardState) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &RewardId",
        "issues() -> Vec<RewardItemId>"
      ]
    },
    {
      "name": "RewardState",
      "path": "gpui_kit::game::RewardState",
      "summary": "Caller-owned reward reveal state.",
      "variants": [
        "Hidden",
        "Revealed",
        "Claimed",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "RichTextAlignment",
      "path": "gpui_kit::content::RichTextAlignment",
      "summary": "Logical paragraph alignment. Start and end follow reading direction.",
      "variants": [
        "Start",
        "Center",
        "End"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RichTextBlock",
      "path": "gpui_kit::content::RichTextBlock",
      "summary": "One paragraph-like block and its complete inline style coverage.",
      "variants": [],
      "construct": [
        "new(id: impl Into<RichTextBlockId>, text: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "with_paragraph(paragraph: RichTextParagraphStyle) -> Self",
        "with_style(range: Range<usize>, style: RichTextInlineStyle) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &RichTextBlockId",
        "text() -> &SharedString",
        "styles() -> &EditableStyleRuns<RichTextInlineStyle>",
        "paragraph() -> RichTextParagraphStyle"
      ]
    },
    {
      "name": "RichTextBlockId",
      "path": "gpui_kit::content::RichTextBlockId",
      "summary": "Stable caller-visible identity for one rich-text block.",
      "variants": [],
      "construct": [
        "new(value: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &str"
      ]
    },
    {
      "name": "RichTextDiagnostic",
      "path": "gpui_kit::controls::rich_text_editor::RichTextDiagnostic",
      "summary": "A diagnostic projection. The editor draws it but never decides when or how validation runs.",
      "variants": [],
      "construct": [
        "new(range: RichTextRange, severity: RichTextDiagnosticSeverity) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RichTextDiagnosticSeverity",
      "path": "gpui_kit::controls::rich_text_editor::RichTextDiagnosticSeverity",
      "summary": "Severity rendered under one caller-owned document range.",
      "variants": [
        "Info",
        "Warning",
        "Error"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RichTextDocument",
      "path": "gpui_kit::content::RichTextDocument",
      "summary": "A non-empty storage-neutral rich-text document.",
      "variants": [],
      "construct": [
        "new(blocks: impl IntoIterator<Item = RichTextBlock>) -> Result<Self, RichTextError>",
        "empty(block_id: impl Into<RichTextBlockId>) -> Result<Self, RichTextError>",
        "plain(block_id: impl Into<RichTextBlockId>, text: impl Into<SharedString>) -> Result<Self, RichTextError>"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "blocks() -> &[RichTextBlock]",
        "block(id: &RichTextBlockId) -> Option<&RichTextBlock>",
        "selection_at_start() -> RichTextSelection",
        "selection_at_end() -> RichTextSelection"
      ]
    },
    {
      "name": "RichTextEditResult",
      "path": "gpui_kit::content::RichTextEditResult",
      "summary": "What one command changed.",
      "variants": [],
      "construct": [],
      "options": [
        "changed() -> bool"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "RichTextEditSession",
      "path": "gpui_kit::content::RichTextEditSession",
      "summary": "Caller-owned editing state and reusable rich-document transaction history.",
      "variants": [],
      "construct": [
        "new(document: RichTextDocument) -> Self"
      ],
      "options": [],
      "commands": [
        "forbid_history()",
        "replace_document(document: RichTextDocument, selection: RichTextSelection) -> Result<(), RichTextError>",
        "apply(intent: RichTextIntent) -> Result<RichTextEditResult, RichTextError>"
      ],
      "queries": [
        "document() -> &RichTextDocument",
        "selection() -> &RichTextSelection",
        "pending_style() -> &RichTextInlineStyle",
        "marked_range() -> Option<&RichTextRange>",
        "can_undo() -> bool",
        "can_redo() -> bool"
      ]
    },
    {
      "name": "RichTextEditorEvent",
      "path": "gpui_kit::controls::rich_text_editor::RichTextEditorEvent",
      "summary": "Typed output from the editor.",
      "variants": [
        "IntentApplied",
        "IntentRefused",
        "LinkRequested",
        "Focus",
        "Blur"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RichTextError",
      "path": "gpui_kit::content::RichTextError",
      "summary": "Invalid caller-owned document or position data.",
      "variants": [
        "EmptyDocument",
        "EmptyBlockId",
        "DuplicateBlockId",
        "UnknownBlock",
        "BlockIdCount"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RichTextFormat",
      "path": "gpui_kit::content::RichTextFormat",
      "summary": "Inline formats whose active state can be toggled independently.",
      "variants": [
        "Bold",
        "Italic",
        "Underline",
        "Strike",
        "Code"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RichTextInlineStyle",
      "path": "gpui_kit::content::RichTextInlineStyle",
      "summary": "The complete inline style at one source byte.",
      "variants": [],
      "construct": [],
      "options": [
        "with_format(format: RichTextFormat, active: bool) -> Self",
        "with_link(destination: Option<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [
        "format(format: RichTextFormat) -> bool",
        "link() -> Option<&SharedString>"
      ]
    },
    {
      "name": "RichTextInputKind",
      "path": "gpui_kit::content::RichTextInputKind",
      "summary": "What supplied a text replacement, for transaction grouping.",
      "variants": [
        "Typing",
        "Deleting",
        "Paste",
        "Cut"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RichTextIntent",
      "path": "gpui_kit::content::RichTextIntent",
      "summary": "A typed command accepted by RichTextEditSession::apply.",
      "variants": [
        "Select",
        "Replace",
        "ReplaceMultiline",
        "InsertSoftBreak",
        "InsertHardBreak",
        "BackspaceAtStart",
        "ToggleFormat",
        "SetLink",
        "SetAlignment",
        "SetList",
        "ChangeListDepth",
        "Compose",
        "EndComposition",
        "Undo",
        "Redo"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RichTextListItem",
      "path": "gpui_kit::content::RichTextListItem",
      "summary": "List metadata for one paragraph.",
      "variants": [],
      "construct": [
        "new(kind: RichTextListKind) -> Self"
      ],
      "options": [
        "depth(depth: u8) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "RichTextListKind",
      "path": "gpui_kit::content::RichTextListKind",
      "summary": "The marker family of a list item.",
      "variants": [
        "Unordered",
        "Ordered"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RichTextParagraphStyle",
      "path": "gpui_kit::content::RichTextParagraphStyle",
      "summary": "Block presentation metadata independent of any storage syntax.",
      "variants": [],
      "construct": [],
      "options": [
        "with_alignment(alignment: RichTextAlignment) -> Self",
        "with_list(list: Option<RichTextListItem>) -> Self"
      ],
      "commands": [],
      "queries": [
        "alignment() -> RichTextAlignment",
        "list() -> Option<RichTextListItem>"
      ]
    },
    {
      "name": "RichTextPosition",
      "path": "gpui_kit::content::RichTextPosition",
      "summary": "One UTF-8 position inside a stable block.",
      "variants": [],
      "construct": [
        "new(block: impl Into<RichTextBlockId>, offset: usize) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RichTextRange",
      "path": "gpui_kit::content::RichTextRange",
      "summary": "One normalized document range.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "RichTextSelection",
      "path": "gpui_kit::content::RichTextSelection",
      "summary": "An anchor and moving head. Their order is preserved across bidi and drag selection; document operations normalize them only while applying an edit.",
      "variants": [],
      "construct": [
        "new(anchor: RichTextPosition, head: RichTextPosition) -> Self",
        "caret(position: RichTextPosition) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "is_caret() -> bool"
      ]
    },
    {
      "name": "Room",
      "path": "gpui_kit::overlay::Room",
      "summary": "Where a surface goes and how much of it there can be.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "RunId",
      "path": "gpui_kit::agent::RunId",
      "summary": "The stable identity of one run.",
      "variants": [],
      "construct": [
        "new(value: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &str"
      ]
    },
    {
      "name": "RunLink",
      "path": "gpui_kit::agent::RunLink",
      "summary": "One typed relationship between two run subjects.",
      "variants": [],
      "construct": [
        "new(id: impl Into<RunLinkId>, from: RunSubjectId, to: RunSubjectId, kind: RunLinkKind) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "RunLinkId",
      "path": "gpui_kit::agent::RunLinkId",
      "summary": "The stable identity of a topology relationship.",
      "variants": [],
      "construct": [
        "new(value: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &str"
      ]
    },
    {
      "name": "RunLinkKind",
      "path": "gpui_kit::agent::RunLinkKind",
      "summary": "The meaning of a topology relationship.",
      "variants": [
        "Spawn",
        "Delegation",
        "Dependency",
        "Handoff",
        "Report",
        "Aggregation",
        "Retry"
      ],
      "construct": [],
      "options": [
        "as_str() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "RunSubjectId",
      "path": "gpui_kit::agent::RunSubjectId",
      "summary": "What kind of thing one topology endpoint identifies.",
      "variants": [
        "Agent",
        "Task",
        "Invocation"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &str"
      ]
    },
    {
      "name": "SankeyAlignment",
      "path": "gpui_kit::display::plot::SankeyAlignment",
      "summary": "Horizontal alignment of an acyclic flow graph. Vertical order follows the caller's node order, making repeated layouts stable and reviewable.",
      "variants": [
        "Left",
        "Right",
        "Justify"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SankeyData",
      "path": "gpui_kit::display::plot::SankeyData",
      "summary": "Caller-owned node and ribbon geometry for a Sankey presentation.",
      "variants": [],
      "construct": [
        "new(nodes: impl IntoIterator<Item = SankeyNode>, links: impl IntoIterator<Item = SankeyLink>) -> Self"
      ],
      "options": [
        "layout(weights: &[f64], node_width: f32, gap: f32, alignment: SankeyAlignment) -> Result<(Self, f64), SankeyLayoutError>",
        "layout_ordered(weights: &[f64], node_width: f32, gap: f32, alignment: SankeyAlignment, ordering: SankeyOrder) -> Result<(Self, f64), SankeyLayoutError>"
      ],
      "commands": [],
      "queries": [
        "hit_test(p: Point<f32>) -> Option<SharedString>"
      ]
    },
    {
      "name": "SankeyLayoutError",
      "path": "gpui_kit::display::plot::SankeyLayoutError",
      "summary": "Invalid graph or normalized layout constraints. Layout never silently drops a flow or fabricates a value for an invalid input.",
      "variants": [
        "InvalidDimensions",
        "DuplicateNode",
        "DuplicateLink",
        "MissingEndpoint",
        "InvalidWeight",
        "WeightCount",
        "Cycle",
        "InsufficientHeight",
        "UnrepresentableScale"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SankeyLink",
      "path": "gpui_kit::display::plot::SankeyLink",
      "summary": "One caller-laid-out flow ribbon.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, source: impl Into<SharedString>, target: impl Into<SharedString>, label: impl Into<SharedString>, value: impl Into<SharedString>, start: Point<f32>, end: Point<f32>, width: f32) -> Self"
      ],
      "options": [
        "widths(start: f32, end: f32) -> Self",
        "tint(color: Hsla) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "SankeyNode",
      "path": "gpui_kit::display::plot::SankeyNode",
      "summary": "One caller-laid-out Sankey node.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>, value: impl Into<SharedString>, bounds: Bounds<f32>) -> Self"
      ],
      "options": [
        "tint(color: Hsla) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "SankeyOrder",
      "path": "gpui_kit::display::plot::SankeyOrder",
      "summary": "Vertical ordering policy. Weighted barycenter sweeps and bounded adjacent transpositions retain the best weighted crossing score, including skip-layer links. Stable identity breaks ties. This heuristic is not a global optimum; refinement costs O(V E²), intended for overview-sized flows, not huge DAGs.",
      "variants": [
        "Input",
        "Barycenter"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "name() -> &'static str",
        "is_clean() -> bool"
      ]
    },
    {
      "name": "ScaleError",
      "path": "gpui_kit::display::chart::scale::ScaleError",
      "summary": "A rejected coordinate contract, never silently replaced by an empty chart.",
      "variants": [
        "Empty",
        "NonFinite",
        "InvalidLogDomain",
        "DuplicateCategory",
        "UnrepresentableDomain"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ScaleKind",
      "path": "gpui_kit::display::chart::scale::ScaleKind",
      "summary": "Continuous coordinate interpretation.",
      "variants": [
        "Linear",
        "Time",
        "Log"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "is_empty() -> bool"
      ]
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "name() -> &SharedString",
        "kind() -> &SchemaKind",
        "is_required() -> bool"
      ]
    },
    {
      "name": "SchemaFileRequest",
      "path": "gpui_kit::structured::SchemaFileRequest",
      "summary": "The file field the form is asking the host to acquire paths for.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SchemaFormEvent",
      "path": "gpui_kit::structured::SchemaFormEvent",
      "summary": "What the form reports.",
      "variants": [
        "Changed",
        "FilesRequested",
        "Submitted"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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",
        "Date",
        "Time",
        "DateRange",
        "Files",
        "List",
        "Unrenderable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ScrollEdgeKind",
      "path": "gpui_kit::layout::ScrollEdgeKind",
      "summary": "How a scroll-edge ramp separates floating chrome from the content under it.",
      "variants": [
        "Soft",
        "Hard"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "SearchFieldEvent",
      "path": "gpui_kit::controls::search::SearchFieldEvent",
      "summary": "What a search field reports. It applies none of it.",
      "variants": [
        "QueryChanged",
        "Next",
        "Previous",
        "Cancelled",
        "MatchCaseToggled",
        "WholeWordToggled"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SearchInputEvent",
      "path": "gpui_kit::controls::search::SearchInputEvent",
      "summary": "The query edit and focus events reported to the host; no search is run here.",
      "variants": [
        "Change",
        "Submit",
        "Cancel",
        "BackspaceAtStart",
        "Focus",
        "Blur"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SearchableOffering",
      "path": "gpui_kit::agent::SearchableOffering",
      "summary": "An offering and the caller-authored text used to search it.",
      "variants": [],
      "construct": [
        "new(offering: Offering, searchable_text: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "offering() -> &Offering"
      ]
    },
    {
      "name": "Segment",
      "path": "gpui_kit::datetime::TimeSegment",
      "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",
        "tint(tint: Hsla) -> Self",
        "disabled(disabled: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString",
        "is_disabled() -> bool",
        "is_tinted() -> bool"
      ]
    },
    {
      "name": "SelectEvent",
      "path": "gpui_kit::controls::select::SelectEvent",
      "summary": "What a Select reports. The owner decides what any of it means.",
      "variants": [
        "Selected",
        "Cleared",
        "Opened",
        "Closed"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SelectOption",
      "path": "gpui_kit::controls::select::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",
        "group(group: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "is_selectable() -> bool",
        "reason() -> Option<&SharedString>"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str"
      ]
    },
    {
      "name": "SelectionKind",
      "path": "gpui_kit::content::SelectionKind",
      "summary": "How much a selection takes per gesture: a drag, a double-click word, a triple-click row.",
      "variants": [
        "Drag",
        "Word",
        "Line"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SelectionMode",
      "path": "gpui_kit::data::SelectionMode",
      "summary": "How many rows may be selected at once.",
      "variants": [
        "None",
        "Single",
        "Multiple"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "len() -> usize",
        "is_empty() -> bool",
        "start(index: usize) -> Duration",
        "step(index: usize) -> Option<MotionSpec>",
        "steps() -> impl Iterator<Item = MotionSpec> + '_",
        "total() -> Duration",
        "progress(index: usize, raw: f32) -> f32"
      ]
    },
    {
      "name": "SeriesMark",
      "path": "gpui_kit::display::chart::data::SeriesMark",
      "summary": "",
      "variants": [
        "Line",
        "Area",
        "Bar",
        "Range",
        "Scatter"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString"
      ]
    },
    {
      "name": "ServerState",
      "path": "gpui_kit::agent::ServerState",
      "summary": "Where a connection stands.",
      "variants": [
        "Connected",
        "Connecting",
        "Disconnected",
        "Failed",
        "Disabled"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "Shape",
      "path": "gpui_kit::motion::Shape",
      "summary": "The visual form an element is drawn with, as opposed to where it is.",
      "variants": [],
      "construct": [
        "surface(background: Hsla) -> Self"
      ],
      "options": [
        "radius(radius: f32) -> Self",
        "border(width: f32, color: Hsla) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "SheetAction",
      "path": "gpui_kit::overlay::SheetAction",
      "summary": "Stable caller identity and presentation for one action; no business action.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SheetActionState",
      "path": "gpui_kit::overlay::SheetActionState",
      "summary": "Caller-owned availability of an action group. Failure never removes rows.",
      "variants": [
        "Ready",
        "Pending",
        "Loading",
        "Error",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SheetDetent",
      "path": "gpui_kit::overlay::SheetDetent",
      "summary": "A stable detent identity and its desired surface height in logical pixels.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, height: f32) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Shortcut",
      "path": "gpui_kit::content::markdown::doc::Shortcut",
      "summary": "A markdown prefix typed at the start of a block, and what it turns it into.",
      "variants": [
        "Heading",
        "Bullet",
        "Ordered",
        "Task",
        "Quote",
        "Code",
        "Rule"
      ],
      "construct": [],
      "options": [
        "apply(text: Text) -> BlockKind"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Side",
      "path": "gpui_kit::overlay::Side",
      "summary": "Which side of the trigger a surface is asked to go on.",
      "variants": [
        "Below",
        "Above",
        "Before",
        "After"
      ],
      "construct": [],
      "options": [
        "opposite() -> Self",
        "is_vertical() -> bool"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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",
        "image(path: impl Into<SharedString>) -> Self",
        "badge(badge: impl Into<SharedString>) -> Self",
        "disabled(disabled: bool) -> Self",
        "children(children: impl IntoIterator<Item = SidebarItem>) -> Self"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString"
      ]
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Signal",
      "path": "gpui_kit::reactive::Signal",
      "summary": "One caller-owned value that anything watching it is told about.",
      "variants": [],
      "construct": [
        "new(cx: &mut App, value: T) -> Self",
        "from_entity(entity: Entity<T>) -> Self",
        "read<'a>(&'a self, cx: &'a App) -> &'a T"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "entity() -> &Entity<T>",
        "get(cx: &App) -> T where T: Clone,",
        "update(cx: &mut App, change: impl FnOnce(&mut T))",
        "replace(cx: &mut App, value: T)",
        "set(cx: &mut App, value: T) where T: PartialEq,",
        "watch<V: 'static>(cx: &mut Context<V>) -> Subscription",
        "binding() -> Binding<T>",
        "lens<F>(get: impl Fn(&T) -> &F + 'static, set: impl Fn(&mut T, F) + 'static) -> Binding<F> where F: Clone + PartialEq + 'static,"
      ]
    },
    {
      "name": "SkeletonShape",
      "path": "gpui_kit::display::loading::SkeletonShape",
      "summary": "One placeholder a skeleton can draw.",
      "variants": [
        "Row",
        "Paragraph",
        "Circle",
        "Rect",
        "Card"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SliderOrientation",
      "path": "gpui_kit::controls::slider::SliderOrientation",
      "summary": "The axis on which a slider lays out and accepts input.",
      "variants": [
        "Horizontal",
        "Vertical"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Slots",
      "path": "gpui_kit::foundation::Slots",
      "summary": "The nodes a caller has replaced inside one component.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [
        "set(name: &'static str, render: impl Fn(&mut Window, &mut App) -> AnyElement + 'static)"
      ],
      "queries": [
        "holds(name: &'static str) -> bool",
        "render(name: &'static str, window: &mut Window, cx: &mut App) -> Option<AnyElement>",
        "or_else(name: &'static str, window: &mut Window, cx: &mut App, own: impl FnOnce(&mut Window, &mut App) -> AnyElement) -> AnyElement"
      ]
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "SourceRows",
      "path": "gpui_kit::display::chart::data::transform::SourceRows",
      "summary": "Membership refers only to the retained immutable TransformedData::source. Contiguous rolling windows use ranges, avoiding O(rows × window) lineage.",
      "variants": [
        "Range",
        "Indices"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "indices() -> impl Iterator<Item = usize> + '_"
      ]
    },
    {
      "name": "SpanState",
      "path": "gpui_kit::display::trace::SpanState",
      "summary": "What a span is doing, as the host already knows it.",
      "variants": [
        "Pending",
        "Running",
        "Succeeded",
        "Failed"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "SparklinePoint",
      "path": "gpui_kit::display::sparkline::SparklinePoint",
      "summary": "One point already normalized by the caller.",
      "variants": [],
      "construct": [
        "new(x: f32, y: f32) -> Self"
      ],
      "options": [
        "is_bounded() -> bool"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "SparklineReading",
      "path": "gpui_kit::display::sparkline::SparklineReading",
      "summary": "The plotted points and the exact text that makes them accessible.",
      "variants": [],
      "construct": [
        "new(points: impl IntoIterator<Item = SparklinePoint>, current: impl Into<SharedString>, minimum: impl Into<SharedString>, maximum: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "published_points() -> usize"
      ]
    },
    {
      "name": "SparklineState",
      "path": "gpui_kit::display::sparkline::SparklineState",
      "summary": "The complete state of one trend reading.",
      "variants": [
        "Loading",
        "Ready",
        "Empty",
        "Unavailable",
        "Error",
        "Stale"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "SpecializedData",
      "path": "gpui_kit::display::specialized::SpecializedData",
      "summary": "Validated, reproducible geometry plus an always-visible exact-value key.",
      "variants": [],
      "construct": [
        "treemap_at(root: &HierarchyNode, focus: &str) -> Result<Self, SpecializedError>",
        "sunburst_at(root: &HierarchyNode, focus: &str) -> Result<Self, SpecializedError>",
        "box_plot(id: impl Into<SharedString>, label: impl Into<SharedString>, samples: &[f64], domain: [f64; 2]) -> Result<Self, SpecializedError>",
        "range(id: impl Into<SharedString>, label: impl Into<SharedString>, low: f64, high: f64, domain: [f64; 2]) -> Result<Self, SpecializedError>",
        "treemap(root: &HierarchyNode) -> Result<Self, SpecializedError>",
        "sunburst(root: &HierarchyNode) -> Result<Self, SpecializedError>",
        "funnel(items: Vec<WeightedValue>) -> Result<Self, SpecializedError>",
        "histogram(samples: &[f64], edges: &[f64]) -> Result<Self, SpecializedError>",
        "waterfall(items: Vec<WeightedValue>) -> Result<Self, SpecializedError>"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "hit_test(p: Point<f32>, frame: gpui::Size<f32>, stroke: f32) -> Option<SharedString>",
        "geometry(id: &str) -> Option<&[Point<f32>]>"
      ]
    },
    {
      "name": "SpecializedError",
      "path": "gpui_kit::display::specialized::SpecializedError",
      "summary": "Invalid raw input never becomes a plausible but incomplete picture.",
      "variants": [
        "DuplicateIdentity",
        "InvalidValue",
        "InvalidEdges",
        "OutsideBins",
        "EmptySample",
        "InvalidRange",
        "Overflow",
        "UnknownFocus"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SplitAxis",
      "path": "gpui_kit::layout::SplitAxis",
      "summary": "Which way the two panes are laid out.",
      "variants": [
        "Horizontal",
        "Vertical"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SplitKind",
      "path": "gpui_kit::layout::SplitKind",
      "summary": "What one SplitRecord describes.",
      "variants": [
        "Pane",
        "Horizontal",
        "Vertical"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "is_pane() -> bool",
        "panes() -> Vec<&SplitPaneSpec>",
        "find(id: &str) -> Option<&SplitLayout>",
        "min_extent(axis: SplitAxis) -> f32",
        "with_ratio(split: &str, ratio: f32) -> Self",
        "with_collapsed(pane: &str, collapsed: bool) -> Self",
        "applied(change: &SplitChange) -> Self",
        "to_records() -> Vec<SplitRecord>"
      ]
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "min_size(axis: SplitAxis) -> f32",
        "rail_size() -> f32",
        "is_collapsed() -> bool"
      ]
    },
    {
      "name": "SplitRecord",
      "path": "gpui_kit::layout::SplitRecord",
      "summary": "One node of a SplitLayout, as plain fields a host can write anywhere.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SplitSide",
      "path": "gpui_kit::layout::SplitSide",
      "summary": "One of the two panes.",
      "variants": [
        "Start",
        "End"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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",
        "settle_time_for(span: f32) -> Duration",
        "settle_time_at_for(velocity: f32, span: f32) -> Duration",
        "is_visually_settled(elapsed: Duration, velocity: f32, span: f32) -> bool",
        "animation() -> Animation"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "Stack",
      "path": "gpui_kit::display::chart::data::Stack",
      "summary": "",
      "variants": [
        "None",
        "Absolute",
        "Percent"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "StageStatus",
      "path": "gpui_kit::display::stage_progress::StageStatus",
      "summary": "Where one stage stands.",
      "variants": [
        "Pending",
        "Active",
        "Done",
        "Failed"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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(theme: &Theme) -> Self"
      ],
      "options": [
        "max_items(max_items: usize) -> Self",
        "reversed() -> Self",
        "with_budget(budget: StaggerBudget) -> Self"
      ],
      "commands": [],
      "queries": [
        "is_reversed() -> bool",
        "delay(index: usize, count: usize) -> Duration",
        "total(count: usize, spec: MotionSpec) -> Duration",
        "spec(index: usize, count: usize, spec: MotionSpec) -> MotionSpec",
        "progress_at(elapsed: Duration, index: usize, count: usize, spec: MotionSpec) -> f32"
      ]
    },
    {
      "name": "StaggerBudget",
      "path": "gpui_kit::motion::StaggerBudget",
      "summary": "How much of a stagger the current frame is allowed to spend.",
      "variants": [
        "Full",
        "Compressed",
        "Off"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "StatusGroup",
      "path": "gpui_kit::layout::StatusGroup",
      "summary": "Which group an item sits in.",
      "variants": [
        "Start",
        "Centre",
        "End"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString",
        "is_stale() -> bool"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str",
        "reason() -> Option<&SharedString>"
      ]
    },
    {
      "name": "Strings",
      "path": "gpui_kit::strings::Strings",
      "summary": "The catalogue a host installs, and the one components read.",
      "variants": [],
      "construct": [
        "new() -> Self"
      ],
      "options": [],
      "commands": [
        "set(key: StringKey, text: impl Into<SharedString>) -> &mut Self",
        "clear(key: StringKey) -> &mut Self",
        "set_plural(key: StringKey, form: Plural, text: impl Into<SharedString>) -> &mut Self",
        "clear_plural(key: StringKey, form: Plural) -> &mut Self",
        "clear_all() -> &mut Self",
        "extend(entries: impl IntoIterator<Item = (StringKey, SharedString)>) -> &mut Self"
      ],
      "queries": [
        "is_overridden(key: StringKey) -> bool",
        "is_plural_overridden(key: StringKey, form: Plural) -> bool",
        "text(key: StringKey) -> SharedString",
        "format(key: StringKey, args: &[&str]) -> SharedString",
        "format_plural(one: StringKey, other: StringKey, form: Plural, args: &[&str]) -> SharedString"
      ]
    },
    {
      "name": "SwipeActionsEvent",
      "path": "gpui_kit::interaction::swipe::SwipeActionsEvent",
      "summary": "",
      "variants": [
        "Revealed",
        "ActionRequested"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "SwipeSide",
      "path": "gpui_kit::interaction::swipe::SwipeSide",
      "summary": "Physical sides. The caller maps leading/trailing according to reading order.",
      "variants": [
        "Left",
        "Right"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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",
        "tint(tint: Hsla) -> 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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "TagInputEvent",
      "path": "gpui_kit::controls::tag_input::TagInputEvent",
      "summary": "What a tag field reports. The owner decides what any of it means.",
      "variants": [
        "Added",
        "Removed",
        "Duplicate",
        "Refused",
        "Moved",
        "EditRequested"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "TailSide",
      "path": "gpui_kit::overlay::TailSide",
      "summary": "Which way the point faces, which is the side of the surface it hangs off.",
      "variants": [
        "Up",
        "Down"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "TaskId",
      "path": "gpui_kit::agent::TaskId",
      "summary": "The stable identity of one task in a run.",
      "variants": [],
      "construct": [
        "new(value: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &str"
      ]
    },
    {
      "name": "TerminalEvent",
      "path": "gpui_kit::content::TerminalEvent",
      "summary": "What the grid reports. Every variant is the host's to act on.",
      "variants": [
        "SelectionStarted",
        "SelectionUpdated",
        "SelectionCleared",
        "Scrolled"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "TerminalState",
      "path": "gpui_kit::content::TerminalState",
      "summary": "What is known about the session behind the grid.",
      "variants": [
        "Loading",
        "Unavailable",
        "Error",
        "Ready"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "Text",
      "path": "gpui_kit::content::markdown::doc::Text",
      "summary": "Inline content: a string, plus marks over byte ranges of it.",
      "variants": [],
      "construct": [
        "plain(text: impl Into<String>) -> Self"
      ],
      "options": [],
      "commands": [
        "insert(at: usize, s: &str)",
        "remove(range: Range<usize>)",
        "toggle(range: Range<usize>, mark: Mark)",
        "split_off(at: usize) -> Text",
        "append(other: Text)"
      ],
      "queries": [
        "covered_by(range: &Range<usize>, mark: &Mark) -> bool",
        "is_empty() -> bool"
      ]
    },
    {
      "name": "TextAreaEdit",
      "path": "gpui_kit::controls::textarea::TextAreaEdit",
      "summary": "The single contiguous replacement between two text-area revisions.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "TextAreaEvent",
      "path": "gpui_kit::controls::textarea::TextAreaEvent",
      "summary": "What a text area reports to its owner.",
      "variants": [
        "Edited",
        "Change",
        "Submit",
        "Cancel",
        "Pasted",
        "MoveUp",
        "MoveDown",
        "AcceptCompletion",
        "DismissCompletion",
        "IndentRequested",
        "OutdentRequested",
        "SelectionChanged",
        "GeometryChanged",
        "Focus",
        "Blur"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "TextAreaSnapshot",
      "path": "gpui_kit::controls::textarea::TextAreaSnapshot",
      "summary": "An immutable value tagged with the revision that produced it.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "TextAreaWrap",
      "path": "gpui_kit::controls::textarea::TextAreaWrap",
      "summary": "How a text area lays out lines wider than its viewport.",
      "variants": [
        "Soft",
        "None"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "TextInputEvent",
      "path": "gpui_kit::controls::input::TextInputEvent",
      "summary": "What an input reports to its owner.",
      "variants": [
        "Change",
        "Submit",
        "Cancel",
        "BackspaceAtStart",
        "Focus",
        "Blur"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ThemeOverlay",
      "path": "gpui_kit::foundation::ThemeOverlay",
      "summary": "A subtree that reads a theme its caller adjusted.",
      "variants": [],
      "construct": [
        "new(adjust: impl FnOnce(&Theme) -> Theme + 'static, child: impl IntoElement) -> Self",
        "theme(theme: Theme, child: impl IntoElement) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "TickError",
      "path": "gpui_kit::display::chart::cartesian::TickError",
      "summary": "",
      "variants": [
        "UnknownAxis",
        "InvalidValue",
        "OutsideDomain",
        "DuplicateValue"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "TimelineEntry",
      "path": "gpui_kit::display::timeline::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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString"
      ]
    },
    {
      "name": "TimelineGroup",
      "path": "gpui_kit::display::timeline::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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "ident() -> &Ident"
      ]
    },
    {
      "name": "ToastCorner",
      "path": "gpui_kit::overlay::ToastCorner",
      "summary": "Which corner the stack grows from.",
      "variants": [
        "TopLeft",
        "TopRight",
        "BottomLeft",
        "BottomRight"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ToggleItem",
      "path": "gpui_kit::controls::toggle_button::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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString",
        "is_disabled() -> bool"
      ]
    },
    {
      "name": "ToggleSelection",
      "path": "gpui_kit::controls::toggle_button::ToggleSelection",
      "summary": "How many of a group's toggles may be in at once.",
      "variants": [
        "AtMostOne",
        "Any"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Tone",
      "path": "gpui_kit::display::badge::Tone",
      "summary": "The severity a status surface claims.",
      "variants": [
        "Neutral",
        "Accent",
        "Success",
        "Warning",
        "Danger",
        "Info"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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",
        "all_lines() -> Self"
      ],
      "commands": [],
      "queries": [
        "text() -> &SharedString",
        "line_count() -> usize",
        "shown_line_count() -> usize",
        "is_truncated() -> bool",
        "remaining_line_count() -> usize",
        "shape(cx: &App) -> SharedString"
      ]
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str",
        "reason() -> Option<&SharedString>"
      ]
    },
    {
      "name": "ToolFamily",
      "path": "gpui_kit::agent::ToolFamily",
      "summary": "The family of work one tool performs.",
      "variants": [
        "Read",
        "Network",
        "Shell",
        "Edit",
        "External"
      ],
      "construct": [],
      "options": [
        "as_str() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "ToolOutput",
      "path": "gpui_kit::agent::ToolOutput",
      "summary": "What a tool that ran to completion gave back.",
      "variants": [
        "Body",
        "Silent"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString",
        "label() -> &SharedString"
      ]
    },
    {
      "name": "TooltipMode",
      "path": "gpui_kit::display::chart::cartesian::TooltipMode",
      "summary": "",
      "variants": [
        "Point",
        "SharedAxis"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "TraceSpan",
      "path": "gpui_kit::display::trace::TraceSpan",
      "summary": "One already-timed interval on a unit axis.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>, start: f32, end: f32) -> Self"
      ],
      "options": [
        "depth(depth: u32) -> Self",
        "state(state: SpanState) -> Self",
        "detail(detail: impl Into<SharedString>) -> Self",
        "duration(duration: impl Into<SharedString>) -> Self",
        "time(start_ms: f64, end_ms: f64) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "TrackStep",
      "path": "gpui_kit::content::TrackStep",
      "summary": "Which way a previous or next control steps.",
      "variants": [
        "Previous",
        "Next"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "TransferItem",
      "path": "gpui_kit::controls::transfer_list::TransferItem",
      "summary": "An item in one side of a transfer list.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "disabled(disabled: bool) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "TransferListEvent",
      "path": "gpui_kit::controls::transfer_list::TransferListEvent",
      "summary": "What a transfer list reports. The caller performs the actual assignment.",
      "variants": [
        "ToggleSource",
        "ToggleTarget",
        "MoveToTarget",
        "MoveToSource",
        "QueryChanged"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "TransformError",
      "path": "gpui_kit::display::chart::data::transform::TransformError",
      "summary": "",
      "variants": [
        "DuplicateIdentity",
        "InvalidPoint",
        "InconsistentGroup",
        "InvalidAggregate",
        "InvalidBins",
        "InvalidWindow",
        "Overflow"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "TransformedData",
      "path": "gpui_kit::display::chart::data::transform::TransformedData",
      "summary": "Exact original IDs, values and wording remain available through membership even if a downstream source collection is replaced or reordered.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [
        "set(target: T) where T: PartialEq,",
        "release(target: T, velocity: f32)",
        "snap(target: T)",
        "advance(delta: Duration)",
        "animate(window: &mut Window, cx: &mut App) -> T"
      ],
      "queries": [
        "target() -> T",
        "value() -> T",
        "is_animating() -> bool"
      ]
    },
    {
      "name": "TranslationPack",
      "path": "gpui_kit::strings::TranslationPack",
      "summary": "Complete, bundled translations of Kit-owned labels. Caller content is never translated. Install pack.strings() with cx.set_global, then apply any application-specific overrides through the existing Strings interface. Number/date adapters, search matching and layout direction stay caller-owned.",
      "variants": [
        "English",
        "SimplifiedChinese"
      ],
      "construct": [],
      "options": [
        "text(key: StringKey) -> &'static str",
        "strings() -> Strings"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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>"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "TransportEvent",
      "path": "gpui_kit::content::TransportEvent",
      "summary": "What a transport reports. It applies none of it.",
      "variants": [
        "PlayRequested",
        "PauseRequested",
        "SeekPreview",
        "SeekCancelled",
        "SeekRequested",
        "VolumeRequested",
        "MuteToggled",
        "SpeedRequested",
        "Stepped",
        "PresentationRequested"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "TreeGridRow",
      "path": "gpui_kit::data::TreeGridRow",
      "summary": "One already-visible hierarchy row, identified by stable business identity.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, level: u32) -> Self"
      ],
      "options": [
        "text(text: impl Into<SharedString>) -> Self",
        "cell(key: impl Into<SharedString>, cell: impl Into<Cell>) -> Self",
        "cells_with(render: impl Fn(&SharedString, &mut Window, &mut App) -> Cell + 'static) -> Self",
        "branch(expanded: bool) -> Self",
        "parent(id: impl Into<SharedString>) -> Self",
        "disabled(disabled: bool) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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",
        "branch(branch: BranchState) -> Self"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "UnavailableDotLottieAdapter",
      "path": "gpui_kit::effects::UnavailableDotLottieAdapter",
      "summary": "Explicit adapter used when no dotLottie runtime is linked or available.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "UnrenderableField",
      "path": "gpui_kit::structured::UnrenderableField",
      "summary": "A field that has to be filled in somewhere other than this form.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "Upload",
      "path": "gpui_kit::controls::upload_list::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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "UploadState",
      "path": "gpui_kit::controls::upload_list::UploadState",
      "summary": "Where one file has got to.",
      "variants": [
        "Queued",
        "Uploading",
        "Done",
        "Failed",
        "Cancelled",
        "Refused"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str",
        "is_settled() -> bool",
        "is_retryable() -> bool"
      ]
    },
    {
      "name": "ValidationState",
      "path": "gpui_kit::state::ValidationState",
      "summary": "What a caller currently knows about one validation target.",
      "variants": [
        "Pending",
        "Validating",
        "Invalid",
        "Valid"
      ],
      "construct": [
        "invalid(reason: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "reason() -> Option<&SharedString>"
      ]
    },
    {
      "name": "ValueAxis",
      "path": "gpui_kit::display::chart::data::ValueAxis",
      "summary": "Axis identity is shared by series, references and linked caller state.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [
        "sample(position: Point<Pixels>, at: Instant)",
        "clear()"
      ],
      "queries": [
        "velocity_at(now: Instant) -> Velocity"
      ]
    },
    {
      "name": "Viewed",
      "path": "gpui_kit::data::Viewed",
      "summary": "What a surface drawn over a list can see of it.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "ViewportState",
      "path": "gpui_kit::content::ViewportState",
      "summary": "What is behind the panel right now.",
      "variants": [
        "Loading",
        "Empty",
        "Unavailable",
        "Error",
        "Ready"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "value() -> &'static str",
        "name() -> &'static str"
      ]
    },
    {
      "name": "VisualCue",
      "path": "gpui_kit::effects::VisualCue",
      "summary": "A product-neutral statement of what changed visually.",
      "variants": [
        "Arrival",
        "Delegation",
        "Handoff",
        "Aggregation",
        "Success",
        "Reward",
        "Attention",
        "Refusal",
        "Failure"
      ],
      "construct": [],
      "options": [
        "importance() -> EffectImportance"
      ],
      "commands": [],
      "queries": []
    },
    {
      "name": "VisualEventId",
      "path": "gpui_kit::agent::VisualEventId",
      "summary": "The stable identity of a transient visual event.",
      "variants": [],
      "construct": [
        "new(value: impl Into<SharedString>) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &str"
      ]
    },
    {
      "name": "VoiceField",
      "path": "gpui_kit::agent::VoiceField",
      "summary": "Which normalized voice field failed validation.",
      "variants": [
        "Level",
        "Envelope"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "VoiceSample",
      "path": "gpui_kit::agent::VoiceSample",
      "summary": "One bounded, caller-sampled voice observation.",
      "variants": [],
      "construct": [
        "new(state: VoiceState, level: f32, envelope: f32) -> Result<Self, VoiceSampleError>",
        "silent() -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": [
        "state() -> &VoiceState",
        "level() -> f32",
        "envelope() -> f32"
      ]
    },
    {
      "name": "VoiceSampleError",
      "path": "gpui_kit::agent::VoiceSampleError",
      "summary": "A rejected voice sample. Invalid values are never clamped into plausible audio facts.",
      "variants": [],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "VoiceSampleErrorKind",
      "path": "gpui_kit::agent::VoiceSampleErrorKind",
      "summary": "Why a voice sample was rejected.",
      "variants": [
        "NonFinite",
        "OutOfRange"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "name": "VoiceState",
      "path": "gpui_kit::agent::VoiceState",
      "summary": "Whether a host-observed voice channel is active.",
      "variants": [
        "Silent",
        "Listening",
        "Speaking",
        "Unavailable"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "WaitReason",
      "path": "gpui_kit::agent::WaitReason",
      "summary": "Why an agent or task is waiting rather than making progress.",
      "variants": [
        "UserInput",
        "Approval",
        "Dependency",
        "RemoteAgent",
        "RateLimit",
        "Custom"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str"
      ]
    },
    {
      "name": "WeightedValue",
      "path": "gpui_kit::display::specialized::WeightedValue",
      "summary": "A stable identity, human label, and finite raw quantity.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>, value: f64) -> Self"
      ],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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": [],
      "commands": [],
      "queries": [
        "as_str() -> &'static str"
      ]
    },
    {
      "name": "WizardLayout",
      "path": "gpui_kit::navigation::WizardLayout",
      "summary": "Which way the steps are laid out.",
      "variants": [
        "Horizontal",
        "Vertical"
      ],
      "construct": [],
      "options": [],
      "commands": [],
      "queries": []
    },
    {
      "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"
      ],
      "commands": [],
      "queries": [
        "id() -> &SharedString"
      ]
    }
  ],
  "themes": [
    {
      "name": "catppuccin-latte",
      "path": "crates/gpui-kit-tokens/tokens/catppuccin-latte.json",
      "tokens": {
        "$schema": "./schema.json",
        "meta": {
          "id": "catppuccin-latte",
          "name": "Catppuccin Latte",
          "appearance": "light"
        },
        "color": {
          "onMediaForeground": "#ffffff",
          "onMediaBackground": "#171717",
          "onMediaHairline": "#ffffff33",
          "palette": {
            "neutral": {
              "0": "#000000",
              "10": "#dce0e8",
              "25": "#e6e9ef",
              "50": "#eff1f5",
              "100": "#f7f8fc",
              "150": "#ffffff",
              "200": "#ffffff",
              "300": "#ccd0da",
              "500": "#9ca0b0",
              "600": "#666983",
              "700": "#595c73",
              "800": "#4c4f69",
              "850": "#232537",
              "900": "#ffffff",
              "ink": "#ffffff"
            },
            "indigo": {
              "50": "#edf2ff",
              "100": "#dbe4ff",
              "200": "#bac8ff",
              "300": "#91a7ff",
              "400": "#4952c9",
              "500": "#5c7cfa",
              "600": "#363fa8",
              "700": "#4263eb",
              "800": "#3b5bdb",
              "900": "#364fc7"
            },
            "red": {
              "50": "#fff5f5",
              "100": "#ffe3e3",
              "200": "#ffc9c9",
              "300": "#ffa8a8",
              "400": "#d5322f",
              "500": "#ff6b6b",
              "600": "#fa5252",
              "700": "#f03e3e",
              "800": "#e03131",
              "900": "#c92a2a"
            },
            "amber": {
              "500": "#a76a00"
            },
            "green": {
              "50": "#ebfbee",
              "100": "#d3f9d8",
              "200": "#b2f2bb",
              "300": "#8ce99a",
              "400": "#69db7c",
              "500": "#237a48",
              "600": "#40c057",
              "700": "#37b24f",
              "800": "#2f9e44",
              "900": "#2b8a3e"
            },
            "cyan": {
              "50": "#e3fafc",
              "100": "#c5f6fa",
              "200": "#99e9f2",
              "300": "#66d9e8",
              "400": "#2a6f8f",
              "500": "#22b8cf",
              "600": "#15aabf",
              "700": "#1098ad",
              "800": "#0c8599",
              "900": "#0b7285"
            },
            "syntax": {
              "keyword": "#8032e6",
              "string": "#2a7019",
              "number": "#9c4a04",
              "inline": "#4249b5",
              "inlineWash": "#7287fd"
            },
            "agent": {
              "read": "#096076",
              "network": "#4b53c9",
              "shell": "#7d4e08",
              "edit": "#0f6a64",
              "external": "#7b3fd0"
            },
            "terminal": {
              "background": "#eff1f5",
              "wash": "#000000"
            },
            "ansi": {
              "0": "#6c6f85",
              "1": "#d20f39",
              "2": "#3a9126",
              "3": "#b0740a",
              "4": "#1e66f5",
              "5": "#c73da3",
              "6": "#179299",
              "7": "#5c5f77",
              "8": "#9ca0b0",
              "9": "#d20f39",
              "10": "#3a9126",
              "11": "#b0740a",
              "12": "#1e66f5",
              "13": "#c73da3",
              "14": "#179299",
              "15": "#4c4f69"
            },
            "gray": {
              "50": "#f8f9fa",
              "100": "#f1f3f5",
              "200": "#e9ecef",
              "300": "#dee2e6",
              "400": "#ced4da",
              "500": "#adb5bd",
              "600": "#868e96",
              "700": "#495057",
              "800": "#343a40",
              "900": "#212529"
            },
            "pink": {
              "50": "#fff0f6",
              "100": "#ffdeeb",
              "200": "#fcc2d7",
              "300": "#faa2c1",
              "400": "#f783ac",
              "500": "#f06595",
              "600": "#e64980",
              "700": "#d6336c",
              "800": "#c2255c",
              "900": "#a61e4d"
            },
            "grape": {
              "50": "#f8f0fc",
              "100": "#f3d9fa",
              "200": "#eebefa",
              "300": "#e599f7",
              "400": "#da77f2",
              "500": "#cc5de8",
              "600": "#be4bdb",
              "700": "#ae3ec9",
              "800": "#9c36b5",
              "900": "#862e9c"
            },
            "violet": {
              "50": "#f3f0ff",
              "100": "#e5dbff",
              "200": "#d0bfff",
              "300": "#b197fc",
              "400": "#9775fa",
              "500": "#845ef7",
              "600": "#7950f2",
              "700": "#7048e8",
              "800": "#6741d9",
              "900": "#5f3dc4"
            },
            "blue": {
              "50": "#e7f5ff",
              "100": "#d0ebff",
              "200": "#a5d8ff",
              "300": "#74c0fc",
              "400": "#4dabf7",
              "500": "#339af0",
              "600": "#228be6",
              "700": "#1c7ed6",
              "800": "#1971c2",
              "900": "#1864ab"
            },
            "teal": {
              "50": "#e6fcf5",
              "100": "#c3fae8",
              "200": "#96f2d7",
              "300": "#63e6be",
              "400": "#38d9a9",
              "500": "#20c997",
              "600": "#12b886",
              "700": "#0ca678",
              "800": "#099268",
              "900": "#087f5b"
            },
            "lime": {
              "50": "#f4fce3",
              "100": "#e9fac8",
              "200": "#d8f5a2",
              "300": "#c0eb75",
              "400": "#a9e34b",
              "500": "#94d82d",
              "600": "#82c91e",
              "700": "#74b816",
              "800": "#66a80f",
              "900": "#5c940d"
            },
            "yellow": {
              "50": "#fff9db",
              "100": "#fff3bf",
              "200": "#ffec99",
              "300": "#ffe066",
              "400": "#ffd43b",
              "500": "#fcc419",
              "600": "#fab005",
              "700": "#f59f00",
              "800": "#f08c00",
              "900": "#e67700"
            },
            "orange": {
              "50": "#fff4e6",
              "100": "#ffe8cc",
              "200": "#ffd8a8",
              "300": "#ffc078",
              "400": "#ffa94d",
              "500": "#ff922b",
              "600": "#fd7e14",
              "700": "#f76707",
              "800": "#e8590c",
              "900": "#d9480f"
            },
            "series": {
              "1": "#6174d3",
              "2": "#9256ae",
              "3": "#c05279",
              "4": "#c15c24",
              "5": "#8c7000",
              "6": "#599532",
              "7": "#008a76",
              "8": "#0091bc"
            }
          },
          "paletteSteps": {
            "filled": [
              "600",
              "500",
              "400"
            ],
            "hover": [
              "700",
              "600",
              "500"
            ],
            "active": [
              "800",
              "700",
              "600"
            ],
            "readableDark": [
              "300",
              "200",
              "400"
            ],
            "readableLight": [
              "700",
              "800",
              "600"
            ]
          },
          "surface": {
            "backdrop": "{neutral.10}",
            "canvas": "{neutral.50}",
            "sunken": "{neutral.25}",
            "panel": "{neutral.100}",
            "raised": "{neutral.200}",
            "overlay": "{neutral.150}",
            "scrim": "{neutral.ink}",
            "control": "#f7f8fc",
            "controlHover": "#ffffff",
            "controlPressed": "#eff1f5"
          },
          "text": {
            "primary": "{neutral.800}",
            "muted": "{neutral.700}",
            "faint": "{neutral.600}",
            "placeholder": "#6f7289",
            "disabled": "#797c92",
            "onAccent": "{neutral.ink}",
            "onPrimaryFill": "{neutral.ink}"
          },
          "interactive": {
            "hover": "{neutral.850}/0f",
            "active": "{neutral.850}/1c",
            "selected": "{neutral.850}/14",
            "hairline": "{neutral.850}/1a",
            "hairlineStrong": "{neutral.850}/8c",
            "track": "{neutral.850}/8c",
            "divider": "{neutral.850}/14",
            "controlHairline": "#00000024",
            "controlHighlight": "#ffffffcc",
            "focus": "#1e66f5",
            "primaryFill": "{neutral.800}",
            "whiteFill": "#ffffff",
            "whiteFillHover": "#f5f5f5",
            "whiteFillActive": "#ebebeb"
          },
          "semantic": {
            "accent": "#1e66f5",
            "accentStrong": "#8032e6",
            "danger": "#d20f39",
            "warning": "#9c6608",
            "success": "#34851f",
            "info": "#12797f"
          },
          "sequence": {
            "categorical": [
              "{series.1}",
              "{series.2}",
              "{series.3}",
              "{series.4}",
              "{series.5}",
              "{series.6}",
              "{series.7}",
              "{series.8}"
            ]
          },
          "node": {
            "headerWash": "{neutral.850}/0f",
            "portIdle": "{neutral.500}",
            "portHover": "#1e66f5",
            "portConnected": "#8032e6",
            "edge": "{neutral.500}",
            "edgeTarget": "#8032e6",
            "edgeActive": "#1e66f5",
            "edgeFlowHighlight": "#8032e6",
            "edgeFeedback": "#9c6608b8",
            "edgeFeedbackActive": "#9c6608",
            "auraActive": "#1e66f5",
            "auraSuccess": "#34851f",
            "auraAttention": "#9c6608",
            "auraDanger": "#d20f39",
            "labelWash": "{neutral.150}/f0",
            "grid": "{neutral.850}/14",
            "gridStrong": "{neutral.850}/29",
            "gridAxis": "{neutral.850}/4d"
          },
          "agent": {
            "read": "{agent.read}",
            "network": "{agent.network}",
            "shell": "{agent.shell}",
            "edit": "{agent.edit}",
            "external": "{agent.external}",
            "evidenceWash": "{neutral.850}/08"
          },
          "loader": {
            "mark": "#1e66f5",
            "track": "{neutral.850}/1f",
            "placeholder": "{neutral.850}/17",
            "sheen": "{neutral.900}/8c"
          },
          "syntax": {
            "keyword": "{syntax.keyword}",
            "string": "{syntax.string}",
            "comment": "{neutral.600}",
            "number": "{syntax.number}",
            "inline": "{syntax.inline}",
            "inlineWash": "{syntax.inlineWash}/1f",
            "added": "#2a7019",
            "addedWash": "#2a701924",
            "removed": "#d20f39",
            "removedWash": "#d20f3924"
          },
          "terminal": {
            "background": "{terminal.background}",
            "selection": "{terminal.wash}/29",
            "ansi": [
              "{ansi.0}",
              "{ansi.1}",
              "{ansi.2}",
              "{ansi.3}",
              "{ansi.4}",
              "{ansi.5}",
              "{ansi.6}",
              "{ansi.7}",
              "{ansi.8}",
              "{ansi.9}",
              "{ansi.10}",
              "{ansi.11}",
              "{ansi.12}",
              "{ansi.13}",
              "{ansi.14}",
              "{ansi.15}"
            ]
          }
        },
        "space": {
          "xxs": 2,
          "xs": 4,
          "sm": 8,
          "md": 12,
          "lg": 16,
          "xl": 24,
          "xxl": 32
        },
        "measure": {
          "settingsLabel": 120,
          "readableWidth": 360,
          "dialogWidth": 360,
          "menuMinWidth": 200,
          "compactMenuMinWidth": 180,
          "menuMaxHeight": 320,
          "compactMenuMaxHeight": 240,
          "standaloneIcon": 20,
          "scrollbarTrack": 10,
          "scrollbarThumb": 6,
          "scrollbarMinThumb": 24,
          "caretWidth": 1.5,
          "textDecorationWidth": 1,
          "progressTrackHeight": 4,
          "sliderTrackHeight": 6,
          "sliderVerticalHeight": 160,
          "containerSmall": 640,
          "containerMedium": 768,
          "containerLarge": 1024,
          "containerExtraLarge": 1280,
          "compactOverlayWidth": 320,
          "mediaViewerHeight": 320,
          "timelineRailWidth": 16,
          "statusMark": 7,
          "nodeEdgeWidth": 2,
          "nodeEdgeCorner": 18,
          "nodeEdgeLead": 36,
          "nodeEdgeCorridor": 48,
          "nodeEdgeLane": 16,
          "nodePort": 20,
          "nodeProgress": 3
        },
        "radius": {
          "small": 5,
          "control": 8,
          "card": 12,
          "dialog": 16,
          "bubble": 16,
          "pill": 999
        },
        "control": {
          "xs": {
            "height": 20,
            "paddingX": 6,
            "gap": 4,
            "fontSize": 11,
            "iconSize": 12
          },
          "sm": {
            "height": 24,
            "paddingX": 8,
            "gap": 5,
            "fontSize": 12,
            "iconSize": 14
          },
          "md": {
            "height": 28,
            "paddingX": 12,
            "gap": 6,
            "fontSize": 13,
            "iconSize": 15
          },
          "lg": {
            "height": 34,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 14,
            "iconSize": 17
          },
          "touch": {
            "height": 48,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 16,
            "iconSize": 20
          }
        },
        "border": {
          "hairline": 1,
          "thick": 2
        },
        "opacity": {
          "disabled": 0.75,
          "muted": 0.68,
          "scrim": 0.35
        },
        "elevation": {
          "flat": [],
          "raised": [
            {
              "y": 1,
              "blur": 3,
              "spread": 0,
              "color": "{neutral.0}/0c"
            },
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/14"
            }
          ],
          "overlay": [
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/10"
            },
            {
              "y": 8,
              "blur": 24,
              "spread": -4,
              "color": "{neutral.0}/1a"
            }
          ],
          "modal": [
            {
              "y": 4,
              "blur": 12,
              "spread": -2,
              "color": "{neutral.0}/16"
            },
            {
              "y": 16,
              "blur": 48,
              "spread": -8,
              "color": "{neutral.0}/24"
            }
          ]
        },
        "zIndex": {
          "content": 0,
          "sticky": 100,
          "dock": 200,
          "popover": 300,
          "tooltip": 400,
          "modal": 500,
          "toast": 600
        },
        "density": {
          "compact": {
            "space": 0.75,
            "control": 0.86,
            "font": 0.94
          },
          "comfortable": {
            "space": 1,
            "control": 1,
            "font": 1
          }
        },
        "typography": {
          "sans": {
            "family": "Geist",
            "fallbackMacos": "Helvetica",
            "fallbackWindows": "Segoe UI",
            "fallbackLinux": "DejaVu Sans"
          },
          "mono": {
            "family": "Geist Mono",
            "fallbackMacos": "Menlo",
            "fallbackWindows": "Consolas",
            "fallbackLinux": "DejaVu Sans Mono"
          },
          "readoutScale": 1.6,
          "scale": {
            "caption": {
              "size": 10.5,
              "lineHeight": 14,
              "weight": 400
            },
            "label": {
              "size": 12,
              "lineHeight": 16,
              "weight": 500
            },
            "body": {
              "size": 13,
              "lineHeight": 19,
              "weight": 400
            },
            "strong": {
              "size": 13,
              "lineHeight": 19,
              "weight": 600
            },
            "subtitle": {
              "size": 14,
              "lineHeight": 20,
              "weight": 600
            },
            "title": {
              "size": 16,
              "lineHeight": 22,
              "weight": 600
            },
            "code": {
              "size": 12,
              "lineHeight": 18,
              "weight": 400
            }
          }
        },
        "motion": {
          "durationMs": {
            "instant": 90,
            "quick": 150,
            "exit": 120,
            "menu": 140,
            "dialog": 180,
            "resize": 200,
            "entrance": 500,
            "slow": 320,
            "staggerStep": 16,
            "microBounce": 360,
            "microWobble": 280,
            "microPop": 240,
            "spin": 900,
            "pulse": 2400,
            "nodeAuraPulse": 2800,
            "nodeFlow": 1800,
            "shimmer": 1400,
            "toast": 6000,
            "hoverCardOpen": 400,
            "hoverCardGrace": 300,
            "feedback": 900,
            "celebration": 1600,
            "confirmation": 1600
          },
          "easing": {
            "linear": [
              0,
              0,
              1,
              1
            ],
            "standard": [
              0.4,
              0,
              0.2,
              1
            ],
            "easeIn": [
              0.42,
              0,
              1,
              1
            ],
            "easeOut": [
              0,
              0,
              0.58,
              1
            ],
            "easeInOut": [
              0.42,
              0,
              0.58,
              1
            ],
            "emphasized": [
              0.2,
              0,
              0,
              1
            ],
            "overshoot": [
              0.34,
              1.56,
              0.64,
              1
            ],
            "exit": [
              0.4,
              0,
              1,
              1
            ],
            "settle": [
              0.16,
              1,
              0.3,
              1
            ]
          },
          "spring": {
            "snappy": {
              "stiffness": 380,
              "damping": 30,
              "mass": 1
            },
            "smooth": {
              "stiffness": 180,
              "damping": 26,
              "mass": 1
            },
            "bouncy": {
              "stiffness": 260,
              "damping": 16,
              "mass": 1
            },
            "grab": {
              "stiffness": 520,
              "damping": 42,
              "mass": 1
            }
          },
          "staggerMaxItems": 8,
          "pressOffsetPx": 1,
          "hoverLiftPx": 1,
          "flickVelocityPxPerSec": 420,
          "rubberBandTension": 0.55
        },
        "effect": {
          "fieldFocus": "ring",
          "edgeFadeBand": 20,
          "focusRingWidth": 2,
          "focusRingAlpha": 1,
          "glowAlpha": 0.18,
          "glowBlur": 12,
          "glowSpread": -5,
          "glassAlpha": 0.78,
          "glassFrostBlur": 24,
          "glassSaturation": 1.5,
          "glassWash": 0.55,
          "glassBevelRatio": 0.225,
          "glassBevelMin": 8,
          "glassBevelMax": 36,
          "glassDimming": 0.35,
          "glassFlipMaxExtent": 72,
          "glassShadowMin": 0.8,
          "glassShadowMax": 1.5,
          "glassRefraction": 0.34,
          "glassThickness": 0,
          "glassRefractiveIndex": 1.5,
          "glassBackdropDepth": 0,
          "glassDispersion": 0.005,
          "glassSpecular": 0.06,
          "glassTransmissionGain": 1.042,
          "glassOpticalLift": 0.075,
          "glassHairline": 1,
          "glassSpecularSharpness": 12,
          "glassLightAngle": 0.7853982,
          "glassMergeDistance": 28,
          "glassContrastFlipLow": 0.42,
          "glassContrastFlipHigh": 0.58,
          "glassPressDepth": 1.5,
          "glassPressScale": 1.014,
          "scrollEdgeBand": 28,
          "scrollEdgeBlur": 16,
          "sheenAlpha": 0.05,
          "areaWashAlpha": 0.16,
          "headerTintAlpha": 0.14,
          "nodeActiveWashAlpha": 0.14,
          "nodeActiveStrokeAlpha": 0.72,
          "nodeTrafficAlpha": 0.82,
          "nodePreviewAlpha": 0.88,
          "nodeMinimapAlpha": 0.7,
          "nodeOverviewVeilAlpha": 0.55,
          "nodeAuraRestingAlpha": 0.72,
          "nodeAuraPulseFloorAlpha": 0.54,
          "nodeAuraPulsePeakAlpha": 1,
          "nodeAuraSettlePeakAlpha": 1,
          "nodeAuraSettleExpansion": 0.65,
          "nodeEdgeHoverWidthScale": 1.8,
          "nodeEdgeSelectedWidthScale": 2.4,
          "nodeEdgeGlowWidthScale": 5.5,
          "railWidth": 3,
          "semanticWashFaintAlpha": 0.06,
          "semanticWashAlpha": 0.1,
          "semanticWashStrongAlpha": 0.16,
          "semanticBorderAlpha": 0.4,
          "accentBorderAlpha": 0.55,
          "accentBorderStrongAlpha": 0.7,
          "subtleHoverAlpha": 0.3,
          "softContrastAlpha": 0.18,
          "contrastTintAlpha": 0.28,
          "trackRestingAlpha": 0.55,
          "contentVeilAlpha": 0.88,
          "criticalFillAlpha": 0.84,
          "criticalInactiveAlpha": 0.1,
          "variantLightAlpha": 0.15,
          "variantLightHoverAlpha": 0.22,
          "variantLightActiveAlpha": 0.28,
          "variantSubtleHoverAlpha": 0.12,
          "variantSubtleActiveAlpha": 0.18,
          "primaryHoverOpacity": 0.9,
          "customColorReadableDarkFloor": 0.72,
          "customColorReadableLightCeiling": 0.4,
          "customColorHoverLightnessDelta": 0.05,
          "customColorActiveLightnessDelta": 0.1
        }
      }
    },
    {
      "name": "catppuccin-mocha",
      "path": "crates/gpui-kit-tokens/tokens/catppuccin-mocha.json",
      "tokens": {
        "$schema": "./schema.json",
        "meta": {
          "id": "catppuccin-mocha",
          "name": "Catppuccin Mocha",
          "appearance": "dark"
        },
        "color": {
          "onMediaForeground": "#ffffff",
          "onMediaBackground": "#171717",
          "onMediaHairline": "#ffffff33",
          "palette": {
            "neutral": {
              "0": "#000000",
              "10": "#11111b",
              "25": "#181825",
              "50": "#1e1e2e",
              "100": "#262636",
              "150": "#2c2d3e",
              "200": "#313244",
              "300": "#45475a",
              "500": "#6c7086",
              "600": "#9399b2",
              "700": "#a6adc8",
              "800": "#cdd6f4",
              "850": "#cdd6f4",
              "900": "#ffffff",
              "ink": "#11111b"
            },
            "indigo": {
              "50": "#edf2ff",
              "100": "#dbe4ff",
              "200": "#bac8ff",
              "300": "#91a7ff",
              "400": "#7c86ff",
              "500": "#5c7cfa",
              "600": "#5865f2",
              "700": "#4263eb",
              "800": "#3b5bdb",
              "900": "#364fc7"
            },
            "red": {
              "50": "#fff5f5",
              "100": "#ffe3e3",
              "200": "#ffc9c9",
              "300": "#ffa8a8",
              "400": "#ff6467",
              "500": "#ff6b6b",
              "600": "#fa5252",
              "700": "#f03e3e",
              "800": "#e03131",
              "900": "#c92a2a"
            },
            "amber": {
              "500": "#ffb900"
            },
            "green": {
              "50": "#ebfbee",
              "100": "#d3f9d8",
              "200": "#b2f2bb",
              "300": "#8ce99a",
              "400": "#69db7c",
              "500": "#57c47f",
              "600": "#40c057",
              "700": "#37b24f",
              "800": "#2f9e44",
              "900": "#2b8a3e"
            },
            "cyan": {
              "50": "#e3fafc",
              "100": "#c5f6fa",
              "200": "#99e9f2",
              "300": "#66d9e8",
              "400": "#7fb3cf",
              "500": "#22b8cf",
              "600": "#15aabf",
              "700": "#1098ad",
              "800": "#0c8599",
              "900": "#0b7285"
            },
            "syntax": {
              "keyword": "#cba6f7",
              "string": "#a6e3a1",
              "number": "#fab387",
              "inline": "#f5c2e7",
              "inlineWash": "#cba6f7"
            },
            "agent": {
              "read": "#74c7ec",
              "network": "#b4befe",
              "shell": "#fab387",
              "edit": "#94e2d5",
              "external": "#cba6f7"
            },
            "terminal": {
              "background": "#11111b",
              "wash": "#ffffff"
            },
            "ansi": {
              "0": "#45475a",
              "1": "#f38ba8",
              "2": "#a6e3a1",
              "3": "#f9e2af",
              "4": "#89b4fa",
              "5": "#f5c2e7",
              "6": "#94e2d5",
              "7": "#bac2de",
              "8": "#585b70",
              "9": "#f38ba8",
              "10": "#a6e3a1",
              "11": "#f9e2af",
              "12": "#89b4fa",
              "13": "#f5c2e7",
              "14": "#94e2d5",
              "15": "#a6adc8"
            },
            "gray": {
              "50": "#f8f9fa",
              "100": "#f1f3f5",
              "200": "#e9ecef",
              "300": "#dee2e6",
              "400": "#ced4da",
              "500": "#adb5bd",
              "600": "#868e96",
              "700": "#495057",
              "800": "#343a40",
              "900": "#212529"
            },
            "pink": {
              "50": "#fff0f6",
              "100": "#ffdeeb",
              "200": "#fcc2d7",
              "300": "#faa2c1",
              "400": "#f783ac",
              "500": "#f06595",
              "600": "#e64980",
              "700": "#d6336c",
              "800": "#c2255c",
              "900": "#a61e4d"
            },
            "grape": {
              "50": "#f8f0fc",
              "100": "#f3d9fa",
              "200": "#eebefa",
              "300": "#e599f7",
              "400": "#da77f2",
              "500": "#cc5de8",
              "600": "#be4bdb",
              "700": "#ae3ec9",
              "800": "#9c36b5",
              "900": "#862e9c"
            },
            "violet": {
              "50": "#f3f0ff",
              "100": "#e5dbff",
              "200": "#d0bfff",
              "300": "#b197fc",
              "400": "#9775fa",
              "500": "#845ef7",
              "600": "#7950f2",
              "700": "#7048e8",
              "800": "#6741d9",
              "900": "#5f3dc4"
            },
            "blue": {
              "50": "#e7f5ff",
              "100": "#d0ebff",
              "200": "#a5d8ff",
              "300": "#74c0fc",
              "400": "#4dabf7",
              "500": "#339af0",
              "600": "#228be6",
              "700": "#1c7ed6",
              "800": "#1971c2",
              "900": "#1864ab"
            },
            "teal": {
              "50": "#e6fcf5",
              "100": "#c3fae8",
              "200": "#96f2d7",
              "300": "#63e6be",
              "400": "#38d9a9",
              "500": "#20c997",
              "600": "#12b886",
              "700": "#0ca678",
              "800": "#099268",
              "900": "#087f5b"
            },
            "lime": {
              "50": "#f4fce3",
              "100": "#e9fac8",
              "200": "#d8f5a2",
              "300": "#c0eb75",
              "400": "#a9e34b",
              "500": "#94d82d",
              "600": "#82c91e",
              "700": "#74b816",
              "800": "#66a80f",
              "900": "#5c940d"
            },
            "yellow": {
              "50": "#fff9db",
              "100": "#fff3bf",
              "200": "#ffec99",
              "300": "#ffe066",
              "400": "#ffd43b",
              "500": "#fcc419",
              "600": "#fab005",
              "700": "#f59f00",
              "800": "#f08c00",
              "900": "#e67700"
            },
            "orange": {
              "50": "#fff4e6",
              "100": "#ffe8cc",
              "200": "#ffd8a8",
              "300": "#ffc078",
              "400": "#ffa94d",
              "500": "#ff922b",
              "600": "#fd7e14",
              "700": "#f76707",
              "800": "#e8590c",
              "900": "#d9480f"
            },
            "series": {
              "1": "#868dff",
              "2": "#ec9aff",
              "3": "#ee699c",
              "4": "#ed771f",
              "5": "#e1b800",
              "6": "#6bb945",
              "7": "#00dec2",
              "8": "#00accc"
            }
          },
          "paletteSteps": {
            "filled": [
              "600",
              "500",
              "400"
            ],
            "hover": [
              "700",
              "600",
              "500"
            ],
            "active": [
              "800",
              "700",
              "600"
            ],
            "readableDark": [
              "300",
              "200",
              "400"
            ],
            "readableLight": [
              "700",
              "800",
              "600"
            ]
          },
          "surface": {
            "backdrop": "{neutral.10}",
            "canvas": "{neutral.50}",
            "sunken": "{neutral.25}",
            "panel": "{neutral.100}",
            "raised": "{neutral.200}",
            "overlay": "{neutral.150}",
            "scrim": "#272b45",
            "control": "#333446",
            "controlHover": "#353648",
            "controlPressed": "#2c2d3e"
          },
          "text": {
            "primary": "{neutral.800}",
            "muted": "{neutral.700}",
            "faint": "{neutral.600}",
            "placeholder": "#868cab",
            "disabled": "#797fa0",
            "onAccent": "{neutral.ink}",
            "onPrimaryFill": "{neutral.ink}"
          },
          "interactive": {
            "hover": "{neutral.850}/14",
            "active": "{neutral.850}/24",
            "selected": "{neutral.850}/1c",
            "hairline": "{neutral.900}/14",
            "hairlineStrong": "{neutral.900}/66",
            "track": "{neutral.900}/66",
            "divider": "{neutral.900}/10",
            "controlHairline": "#ffffff1a",
            "controlHighlight": "#ffffff14",
            "focus": "#89b4fa",
            "primaryFill": "{neutral.800}",
            "whiteFill": "#ffffff",
            "whiteFillHover": "#f5f5f5",
            "whiteFillActive": "#ebebeb"
          },
          "semantic": {
            "accent": "#89b4fa",
            "accentStrong": "#b4befe",
            "danger": "#f38ba8",
            "warning": "#f9e2af",
            "success": "#a6e3a1",
            "info": "#89dceb"
          },
          "sequence": {
            "categorical": [
              "{series.1}",
              "{series.2}",
              "{series.3}",
              "{series.4}",
              "{series.5}",
              "{series.6}",
              "{series.7}",
              "{series.8}"
            ]
          },
          "node": {
            "headerWash": "{neutral.900}/0f",
            "portIdle": "{neutral.500}",
            "portHover": "#89b4fa",
            "portConnected": "#b4befe",
            "edge": "{neutral.500}",
            "edgeTarget": "#b4befe",
            "edgeActive": "#89b4fa",
            "edgeFlowHighlight": "#b4befe",
            "edgeFeedback": "#f9e2afb8",
            "edgeFeedbackActive": "#f9e2af",
            "auraActive": "#89b4fa",
            "auraSuccess": "#a6e3a1",
            "auraAttention": "#f9e2af",
            "auraDanger": "#f38ba8",
            "labelWash": "{neutral.100}/f0",
            "grid": "{neutral.900}/14",
            "gridStrong": "{neutral.900}/29",
            "gridAxis": "{neutral.900}/4d"
          },
          "agent": {
            "read": "{agent.read}",
            "network": "{agent.network}",
            "shell": "{agent.shell}",
            "edit": "{agent.edit}",
            "external": "{agent.external}",
            "evidenceWash": "{neutral.900}/0a"
          },
          "loader": {
            "mark": "#89b4fa",
            "track": "{neutral.900}/24",
            "placeholder": "{neutral.900}/14",
            "sheen": "{neutral.900}/29"
          },
          "syntax": {
            "keyword": "{syntax.keyword}",
            "string": "{syntax.string}",
            "comment": "{neutral.600}",
            "number": "{syntax.number}",
            "inline": "{syntax.inline}",
            "inlineWash": "{syntax.inlineWash}/1f",
            "added": "#a6e3a1",
            "addedWash": "#a6e3a124",
            "removed": "#f38ba8",
            "removedWash": "#f38ba824"
          },
          "terminal": {
            "background": "{terminal.background}",
            "selection": "{terminal.wash}/38",
            "ansi": [
              "{ansi.0}",
              "{ansi.1}",
              "{ansi.2}",
              "{ansi.3}",
              "{ansi.4}",
              "{ansi.5}",
              "{ansi.6}",
              "{ansi.7}",
              "{ansi.8}",
              "{ansi.9}",
              "{ansi.10}",
              "{ansi.11}",
              "{ansi.12}",
              "{ansi.13}",
              "{ansi.14}",
              "{ansi.15}"
            ]
          }
        },
        "space": {
          "xxs": 2,
          "xs": 4,
          "sm": 8,
          "md": 12,
          "lg": 16,
          "xl": 24,
          "xxl": 32
        },
        "measure": {
          "settingsLabel": 120,
          "readableWidth": 360,
          "dialogWidth": 360,
          "menuMinWidth": 200,
          "compactMenuMinWidth": 180,
          "menuMaxHeight": 320,
          "compactMenuMaxHeight": 240,
          "standaloneIcon": 20,
          "scrollbarTrack": 10,
          "scrollbarThumb": 6,
          "scrollbarMinThumb": 24,
          "caretWidth": 1.5,
          "textDecorationWidth": 1,
          "progressTrackHeight": 4,
          "sliderTrackHeight": 6,
          "sliderVerticalHeight": 160,
          "containerSmall": 640,
          "containerMedium": 768,
          "containerLarge": 1024,
          "containerExtraLarge": 1280,
          "compactOverlayWidth": 320,
          "mediaViewerHeight": 320,
          "timelineRailWidth": 16,
          "statusMark": 7,
          "nodeEdgeWidth": 2,
          "nodeEdgeCorner": 18,
          "nodeEdgeLead": 36,
          "nodeEdgeCorridor": 48,
          "nodeEdgeLane": 16,
          "nodePort": 20,
          "nodeProgress": 3
        },
        "radius": {
          "small": 5,
          "control": 8,
          "card": 12,
          "dialog": 16,
          "bubble": 16,
          "pill": 999
        },
        "control": {
          "xs": {
            "height": 20,
            "paddingX": 6,
            "gap": 4,
            "fontSize": 11,
            "iconSize": 12
          },
          "sm": {
            "height": 24,
            "paddingX": 8,
            "gap": 5,
            "fontSize": 12,
            "iconSize": 14
          },
          "md": {
            "height": 28,
            "paddingX": 12,
            "gap": 6,
            "fontSize": 13,
            "iconSize": 15
          },
          "lg": {
            "height": 34,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 14,
            "iconSize": 17
          },
          "touch": {
            "height": 48,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 16,
            "iconSize": 20
          }
        },
        "border": {
          "hairline": 1,
          "thick": 2
        },
        "opacity": {
          "disabled": 0.62,
          "muted": 0.68,
          "scrim": 0.6
        },
        "elevation": {
          "flat": [],
          "raised": [
            {
              "y": 1,
              "blur": 3,
              "spread": 0,
              "color": "{neutral.0}/35"
            },
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/59"
            }
          ],
          "overlay": [
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/3d"
            },
            {
              "y": 8,
              "blur": 24,
              "spread": -4,
              "color": "{neutral.0}/66"
            }
          ],
          "modal": [
            {
              "y": 4,
              "blur": 12,
              "spread": -2,
              "color": "{neutral.0}/54"
            },
            {
              "y": 16,
              "blur": 48,
              "spread": -8,
              "color": "{neutral.0}/8c"
            }
          ]
        },
        "zIndex": {
          "content": 0,
          "sticky": 100,
          "dock": 200,
          "popover": 300,
          "tooltip": 400,
          "modal": 500,
          "toast": 600
        },
        "density": {
          "compact": {
            "space": 0.75,
            "control": 0.86,
            "font": 0.94
          },
          "comfortable": {
            "space": 1,
            "control": 1,
            "font": 1
          }
        },
        "typography": {
          "sans": {
            "family": "Geist",
            "fallbackMacos": "Helvetica",
            "fallbackWindows": "Segoe UI",
            "fallbackLinux": "DejaVu Sans"
          },
          "mono": {
            "family": "Geist Mono",
            "fallbackMacos": "Menlo",
            "fallbackWindows": "Consolas",
            "fallbackLinux": "DejaVu Sans Mono"
          },
          "readoutScale": 1.6,
          "scale": {
            "caption": {
              "size": 10.5,
              "lineHeight": 14,
              "weight": 400
            },
            "label": {
              "size": 12,
              "lineHeight": 16,
              "weight": 500
            },
            "body": {
              "size": 13,
              "lineHeight": 19,
              "weight": 400
            },
            "strong": {
              "size": 13,
              "lineHeight": 19,
              "weight": 600
            },
            "subtitle": {
              "size": 14,
              "lineHeight": 20,
              "weight": 600
            },
            "title": {
              "size": 16,
              "lineHeight": 22,
              "weight": 600
            },
            "code": {
              "size": 12,
              "lineHeight": 18,
              "weight": 400
            }
          }
        },
        "motion": {
          "durationMs": {
            "instant": 90,
            "quick": 150,
            "exit": 120,
            "menu": 140,
            "dialog": 180,
            "resize": 200,
            "entrance": 500,
            "slow": 320,
            "staggerStep": 16,
            "microBounce": 360,
            "microWobble": 280,
            "microPop": 240,
            "spin": 900,
            "pulse": 2400,
            "nodeAuraPulse": 2800,
            "nodeFlow": 1800,
            "shimmer": 1400,
            "toast": 6000,
            "hoverCardOpen": 400,
            "hoverCardGrace": 300,
            "feedback": 900,
            "celebration": 1600,
            "confirmation": 1600
          },
          "easing": {
            "linear": [
              0,
              0,
              1,
              1
            ],
            "standard": [
              0.4,
              0,
              0.2,
              1
            ],
            "easeIn": [
              0.42,
              0,
              1,
              1
            ],
            "easeOut": [
              0,
              0,
              0.58,
              1
            ],
            "easeInOut": [
              0.42,
              0,
              0.58,
              1
            ],
            "emphasized": [
              0.2,
              0,
              0,
              1
            ],
            "overshoot": [
              0.34,
              1.56,
              0.64,
              1
            ],
            "exit": [
              0.4,
              0,
              1,
              1
            ],
            "settle": [
              0.16,
              1,
              0.3,
              1
            ]
          },
          "spring": {
            "snappy": {
              "stiffness": 380,
              "damping": 30,
              "mass": 1
            },
            "smooth": {
              "stiffness": 180,
              "damping": 26,
              "mass": 1
            },
            "bouncy": {
              "stiffness": 260,
              "damping": 16,
              "mass": 1
            },
            "grab": {
              "stiffness": 520,
              "damping": 42,
              "mass": 1
            }
          },
          "staggerMaxItems": 8,
          "pressOffsetPx": 1,
          "hoverLiftPx": 1,
          "flickVelocityPxPerSec": 420,
          "rubberBandTension": 0.55
        },
        "effect": {
          "fieldFocus": "ring",
          "edgeFadeBand": 20,
          "focusRingWidth": 2,
          "focusRingAlpha": 0.7,
          "glowAlpha": 0.26,
          "glowBlur": 12,
          "glowSpread": -5,
          "glassAlpha": 0.72,
          "glassFrostBlur": 24,
          "glassSaturation": 1.5,
          "glassWash": 0.45,
          "glassBevelRatio": 0.225,
          "glassBevelMin": 8,
          "glassBevelMax": 36,
          "glassDimming": 0.35,
          "glassFlipMaxExtent": 72,
          "glassShadowMin": 0.8,
          "glassShadowMax": 1.5,
          "glassRefraction": 0.34,
          "glassThickness": 0,
          "glassRefractiveIndex": 1.5,
          "glassBackdropDepth": 0,
          "glassDispersion": 0.005,
          "glassSpecular": 0.06,
          "glassTransmissionGain": 1.042,
          "glassOpticalLift": 0.075,
          "glassHairline": 1,
          "glassSpecularSharpness": 12,
          "glassLightAngle": 0.7853982,
          "glassMergeDistance": 28,
          "glassContrastFlipLow": 0.42,
          "glassContrastFlipHigh": 0.58,
          "glassPressDepth": 1.5,
          "glassPressScale": 1.014,
          "scrollEdgeBand": 28,
          "scrollEdgeBlur": 16,
          "sheenAlpha": 0.08,
          "areaWashAlpha": 0.22,
          "headerTintAlpha": 0.18,
          "nodeActiveWashAlpha": 0.14,
          "nodeActiveStrokeAlpha": 0.72,
          "nodeTrafficAlpha": 0.82,
          "nodePreviewAlpha": 0.88,
          "nodeMinimapAlpha": 0.7,
          "nodeOverviewVeilAlpha": 0.55,
          "nodeAuraRestingAlpha": 0.72,
          "nodeAuraPulseFloorAlpha": 0.54,
          "nodeAuraPulsePeakAlpha": 1,
          "nodeAuraSettlePeakAlpha": 1,
          "nodeAuraSettleExpansion": 0.65,
          "nodeEdgeHoverWidthScale": 1.8,
          "nodeEdgeSelectedWidthScale": 2.4,
          "nodeEdgeGlowWidthScale": 5.5,
          "railWidth": 3,
          "semanticWashFaintAlpha": 0.06,
          "semanticWashAlpha": 0.1,
          "semanticWashStrongAlpha": 0.16,
          "semanticBorderAlpha": 0.4,
          "accentBorderAlpha": 0.55,
          "accentBorderStrongAlpha": 0.7,
          "subtleHoverAlpha": 0.3,
          "softContrastAlpha": 0.18,
          "contrastTintAlpha": 0.28,
          "trackRestingAlpha": 0.55,
          "contentVeilAlpha": 0.88,
          "criticalFillAlpha": 0.84,
          "criticalInactiveAlpha": 0.1,
          "variantLightAlpha": 0.15,
          "variantLightHoverAlpha": 0.22,
          "variantLightActiveAlpha": 0.28,
          "variantSubtleHoverAlpha": 0.12,
          "variantSubtleActiveAlpha": 0.18,
          "primaryHoverOpacity": 0.9,
          "customColorReadableDarkFloor": 0.72,
          "customColorReadableLightCeiling": 0.4,
          "customColorHoverLightnessDelta": 0.05,
          "customColorActiveLightnessDelta": 0.1
        }
      }
    },
    {
      "name": "dracula",
      "path": "crates/gpui-kit-tokens/tokens/dracula.json",
      "tokens": {
        "$schema": "./schema.json",
        "meta": {
          "id": "dracula",
          "name": "Dracula",
          "appearance": "dark"
        },
        "color": {
          "onMediaForeground": "#ffffff",
          "onMediaBackground": "#171717",
          "onMediaHairline": "#ffffff33",
          "palette": {
            "neutral": {
              "0": "#000000",
              "10": "#141520",
              "25": "#1c1d26",
              "50": "#21222c",
              "100": "#282a36",
              "150": "#2f3240",
              "200": "#343747",
              "300": "#44475a",
              "500": "#6272a4",
              "600": "#929bc7",
              "700": "#b8bede",
              "800": "#f8f8f2",
              "850": "#f8f8f2",
              "900": "#ffffff",
              "ink": "#21222c"
            },
            "indigo": {
              "50": "#edf2ff",
              "100": "#dbe4ff",
              "200": "#bac8ff",
              "300": "#91a7ff",
              "400": "#7c86ff",
              "500": "#5c7cfa",
              "600": "#5865f2",
              "700": "#4263eb",
              "800": "#3b5bdb",
              "900": "#364fc7"
            },
            "red": {
              "50": "#fff5f5",
              "100": "#ffe3e3",
              "200": "#ffc9c9",
              "300": "#ffa8a8",
              "400": "#ff6467",
              "500": "#ff6b6b",
              "600": "#fa5252",
              "700": "#f03e3e",
              "800": "#e03131",
              "900": "#c92a2a"
            },
            "amber": {
              "500": "#ffb900"
            },
            "green": {
              "50": "#ebfbee",
              "100": "#d3f9d8",
              "200": "#b2f2bb",
              "300": "#8ce99a",
              "400": "#69db7c",
              "500": "#57c47f",
              "600": "#40c057",
              "700": "#37b24f",
              "800": "#2f9e44",
              "900": "#2b8a3e"
            },
            "cyan": {
              "50": "#e3fafc",
              "100": "#c5f6fa",
              "200": "#99e9f2",
              "300": "#66d9e8",
              "400": "#7fb3cf",
              "500": "#22b8cf",
              "600": "#15aabf",
              "700": "#1098ad",
              "800": "#0c8599",
              "900": "#0b7285"
            },
            "syntax": {
              "keyword": "#ff79c6",
              "string": "#f1fa8c",
              "number": "#bd93f9",
              "inline": "#8be9fd",
              "inlineWash": "#bd93f9"
            },
            "agent": {
              "read": "#8be9fd",
              "network": "#bd93f9",
              "shell": "#ffb86c",
              "edit": "#50fa7b",
              "external": "#ff79c6"
            },
            "terminal": {
              "background": "#21222c",
              "wash": "#ffffff"
            },
            "ansi": {
              "0": "#383a4a",
              "1": "#ff5555",
              "2": "#50fa7b",
              "3": "#f1fa8c",
              "4": "#bd93f9",
              "5": "#ff79c6",
              "6": "#8be9fd",
              "7": "#f8f8f2",
              "8": "#6272a4",
              "9": "#ff6e6e",
              "10": "#69ff94",
              "11": "#ffffa5",
              "12": "#d6acff",
              "13": "#ff92df",
              "14": "#a4ffff",
              "15": "#ffffff"
            },
            "gray": {
              "50": "#f8f9fa",
              "100": "#f1f3f5",
              "200": "#e9ecef",
              "300": "#dee2e6",
              "400": "#ced4da",
              "500": "#adb5bd",
              "600": "#868e96",
              "700": "#495057",
              "800": "#343a40",
              "900": "#212529"
            },
            "pink": {
              "50": "#fff0f6",
              "100": "#ffdeeb",
              "200": "#fcc2d7",
              "300": "#faa2c1",
              "400": "#f783ac",
              "500": "#f06595",
              "600": "#e64980",
              "700": "#d6336c",
              "800": "#c2255c",
              "900": "#a61e4d"
            },
            "grape": {
              "50": "#f8f0fc",
              "100": "#f3d9fa",
              "200": "#eebefa",
              "300": "#e599f7",
              "400": "#da77f2",
              "500": "#cc5de8",
              "600": "#be4bdb",
              "700": "#ae3ec9",
              "800": "#9c36b5",
              "900": "#862e9c"
            },
            "violet": {
              "50": "#f3f0ff",
              "100": "#e5dbff",
              "200": "#d0bfff",
              "300": "#b197fc",
              "400": "#9775fa",
              "500": "#845ef7",
              "600": "#7950f2",
              "700": "#7048e8",
              "800": "#6741d9",
              "900": "#5f3dc4"
            },
            "blue": {
              "50": "#e7f5ff",
              "100": "#d0ebff",
              "200": "#a5d8ff",
              "300": "#74c0fc",
              "400": "#4dabf7",
              "500": "#339af0",
              "600": "#228be6",
              "700": "#1c7ed6",
              "800": "#1971c2",
              "900": "#1864ab"
            },
            "teal": {
              "50": "#e6fcf5",
              "100": "#c3fae8",
              "200": "#96f2d7",
              "300": "#63e6be",
              "400": "#38d9a9",
              "500": "#20c997",
              "600": "#12b886",
              "700": "#0ca678",
              "800": "#099268",
              "900": "#087f5b"
            },
            "lime": {
              "50": "#f4fce3",
              "100": "#e9fac8",
              "200": "#d8f5a2",
              "300": "#c0eb75",
              "400": "#a9e34b",
              "500": "#94d82d",
              "600": "#82c91e",
              "700": "#74b816",
              "800": "#66a80f",
              "900": "#5c940d"
            },
            "yellow": {
              "50": "#fff9db",
              "100": "#fff3bf",
              "200": "#ffec99",
              "300": "#ffe066",
              "400": "#ffd43b",
              "500": "#fcc419",
              "600": "#fab005",
              "700": "#f59f00",
              "800": "#f08c00",
              "900": "#e67700"
            },
            "orange": {
              "50": "#fff4e6",
              "100": "#ffe8cc",
              "200": "#ffd8a8",
              "300": "#ffc078",
              "400": "#ffa94d",
              "500": "#ff922b",
              "600": "#fd7e14",
              "700": "#f76707",
              "800": "#e8590c",
              "900": "#d9480f"
            },
            "series": {
              "1": "#868dff",
              "2": "#ec9aff",
              "3": "#ee699c",
              "4": "#ed771f",
              "5": "#e1b800",
              "6": "#6bb945",
              "7": "#00dec2",
              "8": "#00accc"
            }
          },
          "paletteSteps": {
            "filled": [
              "600",
              "500",
              "400"
            ],
            "hover": [
              "700",
              "600",
              "500"
            ],
            "active": [
              "800",
              "700",
              "600"
            ],
            "readableDark": [
              "300",
              "200",
              "400"
            ],
            "readableLight": [
              "700",
              "800",
              "600"
            ]
          },
          "surface": {
            "backdrop": "{neutral.10}",
            "canvas": "{neutral.50}",
            "sunken": "{neutral.25}",
            "panel": "{neutral.100}",
            "raised": "{neutral.200}",
            "control": "#343747",
            "controlHover": "#353848",
            "controlPressed": "#2f3240",
            "overlay": "{neutral.150}",
            "scrim": "#2d3050"
          },
          "text": {
            "primary": "{neutral.800}",
            "muted": "{neutral.700}",
            "faint": "{neutral.600}",
            "placeholder": "#838dbb",
            "disabled": "#7580ae",
            "onAccent": "{neutral.ink}",
            "onPrimaryFill": "{neutral.ink}"
          },
          "interactive": {
            "hover": "{neutral.850}/14",
            "active": "{neutral.850}/24",
            "selected": "{neutral.850}/1c",
            "hairline": "{neutral.900}/14",
            "hairlineStrong": "{neutral.900}/66",
            "track": "{neutral.900}/66",
            "divider": "{neutral.900}/10",
            "controlHairline": "#ffffff1a",
            "controlHighlight": "#ffffff14",
            "focus": "#bd93f9",
            "primaryFill": "{neutral.800}",
            "whiteFill": "#ffffff",
            "whiteFillHover": "#f5f5f5",
            "whiteFillActive": "#ebebeb"
          },
          "semantic": {
            "accent": "#bd93f9",
            "accentStrong": "#ff79c6",
            "danger": "#ff5555",
            "warning": "#ffb86c",
            "success": "#50fa7b",
            "info": "#8be9fd"
          },
          "sequence": {
            "categorical": [
              "{series.1}",
              "{series.2}",
              "{series.3}",
              "{series.4}",
              "{series.5}",
              "{series.6}",
              "{series.7}",
              "{series.8}"
            ]
          },
          "node": {
            "headerWash": "{neutral.900}/0f",
            "portIdle": "{neutral.500}",
            "portHover": "#bd93f9",
            "portConnected": "#ff79c6",
            "edge": "{neutral.500}",
            "edgeTarget": "#ff79c6",
            "edgeActive": "#bd93f9",
            "edgeFlowHighlight": "#ff79c6",
            "edgeFeedback": "#ffb86cb8",
            "edgeFeedbackActive": "#ffb86c",
            "auraActive": "#bd93f9",
            "auraSuccess": "#50fa7b",
            "auraAttention": "#ffb86c",
            "auraDanger": "#ff5555",
            "labelWash": "{neutral.100}/f0",
            "grid": "{neutral.900}/14",
            "gridStrong": "{neutral.900}/29",
            "gridAxis": "{neutral.900}/4d"
          },
          "agent": {
            "read": "{agent.read}",
            "network": "{agent.network}",
            "shell": "{agent.shell}",
            "edit": "{agent.edit}",
            "external": "{agent.external}",
            "evidenceWash": "{neutral.900}/0a"
          },
          "loader": {
            "mark": "#bd93f9",
            "track": "{neutral.900}/24",
            "placeholder": "{neutral.900}/14",
            "sheen": "{neutral.900}/29"
          },
          "syntax": {
            "keyword": "{syntax.keyword}",
            "string": "{syntax.string}",
            "comment": "{neutral.600}",
            "number": "{syntax.number}",
            "inline": "{syntax.inline}",
            "inlineWash": "{syntax.inlineWash}/1f",
            "added": "#50fa7b",
            "addedWash": "#50fa7b24",
            "removed": "#ff5555",
            "removedWash": "#ff555524"
          },
          "terminal": {
            "background": "{terminal.background}",
            "selection": "{terminal.wash}/38",
            "ansi": [
              "{ansi.0}",
              "{ansi.1}",
              "{ansi.2}",
              "{ansi.3}",
              "{ansi.4}",
              "{ansi.5}",
              "{ansi.6}",
              "{ansi.7}",
              "{ansi.8}",
              "{ansi.9}",
              "{ansi.10}",
              "{ansi.11}",
              "{ansi.12}",
              "{ansi.13}",
              "{ansi.14}",
              "{ansi.15}"
            ]
          }
        },
        "space": {
          "xxs": 2,
          "xs": 4,
          "sm": 8,
          "md": 12,
          "lg": 16,
          "xl": 24,
          "xxl": 32
        },
        "measure": {
          "settingsLabel": 120,
          "readableWidth": 360,
          "dialogWidth": 360,
          "menuMinWidth": 200,
          "compactMenuMinWidth": 180,
          "menuMaxHeight": 320,
          "compactMenuMaxHeight": 240,
          "standaloneIcon": 20,
          "scrollbarTrack": 10,
          "scrollbarThumb": 6,
          "scrollbarMinThumb": 24,
          "caretWidth": 1.5,
          "textDecorationWidth": 1,
          "progressTrackHeight": 4,
          "sliderTrackHeight": 6,
          "sliderVerticalHeight": 160,
          "containerSmall": 640,
          "containerMedium": 768,
          "containerLarge": 1024,
          "containerExtraLarge": 1280,
          "compactOverlayWidth": 320,
          "mediaViewerHeight": 320,
          "timelineRailWidth": 16,
          "statusMark": 7,
          "nodeEdgeWidth": 2,
          "nodeEdgeCorner": 18,
          "nodeEdgeLead": 36,
          "nodeEdgeCorridor": 48,
          "nodeEdgeLane": 16,
          "nodePort": 20,
          "nodeProgress": 3
        },
        "radius": {
          "small": 5,
          "control": 8,
          "card": 12,
          "dialog": 16,
          "bubble": 16,
          "pill": 999
        },
        "control": {
          "xs": {
            "height": 20,
            "paddingX": 6,
            "gap": 4,
            "fontSize": 11,
            "iconSize": 12
          },
          "sm": {
            "height": 24,
            "paddingX": 8,
            "gap": 5,
            "fontSize": 12,
            "iconSize": 14
          },
          "md": {
            "height": 28,
            "paddingX": 12,
            "gap": 6,
            "fontSize": 13,
            "iconSize": 15
          },
          "lg": {
            "height": 34,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 14,
            "iconSize": 17
          },
          "touch": {
            "height": 48,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 16,
            "iconSize": 20
          }
        },
        "border": {
          "hairline": 1,
          "thick": 2
        },
        "opacity": {
          "disabled": 0.62,
          "muted": 0.68,
          "scrim": 0.6
        },
        "elevation": {
          "flat": [],
          "raised": [
            {
              "y": 1,
              "blur": 3,
              "spread": 0,
              "color": "{neutral.0}/35"
            },
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/59"
            }
          ],
          "overlay": [
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/3d"
            },
            {
              "y": 8,
              "blur": 24,
              "spread": -4,
              "color": "{neutral.0}/66"
            }
          ],
          "modal": [
            {
              "y": 4,
              "blur": 12,
              "spread": -2,
              "color": "{neutral.0}/54"
            },
            {
              "y": 16,
              "blur": 48,
              "spread": -8,
              "color": "{neutral.0}/8c"
            }
          ]
        },
        "zIndex": {
          "content": 0,
          "sticky": 100,
          "dock": 200,
          "popover": 300,
          "tooltip": 400,
          "modal": 500,
          "toast": 600
        },
        "density": {
          "compact": {
            "space": 0.75,
            "control": 0.86,
            "font": 0.94
          },
          "comfortable": {
            "space": 1,
            "control": 1,
            "font": 1
          }
        },
        "typography": {
          "sans": {
            "family": "Geist",
            "fallbackMacos": "Helvetica",
            "fallbackWindows": "Segoe UI",
            "fallbackLinux": "DejaVu Sans"
          },
          "mono": {
            "family": "Geist Mono",
            "fallbackMacos": "Menlo",
            "fallbackWindows": "Consolas",
            "fallbackLinux": "DejaVu Sans Mono"
          },
          "readoutScale": 1.6,
          "scale": {
            "caption": {
              "size": 10.5,
              "lineHeight": 14,
              "weight": 400
            },
            "label": {
              "size": 12,
              "lineHeight": 16,
              "weight": 500
            },
            "body": {
              "size": 13,
              "lineHeight": 19,
              "weight": 400
            },
            "strong": {
              "size": 13,
              "lineHeight": 19,
              "weight": 600
            },
            "subtitle": {
              "size": 14,
              "lineHeight": 20,
              "weight": 600
            },
            "title": {
              "size": 16,
              "lineHeight": 22,
              "weight": 600
            },
            "code": {
              "size": 12,
              "lineHeight": 18,
              "weight": 400
            }
          }
        },
        "motion": {
          "durationMs": {
            "instant": 90,
            "quick": 150,
            "exit": 120,
            "menu": 140,
            "dialog": 180,
            "resize": 200,
            "entrance": 500,
            "slow": 320,
            "staggerStep": 16,
            "microBounce": 360,
            "microWobble": 280,
            "microPop": 240,
            "spin": 900,
            "pulse": 2400,
            "nodeAuraPulse": 2800,
            "nodeFlow": 1800,
            "shimmer": 1400,
            "toast": 6000,
            "hoverCardOpen": 400,
            "hoverCardGrace": 300,
            "feedback": 900,
            "celebration": 1600,
            "confirmation": 1600
          },
          "easing": {
            "linear": [
              0,
              0,
              1,
              1
            ],
            "standard": [
              0.4,
              0,
              0.2,
              1
            ],
            "easeIn": [
              0.42,
              0,
              1,
              1
            ],
            "easeOut": [
              0,
              0,
              0.58,
              1
            ],
            "easeInOut": [
              0.42,
              0,
              0.58,
              1
            ],
            "emphasized": [
              0.2,
              0,
              0,
              1
            ],
            "overshoot": [
              0.34,
              1.56,
              0.64,
              1
            ],
            "exit": [
              0.4,
              0,
              1,
              1
            ],
            "settle": [
              0.16,
              1,
              0.3,
              1
            ]
          },
          "spring": {
            "snappy": {
              "stiffness": 380,
              "damping": 30,
              "mass": 1
            },
            "smooth": {
              "stiffness": 180,
              "damping": 26,
              "mass": 1
            },
            "bouncy": {
              "stiffness": 260,
              "damping": 16,
              "mass": 1
            },
            "grab": {
              "stiffness": 520,
              "damping": 42,
              "mass": 1
            }
          },
          "staggerMaxItems": 8,
          "pressOffsetPx": 1,
          "hoverLiftPx": 1,
          "flickVelocityPxPerSec": 420,
          "rubberBandTension": 0.55
        },
        "effect": {
          "fieldFocus": "ring",
          "edgeFadeBand": 20,
          "focusRingWidth": 2,
          "focusRingAlpha": 0.7,
          "glowAlpha": 0.26,
          "glowBlur": 12,
          "glowSpread": -5,
          "glassAlpha": 0.72,
          "glassFrostBlur": 24,
          "glassSaturation": 1.5,
          "glassWash": 0.45,
          "glassBevelRatio": 0.225,
          "glassBevelMin": 8,
          "glassBevelMax": 36,
          "glassDimming": 0.35,
          "glassFlipMaxExtent": 72,
          "glassShadowMin": 0.8,
          "glassShadowMax": 1.5,
          "glassRefraction": 0.34,
          "glassThickness": 0,
          "glassRefractiveIndex": 1.5,
          "glassBackdropDepth": 0,
          "glassDispersion": 0.005,
          "glassSpecular": 0.06,
          "glassTransmissionGain": 1.042,
          "glassOpticalLift": 0.075,
          "glassHairline": 1,
          "glassSpecularSharpness": 12,
          "glassLightAngle": 0.7853982,
          "glassMergeDistance": 28,
          "glassContrastFlipLow": 0.42,
          "glassContrastFlipHigh": 0.58,
          "glassPressDepth": 1.5,
          "glassPressScale": 1.014,
          "scrollEdgeBand": 28,
          "scrollEdgeBlur": 16,
          "sheenAlpha": 0.08,
          "areaWashAlpha": 0.22,
          "headerTintAlpha": 0.18,
          "nodeActiveWashAlpha": 0.14,
          "nodeActiveStrokeAlpha": 0.72,
          "nodeTrafficAlpha": 0.82,
          "nodePreviewAlpha": 0.88,
          "nodeMinimapAlpha": 0.7,
          "nodeOverviewVeilAlpha": 0.55,
          "nodeAuraRestingAlpha": 0.72,
          "nodeAuraPulseFloorAlpha": 0.54,
          "nodeAuraPulsePeakAlpha": 1,
          "nodeAuraSettlePeakAlpha": 1,
          "nodeAuraSettleExpansion": 0.65,
          "nodeEdgeHoverWidthScale": 1.8,
          "nodeEdgeSelectedWidthScale": 2.4,
          "nodeEdgeGlowWidthScale": 5.5,
          "railWidth": 3,
          "semanticWashFaintAlpha": 0.06,
          "semanticWashAlpha": 0.1,
          "semanticWashStrongAlpha": 0.16,
          "semanticBorderAlpha": 0.4,
          "accentBorderAlpha": 0.55,
          "accentBorderStrongAlpha": 0.7,
          "subtleHoverAlpha": 0.3,
          "softContrastAlpha": 0.18,
          "contrastTintAlpha": 0.28,
          "trackRestingAlpha": 0.55,
          "contentVeilAlpha": 0.88,
          "criticalFillAlpha": 0.84,
          "criticalInactiveAlpha": 0.1,
          "variantLightAlpha": 0.15,
          "variantLightHoverAlpha": 0.22,
          "variantLightActiveAlpha": 0.28,
          "variantSubtleHoverAlpha": 0.12,
          "variantSubtleActiveAlpha": 0.18,
          "primaryHoverOpacity": 0.9,
          "customColorReadableDarkFloor": 0.72,
          "customColorReadableLightCeiling": 0.4,
          "customColorHoverLightnessDelta": 0.05,
          "customColorActiveLightnessDelta": 0.1
        }
      }
    },
    {
      "name": "gruvbox-dark",
      "path": "crates/gpui-kit-tokens/tokens/gruvbox-dark.json",
      "tokens": {
        "$schema": "./schema.json",
        "meta": {
          "id": "gruvbox-dark",
          "name": "Gruvbox Dark",
          "appearance": "dark"
        },
        "color": {
          "onMediaForeground": "#ffffff",
          "onMediaBackground": "#171717",
          "onMediaHairline": "#ffffff33",
          "palette": {
            "neutral": {
              "0": "#000000",
              "10": "#1b1d1e",
              "25": "#1f2223",
              "50": "#282828",
              "100": "#302e2c",
              "150": "#363331",
              "200": "#383432",
              "300": "#504945",
              "500": "#665c54",
              "600": "#a89984",
              "700": "#d5c4a1",
              "800": "#ebdbb2",
              "850": "#ebdbb2",
              "900": "#ffffff",
              "ink": "#1b1d1e"
            },
            "indigo": {
              "50": "#edf2ff",
              "100": "#dbe4ff",
              "200": "#bac8ff",
              "300": "#91a7ff",
              "400": "#7c86ff",
              "500": "#5c7cfa",
              "600": "#5865f2",
              "700": "#4263eb",
              "800": "#3b5bdb",
              "900": "#364fc7"
            },
            "red": {
              "50": "#fff5f5",
              "100": "#ffe3e3",
              "200": "#ffc9c9",
              "300": "#ffa8a8",
              "400": "#ff6467",
              "500": "#ff6b6b",
              "600": "#fa5252",
              "700": "#f03e3e",
              "800": "#e03131",
              "900": "#c92a2a"
            },
            "amber": {
              "500": "#ffb900"
            },
            "green": {
              "50": "#ebfbee",
              "100": "#d3f9d8",
              "200": "#b2f2bb",
              "300": "#8ce99a",
              "400": "#69db7c",
              "500": "#57c47f",
              "600": "#40c057",
              "700": "#37b24f",
              "800": "#2f9e44",
              "900": "#2b8a3e"
            },
            "cyan": {
              "50": "#e3fafc",
              "100": "#c5f6fa",
              "200": "#99e9f2",
              "300": "#66d9e8",
              "400": "#7fb3cf",
              "500": "#22b8cf",
              "600": "#15aabf",
              "700": "#1098ad",
              "800": "#0c8599",
              "900": "#0b7285"
            },
            "syntax": {
              "keyword": "#fe8019",
              "string": "#b8bb26",
              "number": "#d3869b",
              "inline": "#8ec07c",
              "inlineWash": "#83a598"
            },
            "agent": {
              "read": "#83a598",
              "network": "#d992a5",
              "shell": "#fe8019",
              "edit": "#8ec07c",
              "external": "#fabd2f"
            },
            "terminal": {
              "background": "#1b1d1e",
              "wash": "#ffffff"
            },
            "ansi": {
              "0": "#32302f",
              "1": "#cc241d",
              "2": "#98971a",
              "3": "#d79921",
              "4": "#458588",
              "5": "#b16286",
              "6": "#689d6a",
              "7": "#a89984",
              "8": "#928374",
              "9": "#fb4934",
              "10": "#b8bb26",
              "11": "#fabd2f",
              "12": "#83a598",
              "13": "#d3869b",
              "14": "#8ec07c",
              "15": "#ebdbb2"
            },
            "gray": {
              "50": "#f8f9fa",
              "100": "#f1f3f5",
              "200": "#e9ecef",
              "300": "#dee2e6",
              "400": "#ced4da",
              "500": "#adb5bd",
              "600": "#868e96",
              "700": "#495057",
              "800": "#343a40",
              "900": "#212529"
            },
            "pink": {
              "50": "#fff0f6",
              "100": "#ffdeeb",
              "200": "#fcc2d7",
              "300": "#faa2c1",
              "400": "#f783ac",
              "500": "#f06595",
              "600": "#e64980",
              "700": "#d6336c",
              "800": "#c2255c",
              "900": "#a61e4d"
            },
            "grape": {
              "50": "#f8f0fc",
              "100": "#f3d9fa",
              "200": "#eebefa",
              "300": "#e599f7",
              "400": "#da77f2",
              "500": "#cc5de8",
              "600": "#be4bdb",
              "700": "#ae3ec9",
              "800": "#9c36b5",
              "900": "#862e9c"
            },
            "violet": {
              "50": "#f3f0ff",
              "100": "#e5dbff",
              "200": "#d0bfff",
              "300": "#b197fc",
              "400": "#9775fa",
              "500": "#845ef7",
              "600": "#7950f2",
              "700": "#7048e8",
              "800": "#6741d9",
              "900": "#5f3dc4"
            },
            "blue": {
              "50": "#e7f5ff",
              "100": "#d0ebff",
              "200": "#a5d8ff",
              "300": "#74c0fc",
              "400": "#4dabf7",
              "500": "#339af0",
              "600": "#228be6",
              "700": "#1c7ed6",
              "800": "#1971c2",
              "900": "#1864ab"
            },
            "teal": {
              "50": "#e6fcf5",
              "100": "#c3fae8",
              "200": "#96f2d7",
              "300": "#63e6be",
              "400": "#38d9a9",
              "500": "#20c997",
              "600": "#12b886",
              "700": "#0ca678",
              "800": "#099268",
              "900": "#087f5b"
            },
            "lime": {
              "50": "#f4fce3",
              "100": "#e9fac8",
              "200": "#d8f5a2",
              "300": "#c0eb75",
              "400": "#a9e34b",
              "500": "#94d82d",
              "600": "#82c91e",
              "700": "#74b816",
              "800": "#66a80f",
              "900": "#5c940d"
            },
            "yellow": {
              "50": "#fff9db",
              "100": "#fff3bf",
              "200": "#ffec99",
              "300": "#ffe066",
              "400": "#ffd43b",
              "500": "#fcc419",
              "600": "#fab005",
              "700": "#f59f00",
              "800": "#f08c00",
              "900": "#e67700"
            },
            "orange": {
              "50": "#fff4e6",
              "100": "#ffe8cc",
              "200": "#ffd8a8",
              "300": "#ffc078",
              "400": "#ffa94d",
              "500": "#ff922b",
              "600": "#fd7e14",
              "700": "#f76707",
              "800": "#e8590c",
              "900": "#d9480f"
            },
            "series": {
              "1": "#868dff",
              "2": "#ec9aff",
              "3": "#ee699c",
              "4": "#ed771f",
              "5": "#e1b800",
              "6": "#6bb945",
              "7": "#00dec2",
              "8": "#00accc"
            }
          },
          "paletteSteps": {
            "filled": [
              "600",
              "500",
              "400"
            ],
            "hover": [
              "700",
              "600",
              "500"
            ],
            "active": [
              "800",
              "700",
              "600"
            ],
            "readableDark": [
              "300",
              "200",
              "400"
            ],
            "readableLight": [
              "700",
              "800",
              "600"
            ]
          },
          "surface": {
            "backdrop": "{neutral.10}",
            "canvas": "{neutral.50}",
            "sunken": "{neutral.25}",
            "panel": "{neutral.100}",
            "raised": "{neutral.200}",
            "control": "#393533",
            "controlHover": "#3b3735",
            "controlPressed": "#363331",
            "overlay": "{neutral.150}",
            "scrim": "#3c3836"
          },
          "text": {
            "primary": "{neutral.800}",
            "muted": "{neutral.700}",
            "faint": "{neutral.600}",
            "placeholder": "#9a8b7b",
            "disabled": "#8d7f71",
            "onAccent": "{neutral.ink}",
            "onPrimaryFill": "{neutral.ink}"
          },
          "interactive": {
            "hover": "{neutral.850}/14",
            "active": "{neutral.850}/24",
            "selected": "{neutral.850}/1c",
            "hairline": "{neutral.900}/14",
            "hairlineStrong": "{neutral.900}/66",
            "track": "{neutral.900}/66",
            "divider": "{neutral.900}/10",
            "controlHairline": "#ffffff1a",
            "controlHighlight": "#ffffff14",
            "focus": "#83a598",
            "primaryFill": "{neutral.800}",
            "whiteFill": "#ffffff",
            "whiteFillHover": "#f5f5f5",
            "whiteFillActive": "#ebebeb"
          },
          "semantic": {
            "accent": "#83a598",
            "accentStrong": "#8ec07c",
            "danger": "#fb4934",
            "warning": "#fabd2f",
            "success": "#b8bb26",
            "info": "#d3869b"
          },
          "sequence": {
            "categorical": [
              "{series.1}",
              "{series.2}",
              "{series.3}",
              "{series.4}",
              "{series.5}",
              "{series.6}",
              "{series.7}",
              "{series.8}"
            ]
          },
          "node": {
            "headerWash": "{neutral.900}/0f",
            "portIdle": "{neutral.500}",
            "portHover": "#83a598",
            "portConnected": "#8ec07c",
            "edge": "{neutral.500}",
            "edgeTarget": "#8ec07c",
            "edgeActive": "#83a598",
            "edgeFlowHighlight": "#8ec07c",
            "edgeFeedback": "#fabd2fb8",
            "edgeFeedbackActive": "#fabd2f",
            "auraActive": "#83a598",
            "auraSuccess": "#b8bb26",
            "auraAttention": "#fabd2f",
            "auraDanger": "#fb4934",
            "labelWash": "{neutral.100}/f0",
            "grid": "{neutral.900}/14",
            "gridStrong": "{neutral.900}/29",
            "gridAxis": "{neutral.900}/4d"
          },
          "agent": {
            "read": "{agent.read}",
            "network": "{agent.network}",
            "shell": "{agent.shell}",
            "edit": "{agent.edit}",
            "external": "{agent.external}",
            "evidenceWash": "{neutral.900}/0a"
          },
          "loader": {
            "mark": "#83a598",
            "track": "{neutral.900}/24",
            "placeholder": "{neutral.900}/14",
            "sheen": "{neutral.900}/29"
          },
          "syntax": {
            "keyword": "{syntax.keyword}",
            "string": "{syntax.string}",
            "comment": "{neutral.600}",
            "number": "{syntax.number}",
            "inline": "{syntax.inline}",
            "inlineWash": "{syntax.inlineWash}/1f",
            "added": "#b8bb26",
            "addedWash": "#b8bb2624",
            "removed": "#fb4934",
            "removedWash": "#fb493424"
          },
          "terminal": {
            "background": "{terminal.background}",
            "selection": "{terminal.wash}/38",
            "ansi": [
              "{ansi.0}",
              "{ansi.1}",
              "{ansi.2}",
              "{ansi.3}",
              "{ansi.4}",
              "{ansi.5}",
              "{ansi.6}",
              "{ansi.7}",
              "{ansi.8}",
              "{ansi.9}",
              "{ansi.10}",
              "{ansi.11}",
              "{ansi.12}",
              "{ansi.13}",
              "{ansi.14}",
              "{ansi.15}"
            ]
          }
        },
        "space": {
          "xxs": 2,
          "xs": 4,
          "sm": 8,
          "md": 12,
          "lg": 16,
          "xl": 24,
          "xxl": 32
        },
        "measure": {
          "settingsLabel": 120,
          "readableWidth": 360,
          "dialogWidth": 360,
          "menuMinWidth": 200,
          "compactMenuMinWidth": 180,
          "menuMaxHeight": 320,
          "compactMenuMaxHeight": 240,
          "standaloneIcon": 20,
          "scrollbarTrack": 10,
          "scrollbarThumb": 6,
          "scrollbarMinThumb": 24,
          "caretWidth": 1.5,
          "textDecorationWidth": 1,
          "progressTrackHeight": 4,
          "sliderTrackHeight": 6,
          "sliderVerticalHeight": 160,
          "containerSmall": 640,
          "containerMedium": 768,
          "containerLarge": 1024,
          "containerExtraLarge": 1280,
          "compactOverlayWidth": 320,
          "mediaViewerHeight": 320,
          "timelineRailWidth": 16,
          "statusMark": 7,
          "nodeEdgeWidth": 2,
          "nodeEdgeCorner": 18,
          "nodeEdgeLead": 36,
          "nodeEdgeCorridor": 48,
          "nodeEdgeLane": 16,
          "nodePort": 20,
          "nodeProgress": 3
        },
        "radius": {
          "small": 5,
          "control": 8,
          "card": 12,
          "dialog": 16,
          "bubble": 16,
          "pill": 999
        },
        "control": {
          "xs": {
            "height": 20,
            "paddingX": 6,
            "gap": 4,
            "fontSize": 11,
            "iconSize": 12
          },
          "sm": {
            "height": 24,
            "paddingX": 8,
            "gap": 5,
            "fontSize": 12,
            "iconSize": 14
          },
          "md": {
            "height": 28,
            "paddingX": 12,
            "gap": 6,
            "fontSize": 13,
            "iconSize": 15
          },
          "lg": {
            "height": 34,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 14,
            "iconSize": 17
          },
          "touch": {
            "height": 48,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 16,
            "iconSize": 20
          }
        },
        "border": {
          "hairline": 1,
          "thick": 2
        },
        "opacity": {
          "disabled": 0.62,
          "muted": 0.68,
          "scrim": 0.6
        },
        "elevation": {
          "flat": [],
          "raised": [
            {
              "y": 1,
              "blur": 3,
              "spread": 0,
              "color": "{neutral.0}/35"
            },
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/59"
            }
          ],
          "overlay": [
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/3d"
            },
            {
              "y": 8,
              "blur": 24,
              "spread": -4,
              "color": "{neutral.0}/66"
            }
          ],
          "modal": [
            {
              "y": 4,
              "blur": 12,
              "spread": -2,
              "color": "{neutral.0}/54"
            },
            {
              "y": 16,
              "blur": 48,
              "spread": -8,
              "color": "{neutral.0}/8c"
            }
          ]
        },
        "zIndex": {
          "content": 0,
          "sticky": 100,
          "dock": 200,
          "popover": 300,
          "tooltip": 400,
          "modal": 500,
          "toast": 600
        },
        "density": {
          "compact": {
            "space": 0.75,
            "control": 0.86,
            "font": 0.94
          },
          "comfortable": {
            "space": 1,
            "control": 1,
            "font": 1
          }
        },
        "typography": {
          "sans": {
            "family": "Geist",
            "fallbackMacos": "Helvetica",
            "fallbackWindows": "Segoe UI",
            "fallbackLinux": "DejaVu Sans"
          },
          "mono": {
            "family": "Geist Mono",
            "fallbackMacos": "Menlo",
            "fallbackWindows": "Consolas",
            "fallbackLinux": "DejaVu Sans Mono"
          },
          "readoutScale": 1.6,
          "scale": {
            "caption": {
              "size": 10.5,
              "lineHeight": 14,
              "weight": 400
            },
            "label": {
              "size": 12,
              "lineHeight": 16,
              "weight": 500
            },
            "body": {
              "size": 13,
              "lineHeight": 19,
              "weight": 400
            },
            "strong": {
              "size": 13,
              "lineHeight": 19,
              "weight": 600
            },
            "subtitle": {
              "size": 14,
              "lineHeight": 20,
              "weight": 600
            },
            "title": {
              "size": 16,
              "lineHeight": 22,
              "weight": 600
            },
            "code": {
              "size": 12,
              "lineHeight": 18,
              "weight": 400
            }
          }
        },
        "motion": {
          "durationMs": {
            "instant": 90,
            "quick": 150,
            "exit": 120,
            "menu": 140,
            "dialog": 180,
            "resize": 200,
            "entrance": 500,
            "slow": 320,
            "staggerStep": 16,
            "microBounce": 360,
            "microWobble": 280,
            "microPop": 240,
            "spin": 900,
            "pulse": 2400,
            "nodeAuraPulse": 2800,
            "nodeFlow": 1800,
            "shimmer": 1400,
            "toast": 6000,
            "hoverCardOpen": 400,
            "hoverCardGrace": 300,
            "feedback": 900,
            "celebration": 1600,
            "confirmation": 1600
          },
          "easing": {
            "linear": [
              0,
              0,
              1,
              1
            ],
            "standard": [
              0.4,
              0,
              0.2,
              1
            ],
            "easeIn": [
              0.42,
              0,
              1,
              1
            ],
            "easeOut": [
              0,
              0,
              0.58,
              1
            ],
            "easeInOut": [
              0.42,
              0,
              0.58,
              1
            ],
            "emphasized": [
              0.2,
              0,
              0,
              1
            ],
            "overshoot": [
              0.34,
              1.56,
              0.64,
              1
            ],
            "exit": [
              0.4,
              0,
              1,
              1
            ],
            "settle": [
              0.16,
              1,
              0.3,
              1
            ]
          },
          "spring": {
            "snappy": {
              "stiffness": 380,
              "damping": 30,
              "mass": 1
            },
            "smooth": {
              "stiffness": 180,
              "damping": 26,
              "mass": 1
            },
            "bouncy": {
              "stiffness": 260,
              "damping": 16,
              "mass": 1
            },
            "grab": {
              "stiffness": 520,
              "damping": 42,
              "mass": 1
            }
          },
          "staggerMaxItems": 8,
          "pressOffsetPx": 1,
          "hoverLiftPx": 1,
          "flickVelocityPxPerSec": 420,
          "rubberBandTension": 0.55
        },
        "effect": {
          "fieldFocus": "ring",
          "edgeFadeBand": 20,
          "focusRingWidth": 2,
          "focusRingAlpha": 0.7,
          "glowAlpha": 0.26,
          "glowBlur": 12,
          "glowSpread": -5,
          "glassAlpha": 0.72,
          "glassFrostBlur": 24,
          "glassSaturation": 1.5,
          "glassWash": 0.45,
          "glassBevelRatio": 0.225,
          "glassBevelMin": 8,
          "glassBevelMax": 36,
          "glassDimming": 0.35,
          "glassFlipMaxExtent": 72,
          "glassShadowMin": 0.8,
          "glassShadowMax": 1.5,
          "glassRefraction": 0.34,
          "glassThickness": 0,
          "glassRefractiveIndex": 1.5,
          "glassBackdropDepth": 0,
          "glassDispersion": 0.005,
          "glassSpecular": 0.06,
          "glassTransmissionGain": 1.042,
          "glassOpticalLift": 0.075,
          "glassHairline": 1,
          "glassSpecularSharpness": 12,
          "glassLightAngle": 0.7853982,
          "glassMergeDistance": 28,
          "glassContrastFlipLow": 0.42,
          "glassContrastFlipHigh": 0.58,
          "glassPressDepth": 1.5,
          "glassPressScale": 1.014,
          "scrollEdgeBand": 28,
          "scrollEdgeBlur": 16,
          "sheenAlpha": 0.08,
          "areaWashAlpha": 0.22,
          "headerTintAlpha": 0.18,
          "nodeActiveWashAlpha": 0.14,
          "nodeActiveStrokeAlpha": 0.72,
          "nodeTrafficAlpha": 0.82,
          "nodePreviewAlpha": 0.88,
          "nodeMinimapAlpha": 0.7,
          "nodeOverviewVeilAlpha": 0.55,
          "nodeAuraRestingAlpha": 0.72,
          "nodeAuraPulseFloorAlpha": 0.54,
          "nodeAuraPulsePeakAlpha": 1,
          "nodeAuraSettlePeakAlpha": 1,
          "nodeAuraSettleExpansion": 0.65,
          "nodeEdgeHoverWidthScale": 1.8,
          "nodeEdgeSelectedWidthScale": 2.4,
          "nodeEdgeGlowWidthScale": 5.5,
          "railWidth": 3,
          "semanticWashFaintAlpha": 0.06,
          "semanticWashAlpha": 0.1,
          "semanticWashStrongAlpha": 0.16,
          "semanticBorderAlpha": 0.4,
          "accentBorderAlpha": 0.55,
          "accentBorderStrongAlpha": 0.7,
          "subtleHoverAlpha": 0.3,
          "softContrastAlpha": 0.18,
          "contrastTintAlpha": 0.28,
          "trackRestingAlpha": 0.55,
          "contentVeilAlpha": 0.88,
          "criticalFillAlpha": 0.84,
          "criticalInactiveAlpha": 0.1,
          "variantLightAlpha": 0.15,
          "variantLightHoverAlpha": 0.22,
          "variantLightActiveAlpha": 0.28,
          "variantSubtleHoverAlpha": 0.12,
          "variantSubtleActiveAlpha": 0.18,
          "primaryHoverOpacity": 0.9,
          "customColorReadableDarkFloor": 0.72,
          "customColorReadableLightCeiling": 0.4,
          "customColorHoverLightnessDelta": 0.05,
          "customColorActiveLightnessDelta": 0.1
        }
      }
    },
    {
      "name": "nord",
      "path": "crates/gpui-kit-tokens/tokens/nord.json",
      "tokens": {
        "$schema": "./schema.json",
        "meta": {
          "id": "nord",
          "name": "Nord",
          "appearance": "dark"
        },
        "color": {
          "onMediaForeground": "#ffffff",
          "onMediaBackground": "#171717",
          "onMediaHairline": "#ffffff33",
          "palette": {
            "neutral": {
              "0": "#000000",
              "10": "#1c2027",
              "25": "#22262e",
              "50": "#272c35",
              "100": "#2e3440",
              "150": "#363c49",
              "200": "#3b4252",
              "300": "#434c5e",
              "500": "#4c566a",
              "600": "#aab6c8",
              "700": "#d8dee9",
              "800": "#eceff4",
              "850": "#e5e9f0",
              "900": "#ffffff",
              "ink": "#1c2027"
            },
            "indigo": {
              "50": "#edf2ff",
              "100": "#dbe4ff",
              "200": "#bac8ff",
              "300": "#91a7ff",
              "400": "#7c86ff",
              "500": "#5c7cfa",
              "600": "#5865f2",
              "700": "#4263eb",
              "800": "#3b5bdb",
              "900": "#364fc7"
            },
            "red": {
              "50": "#fff5f5",
              "100": "#ffe3e3",
              "200": "#ffc9c9",
              "300": "#ffa8a8",
              "400": "#ff6467",
              "500": "#ff6b6b",
              "600": "#fa5252",
              "700": "#f03e3e",
              "800": "#e03131",
              "900": "#c92a2a"
            },
            "amber": {
              "500": "#ffb900"
            },
            "green": {
              "50": "#ebfbee",
              "100": "#d3f9d8",
              "200": "#b2f2bb",
              "300": "#8ce99a",
              "400": "#69db7c",
              "500": "#57c47f",
              "600": "#40c057",
              "700": "#37b24f",
              "800": "#2f9e44",
              "900": "#2b8a3e"
            },
            "cyan": {
              "50": "#e3fafc",
              "100": "#c5f6fa",
              "200": "#99e9f2",
              "300": "#66d9e8",
              "400": "#7fb3cf",
              "500": "#22b8cf",
              "600": "#15aabf",
              "700": "#1098ad",
              "800": "#0c8599",
              "900": "#0b7285"
            },
            "syntax": {
              "keyword": "#81a1c1",
              "string": "#a3be8c",
              "number": "#bd97b6",
              "inline": "#8fbcbb",
              "inlineWash": "#81a1c1"
            },
            "agent": {
              "read": "#9dc1de",
              "network": "#b3bde0",
              "shell": "#e0a793",
              "edit": "#a3be8c",
              "external": "#cba8c5"
            },
            "terminal": {
              "background": "#2b303b",
              "wash": "#ffffff"
            },
            "ansi": {
              "0": "#3b4252",
              "1": "#bf616a",
              "2": "#a3be8c",
              "3": "#ebcb8b",
              "4": "#81a1c1",
              "5": "#b48ead",
              "6": "#88c0d0",
              "7": "#e5e9f0",
              "8": "#4c566a",
              "9": "#bf616a",
              "10": "#a3be8c",
              "11": "#ebcb8b",
              "12": "#81a1c1",
              "13": "#b48ead",
              "14": "#8fbcbb",
              "15": "#eceff4"
            },
            "gray": {
              "50": "#f8f9fa",
              "100": "#f1f3f5",
              "200": "#e9ecef",
              "300": "#dee2e6",
              "400": "#ced4da",
              "500": "#adb5bd",
              "600": "#868e96",
              "700": "#495057",
              "800": "#343a40",
              "900": "#212529"
            },
            "pink": {
              "50": "#fff0f6",
              "100": "#ffdeeb",
              "200": "#fcc2d7",
              "300": "#faa2c1",
              "400": "#f783ac",
              "500": "#f06595",
              "600": "#e64980",
              "700": "#d6336c",
              "800": "#c2255c",
              "900": "#a61e4d"
            },
            "grape": {
              "50": "#f8f0fc",
              "100": "#f3d9fa",
              "200": "#eebefa",
              "300": "#e599f7",
              "400": "#da77f2",
              "500": "#cc5de8",
              "600": "#be4bdb",
              "700": "#ae3ec9",
              "800": "#9c36b5",
              "900": "#862e9c"
            },
            "violet": {
              "50": "#f3f0ff",
              "100": "#e5dbff",
              "200": "#d0bfff",
              "300": "#b197fc",
              "400": "#9775fa",
              "500": "#845ef7",
              "600": "#7950f2",
              "700": "#7048e8",
              "800": "#6741d9",
              "900": "#5f3dc4"
            },
            "blue": {
              "50": "#e7f5ff",
              "100": "#d0ebff",
              "200": "#a5d8ff",
              "300": "#74c0fc",
              "400": "#4dabf7",
              "500": "#339af0",
              "600": "#228be6",
              "700": "#1c7ed6",
              "800": "#1971c2",
              "900": "#1864ab"
            },
            "teal": {
              "50": "#e6fcf5",
              "100": "#c3fae8",
              "200": "#96f2d7",
              "300": "#63e6be",
              "400": "#38d9a9",
              "500": "#20c997",
              "600": "#12b886",
              "700": "#0ca678",
              "800": "#099268",
              "900": "#087f5b"
            },
            "lime": {
              "50": "#f4fce3",
              "100": "#e9fac8",
              "200": "#d8f5a2",
              "300": "#c0eb75",
              "400": "#a9e34b",
              "500": "#94d82d",
              "600": "#82c91e",
              "700": "#74b816",
              "800": "#66a80f",
              "900": "#5c940d"
            },
            "yellow": {
              "50": "#fff9db",
              "100": "#fff3bf",
              "200": "#ffec99",
              "300": "#ffe066",
              "400": "#ffd43b",
              "500": "#fcc419",
              "600": "#fab005",
              "700": "#f59f00",
              "800": "#f08c00",
              "900": "#e67700"
            },
            "orange": {
              "50": "#fff4e6",
              "100": "#ffe8cc",
              "200": "#ffd8a8",
              "300": "#ffc078",
              "400": "#ffa94d",
              "500": "#ff922b",
              "600": "#fd7e14",
              "700": "#f76707",
              "800": "#e8590c",
              "900": "#d9480f"
            },
            "series": {
              "1": "#868dff",
              "2": "#ec9aff",
              "3": "#ee699c",
              "4": "#ed771f",
              "5": "#e1b800",
              "6": "#6bb945",
              "7": "#00dec2",
              "8": "#00accc"
            }
          },
          "paletteSteps": {
            "filled": [
              "600",
              "500",
              "400"
            ],
            "hover": [
              "700",
              "600",
              "500"
            ],
            "active": [
              "800",
              "700",
              "600"
            ],
            "readableDark": [
              "300",
              "200",
              "400"
            ],
            "readableLight": [
              "700",
              "800",
              "600"
            ]
          },
          "surface": {
            "backdrop": "{neutral.10}",
            "canvas": "{neutral.50}",
            "sunken": "{neutral.25}",
            "panel": "{neutral.100}",
            "raised": "{neutral.200}",
            "control": "#3d4454",
            "controlHover": "#404757",
            "controlPressed": "#363c49",
            "overlay": "{neutral.150}",
            "scrim": "#333c4f"
          },
          "text": {
            "primary": "{neutral.800}",
            "muted": "{neutral.700}",
            "faint": "{neutral.600}",
            "placeholder": "#98a4b8",
            "disabled": "#8794a9",
            "onAccent": "{neutral.ink}",
            "onPrimaryFill": "{neutral.ink}"
          },
          "interactive": {
            "hover": "{neutral.850}/14",
            "active": "{neutral.850}/24",
            "selected": "{neutral.850}/1c",
            "hairline": "{neutral.900}/14",
            "hairlineStrong": "{neutral.900}/66",
            "track": "{neutral.900}/66",
            "divider": "{neutral.900}/10",
            "controlHairline": "#ffffff1a",
            "controlHighlight": "#ffffff14",
            "focus": "#88c0d0",
            "primaryFill": "{neutral.800}",
            "whiteFill": "#ffffff",
            "whiteFillHover": "#f5f5f5",
            "whiteFillActive": "#ebebeb"
          },
          "semantic": {
            "accent": "#88c0d0",
            "accentStrong": "#7595c4",
            "danger": "#cf7c85",
            "warning": "#ebcb8b",
            "success": "#a3be8c",
            "info": "#81a1c1"
          },
          "sequence": {
            "categorical": [
              "{series.1}",
              "{series.2}",
              "{series.3}",
              "{series.4}",
              "{series.5}",
              "{series.6}",
              "{series.7}",
              "{series.8}"
            ]
          },
          "node": {
            "headerWash": "{neutral.900}/0f",
            "portIdle": "{neutral.500}",
            "portHover": "#88c0d0",
            "portConnected": "#7595c4",
            "edge": "{neutral.500}",
            "edgeTarget": "#7595c4",
            "edgeActive": "#88c0d0",
            "edgeFlowHighlight": "#7595c4",
            "edgeFeedback": "#ebcb8bb8",
            "edgeFeedbackActive": "#ebcb8b",
            "auraActive": "#88c0d0",
            "auraSuccess": "{green.500}",
            "auraAttention": "#ebcb8b",
            "auraDanger": "#cf7c85",
            "labelWash": "{neutral.100}/f0",
            "grid": "{neutral.900}/14",
            "gridStrong": "{neutral.900}/29",
            "gridAxis": "{neutral.900}/4d"
          },
          "agent": {
            "read": "{agent.read}",
            "network": "{agent.network}",
            "shell": "{agent.shell}",
            "edit": "{agent.edit}",
            "external": "{agent.external}",
            "evidenceWash": "{neutral.900}/0a"
          },
          "loader": {
            "mark": "#88c0d0",
            "track": "{neutral.900}/24",
            "placeholder": "{neutral.900}/14",
            "sheen": "{neutral.900}/29"
          },
          "syntax": {
            "keyword": "{syntax.keyword}",
            "string": "{syntax.string}",
            "comment": "{neutral.600}",
            "number": "{syntax.number}",
            "inline": "{syntax.inline}",
            "inlineWash": "{syntax.inlineWash}/1f",
            "added": "#a3be8c",
            "addedWash": "#a3be8c24",
            "removed": "#cf7c85",
            "removedWash": "#cf7c8524"
          },
          "terminal": {
            "background": "{terminal.background}",
            "selection": "{terminal.wash}/38",
            "ansi": [
              "{ansi.0}",
              "{ansi.1}",
              "{ansi.2}",
              "{ansi.3}",
              "{ansi.4}",
              "{ansi.5}",
              "{ansi.6}",
              "{ansi.7}",
              "{ansi.8}",
              "{ansi.9}",
              "{ansi.10}",
              "{ansi.11}",
              "{ansi.12}",
              "{ansi.13}",
              "{ansi.14}",
              "{ansi.15}"
            ]
          }
        },
        "space": {
          "xxs": 2,
          "xs": 4,
          "sm": 8,
          "md": 12,
          "lg": 16,
          "xl": 24,
          "xxl": 32
        },
        "measure": {
          "settingsLabel": 120,
          "readableWidth": 360,
          "dialogWidth": 360,
          "menuMinWidth": 200,
          "compactMenuMinWidth": 180,
          "menuMaxHeight": 320,
          "compactMenuMaxHeight": 240,
          "standaloneIcon": 20,
          "scrollbarTrack": 10,
          "scrollbarThumb": 6,
          "scrollbarMinThumb": 24,
          "caretWidth": 1.5,
          "textDecorationWidth": 1,
          "progressTrackHeight": 4,
          "sliderTrackHeight": 6,
          "sliderVerticalHeight": 160,
          "containerSmall": 640,
          "containerMedium": 768,
          "containerLarge": 1024,
          "containerExtraLarge": 1280,
          "compactOverlayWidth": 320,
          "mediaViewerHeight": 320,
          "timelineRailWidth": 16,
          "statusMark": 7,
          "nodeEdgeWidth": 2,
          "nodeEdgeCorner": 18,
          "nodeEdgeLead": 36,
          "nodeEdgeCorridor": 48,
          "nodeEdgeLane": 16,
          "nodePort": 20,
          "nodeProgress": 3
        },
        "radius": {
          "small": 5,
          "control": 8,
          "card": 12,
          "dialog": 16,
          "bubble": 16,
          "pill": 999
        },
        "control": {
          "xs": {
            "height": 20,
            "paddingX": 6,
            "gap": 4,
            "fontSize": 11,
            "iconSize": 12
          },
          "sm": {
            "height": 24,
            "paddingX": 8,
            "gap": 5,
            "fontSize": 12,
            "iconSize": 14
          },
          "md": {
            "height": 28,
            "paddingX": 12,
            "gap": 6,
            "fontSize": 13,
            "iconSize": 15
          },
          "lg": {
            "height": 34,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 14,
            "iconSize": 17
          },
          "touch": {
            "height": 48,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 16,
            "iconSize": 20
          }
        },
        "border": {
          "hairline": 1,
          "thick": 2
        },
        "opacity": {
          "disabled": 0.62,
          "muted": 0.68,
          "scrim": 0.6
        },
        "elevation": {
          "flat": [],
          "raised": [
            {
              "y": 1,
              "blur": 3,
              "spread": 0,
              "color": "{neutral.0}/35"
            },
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/59"
            }
          ],
          "overlay": [
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/3d"
            },
            {
              "y": 8,
              "blur": 24,
              "spread": -4,
              "color": "{neutral.0}/66"
            }
          ],
          "modal": [
            {
              "y": 4,
              "blur": 12,
              "spread": -2,
              "color": "{neutral.0}/54"
            },
            {
              "y": 16,
              "blur": 48,
              "spread": -8,
              "color": "{neutral.0}/8c"
            }
          ]
        },
        "zIndex": {
          "content": 0,
          "sticky": 100,
          "dock": 200,
          "popover": 300,
          "tooltip": 400,
          "modal": 500,
          "toast": 600
        },
        "density": {
          "compact": {
            "space": 0.75,
            "control": 0.86,
            "font": 0.94
          },
          "comfortable": {
            "space": 1,
            "control": 1,
            "font": 1
          }
        },
        "typography": {
          "sans": {
            "family": "Geist",
            "fallbackMacos": "Helvetica",
            "fallbackWindows": "Segoe UI",
            "fallbackLinux": "DejaVu Sans"
          },
          "mono": {
            "family": "Geist Mono",
            "fallbackMacos": "Menlo",
            "fallbackWindows": "Consolas",
            "fallbackLinux": "DejaVu Sans Mono"
          },
          "readoutScale": 1.6,
          "scale": {
            "caption": {
              "size": 10.5,
              "lineHeight": 14,
              "weight": 400
            },
            "label": {
              "size": 12,
              "lineHeight": 16,
              "weight": 500
            },
            "body": {
              "size": 13,
              "lineHeight": 19,
              "weight": 400
            },
            "strong": {
              "size": 13,
              "lineHeight": 19,
              "weight": 600
            },
            "subtitle": {
              "size": 14,
              "lineHeight": 20,
              "weight": 600
            },
            "title": {
              "size": 16,
              "lineHeight": 22,
              "weight": 600
            },
            "code": {
              "size": 12,
              "lineHeight": 18,
              "weight": 400
            }
          }
        },
        "motion": {
          "durationMs": {
            "instant": 90,
            "quick": 150,
            "exit": 120,
            "menu": 140,
            "dialog": 180,
            "resize": 200,
            "entrance": 500,
            "slow": 320,
            "staggerStep": 16,
            "microBounce": 360,
            "microWobble": 280,
            "microPop": 240,
            "spin": 900,
            "pulse": 2400,
            "nodeAuraPulse": 2800,
            "nodeFlow": 1800,
            "shimmer": 1400,
            "toast": 6000,
            "hoverCardOpen": 400,
            "hoverCardGrace": 300,
            "feedback": 900,
            "celebration": 1600,
            "confirmation": 1600
          },
          "easing": {
            "linear": [
              0,
              0,
              1,
              1
            ],
            "standard": [
              0.4,
              0,
              0.2,
              1
            ],
            "easeIn": [
              0.42,
              0,
              1,
              1
            ],
            "easeOut": [
              0,
              0,
              0.58,
              1
            ],
            "easeInOut": [
              0.42,
              0,
              0.58,
              1
            ],
            "emphasized": [
              0.2,
              0,
              0,
              1
            ],
            "overshoot": [
              0.34,
              1.56,
              0.64,
              1
            ],
            "exit": [
              0.4,
              0,
              1,
              1
            ],
            "settle": [
              0.16,
              1,
              0.3,
              1
            ]
          },
          "spring": {
            "snappy": {
              "stiffness": 380,
              "damping": 30,
              "mass": 1
            },
            "smooth": {
              "stiffness": 180,
              "damping": 26,
              "mass": 1
            },
            "bouncy": {
              "stiffness": 260,
              "damping": 16,
              "mass": 1
            },
            "grab": {
              "stiffness": 520,
              "damping": 42,
              "mass": 1
            }
          },
          "staggerMaxItems": 8,
          "pressOffsetPx": 1,
          "hoverLiftPx": 1,
          "flickVelocityPxPerSec": 420,
          "rubberBandTension": 0.55
        },
        "effect": {
          "fieldFocus": "ring",
          "edgeFadeBand": 20,
          "focusRingWidth": 2,
          "focusRingAlpha": 0.7,
          "glowAlpha": 0.26,
          "glowBlur": 12,
          "glowSpread": -5,
          "glassAlpha": 0.72,
          "glassFrostBlur": 24,
          "glassSaturation": 1.5,
          "glassWash": 0.45,
          "glassBevelRatio": 0.225,
          "glassBevelMin": 8,
          "glassBevelMax": 36,
          "glassDimming": 0.35,
          "glassFlipMaxExtent": 72,
          "glassShadowMin": 0.8,
          "glassShadowMax": 1.5,
          "glassRefraction": 0.34,
          "glassThickness": 0,
          "glassRefractiveIndex": 1.5,
          "glassBackdropDepth": 0,
          "glassDispersion": 0.005,
          "glassSpecular": 0.06,
          "glassTransmissionGain": 1.042,
          "glassOpticalLift": 0.075,
          "glassHairline": 1,
          "glassSpecularSharpness": 12,
          "glassLightAngle": 0.7853982,
          "glassMergeDistance": 28,
          "glassContrastFlipLow": 0.42,
          "glassContrastFlipHigh": 0.58,
          "glassPressDepth": 1.5,
          "glassPressScale": 1.014,
          "scrollEdgeBand": 28,
          "scrollEdgeBlur": 16,
          "sheenAlpha": 0.08,
          "areaWashAlpha": 0.22,
          "headerTintAlpha": 0.18,
          "nodeActiveWashAlpha": 0.14,
          "nodeActiveStrokeAlpha": 0.72,
          "nodeTrafficAlpha": 0.82,
          "nodePreviewAlpha": 0.88,
          "nodeMinimapAlpha": 0.7,
          "nodeOverviewVeilAlpha": 0.55,
          "nodeAuraRestingAlpha": 0.72,
          "nodeAuraPulseFloorAlpha": 0.54,
          "nodeAuraPulsePeakAlpha": 1,
          "nodeAuraSettlePeakAlpha": 1,
          "nodeAuraSettleExpansion": 0.65,
          "nodeEdgeHoverWidthScale": 1.8,
          "nodeEdgeSelectedWidthScale": 2.4,
          "nodeEdgeGlowWidthScale": 5.5,
          "railWidth": 3,
          "semanticWashFaintAlpha": 0.06,
          "semanticWashAlpha": 0.1,
          "semanticWashStrongAlpha": 0.16,
          "semanticBorderAlpha": 0.4,
          "accentBorderAlpha": 0.55,
          "accentBorderStrongAlpha": 0.7,
          "subtleHoverAlpha": 0.3,
          "softContrastAlpha": 0.18,
          "contrastTintAlpha": 0.28,
          "trackRestingAlpha": 0.55,
          "contentVeilAlpha": 0.88,
          "criticalFillAlpha": 0.84,
          "criticalInactiveAlpha": 0.1,
          "variantLightAlpha": 0.15,
          "variantLightHoverAlpha": 0.22,
          "variantLightActiveAlpha": 0.28,
          "variantSubtleHoverAlpha": 0.12,
          "variantSubtleActiveAlpha": 0.18,
          "primaryHoverOpacity": 0.9,
          "customColorReadableDarkFloor": 0.72,
          "customColorReadableLightCeiling": 0.4,
          "customColorHoverLightnessDelta": 0.05,
          "customColorActiveLightnessDelta": 0.1
        }
      }
    },
    {
      "name": "solarized-dark",
      "path": "crates/gpui-kit-tokens/tokens/solarized-dark.json",
      "tokens": {
        "$schema": "./schema.json",
        "meta": {
          "id": "solarized-dark",
          "name": "Solarized Dark",
          "appearance": "dark"
        },
        "color": {
          "onMediaForeground": "#ffffff",
          "onMediaBackground": "#171717",
          "onMediaHairline": "#ffffff33",
          "palette": {
            "neutral": {
              "0": "#000000",
              "10": "#000d11",
              "25": "#00171d",
              "50": "#002028",
              "100": "#002b36",
              "150": "#05333f",
              "200": "#073642",
              "300": "#586e75",
              "500": "#657b83",
              "600": "#89a0a3",
              "700": "#9db0b1",
              "800": "#b3c1c1",
              "850": "#eee8d5",
              "900": "#ffffff",
              "ink": "#000d11"
            },
            "indigo": {
              "50": "#edf2ff",
              "100": "#dbe4ff",
              "200": "#bac8ff",
              "300": "#91a7ff",
              "400": "#7c86ff",
              "500": "#5c7cfa",
              "600": "#5865f2",
              "700": "#4263eb",
              "800": "#3b5bdb",
              "900": "#364fc7"
            },
            "red": {
              "50": "#fff5f5",
              "100": "#ffe3e3",
              "200": "#ffc9c9",
              "300": "#ffa8a8",
              "400": "#ff6467",
              "500": "#ff6b6b",
              "600": "#fa5252",
              "700": "#f03e3e",
              "800": "#e03131",
              "900": "#c92a2a"
            },
            "amber": {
              "500": "#ffb900"
            },
            "green": {
              "50": "#ebfbee",
              "100": "#d3f9d8",
              "200": "#b2f2bb",
              "300": "#8ce99a",
              "400": "#69db7c",
              "500": "#57c47f",
              "600": "#40c057",
              "700": "#37b24f",
              "800": "#2f9e44",
              "900": "#2b8a3e"
            },
            "cyan": {
              "50": "#e3fafc",
              "100": "#c5f6fa",
              "200": "#99e9f2",
              "300": "#66d9e8",
              "400": "#7fb3cf",
              "500": "#22b8cf",
              "600": "#15aabf",
              "700": "#1098ad",
              "800": "#0c8599",
              "900": "#0b7285"
            },
            "syntax": {
              "keyword": "#9db300",
              "string": "#3fbcb2",
              "number": "#e884b0",
              "inline": "#a0a4e8",
              "inlineWash": "#6c71c4"
            },
            "agent": {
              "read": "#5fb3e0",
              "network": "#a0a4e8",
              "shell": "#d8b04a",
              "edit": "#7fc7bf",
              "external": "#e08ab5"
            },
            "terminal": {
              "background": "#001b22",
              "wash": "#ffffff"
            },
            "ansi": {
              "0": "#073642",
              "1": "#dc322f",
              "2": "#859900",
              "3": "#b58900",
              "4": "#268bd2",
              "5": "#d33682",
              "6": "#2aa198",
              "7": "#eee8d5",
              "8": "#0e4b58",
              "9": "#cb4b16",
              "10": "#586e75",
              "11": "#657b83",
              "12": "#839496",
              "13": "#6c71c4",
              "14": "#93a1a1",
              "15": "#fdf6e3"
            },
            "gray": {
              "50": "#f8f9fa",
              "100": "#f1f3f5",
              "200": "#e9ecef",
              "300": "#dee2e6",
              "400": "#ced4da",
              "500": "#adb5bd",
              "600": "#868e96",
              "700": "#495057",
              "800": "#343a40",
              "900": "#212529"
            },
            "pink": {
              "50": "#fff0f6",
              "100": "#ffdeeb",
              "200": "#fcc2d7",
              "300": "#faa2c1",
              "400": "#f783ac",
              "500": "#f06595",
              "600": "#e64980",
              "700": "#d6336c",
              "800": "#c2255c",
              "900": "#a61e4d"
            },
            "grape": {
              "50": "#f8f0fc",
              "100": "#f3d9fa",
              "200": "#eebefa",
              "300": "#e599f7",
              "400": "#da77f2",
              "500": "#cc5de8",
              "600": "#be4bdb",
              "700": "#ae3ec9",
              "800": "#9c36b5",
              "900": "#862e9c"
            },
            "violet": {
              "50": "#f3f0ff",
              "100": "#e5dbff",
              "200": "#d0bfff",
              "300": "#b197fc",
              "400": "#9775fa",
              "500": "#845ef7",
              "600": "#7950f2",
              "700": "#7048e8",
              "800": "#6741d9",
              "900": "#5f3dc4"
            },
            "blue": {
              "50": "#e7f5ff",
              "100": "#d0ebff",
              "200": "#a5d8ff",
              "300": "#74c0fc",
              "400": "#4dabf7",
              "500": "#339af0",
              "600": "#228be6",
              "700": "#1c7ed6",
              "800": "#1971c2",
              "900": "#1864ab"
            },
            "teal": {
              "50": "#e6fcf5",
              "100": "#c3fae8",
              "200": "#96f2d7",
              "300": "#63e6be",
              "400": "#38d9a9",
              "500": "#20c997",
              "600": "#12b886",
              "700": "#0ca678",
              "800": "#099268",
              "900": "#087f5b"
            },
            "lime": {
              "50": "#f4fce3",
              "100": "#e9fac8",
              "200": "#d8f5a2",
              "300": "#c0eb75",
              "400": "#a9e34b",
              "500": "#94d82d",
              "600": "#82c91e",
              "700": "#74b816",
              "800": "#66a80f",
              "900": "#5c940d"
            },
            "yellow": {
              "50": "#fff9db",
              "100": "#fff3bf",
              "200": "#ffec99",
              "300": "#ffe066",
              "400": "#ffd43b",
              "500": "#fcc419",
              "600": "#fab005",
              "700": "#f59f00",
              "800": "#f08c00",
              "900": "#e67700"
            },
            "orange": {
              "50": "#fff4e6",
              "100": "#ffe8cc",
              "200": "#ffd8a8",
              "300": "#ffc078",
              "400": "#ffa94d",
              "500": "#ff922b",
              "600": "#fd7e14",
              "700": "#f76707",
              "800": "#e8590c",
              "900": "#d9480f"
            },
            "series": {
              "1": "#868dff",
              "2": "#ec9aff",
              "3": "#ee699c",
              "4": "#ed771f",
              "5": "#e1b800",
              "6": "#6bb945",
              "7": "#00dec2",
              "8": "#00accc"
            }
          },
          "paletteSteps": {
            "filled": [
              "600",
              "500",
              "400"
            ],
            "hover": [
              "700",
              "600",
              "500"
            ],
            "active": [
              "800",
              "700",
              "600"
            ],
            "readableDark": [
              "300",
              "200",
              "400"
            ],
            "readableLight": [
              "700",
              "800",
              "600"
            ]
          },
          "surface": {
            "backdrop": "{neutral.10}",
            "canvas": "{neutral.50}",
            "sunken": "{neutral.25}",
            "panel": "{neutral.100}",
            "raised": "{neutral.200}",
            "control": "#093844",
            "controlHover": "#0b3a46",
            "controlPressed": "#05333f",
            "overlay": "{neutral.150}",
            "scrim": "#12404f"
          },
          "text": {
            "primary": "{neutral.800}",
            "muted": "{neutral.700}",
            "faint": "{neutral.600}",
            "placeholder": "#7a9094",
            "disabled": "#6d8286",
            "onAccent": "{neutral.ink}",
            "onPrimaryFill": "{neutral.ink}"
          },
          "interactive": {
            "hover": "{neutral.850}/14",
            "active": "{neutral.850}/24",
            "selected": "{neutral.850}/1c",
            "hairline": "{neutral.900}/14",
            "hairlineStrong": "{neutral.900}/66",
            "track": "{neutral.900}/66",
            "divider": "{neutral.900}/10",
            "controlHairline": "#ffffff1a",
            "controlHighlight": "#ffffff14",
            "focus": "#268bd2",
            "primaryFill": "{neutral.800}",
            "whiteFill": "#ffffff",
            "whiteFillHover": "#f5f5f5",
            "whiteFillActive": "#ebebeb"
          },
          "semantic": {
            "accent": "#268bd2",
            "accentStrong": "#868bd8",
            "danger": "#e35a52",
            "warning": "#b58900",
            "success": "#859900",
            "info": "#2aa198"
          },
          "sequence": {
            "categorical": [
              "{series.1}",
              "{series.2}",
              "{series.3}",
              "{series.4}",
              "{series.5}",
              "{series.6}",
              "{series.7}",
              "{series.8}"
            ]
          },
          "node": {
            "headerWash": "{neutral.900}/0f",
            "portIdle": "{neutral.500}",
            "portHover": "#268bd2",
            "portConnected": "#868bd8",
            "edge": "{neutral.500}",
            "edgeTarget": "#868bd8",
            "edgeActive": "#268bd2",
            "edgeFlowHighlight": "#868bd8",
            "edgeFeedback": "#b58900b8",
            "edgeFeedbackActive": "#b58900",
            "auraActive": "#268bd2",
            "auraSuccess": "{green.800}",
            "auraAttention": "#b58900",
            "auraDanger": "#e35a52",
            "labelWash": "{neutral.100}/f0",
            "grid": "{neutral.900}/14",
            "gridStrong": "{neutral.900}/29",
            "gridAxis": "{neutral.900}/4d"
          },
          "agent": {
            "read": "{agent.read}",
            "network": "{agent.network}",
            "shell": "{agent.shell}",
            "edit": "{agent.edit}",
            "external": "{agent.external}",
            "evidenceWash": "{neutral.900}/0a"
          },
          "loader": {
            "mark": "#268bd2",
            "track": "{neutral.900}/24",
            "placeholder": "{neutral.900}/14",
            "sheen": "{neutral.900}/29"
          },
          "syntax": {
            "keyword": "{syntax.keyword}",
            "string": "{syntax.string}",
            "comment": "{neutral.600}",
            "number": "{syntax.number}",
            "inline": "{syntax.inline}",
            "inlineWash": "{syntax.inlineWash}/1f",
            "added": "#859900",
            "addedWash": "#85990024",
            "removed": "#e35a52",
            "removedWash": "#e35a5224"
          },
          "terminal": {
            "background": "{terminal.background}",
            "selection": "{terminal.wash}/38",
            "ansi": [
              "{ansi.0}",
              "{ansi.1}",
              "{ansi.2}",
              "{ansi.3}",
              "{ansi.4}",
              "{ansi.5}",
              "{ansi.6}",
              "{ansi.7}",
              "{ansi.8}",
              "{ansi.9}",
              "{ansi.10}",
              "{ansi.11}",
              "{ansi.12}",
              "{ansi.13}",
              "{ansi.14}",
              "{ansi.15}"
            ]
          }
        },
        "space": {
          "xxs": 2,
          "xs": 4,
          "sm": 8,
          "md": 12,
          "lg": 16,
          "xl": 24,
          "xxl": 32
        },
        "measure": {
          "settingsLabel": 120,
          "readableWidth": 360,
          "dialogWidth": 360,
          "menuMinWidth": 200,
          "compactMenuMinWidth": 180,
          "menuMaxHeight": 320,
          "compactMenuMaxHeight": 240,
          "standaloneIcon": 20,
          "scrollbarTrack": 10,
          "scrollbarThumb": 6,
          "scrollbarMinThumb": 24,
          "caretWidth": 1.5,
          "textDecorationWidth": 1,
          "progressTrackHeight": 4,
          "sliderTrackHeight": 6,
          "sliderVerticalHeight": 160,
          "containerSmall": 640,
          "containerMedium": 768,
          "containerLarge": 1024,
          "containerExtraLarge": 1280,
          "compactOverlayWidth": 320,
          "mediaViewerHeight": 320,
          "timelineRailWidth": 16,
          "statusMark": 7,
          "nodeEdgeWidth": 2,
          "nodeEdgeCorner": 18,
          "nodeEdgeLead": 36,
          "nodeEdgeCorridor": 48,
          "nodeEdgeLane": 16,
          "nodePort": 20,
          "nodeProgress": 3
        },
        "radius": {
          "small": 5,
          "control": 8,
          "card": 12,
          "dialog": 16,
          "bubble": 16,
          "pill": 999
        },
        "control": {
          "xs": {
            "height": 20,
            "paddingX": 6,
            "gap": 4,
            "fontSize": 11,
            "iconSize": 12
          },
          "sm": {
            "height": 24,
            "paddingX": 8,
            "gap": 5,
            "fontSize": 12,
            "iconSize": 14
          },
          "md": {
            "height": 28,
            "paddingX": 12,
            "gap": 6,
            "fontSize": 13,
            "iconSize": 15
          },
          "lg": {
            "height": 34,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 14,
            "iconSize": 17
          },
          "touch": {
            "height": 48,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 16,
            "iconSize": 20
          }
        },
        "border": {
          "hairline": 1,
          "thick": 2
        },
        "opacity": {
          "disabled": 0.62,
          "muted": 0.68,
          "scrim": 0.6
        },
        "elevation": {
          "flat": [],
          "raised": [
            {
              "y": 1,
              "blur": 3,
              "spread": 0,
              "color": "{neutral.0}/35"
            },
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/59"
            }
          ],
          "overlay": [
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/3d"
            },
            {
              "y": 8,
              "blur": 24,
              "spread": -4,
              "color": "{neutral.0}/66"
            }
          ],
          "modal": [
            {
              "y": 4,
              "blur": 12,
              "spread": -2,
              "color": "{neutral.0}/54"
            },
            {
              "y": 16,
              "blur": 48,
              "spread": -8,
              "color": "{neutral.0}/8c"
            }
          ]
        },
        "zIndex": {
          "content": 0,
          "sticky": 100,
          "dock": 200,
          "popover": 300,
          "tooltip": 400,
          "modal": 500,
          "toast": 600
        },
        "density": {
          "compact": {
            "space": 0.75,
            "control": 0.86,
            "font": 0.94
          },
          "comfortable": {
            "space": 1,
            "control": 1,
            "font": 1
          }
        },
        "typography": {
          "sans": {
            "family": "Geist",
            "fallbackMacos": "Helvetica",
            "fallbackWindows": "Segoe UI",
            "fallbackLinux": "DejaVu Sans"
          },
          "mono": {
            "family": "Geist Mono",
            "fallbackMacos": "Menlo",
            "fallbackWindows": "Consolas",
            "fallbackLinux": "DejaVu Sans Mono"
          },
          "readoutScale": 1.6,
          "scale": {
            "caption": {
              "size": 10.5,
              "lineHeight": 14,
              "weight": 400
            },
            "label": {
              "size": 12,
              "lineHeight": 16,
              "weight": 500
            },
            "body": {
              "size": 13,
              "lineHeight": 19,
              "weight": 400
            },
            "strong": {
              "size": 13,
              "lineHeight": 19,
              "weight": 600
            },
            "subtitle": {
              "size": 14,
              "lineHeight": 20,
              "weight": 600
            },
            "title": {
              "size": 16,
              "lineHeight": 22,
              "weight": 600
            },
            "code": {
              "size": 12,
              "lineHeight": 18,
              "weight": 400
            }
          }
        },
        "motion": {
          "durationMs": {
            "instant": 90,
            "quick": 150,
            "exit": 120,
            "menu": 140,
            "dialog": 180,
            "resize": 200,
            "entrance": 500,
            "slow": 320,
            "staggerStep": 16,
            "microBounce": 360,
            "microWobble": 280,
            "microPop": 240,
            "spin": 900,
            "pulse": 2400,
            "nodeAuraPulse": 2800,
            "nodeFlow": 1800,
            "shimmer": 1400,
            "toast": 6000,
            "hoverCardOpen": 400,
            "hoverCardGrace": 300,
            "feedback": 900,
            "celebration": 1600,
            "confirmation": 1600
          },
          "easing": {
            "linear": [
              0,
              0,
              1,
              1
            ],
            "standard": [
              0.4,
              0,
              0.2,
              1
            ],
            "easeIn": [
              0.42,
              0,
              1,
              1
            ],
            "easeOut": [
              0,
              0,
              0.58,
              1
            ],
            "easeInOut": [
              0.42,
              0,
              0.58,
              1
            ],
            "emphasized": [
              0.2,
              0,
              0,
              1
            ],
            "overshoot": [
              0.34,
              1.56,
              0.64,
              1
            ],
            "exit": [
              0.4,
              0,
              1,
              1
            ],
            "settle": [
              0.16,
              1,
              0.3,
              1
            ]
          },
          "spring": {
            "snappy": {
              "stiffness": 380,
              "damping": 30,
              "mass": 1
            },
            "smooth": {
              "stiffness": 180,
              "damping": 26,
              "mass": 1
            },
            "bouncy": {
              "stiffness": 260,
              "damping": 16,
              "mass": 1
            },
            "grab": {
              "stiffness": 520,
              "damping": 42,
              "mass": 1
            }
          },
          "staggerMaxItems": 8,
          "pressOffsetPx": 1,
          "hoverLiftPx": 1,
          "flickVelocityPxPerSec": 420,
          "rubberBandTension": 0.55
        },
        "effect": {
          "fieldFocus": "ring",
          "edgeFadeBand": 20,
          "focusRingWidth": 2,
          "focusRingAlpha": 1,
          "glowAlpha": 0.26,
          "glowBlur": 12,
          "glowSpread": -5,
          "glassAlpha": 0.72,
          "glassFrostBlur": 24,
          "glassSaturation": 1.5,
          "glassWash": 0.45,
          "glassBevelRatio": 0.225,
          "glassBevelMin": 8,
          "glassBevelMax": 36,
          "glassDimming": 0.35,
          "glassFlipMaxExtent": 72,
          "glassShadowMin": 0.8,
          "glassShadowMax": 1.5,
          "glassRefraction": 0.34,
          "glassThickness": 0,
          "glassRefractiveIndex": 1.5,
          "glassBackdropDepth": 0,
          "glassDispersion": 0.005,
          "glassSpecular": 0.06,
          "glassTransmissionGain": 1.042,
          "glassOpticalLift": 0.075,
          "glassHairline": 1,
          "glassSpecularSharpness": 12,
          "glassLightAngle": 0.7853982,
          "glassMergeDistance": 28,
          "glassContrastFlipLow": 0.42,
          "glassContrastFlipHigh": 0.58,
          "glassPressDepth": 1.5,
          "glassPressScale": 1.014,
          "scrollEdgeBand": 28,
          "scrollEdgeBlur": 16,
          "sheenAlpha": 0.08,
          "areaWashAlpha": 0.22,
          "headerTintAlpha": 0.18,
          "nodeActiveWashAlpha": 0.14,
          "nodeActiveStrokeAlpha": 0.72,
          "nodeTrafficAlpha": 0.82,
          "nodePreviewAlpha": 0.88,
          "nodeMinimapAlpha": 0.7,
          "nodeOverviewVeilAlpha": 0.55,
          "nodeAuraRestingAlpha": 0.72,
          "nodeAuraPulseFloorAlpha": 0.54,
          "nodeAuraPulsePeakAlpha": 1,
          "nodeAuraSettlePeakAlpha": 1,
          "nodeAuraSettleExpansion": 0.65,
          "nodeEdgeHoverWidthScale": 1.8,
          "nodeEdgeSelectedWidthScale": 2.4,
          "nodeEdgeGlowWidthScale": 5.5,
          "railWidth": 3,
          "semanticWashFaintAlpha": 0.06,
          "semanticWashAlpha": 0.1,
          "semanticWashStrongAlpha": 0.16,
          "semanticBorderAlpha": 0.4,
          "accentBorderAlpha": 0.55,
          "accentBorderStrongAlpha": 0.7,
          "subtleHoverAlpha": 0.3,
          "softContrastAlpha": 0.18,
          "contrastTintAlpha": 0.28,
          "trackRestingAlpha": 0.55,
          "contentVeilAlpha": 0.88,
          "criticalFillAlpha": 0.84,
          "criticalInactiveAlpha": 0.1,
          "variantLightAlpha": 0.15,
          "variantLightHoverAlpha": 0.22,
          "variantLightActiveAlpha": 0.28,
          "variantSubtleHoverAlpha": 0.12,
          "variantSubtleActiveAlpha": 0.18,
          "primaryHoverOpacity": 0.9,
          "customColorReadableDarkFloor": 0.72,
          "customColorReadableLightCeiling": 0.4,
          "customColorHoverLightnessDelta": 0.05,
          "customColorActiveLightnessDelta": 0.1
        }
      }
    },
    {
      "name": "solarized-light",
      "path": "crates/gpui-kit-tokens/tokens/solarized-light.json",
      "tokens": {
        "$schema": "./schema.json",
        "meta": {
          "id": "solarized-light",
          "name": "Solarized Light",
          "appearance": "light"
        },
        "color": {
          "onMediaForeground": "#ffffff",
          "onMediaBackground": "#171717",
          "onMediaHairline": "#ffffff33",
          "palette": {
            "neutral": {
              "0": "#000000",
              "10": "#e5dec7",
              "25": "#eee7d1",
              "50": "#f6efdb",
              "100": "#fdf6e3",
              "150": "#fffdf6",
              "200": "#ffffff",
              "300": "#93a1a1",
              "500": "#839496",
              "600": "#556d73",
              "700": "#4c6269",
              "800": "#435a61",
              "850": "#002b36",
              "900": "#ffffff",
              "ink": "#ffffff"
            },
            "indigo": {
              "50": "#edf2ff",
              "100": "#dbe4ff",
              "200": "#bac8ff",
              "300": "#91a7ff",
              "400": "#4952c9",
              "500": "#5c7cfa",
              "600": "#363fa8",
              "700": "#4263eb",
              "800": "#3b5bdb",
              "900": "#364fc7"
            },
            "red": {
              "50": "#fff5f5",
              "100": "#ffe3e3",
              "200": "#ffc9c9",
              "300": "#ffa8a8",
              "400": "#d5322f",
              "500": "#ff6b6b",
              "600": "#fa5252",
              "700": "#f03e3e",
              "800": "#e03131",
              "900": "#c92a2a"
            },
            "amber": {
              "500": "#a76a00"
            },
            "green": {
              "50": "#ebfbee",
              "100": "#d3f9d8",
              "200": "#b2f2bb",
              "300": "#8ce99a",
              "400": "#69db7c",
              "500": "#237a48",
              "600": "#40c057",
              "700": "#37b24f",
              "800": "#2f9e44",
              "900": "#2b8a3e"
            },
            "cyan": {
              "50": "#e3fafc",
              "100": "#c5f6fa",
              "200": "#99e9f2",
              "300": "#66d9e8",
              "400": "#2a6f8f",
              "500": "#22b8cf",
              "600": "#15aabf",
              "700": "#1098ad",
              "800": "#0c8599",
              "900": "#0b7285"
            },
            "syntax": {
              "keyword": "#576600",
              "string": "#146b66",
              "number": "#a02463",
              "inline": "#4a4fa8",
              "inlineWash": "#6c71c4"
            },
            "agent": {
              "read": "#146a86",
              "network": "#4b53c9",
              "shell": "#7b5008",
              "edit": "#146a63",
              "external": "#92377f"
            },
            "terminal": {
              "background": "#fdf6e3",
              "wash": "#000000"
            },
            "ansi": {
              "0": "#002b36",
              "1": "#dc322f",
              "2": "#7f9000",
              "3": "#a97f00",
              "4": "#268bd2",
              "5": "#d33682",
              "6": "#229890",
              "7": "#657b83",
              "8": "#586e75",
              "9": "#cb4b16",
              "10": "#586e75",
              "11": "#657b83",
              "12": "#778a8c",
              "13": "#6c71c4",
              "14": "#798d90",
              "15": "#073642"
            },
            "gray": {
              "50": "#f8f9fa",
              "100": "#f1f3f5",
              "200": "#e9ecef",
              "300": "#dee2e6",
              "400": "#ced4da",
              "500": "#adb5bd",
              "600": "#868e96",
              "700": "#495057",
              "800": "#343a40",
              "900": "#212529"
            },
            "pink": {
              "50": "#fff0f6",
              "100": "#ffdeeb",
              "200": "#fcc2d7",
              "300": "#faa2c1",
              "400": "#f783ac",
              "500": "#f06595",
              "600": "#e64980",
              "700": "#d6336c",
              "800": "#c2255c",
              "900": "#a61e4d"
            },
            "grape": {
              "50": "#f8f0fc",
              "100": "#f3d9fa",
              "200": "#eebefa",
              "300": "#e599f7",
              "400": "#da77f2",
              "500": "#cc5de8",
              "600": "#be4bdb",
              "700": "#ae3ec9",
              "800": "#9c36b5",
              "900": "#862e9c"
            },
            "violet": {
              "50": "#f3f0ff",
              "100": "#e5dbff",
              "200": "#d0bfff",
              "300": "#b197fc",
              "400": "#9775fa",
              "500": "#845ef7",
              "600": "#7950f2",
              "700": "#7048e8",
              "800": "#6741d9",
              "900": "#5f3dc4"
            },
            "blue": {
              "50": "#e7f5ff",
              "100": "#d0ebff",
              "200": "#a5d8ff",
              "300": "#74c0fc",
              "400": "#4dabf7",
              "500": "#339af0",
              "600": "#228be6",
              "700": "#1c7ed6",
              "800": "#1971c2",
              "900": "#1864ab"
            },
            "teal": {
              "50": "#e6fcf5",
              "100": "#c3fae8",
              "200": "#96f2d7",
              "300": "#63e6be",
              "400": "#38d9a9",
              "500": "#20c997",
              "600": "#12b886",
              "700": "#0ca678",
              "800": "#099268",
              "900": "#087f5b"
            },
            "lime": {
              "50": "#f4fce3",
              "100": "#e9fac8",
              "200": "#d8f5a2",
              "300": "#c0eb75",
              "400": "#a9e34b",
              "500": "#94d82d",
              "600": "#82c91e",
              "700": "#74b816",
              "800": "#66a80f",
              "900": "#5c940d"
            },
            "yellow": {
              "50": "#fff9db",
              "100": "#fff3bf",
              "200": "#ffec99",
              "300": "#ffe066",
              "400": "#ffd43b",
              "500": "#fcc419",
              "600": "#fab005",
              "700": "#f59f00",
              "800": "#f08c00",
              "900": "#e67700"
            },
            "orange": {
              "50": "#fff4e6",
              "100": "#ffe8cc",
              "200": "#ffd8a8",
              "300": "#ffc078",
              "400": "#ffa94d",
              "500": "#ff922b",
              "600": "#fd7e14",
              "700": "#f76707",
              "800": "#e8590c",
              "900": "#d9480f"
            },
            "series": {
              "1": "#6174d3",
              "2": "#9256ae",
              "3": "#c05279",
              "4": "#c15c24",
              "5": "#8c7000",
              "6": "#599532",
              "7": "#008a76",
              "8": "#0091bc"
            }
          },
          "paletteSteps": {
            "filled": [
              "600",
              "500",
              "400"
            ],
            "hover": [
              "700",
              "600",
              "500"
            ],
            "active": [
              "800",
              "700",
              "600"
            ],
            "readableDark": [
              "300",
              "200",
              "400"
            ],
            "readableLight": [
              "700",
              "800",
              "600"
            ]
          },
          "surface": {
            "backdrop": "{neutral.10}",
            "canvas": "{neutral.50}",
            "sunken": "{neutral.25}",
            "panel": "{neutral.100}",
            "raised": "{neutral.200}",
            "control": "#fdf6e3",
            "controlHover": "#fffdf6",
            "controlPressed": "#f6efdb",
            "overlay": "{neutral.150}",
            "scrim": "{neutral.ink}"
          },
          "text": {
            "primary": "{neutral.800}",
            "muted": "{neutral.700}",
            "faint": "{neutral.600}",
            "placeholder": "#61787e",
            "disabled": "#6a8087",
            "onAccent": "{neutral.ink}",
            "onPrimaryFill": "{neutral.ink}"
          },
          "interactive": {
            "hover": "{neutral.850}/0f",
            "active": "{neutral.850}/1c",
            "selected": "{neutral.850}/14",
            "hairline": "{neutral.850}/1a",
            "hairlineStrong": "{neutral.850}/8c",
            "track": "{neutral.850}/8c",
            "divider": "{neutral.850}/14",
            "controlHairline": "#00000024",
            "controlHighlight": "#ffffffcc",
            "focus": "#1b6fab",
            "primaryFill": "{neutral.800}",
            "whiteFill": "#ffffff",
            "whiteFillHover": "#f5f5f5",
            "whiteFillActive": "#ebebeb"
          },
          "semantic": {
            "accent": "#1b6fab",
            "accentStrong": "#6c71c4",
            "danger": "#dc322f",
            "warning": "#8f6b00",
            "success": "#6f8000",
            "info": "#1a7d76"
          },
          "sequence": {
            "categorical": [
              "{series.1}",
              "{series.2}",
              "{series.3}",
              "{series.4}",
              "{series.5}",
              "{series.6}",
              "{series.7}",
              "{series.8}"
            ]
          },
          "node": {
            "headerWash": "{neutral.850}/0f",
            "portIdle": "{neutral.500}",
            "portHover": "#1b6fab",
            "portConnected": "#6c71c4",
            "edge": "{neutral.500}",
            "edgeTarget": "#6c71c4",
            "edgeActive": "#1b6fab",
            "edgeFlowHighlight": "#6c71c4",
            "edgeFeedback": "#8f6b00b8",
            "edgeFeedbackActive": "#8f6b00",
            "auraActive": "#1b6fab",
            "auraSuccess": "{green.800}",
            "auraAttention": "#8f6b00",
            "auraDanger": "#dc322f",
            "labelWash": "{neutral.150}/f0",
            "grid": "{neutral.850}/14",
            "gridStrong": "{neutral.850}/29",
            "gridAxis": "{neutral.850}/4d"
          },
          "agent": {
            "read": "{agent.read}",
            "network": "{agent.network}",
            "shell": "{agent.shell}",
            "edit": "{agent.edit}",
            "external": "{agent.external}",
            "evidenceWash": "{neutral.850}/08"
          },
          "loader": {
            "mark": "#1b6fab",
            "track": "{neutral.850}/1f",
            "placeholder": "{neutral.850}/17",
            "sheen": "{neutral.900}/8c"
          },
          "syntax": {
            "keyword": "{syntax.keyword}",
            "string": "{syntax.string}",
            "comment": "{neutral.600}",
            "number": "{syntax.number}",
            "inline": "{syntax.inline}",
            "inlineWash": "{syntax.inlineWash}/1f",
            "added": "#576600",
            "addedWash": "#57660024",
            "removed": "#dc322f",
            "removedWash": "#dc322f24"
          },
          "terminal": {
            "background": "{terminal.background}",
            "selection": "{terminal.wash}/29",
            "ansi": [
              "{ansi.0}",
              "{ansi.1}",
              "{ansi.2}",
              "{ansi.3}",
              "{ansi.4}",
              "{ansi.5}",
              "{ansi.6}",
              "{ansi.7}",
              "{ansi.8}",
              "{ansi.9}",
              "{ansi.10}",
              "{ansi.11}",
              "{ansi.12}",
              "{ansi.13}",
              "{ansi.14}",
              "{ansi.15}"
            ]
          }
        },
        "space": {
          "xxs": 2,
          "xs": 4,
          "sm": 8,
          "md": 12,
          "lg": 16,
          "xl": 24,
          "xxl": 32
        },
        "measure": {
          "settingsLabel": 120,
          "readableWidth": 360,
          "dialogWidth": 360,
          "menuMinWidth": 200,
          "compactMenuMinWidth": 180,
          "menuMaxHeight": 320,
          "compactMenuMaxHeight": 240,
          "standaloneIcon": 20,
          "scrollbarTrack": 10,
          "scrollbarThumb": 6,
          "scrollbarMinThumb": 24,
          "caretWidth": 1.5,
          "textDecorationWidth": 1,
          "progressTrackHeight": 4,
          "sliderTrackHeight": 6,
          "sliderVerticalHeight": 160,
          "containerSmall": 640,
          "containerMedium": 768,
          "containerLarge": 1024,
          "containerExtraLarge": 1280,
          "compactOverlayWidth": 320,
          "mediaViewerHeight": 320,
          "timelineRailWidth": 16,
          "statusMark": 7,
          "nodeEdgeWidth": 2,
          "nodeEdgeCorner": 18,
          "nodeEdgeLead": 36,
          "nodeEdgeCorridor": 48,
          "nodeEdgeLane": 16,
          "nodePort": 20,
          "nodeProgress": 3
        },
        "radius": {
          "small": 5,
          "control": 8,
          "card": 12,
          "dialog": 16,
          "bubble": 16,
          "pill": 999
        },
        "control": {
          "xs": {
            "height": 20,
            "paddingX": 6,
            "gap": 4,
            "fontSize": 11,
            "iconSize": 12
          },
          "sm": {
            "height": 24,
            "paddingX": 8,
            "gap": 5,
            "fontSize": 12,
            "iconSize": 14
          },
          "md": {
            "height": 28,
            "paddingX": 12,
            "gap": 6,
            "fontSize": 13,
            "iconSize": 15
          },
          "lg": {
            "height": 34,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 14,
            "iconSize": 17
          },
          "touch": {
            "height": 48,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 16,
            "iconSize": 20
          }
        },
        "border": {
          "hairline": 1,
          "thick": 2
        },
        "opacity": {
          "disabled": 0.8,
          "muted": 0.68,
          "scrim": 0.35
        },
        "elevation": {
          "flat": [],
          "raised": [
            {
              "y": 1,
              "blur": 3,
              "spread": 0,
              "color": "{neutral.0}/0c"
            },
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/14"
            }
          ],
          "overlay": [
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/10"
            },
            {
              "y": 8,
              "blur": 24,
              "spread": -4,
              "color": "{neutral.0}/1a"
            }
          ],
          "modal": [
            {
              "y": 4,
              "blur": 12,
              "spread": -2,
              "color": "{neutral.0}/16"
            },
            {
              "y": 16,
              "blur": 48,
              "spread": -8,
              "color": "{neutral.0}/24"
            }
          ]
        },
        "zIndex": {
          "content": 0,
          "sticky": 100,
          "dock": 200,
          "popover": 300,
          "tooltip": 400,
          "modal": 500,
          "toast": 600
        },
        "density": {
          "compact": {
            "space": 0.75,
            "control": 0.86,
            "font": 0.94
          },
          "comfortable": {
            "space": 1,
            "control": 1,
            "font": 1
          }
        },
        "typography": {
          "sans": {
            "family": "Geist",
            "fallbackMacos": "Helvetica",
            "fallbackWindows": "Segoe UI",
            "fallbackLinux": "DejaVu Sans"
          },
          "mono": {
            "family": "Geist Mono",
            "fallbackMacos": "Menlo",
            "fallbackWindows": "Consolas",
            "fallbackLinux": "DejaVu Sans Mono"
          },
          "readoutScale": 1.6,
          "scale": {
            "caption": {
              "size": 10.5,
              "lineHeight": 14,
              "weight": 400
            },
            "label": {
              "size": 12,
              "lineHeight": 16,
              "weight": 500
            },
            "body": {
              "size": 13,
              "lineHeight": 19,
              "weight": 400
            },
            "strong": {
              "size": 13,
              "lineHeight": 19,
              "weight": 600
            },
            "subtitle": {
              "size": 14,
              "lineHeight": 20,
              "weight": 600
            },
            "title": {
              "size": 16,
              "lineHeight": 22,
              "weight": 600
            },
            "code": {
              "size": 12,
              "lineHeight": 18,
              "weight": 400
            }
          }
        },
        "motion": {
          "durationMs": {
            "instant": 90,
            "quick": 150,
            "exit": 120,
            "menu": 140,
            "dialog": 180,
            "resize": 200,
            "entrance": 500,
            "slow": 320,
            "staggerStep": 16,
            "microBounce": 360,
            "microWobble": 280,
            "microPop": 240,
            "spin": 900,
            "pulse": 2400,
            "nodeAuraPulse": 2800,
            "nodeFlow": 1800,
            "shimmer": 1400,
            "toast": 6000,
            "hoverCardOpen": 400,
            "hoverCardGrace": 300,
            "feedback": 900,
            "celebration": 1600,
            "confirmation": 1600
          },
          "easing": {
            "linear": [
              0,
              0,
              1,
              1
            ],
            "standard": [
              0.4,
              0,
              0.2,
              1
            ],
            "easeIn": [
              0.42,
              0,
              1,
              1
            ],
            "easeOut": [
              0,
              0,
              0.58,
              1
            ],
            "easeInOut": [
              0.42,
              0,
              0.58,
              1
            ],
            "emphasized": [
              0.2,
              0,
              0,
              1
            ],
            "overshoot": [
              0.34,
              1.56,
              0.64,
              1
            ],
            "exit": [
              0.4,
              0,
              1,
              1
            ],
            "settle": [
              0.16,
              1,
              0.3,
              1
            ]
          },
          "spring": {
            "snappy": {
              "stiffness": 380,
              "damping": 30,
              "mass": 1
            },
            "smooth": {
              "stiffness": 180,
              "damping": 26,
              "mass": 1
            },
            "bouncy": {
              "stiffness": 260,
              "damping": 16,
              "mass": 1
            },
            "grab": {
              "stiffness": 520,
              "damping": 42,
              "mass": 1
            }
          },
          "staggerMaxItems": 8,
          "pressOffsetPx": 1,
          "hoverLiftPx": 1,
          "flickVelocityPxPerSec": 420,
          "rubberBandTension": 0.55
        },
        "effect": {
          "fieldFocus": "ring",
          "edgeFadeBand": 20,
          "focusRingWidth": 2,
          "focusRingAlpha": 1,
          "glowAlpha": 0.18,
          "glowBlur": 12,
          "glowSpread": -5,
          "glassAlpha": 0.78,
          "glassFrostBlur": 24,
          "glassSaturation": 1.5,
          "glassWash": 0.55,
          "glassBevelRatio": 0.225,
          "glassBevelMin": 8,
          "glassBevelMax": 36,
          "glassDimming": 0.35,
          "glassFlipMaxExtent": 72,
          "glassShadowMin": 0.8,
          "glassShadowMax": 1.5,
          "glassRefraction": 0.34,
          "glassThickness": 0,
          "glassRefractiveIndex": 1.5,
          "glassBackdropDepth": 0,
          "glassDispersion": 0.005,
          "glassSpecular": 0.06,
          "glassTransmissionGain": 1.042,
          "glassOpticalLift": 0.075,
          "glassHairline": 1,
          "glassSpecularSharpness": 12,
          "glassLightAngle": 0.7853982,
          "glassMergeDistance": 28,
          "glassContrastFlipLow": 0.42,
          "glassContrastFlipHigh": 0.58,
          "glassPressDepth": 1.5,
          "glassPressScale": 1.014,
          "scrollEdgeBand": 28,
          "scrollEdgeBlur": 16,
          "sheenAlpha": 0.05,
          "areaWashAlpha": 0.16,
          "headerTintAlpha": 0.14,
          "nodeActiveWashAlpha": 0.14,
          "nodeActiveStrokeAlpha": 0.72,
          "nodeTrafficAlpha": 0.82,
          "nodePreviewAlpha": 0.88,
          "nodeMinimapAlpha": 0.7,
          "nodeOverviewVeilAlpha": 0.55,
          "nodeAuraRestingAlpha": 0.72,
          "nodeAuraPulseFloorAlpha": 0.54,
          "nodeAuraPulsePeakAlpha": 1,
          "nodeAuraSettlePeakAlpha": 1,
          "nodeAuraSettleExpansion": 0.65,
          "nodeEdgeHoverWidthScale": 1.8,
          "nodeEdgeSelectedWidthScale": 2.4,
          "nodeEdgeGlowWidthScale": 5.5,
          "railWidth": 3,
          "semanticWashFaintAlpha": 0.06,
          "semanticWashAlpha": 0.1,
          "semanticWashStrongAlpha": 0.16,
          "semanticBorderAlpha": 0.4,
          "accentBorderAlpha": 0.55,
          "accentBorderStrongAlpha": 0.7,
          "subtleHoverAlpha": 0.3,
          "softContrastAlpha": 0.18,
          "contrastTintAlpha": 0.28,
          "trackRestingAlpha": 0.55,
          "contentVeilAlpha": 0.88,
          "criticalFillAlpha": 0.84,
          "criticalInactiveAlpha": 0.1,
          "variantLightAlpha": 0.15,
          "variantLightHoverAlpha": 0.22,
          "variantLightActiveAlpha": 0.28,
          "variantSubtleHoverAlpha": 0.12,
          "variantSubtleActiveAlpha": 0.18,
          "primaryHoverOpacity": 0.9,
          "customColorReadableDarkFloor": 0.72,
          "customColorReadableLightCeiling": 0.4,
          "customColorHoverLightnessDelta": 0.05,
          "customColorActiveLightnessDelta": 0.1
        }
      }
    },
    {
      "name": "studio-dark",
      "path": "crates/gpui-kit-tokens/tokens/studio-dark.json",
      "tokens": {
        "$schema": "./schema.json",
        "meta": {
          "id": "studio-dark",
          "name": "Studio Dark",
          "appearance": "dark"
        },
        "color": {
          "onMediaForeground": "#ffffff",
          "onMediaBackground": "#171717",
          "onMediaHairline": "#ffffff33",
          "palette": {
            "neutral": {
              "0": "#000000",
              "10": "#050505",
              "25": "#0a0a0a",
              "50": "#131313",
              "100": "#1b1b1b",
              "150": "#242424",
              "200": "#282828",
              "300": "#303030",
              "500": "#565656",
              "600": "#8f8f8f",
              "700": "#a1a1a1",
              "800": "#e9e9e9",
              "850": "#ebebeb",
              "900": "#ffffff",
              "ink": "#0e0e0e"
            },
            "indigo": {
              "50": "#edf2ff",
              "100": "#dbe4ff",
              "200": "#bac8ff",
              "300": "#91a7ff",
              "400": "#7c86ff",
              "500": "#5c7cfa",
              "600": "#5865f2",
              "700": "#4263eb",
              "800": "#3b5bdb",
              "900": "#364fc7"
            },
            "red": {
              "50": "#fff5f5",
              "100": "#ffe3e3",
              "200": "#ffc9c9",
              "300": "#ffa8a8",
              "400": "#ff6467",
              "500": "#ff6b6b",
              "600": "#fa5252",
              "700": "#f03e3e",
              "800": "#e03131",
              "900": "#c92a2a"
            },
            "amber": {
              "500": "#ffb900"
            },
            "green": {
              "50": "#ebfbee",
              "100": "#d3f9d8",
              "200": "#b2f2bb",
              "300": "#8ce99a",
              "400": "#69db7c",
              "500": "#57c47f",
              "600": "#40c057",
              "700": "#37b24f",
              "800": "#2f9e44",
              "900": "#2b8a3e"
            },
            "cyan": {
              "50": "#e3fafc",
              "100": "#c5f6fa",
              "200": "#99e9f2",
              "300": "#66d9e8",
              "400": "#7fb3cf",
              "500": "#22b8cf",
              "600": "#15aabf",
              "700": "#1098ad",
              "800": "#0c8599",
              "900": "#0b7285"
            },
            "syntax": {
              "keyword": "#e67e7f",
              "string": "#65cba7",
              "number": "#e0ae57",
              "inline": "#c4b4ff",
              "inlineWash": "#a684ff"
            },
            "agent": {
              "read": "#7da8bf",
              "network": "#9fa1d2",
              "shell": "#c19a69",
              "edit": "#77ae9a",
              "external": "#bd91b7"
            },
            "terminal": {
              "background": "#0a0a0a",
              "wash": "#ffffff"
            },
            "ansi": {
              "0": "#242424",
              "1": "#f87171",
              "2": "#4ade80",
              "3": "#facc15",
              "4": "#60a5fa",
              "5": "#c084fc",
              "6": "#22d3ee",
              "7": "#d4d4d8",
              "8": "#52525b",
              "9": "#fca5a5",
              "10": "#86efac",
              "11": "#fde047",
              "12": "#93c5fd",
              "13": "#d8b4fe",
              "14": "#67e8f9",
              "15": "#fafafa"
            },
            "gray": {
              "50": "#f8f9fa",
              "100": "#f1f3f5",
              "200": "#e9ecef",
              "300": "#dee2e6",
              "400": "#ced4da",
              "500": "#adb5bd",
              "600": "#868e96",
              "700": "#495057",
              "800": "#343a40",
              "900": "#212529"
            },
            "pink": {
              "50": "#fff0f6",
              "100": "#ffdeeb",
              "200": "#fcc2d7",
              "300": "#faa2c1",
              "400": "#f783ac",
              "500": "#f06595",
              "600": "#e64980",
              "700": "#d6336c",
              "800": "#c2255c",
              "900": "#a61e4d"
            },
            "grape": {
              "50": "#f8f0fc",
              "100": "#f3d9fa",
              "200": "#eebefa",
              "300": "#e599f7",
              "400": "#da77f2",
              "500": "#cc5de8",
              "600": "#be4bdb",
              "700": "#ae3ec9",
              "800": "#9c36b5",
              "900": "#862e9c"
            },
            "violet": {
              "50": "#f3f0ff",
              "100": "#e5dbff",
              "200": "#d0bfff",
              "300": "#b197fc",
              "400": "#9775fa",
              "500": "#845ef7",
              "600": "#7950f2",
              "700": "#7048e8",
              "800": "#6741d9",
              "900": "#5f3dc4"
            },
            "blue": {
              "50": "#e7f5ff",
              "100": "#d0ebff",
              "200": "#a5d8ff",
              "300": "#74c0fc",
              "400": "#4dabf7",
              "500": "#339af0",
              "600": "#228be6",
              "700": "#1c7ed6",
              "800": "#1971c2",
              "900": "#1864ab"
            },
            "teal": {
              "50": "#e6fcf5",
              "100": "#c3fae8",
              "200": "#96f2d7",
              "300": "#63e6be",
              "400": "#38d9a9",
              "500": "#20c997",
              "600": "#12b886",
              "700": "#0ca678",
              "800": "#099268",
              "900": "#087f5b"
            },
            "lime": {
              "50": "#f4fce3",
              "100": "#e9fac8",
              "200": "#d8f5a2",
              "300": "#c0eb75",
              "400": "#a9e34b",
              "500": "#94d82d",
              "600": "#82c91e",
              "700": "#74b816",
              "800": "#66a80f",
              "900": "#5c940d"
            },
            "yellow": {
              "50": "#fff9db",
              "100": "#fff3bf",
              "200": "#ffec99",
              "300": "#ffe066",
              "400": "#ffd43b",
              "500": "#fcc419",
              "600": "#fab005",
              "700": "#f59f00",
              "800": "#f08c00",
              "900": "#e67700"
            },
            "orange": {
              "50": "#fff4e6",
              "100": "#ffe8cc",
              "200": "#ffd8a8",
              "300": "#ffc078",
              "400": "#ffa94d",
              "500": "#ff922b",
              "600": "#fd7e14",
              "700": "#f76707",
              "800": "#e8590c",
              "900": "#d9480f"
            },
            "series": {
              "1": "#868dff",
              "2": "#ec9aff",
              "3": "#ee699c",
              "4": "#ed771f",
              "5": "#e1b800",
              "6": "#6bb945",
              "7": "#00dec2",
              "8": "#00accc"
            }
          },
          "paletteSteps": {
            "filled": [
              "600",
              "500",
              "400"
            ],
            "hover": [
              "700",
              "600",
              "500"
            ],
            "active": [
              "800",
              "700",
              "600"
            ],
            "readableDark": [
              "300",
              "200",
              "400"
            ],
            "readableLight": [
              "700",
              "800",
              "600"
            ]
          },
          "surface": {
            "backdrop": "{neutral.10}",
            "canvas": "{neutral.50}",
            "sunken": "{neutral.25}",
            "panel": "{neutral.100}",
            "raised": "{neutral.200}",
            "overlay": "{neutral.150}",
            "scrim": "#1d2433",
            "control": "#303030",
            "controlHover": "#333333",
            "controlPressed": "#242424"
          },
          "text": {
            "primary": "{neutral.800}",
            "muted": "{neutral.700}",
            "faint": "{neutral.600}",
            "placeholder": "#868686",
            "disabled": "#7d7d7d",
            "onAccent": "{neutral.ink}",
            "onPrimaryFill": "{neutral.ink}"
          },
          "interactive": {
            "hover": "{neutral.850}/14",
            "active": "{neutral.850}/24",
            "selected": "{neutral.850}/1c",
            "hairline": "{neutral.900}/14",
            "hairlineStrong": "{neutral.900}/66",
            "track": "{neutral.900}/66",
            "divider": "{neutral.900}/10",
            "controlHairline": "#ffffff1a",
            "controlHighlight": "#ffffff14",
            "focus": "{indigo.400}",
            "primaryFill": "{neutral.800}",
            "whiteFill": "#ffffff",
            "whiteFillHover": "#f5f5f5",
            "whiteFillActive": "#ebebeb"
          },
          "semantic": {
            "accent": "{indigo.400}",
            "accentStrong": "{indigo.600}",
            "danger": "{red.400}",
            "warning": "{amber.500}",
            "success": "{green.500}",
            "info": "{cyan.400}"
          },
          "sequence": {
            "categorical": [
              "{series.1}",
              "{series.2}",
              "{series.3}",
              "{series.4}",
              "{series.5}",
              "{series.6}",
              "{series.7}",
              "{series.8}"
            ]
          },
          "node": {
            "headerWash": "{neutral.900}/0f",
            "portIdle": "{neutral.500}",
            "portHover": "{indigo.400}",
            "portConnected": "{indigo.600}",
            "edge": "{neutral.500}",
            "edgeTarget": "{indigo.600}",
            "edgeActive": "{indigo.400}",
            "edgeFlowHighlight": "{indigo.600}",
            "edgeFeedback": "{amber.500}/b8",
            "edgeFeedbackActive": "{amber.500}",
            "auraActive": "{indigo.400}",
            "auraSuccess": "{green.500}",
            "auraAttention": "{amber.500}",
            "auraDanger": "{red.400}",
            "labelWash": "{neutral.100}/f0",
            "grid": "{neutral.900}/14",
            "gridStrong": "{neutral.900}/29",
            "gridAxis": "{neutral.900}/4d"
          },
          "agent": {
            "read": "{agent.read}",
            "network": "{agent.network}",
            "shell": "{agent.shell}",
            "edit": "{agent.edit}",
            "external": "{agent.external}",
            "evidenceWash": "{neutral.900}/0a"
          },
          "loader": {
            "mark": "{indigo.400}",
            "track": "{neutral.900}/24",
            "placeholder": "{neutral.900}/14",
            "sheen": "{neutral.900}/29"
          },
          "syntax": {
            "keyword": "{syntax.keyword}",
            "string": "{syntax.string}",
            "comment": "{neutral.600}",
            "number": "{syntax.number}",
            "inline": "{syntax.inline}",
            "inlineWash": "{syntax.inlineWash}/1f",
            "added": "{green.500}",
            "addedWash": "{green.500}/24",
            "removed": "{red.400}",
            "removedWash": "{red.400}/24"
          },
          "terminal": {
            "background": "{terminal.background}",
            "selection": "{terminal.wash}/38",
            "ansi": [
              "{ansi.0}",
              "{ansi.1}",
              "{ansi.2}",
              "{ansi.3}",
              "{ansi.4}",
              "{ansi.5}",
              "{ansi.6}",
              "{ansi.7}",
              "{ansi.8}",
              "{ansi.9}",
              "{ansi.10}",
              "{ansi.11}",
              "{ansi.12}",
              "{ansi.13}",
              "{ansi.14}",
              "{ansi.15}"
            ]
          }
        },
        "space": {
          "xxs": 2,
          "xs": 4,
          "sm": 8,
          "md": 12,
          "lg": 16,
          "xl": 24,
          "xxl": 32
        },
        "measure": {
          "settingsLabel": 120,
          "readableWidth": 360,
          "dialogWidth": 360,
          "menuMinWidth": 200,
          "compactMenuMinWidth": 180,
          "menuMaxHeight": 320,
          "compactMenuMaxHeight": 240,
          "standaloneIcon": 20,
          "scrollbarTrack": 10,
          "scrollbarThumb": 6,
          "scrollbarMinThumb": 24,
          "caretWidth": 1.5,
          "textDecorationWidth": 1,
          "progressTrackHeight": 4,
          "sliderTrackHeight": 6,
          "sliderVerticalHeight": 160,
          "containerSmall": 640,
          "containerMedium": 768,
          "containerLarge": 1024,
          "containerExtraLarge": 1280,
          "compactOverlayWidth": 320,
          "mediaViewerHeight": 320,
          "timelineRailWidth": 16,
          "statusMark": 7,
          "nodeEdgeWidth": 2,
          "nodeEdgeCorner": 18,
          "nodeEdgeLead": 36,
          "nodeEdgeCorridor": 48,
          "nodeEdgeLane": 16,
          "nodePort": 20,
          "nodeProgress": 3
        },
        "radius": {
          "small": 5,
          "control": 8,
          "card": 12,
          "dialog": 16,
          "bubble": 16,
          "pill": 999
        },
        "control": {
          "xs": {
            "height": 20,
            "paddingX": 6,
            "gap": 4,
            "fontSize": 11,
            "iconSize": 12
          },
          "sm": {
            "height": 24,
            "paddingX": 8,
            "gap": 5,
            "fontSize": 12,
            "iconSize": 14
          },
          "md": {
            "height": 28,
            "paddingX": 12,
            "gap": 6,
            "fontSize": 13,
            "iconSize": 15
          },
          "lg": {
            "height": 34,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 14,
            "iconSize": 17
          },
          "touch": {
            "height": 48,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 16,
            "iconSize": 20
          }
        },
        "border": {
          "hairline": 1,
          "thick": 2
        },
        "opacity": {
          "disabled": 0.62,
          "muted": 0.68,
          "scrim": 0.6
        },
        "elevation": {
          "flat": [],
          "raised": [
            {
              "y": 1,
              "blur": 3,
              "spread": 0,
              "color": "{neutral.0}/35"
            },
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/59"
            }
          ],
          "overlay": [
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/3d"
            },
            {
              "y": 8,
              "blur": 24,
              "spread": -4,
              "color": "{neutral.0}/66"
            }
          ],
          "modal": [
            {
              "y": 4,
              "blur": 12,
              "spread": -2,
              "color": "{neutral.0}/54"
            },
            {
              "y": 16,
              "blur": 48,
              "spread": -8,
              "color": "{neutral.0}/8c"
            }
          ]
        },
        "zIndex": {
          "content": 0,
          "sticky": 100,
          "dock": 200,
          "popover": 300,
          "tooltip": 400,
          "modal": 500,
          "toast": 600
        },
        "density": {
          "compact": {
            "space": 0.75,
            "control": 0.86,
            "font": 0.94
          },
          "comfortable": {
            "space": 1,
            "control": 1,
            "font": 1
          }
        },
        "typography": {
          "sans": {
            "family": "Geist",
            "fallbackMacos": "Helvetica",
            "fallbackWindows": "Segoe UI",
            "fallbackLinux": "DejaVu Sans"
          },
          "mono": {
            "family": "Geist Mono",
            "fallbackMacos": "Menlo",
            "fallbackWindows": "Consolas",
            "fallbackLinux": "DejaVu Sans Mono"
          },
          "readoutScale": 1.6,
          "scale": {
            "caption": {
              "size": 10.5,
              "lineHeight": 14,
              "weight": 400
            },
            "label": {
              "size": 12,
              "lineHeight": 16,
              "weight": 500
            },
            "body": {
              "size": 13,
              "lineHeight": 19,
              "weight": 400
            },
            "strong": {
              "size": 13,
              "lineHeight": 19,
              "weight": 600
            },
            "subtitle": {
              "size": 14,
              "lineHeight": 20,
              "weight": 600
            },
            "title": {
              "size": 16,
              "lineHeight": 22,
              "weight": 600
            },
            "code": {
              "size": 12,
              "lineHeight": 18,
              "weight": 400
            }
          }
        },
        "motion": {
          "durationMs": {
            "instant": 90,
            "quick": 150,
            "exit": 120,
            "menu": 140,
            "dialog": 180,
            "resize": 200,
            "entrance": 500,
            "slow": 320,
            "staggerStep": 16,
            "microBounce": 360,
            "microWobble": 280,
            "microPop": 240,
            "spin": 900,
            "pulse": 2400,
            "nodeAuraPulse": 2800,
            "nodeFlow": 1800,
            "shimmer": 1400,
            "toast": 6000,
            "hoverCardOpen": 400,
            "hoverCardGrace": 300,
            "feedback": 900,
            "celebration": 1600,
            "confirmation": 1600
          },
          "easing": {
            "linear": [
              0,
              0,
              1,
              1
            ],
            "standard": [
              0.4,
              0,
              0.2,
              1
            ],
            "easeIn": [
              0.42,
              0,
              1,
              1
            ],
            "easeOut": [
              0,
              0,
              0.58,
              1
            ],
            "easeInOut": [
              0.42,
              0,
              0.58,
              1
            ],
            "emphasized": [
              0.2,
              0,
              0,
              1
            ],
            "overshoot": [
              0.34,
              1.56,
              0.64,
              1
            ],
            "exit": [
              0.4,
              0,
              1,
              1
            ],
            "settle": [
              0.16,
              1,
              0.3,
              1
            ]
          },
          "spring": {
            "snappy": {
              "stiffness": 380,
              "damping": 30,
              "mass": 1
            },
            "smooth": {
              "stiffness": 180,
              "damping": 26,
              "mass": 1
            },
            "bouncy": {
              "stiffness": 260,
              "damping": 16,
              "mass": 1
            },
            "grab": {
              "stiffness": 520,
              "damping": 42,
              "mass": 1
            }
          },
          "staggerMaxItems": 8,
          "pressOffsetPx": 1,
          "hoverLiftPx": 1,
          "flickVelocityPxPerSec": 420,
          "rubberBandTension": 0.55
        },
        "effect": {
          "fieldFocus": "ring",
          "edgeFadeBand": 20,
          "focusRingWidth": 2,
          "focusRingAlpha": 0.7,
          "glowAlpha": 0.26,
          "glowBlur": 12,
          "glowSpread": -5,
          "glassAlpha": 0.72,
          "glassFrostBlur": 24,
          "glassSaturation": 1.5,
          "glassWash": 0.45,
          "glassBevelRatio": 0.225,
          "glassBevelMin": 8,
          "glassBevelMax": 36,
          "glassDimming": 0.35,
          "glassFlipMaxExtent": 72,
          "glassShadowMin": 0.8,
          "glassShadowMax": 1.5,
          "glassRefraction": 0.34,
          "glassThickness": 0,
          "glassRefractiveIndex": 1.5,
          "glassBackdropDepth": 0,
          "glassDispersion": 0.005,
          "glassSpecular": 0.06,
          "glassTransmissionGain": 1.042,
          "glassOpticalLift": 0.075,
          "glassHairline": 1,
          "glassSpecularSharpness": 12,
          "glassLightAngle": 0.7853982,
          "glassMergeDistance": 28,
          "glassContrastFlipLow": 0.42,
          "glassContrastFlipHigh": 0.58,
          "glassPressDepth": 1.5,
          "glassPressScale": 1.014,
          "scrollEdgeBand": 28,
          "scrollEdgeBlur": 16,
          "sheenAlpha": 0.08,
          "areaWashAlpha": 0.22,
          "headerTintAlpha": 0.18,
          "nodeActiveWashAlpha": 0.14,
          "nodeActiveStrokeAlpha": 0.72,
          "nodeTrafficAlpha": 0.82,
          "nodePreviewAlpha": 0.88,
          "nodeMinimapAlpha": 0.7,
          "nodeOverviewVeilAlpha": 0.55,
          "nodeAuraRestingAlpha": 0.72,
          "nodeAuraPulseFloorAlpha": 0.54,
          "nodeAuraPulsePeakAlpha": 1,
          "nodeAuraSettlePeakAlpha": 1,
          "nodeAuraSettleExpansion": 0.65,
          "nodeEdgeHoverWidthScale": 1.8,
          "nodeEdgeSelectedWidthScale": 2.4,
          "nodeEdgeGlowWidthScale": 5.5,
          "railWidth": 3,
          "semanticWashFaintAlpha": 0.06,
          "semanticWashAlpha": 0.1,
          "semanticWashStrongAlpha": 0.16,
          "semanticBorderAlpha": 0.4,
          "accentBorderAlpha": 0.55,
          "accentBorderStrongAlpha": 0.7,
          "subtleHoverAlpha": 0.3,
          "softContrastAlpha": 0.18,
          "contrastTintAlpha": 0.28,
          "trackRestingAlpha": 0.55,
          "contentVeilAlpha": 0.88,
          "criticalFillAlpha": 0.84,
          "criticalInactiveAlpha": 0.1,
          "variantLightAlpha": 0.15,
          "variantLightHoverAlpha": 0.22,
          "variantLightActiveAlpha": 0.28,
          "variantSubtleHoverAlpha": 0.12,
          "variantSubtleActiveAlpha": 0.18,
          "primaryHoverOpacity": 0.9,
          "customColorReadableDarkFloor": 0.72,
          "customColorReadableLightCeiling": 0.4,
          "customColorHoverLightnessDelta": 0.05,
          "customColorActiveLightnessDelta": 0.1
        }
      }
    },
    {
      "name": "studio-light",
      "path": "crates/gpui-kit-tokens/tokens/studio-light.json",
      "tokens": {
        "$schema": "./schema.json",
        "meta": {
          "id": "studio-light",
          "name": "Studio Light",
          "appearance": "light"
        },
        "color": {
          "onMediaForeground": "#ffffff",
          "onMediaBackground": "#171717",
          "onMediaHairline": "#ffffff33",
          "palette": {
            "neutral": {
              "0": "#000000",
              "10": "#dcdce2",
              "25": "#e0e0e5",
              "50": "#ebebef",
              "100": "#f5f5f8",
              "150": "#ffffff",
              "200": "#ffffff",
              "300": "#d4d4da",
              "500": "#9a9aa1",
              "600": "#78787f",
              "700": "#55555c",
              "800": "#17171a",
              "850": "#0a0a0c",
              "900": "#ffffff",
              "ink": "#ffffff"
            },
            "indigo": {
              "50": "#edf2ff",
              "100": "#dbe4ff",
              "200": "#bac8ff",
              "300": "#91a7ff",
              "400": "#4952c9",
              "500": "#5c7cfa",
              "600": "#363fa8",
              "700": "#4263eb",
              "800": "#3b5bdb",
              "900": "#364fc7"
            },
            "red": {
              "50": "#fff5f5",
              "100": "#ffe3e3",
              "200": "#ffc9c9",
              "300": "#ffa8a8",
              "400": "#d5322f",
              "500": "#ff6b6b",
              "600": "#fa5252",
              "700": "#f03e3e",
              "800": "#e03131",
              "900": "#c92a2a"
            },
            "amber": {
              "500": "#a76a00"
            },
            "green": {
              "50": "#ebfbee",
              "100": "#d3f9d8",
              "200": "#b2f2bb",
              "300": "#8ce99a",
              "400": "#69db7c",
              "500": "#237a48",
              "600": "#40c057",
              "700": "#37b24f",
              "800": "#2f9e44",
              "900": "#2b8a3e"
            },
            "cyan": {
              "50": "#e3fafc",
              "100": "#c5f6fa",
              "200": "#99e9f2",
              "300": "#66d9e8",
              "400": "#2a6f8f",
              "500": "#22b8cf",
              "600": "#15aabf",
              "700": "#1098ad",
              "800": "#0c8599",
              "900": "#0b7285"
            },
            "syntax": {
              "keyword": "#a83232",
              "string": "#0f6b4f",
              "number": "#8a5a00",
              "inline": "#5b21b6",
              "inlineWash": "#7c3aed"
            },
            "agent": {
              "read": "#2b607d",
              "network": "#565aa0",
              "shell": "#80591f",
              "edit": "#2f6653",
              "external": "#765676"
            },
            "terminal": {
              "background": "#fafafa",
              "wash": "#000000"
            },
            "ansi": {
              "0": "#1f1f1f",
              "1": "#dc2626",
              "2": "#16a34a",
              "3": "#b45309",
              "4": "#2563eb",
              "5": "#9333ea",
              "6": "#0e7490",
              "7": "#3f3f46",
              "8": "#71717a",
              "9": "#b91c1c",
              "10": "#15803d",
              "11": "#92400e",
              "12": "#1d4ed8",
              "13": "#7e22ce",
              "14": "#155e75",
              "15": "#18181b"
            },
            "gray": {
              "50": "#f8f9fa",
              "100": "#f1f3f5",
              "200": "#e9ecef",
              "300": "#dee2e6",
              "400": "#ced4da",
              "500": "#adb5bd",
              "600": "#868e96",
              "700": "#495057",
              "800": "#343a40",
              "900": "#212529"
            },
            "pink": {
              "50": "#fff0f6",
              "100": "#ffdeeb",
              "200": "#fcc2d7",
              "300": "#faa2c1",
              "400": "#f783ac",
              "500": "#f06595",
              "600": "#e64980",
              "700": "#d6336c",
              "800": "#c2255c",
              "900": "#a61e4d"
            },
            "grape": {
              "50": "#f8f0fc",
              "100": "#f3d9fa",
              "200": "#eebefa",
              "300": "#e599f7",
              "400": "#da77f2",
              "500": "#cc5de8",
              "600": "#be4bdb",
              "700": "#ae3ec9",
              "800": "#9c36b5",
              "900": "#862e9c"
            },
            "violet": {
              "50": "#f3f0ff",
              "100": "#e5dbff",
              "200": "#d0bfff",
              "300": "#b197fc",
              "400": "#9775fa",
              "500": "#845ef7",
              "600": "#7950f2",
              "700": "#7048e8",
              "800": "#6741d9",
              "900": "#5f3dc4"
            },
            "blue": {
              "50": "#e7f5ff",
              "100": "#d0ebff",
              "200": "#a5d8ff",
              "300": "#74c0fc",
              "400": "#4dabf7",
              "500": "#339af0",
              "600": "#228be6",
              "700": "#1c7ed6",
              "800": "#1971c2",
              "900": "#1864ab"
            },
            "teal": {
              "50": "#e6fcf5",
              "100": "#c3fae8",
              "200": "#96f2d7",
              "300": "#63e6be",
              "400": "#38d9a9",
              "500": "#20c997",
              "600": "#12b886",
              "700": "#0ca678",
              "800": "#099268",
              "900": "#087f5b"
            },
            "lime": {
              "50": "#f4fce3",
              "100": "#e9fac8",
              "200": "#d8f5a2",
              "300": "#c0eb75",
              "400": "#a9e34b",
              "500": "#94d82d",
              "600": "#82c91e",
              "700": "#74b816",
              "800": "#66a80f",
              "900": "#5c940d"
            },
            "yellow": {
              "50": "#fff9db",
              "100": "#fff3bf",
              "200": "#ffec99",
              "300": "#ffe066",
              "400": "#ffd43b",
              "500": "#fcc419",
              "600": "#fab005",
              "700": "#f59f00",
              "800": "#f08c00",
              "900": "#e67700"
            },
            "orange": {
              "50": "#fff4e6",
              "100": "#ffe8cc",
              "200": "#ffd8a8",
              "300": "#ffc078",
              "400": "#ffa94d",
              "500": "#ff922b",
              "600": "#fd7e14",
              "700": "#f76707",
              "800": "#e8590c",
              "900": "#d9480f"
            },
            "series": {
              "1": "#6174d3",
              "2": "#9256ae",
              "3": "#c05279",
              "4": "#c15c24",
              "5": "#8c7000",
              "6": "#599532",
              "7": "#008a76",
              "8": "#0091bc"
            }
          },
          "paletteSteps": {
            "filled": [
              "600",
              "500",
              "400"
            ],
            "hover": [
              "700",
              "600",
              "500"
            ],
            "active": [
              "800",
              "700",
              "600"
            ],
            "readableDark": [
              "300",
              "200",
              "400"
            ],
            "readableLight": [
              "700",
              "800",
              "600"
            ]
          },
          "surface": {
            "backdrop": "{neutral.10}",
            "canvas": "{neutral.50}",
            "sunken": "{neutral.25}",
            "panel": "{neutral.100}",
            "raised": "{neutral.200}",
            "overlay": "{neutral.150}",
            "scrim": "{neutral.ink}",
            "control": "#f5f5f8",
            "controlHover": "#fdfdff",
            "controlPressed": "#e8e8ed"
          },
          "text": {
            "primary": "{neutral.800}",
            "muted": "{neutral.700}",
            "faint": "#64646b",
            "placeholder": "#6f6f76",
            "disabled": "#7a7a81",
            "onAccent": "{neutral.ink}",
            "onPrimaryFill": "{neutral.ink}"
          },
          "interactive": {
            "hover": "{neutral.850}/0f",
            "active": "{neutral.850}/1c",
            "selected": "{neutral.850}/14",
            "hairline": "{neutral.850}/1a",
            "hairlineStrong": "{neutral.850}/8c",
            "track": "{neutral.850}/8c",
            "divider": "{neutral.850}/14",
            "controlHairline": "#00000024",
            "controlHighlight": "#ffffffcc",
            "focus": "{indigo.400}",
            "primaryFill": "{neutral.800}",
            "whiteFill": "#ffffff",
            "whiteFillHover": "#f5f5f5",
            "whiteFillActive": "#ebebeb"
          },
          "semantic": {
            "accent": "{indigo.400}",
            "accentStrong": "{indigo.600}",
            "danger": "{red.400}",
            "warning": "{amber.500}",
            "success": "{green.500}",
            "info": "{cyan.400}"
          },
          "sequence": {
            "categorical": [
              "{series.1}",
              "{series.2}",
              "{series.3}",
              "{series.4}",
              "{series.5}",
              "{series.6}",
              "{series.7}",
              "{series.8}"
            ]
          },
          "node": {
            "headerWash": "{neutral.850}/0f",
            "portIdle": "{neutral.500}",
            "portHover": "{indigo.400}",
            "portConnected": "{indigo.600}",
            "edge": "{neutral.500}",
            "edgeTarget": "{indigo.600}",
            "edgeActive": "{indigo.400}",
            "edgeFlowHighlight": "{indigo.600}",
            "edgeFeedback": "{amber.500}/b8",
            "edgeFeedbackActive": "{amber.500}",
            "auraActive": "{indigo.400}",
            "auraSuccess": "{green.500}",
            "auraAttention": "{amber.500}",
            "auraDanger": "{red.400}",
            "labelWash": "{neutral.150}/f0",
            "grid": "{neutral.850}/14",
            "gridStrong": "{neutral.850}/29",
            "gridAxis": "{neutral.850}/4d"
          },
          "agent": {
            "read": "{agent.read}",
            "network": "{agent.network}",
            "shell": "{agent.shell}",
            "edit": "{agent.edit}",
            "external": "{agent.external}",
            "evidenceWash": "{neutral.850}/08"
          },
          "loader": {
            "mark": "{indigo.400}",
            "track": "{neutral.850}/1f",
            "placeholder": "{neutral.850}/17",
            "sheen": "{neutral.900}/8c"
          },
          "syntax": {
            "keyword": "{syntax.keyword}",
            "string": "{syntax.string}",
            "comment": "#64646b",
            "number": "{syntax.number}",
            "inline": "{syntax.inline}",
            "inlineWash": "{syntax.inlineWash}/1f",
            "added": "{green.500}",
            "addedWash": "{green.500}/24",
            "removed": "{red.400}",
            "removedWash": "{red.400}/24"
          },
          "terminal": {
            "background": "{terminal.background}",
            "selection": "{terminal.wash}/29",
            "ansi": [
              "{ansi.0}",
              "{ansi.1}",
              "{ansi.2}",
              "{ansi.3}",
              "{ansi.4}",
              "{ansi.5}",
              "{ansi.6}",
              "{ansi.7}",
              "{ansi.8}",
              "{ansi.9}",
              "{ansi.10}",
              "{ansi.11}",
              "{ansi.12}",
              "{ansi.13}",
              "{ansi.14}",
              "{ansi.15}"
            ]
          }
        },
        "space": {
          "xxs": 2,
          "xs": 4,
          "sm": 8,
          "md": 12,
          "lg": 16,
          "xl": 24,
          "xxl": 32
        },
        "measure": {
          "settingsLabel": 120,
          "readableWidth": 360,
          "dialogWidth": 360,
          "menuMinWidth": 200,
          "compactMenuMinWidth": 180,
          "menuMaxHeight": 320,
          "compactMenuMaxHeight": 240,
          "standaloneIcon": 20,
          "scrollbarTrack": 10,
          "scrollbarThumb": 6,
          "scrollbarMinThumb": 24,
          "caretWidth": 1.5,
          "textDecorationWidth": 1,
          "progressTrackHeight": 4,
          "sliderTrackHeight": 6,
          "sliderVerticalHeight": 160,
          "containerSmall": 640,
          "containerMedium": 768,
          "containerLarge": 1024,
          "containerExtraLarge": 1280,
          "compactOverlayWidth": 320,
          "mediaViewerHeight": 320,
          "timelineRailWidth": 16,
          "statusMark": 7,
          "nodeEdgeWidth": 2,
          "nodeEdgeCorner": 18,
          "nodeEdgeLead": 36,
          "nodeEdgeCorridor": 48,
          "nodeEdgeLane": 16,
          "nodePort": 20,
          "nodeProgress": 3
        },
        "radius": {
          "small": 5,
          "control": 8,
          "card": 12,
          "dialog": 16,
          "bubble": 16,
          "pill": 999
        },
        "control": {
          "xs": {
            "height": 20,
            "paddingX": 6,
            "gap": 4,
            "fontSize": 11,
            "iconSize": 12
          },
          "sm": {
            "height": 24,
            "paddingX": 8,
            "gap": 5,
            "fontSize": 12,
            "iconSize": 14
          },
          "md": {
            "height": 28,
            "paddingX": 12,
            "gap": 6,
            "fontSize": 13,
            "iconSize": 15
          },
          "lg": {
            "height": 34,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 14,
            "iconSize": 17
          },
          "touch": {
            "height": 48,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 16,
            "iconSize": 20
          }
        },
        "border": {
          "hairline": 1,
          "thick": 2
        },
        "opacity": {
          "disabled": 0.5,
          "muted": 0.68,
          "scrim": 0.35
        },
        "elevation": {
          "flat": [],
          "raised": [
            {
              "y": 1,
              "blur": 3,
              "spread": 0,
              "color": "{neutral.0}/0c"
            },
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/14"
            }
          ],
          "overlay": [
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/10"
            },
            {
              "y": 8,
              "blur": 24,
              "spread": -4,
              "color": "{neutral.0}/1a"
            }
          ],
          "modal": [
            {
              "y": 4,
              "blur": 12,
              "spread": -2,
              "color": "{neutral.0}/16"
            },
            {
              "y": 16,
              "blur": 48,
              "spread": -8,
              "color": "{neutral.0}/24"
            }
          ]
        },
        "zIndex": {
          "content": 0,
          "sticky": 100,
          "dock": 200,
          "popover": 300,
          "tooltip": 400,
          "modal": 500,
          "toast": 600
        },
        "density": {
          "compact": {
            "space": 0.75,
            "control": 0.86,
            "font": 0.94
          },
          "comfortable": {
            "space": 1,
            "control": 1,
            "font": 1
          }
        },
        "typography": {
          "sans": {
            "family": "Geist",
            "fallbackMacos": "Helvetica",
            "fallbackWindows": "Segoe UI",
            "fallbackLinux": "DejaVu Sans"
          },
          "mono": {
            "family": "Geist Mono",
            "fallbackMacos": "Menlo",
            "fallbackWindows": "Consolas",
            "fallbackLinux": "DejaVu Sans Mono"
          },
          "readoutScale": 1.6,
          "scale": {
            "caption": {
              "size": 10.5,
              "lineHeight": 14,
              "weight": 400
            },
            "label": {
              "size": 12,
              "lineHeight": 16,
              "weight": 500
            },
            "body": {
              "size": 13,
              "lineHeight": 19,
              "weight": 400
            },
            "strong": {
              "size": 13,
              "lineHeight": 19,
              "weight": 600
            },
            "subtitle": {
              "size": 14,
              "lineHeight": 20,
              "weight": 600
            },
            "title": {
              "size": 16,
              "lineHeight": 22,
              "weight": 600
            },
            "code": {
              "size": 12,
              "lineHeight": 18,
              "weight": 400
            }
          }
        },
        "motion": {
          "durationMs": {
            "instant": 90,
            "quick": 150,
            "exit": 120,
            "menu": 140,
            "dialog": 180,
            "resize": 200,
            "entrance": 500,
            "slow": 320,
            "staggerStep": 16,
            "microBounce": 360,
            "microWobble": 280,
            "microPop": 240,
            "spin": 900,
            "pulse": 2400,
            "nodeAuraPulse": 2800,
            "nodeFlow": 1800,
            "shimmer": 1400,
            "toast": 6000,
            "hoverCardOpen": 400,
            "hoverCardGrace": 300,
            "feedback": 900,
            "celebration": 1600,
            "confirmation": 1600
          },
          "easing": {
            "linear": [
              0,
              0,
              1,
              1
            ],
            "standard": [
              0.4,
              0,
              0.2,
              1
            ],
            "easeIn": [
              0.42,
              0,
              1,
              1
            ],
            "easeOut": [
              0,
              0,
              0.58,
              1
            ],
            "easeInOut": [
              0.42,
              0,
              0.58,
              1
            ],
            "emphasized": [
              0.2,
              0,
              0,
              1
            ],
            "overshoot": [
              0.34,
              1.56,
              0.64,
              1
            ],
            "exit": [
              0.4,
              0,
              1,
              1
            ],
            "settle": [
              0.16,
              1,
              0.3,
              1
            ]
          },
          "spring": {
            "snappy": {
              "stiffness": 380,
              "damping": 30,
              "mass": 1
            },
            "smooth": {
              "stiffness": 180,
              "damping": 26,
              "mass": 1
            },
            "bouncy": {
              "stiffness": 260,
              "damping": 16,
              "mass": 1
            },
            "grab": {
              "stiffness": 520,
              "damping": 42,
              "mass": 1
            }
          },
          "staggerMaxItems": 8,
          "pressOffsetPx": 1,
          "hoverLiftPx": 1,
          "flickVelocityPxPerSec": 420,
          "rubberBandTension": 0.55
        },
        "effect": {
          "fieldFocus": "ring",
          "edgeFadeBand": 20,
          "focusRingWidth": 2,
          "focusRingAlpha": 0.8,
          "glowAlpha": 0.18,
          "glowBlur": 12,
          "glowSpread": -5,
          "glassAlpha": 0.78,
          "glassFrostBlur": 24,
          "glassSaturation": 1.5,
          "glassWash": 0.55,
          "glassBevelRatio": 0.225,
          "glassBevelMin": 8,
          "glassBevelMax": 36,
          "glassDimming": 0.35,
          "glassFlipMaxExtent": 72,
          "glassShadowMin": 0.8,
          "glassShadowMax": 1.5,
          "glassRefraction": 0.34,
          "glassThickness": 0,
          "glassRefractiveIndex": 1.5,
          "glassBackdropDepth": 0,
          "glassDispersion": 0.005,
          "glassSpecular": 0.06,
          "glassTransmissionGain": 1.042,
          "glassOpticalLift": 0.075,
          "glassHairline": 1,
          "glassSpecularSharpness": 12,
          "glassLightAngle": 0.7853982,
          "glassMergeDistance": 28,
          "glassContrastFlipLow": 0.42,
          "glassContrastFlipHigh": 0.58,
          "glassPressDepth": 1.5,
          "glassPressScale": 1.014,
          "scrollEdgeBand": 28,
          "scrollEdgeBlur": 16,
          "sheenAlpha": 0.05,
          "areaWashAlpha": 0.16,
          "headerTintAlpha": 0.14,
          "nodeActiveWashAlpha": 0.14,
          "nodeActiveStrokeAlpha": 0.72,
          "nodeTrafficAlpha": 0.82,
          "nodePreviewAlpha": 0.88,
          "nodeMinimapAlpha": 0.7,
          "nodeOverviewVeilAlpha": 0.55,
          "nodeAuraRestingAlpha": 0.72,
          "nodeAuraPulseFloorAlpha": 0.54,
          "nodeAuraPulsePeakAlpha": 1,
          "nodeAuraSettlePeakAlpha": 1,
          "nodeAuraSettleExpansion": 0.65,
          "nodeEdgeHoverWidthScale": 1.8,
          "nodeEdgeSelectedWidthScale": 2.4,
          "nodeEdgeGlowWidthScale": 5.5,
          "railWidth": 3,
          "semanticWashFaintAlpha": 0.06,
          "semanticWashAlpha": 0.1,
          "semanticWashStrongAlpha": 0.16,
          "semanticBorderAlpha": 0.4,
          "accentBorderAlpha": 0.55,
          "accentBorderStrongAlpha": 0.7,
          "subtleHoverAlpha": 0.3,
          "softContrastAlpha": 0.18,
          "contrastTintAlpha": 0.28,
          "trackRestingAlpha": 0.55,
          "contentVeilAlpha": 0.88,
          "criticalFillAlpha": 0.84,
          "criticalInactiveAlpha": 0.1,
          "variantLightAlpha": 0.15,
          "variantLightHoverAlpha": 0.22,
          "variantLightActiveAlpha": 0.28,
          "variantSubtleHoverAlpha": 0.12,
          "variantSubtleActiveAlpha": 0.18,
          "primaryHoverOpacity": 0.9,
          "customColorReadableDarkFloor": 0.72,
          "customColorReadableLightCeiling": 0.4,
          "customColorHoverLightnessDelta": 0.05,
          "customColorActiveLightnessDelta": 0.1
        }
      }
    },
    {
      "name": "tokyo-night",
      "path": "crates/gpui-kit-tokens/tokens/tokyo-night.json",
      "tokens": {
        "$schema": "./schema.json",
        "meta": {
          "id": "tokyo-night",
          "name": "Tokyo Night",
          "appearance": "dark"
        },
        "color": {
          "onMediaForeground": "#ffffff",
          "onMediaBackground": "#171717",
          "onMediaHairline": "#ffffff33",
          "palette": {
            "neutral": {
              "0": "#000000",
              "10": "#0f0f14",
              "25": "#16161e",
              "50": "#1a1b26",
              "100": "#24283b",
              "150": "#292e42",
              "200": "#2c3145",
              "300": "#3b4261",
              "500": "#565f89",
              "600": "#949cc4",
              "700": "#a9b1d6",
              "800": "#c0caf5",
              "850": "#c0caf5",
              "900": "#ffffff",
              "ink": "#16161e"
            },
            "indigo": {
              "50": "#edf2ff",
              "100": "#dbe4ff",
              "200": "#bac8ff",
              "300": "#91a7ff",
              "400": "#7c86ff",
              "500": "#5c7cfa",
              "600": "#5865f2",
              "700": "#4263eb",
              "800": "#3b5bdb",
              "900": "#364fc7"
            },
            "red": {
              "50": "#fff5f5",
              "100": "#ffe3e3",
              "200": "#ffc9c9",
              "300": "#ffa8a8",
              "400": "#ff6467",
              "500": "#ff6b6b",
              "600": "#fa5252",
              "700": "#f03e3e",
              "800": "#e03131",
              "900": "#c92a2a"
            },
            "amber": {
              "500": "#ffb900"
            },
            "green": {
              "50": "#ebfbee",
              "100": "#d3f9d8",
              "200": "#b2f2bb",
              "300": "#8ce99a",
              "400": "#69db7c",
              "500": "#57c47f",
              "600": "#40c057",
              "700": "#37b24f",
              "800": "#2f9e44",
              "900": "#2b8a3e"
            },
            "cyan": {
              "50": "#e3fafc",
              "100": "#c5f6fa",
              "200": "#99e9f2",
              "300": "#66d9e8",
              "400": "#7fb3cf",
              "500": "#22b8cf",
              "600": "#15aabf",
              "700": "#1098ad",
              "800": "#0c8599",
              "900": "#0b7285"
            },
            "syntax": {
              "keyword": "#bb9af7",
              "string": "#9ece6a",
              "number": "#ff9e64",
              "inline": "#7dcfff",
              "inlineWash": "#7aa2f7"
            },
            "agent": {
              "read": "#7aa2f7",
              "network": "#7dcfff",
              "shell": "#ff9e64",
              "edit": "#9ece6a",
              "external": "#bb9af7"
            },
            "terminal": {
              "background": "#16161e",
              "wash": "#ffffff"
            },
            "ansi": {
              "0": "#292e42",
              "1": "#f7768e",
              "2": "#9ece6a",
              "3": "#e0af68",
              "4": "#7aa2f7",
              "5": "#bb9af7",
              "6": "#7dcfff",
              "7": "#a9b1d6",
              "8": "#414868",
              "9": "#ff7a93",
              "10": "#b9f27c",
              "11": "#ff9e64",
              "12": "#7da6ff",
              "13": "#bb9af7",
              "14": "#0db9d7",
              "15": "#c0caf5"
            },
            "gray": {
              "50": "#f8f9fa",
              "100": "#f1f3f5",
              "200": "#e9ecef",
              "300": "#dee2e6",
              "400": "#ced4da",
              "500": "#adb5bd",
              "600": "#868e96",
              "700": "#495057",
              "800": "#343a40",
              "900": "#212529"
            },
            "pink": {
              "50": "#fff0f6",
              "100": "#ffdeeb",
              "200": "#fcc2d7",
              "300": "#faa2c1",
              "400": "#f783ac",
              "500": "#f06595",
              "600": "#e64980",
              "700": "#d6336c",
              "800": "#c2255c",
              "900": "#a61e4d"
            },
            "grape": {
              "50": "#f8f0fc",
              "100": "#f3d9fa",
              "200": "#eebefa",
              "300": "#e599f7",
              "400": "#da77f2",
              "500": "#cc5de8",
              "600": "#be4bdb",
              "700": "#ae3ec9",
              "800": "#9c36b5",
              "900": "#862e9c"
            },
            "violet": {
              "50": "#f3f0ff",
              "100": "#e5dbff",
              "200": "#d0bfff",
              "300": "#b197fc",
              "400": "#9775fa",
              "500": "#845ef7",
              "600": "#7950f2",
              "700": "#7048e8",
              "800": "#6741d9",
              "900": "#5f3dc4"
            },
            "blue": {
              "50": "#e7f5ff",
              "100": "#d0ebff",
              "200": "#a5d8ff",
              "300": "#74c0fc",
              "400": "#4dabf7",
              "500": "#339af0",
              "600": "#228be6",
              "700": "#1c7ed6",
              "800": "#1971c2",
              "900": "#1864ab"
            },
            "teal": {
              "50": "#e6fcf5",
              "100": "#c3fae8",
              "200": "#96f2d7",
              "300": "#63e6be",
              "400": "#38d9a9",
              "500": "#20c997",
              "600": "#12b886",
              "700": "#0ca678",
              "800": "#099268",
              "900": "#087f5b"
            },
            "lime": {
              "50": "#f4fce3",
              "100": "#e9fac8",
              "200": "#d8f5a2",
              "300": "#c0eb75",
              "400": "#a9e34b",
              "500": "#94d82d",
              "600": "#82c91e",
              "700": "#74b816",
              "800": "#66a80f",
              "900": "#5c940d"
            },
            "yellow": {
              "50": "#fff9db",
              "100": "#fff3bf",
              "200": "#ffec99",
              "300": "#ffe066",
              "400": "#ffd43b",
              "500": "#fcc419",
              "600": "#fab005",
              "700": "#f59f00",
              "800": "#f08c00",
              "900": "#e67700"
            },
            "orange": {
              "50": "#fff4e6",
              "100": "#ffe8cc",
              "200": "#ffd8a8",
              "300": "#ffc078",
              "400": "#ffa94d",
              "500": "#ff922b",
              "600": "#fd7e14",
              "700": "#f76707",
              "800": "#e8590c",
              "900": "#d9480f"
            },
            "series": {
              "1": "#868dff",
              "2": "#ec9aff",
              "3": "#ee699c",
              "4": "#ed771f",
              "5": "#e1b800",
              "6": "#6bb945",
              "7": "#00dec2",
              "8": "#00accc"
            }
          },
          "paletteSteps": {
            "filled": [
              "600",
              "500",
              "400"
            ],
            "hover": [
              "700",
              "600",
              "500"
            ],
            "active": [
              "800",
              "700",
              "600"
            ],
            "readableDark": [
              "300",
              "200",
              "400"
            ],
            "readableLight": [
              "700",
              "800",
              "600"
            ]
          },
          "surface": {
            "backdrop": "{neutral.10}",
            "canvas": "{neutral.50}",
            "sunken": "{neutral.25}",
            "panel": "{neutral.100}",
            "raised": "{neutral.200}",
            "control": "#2f3448",
            "controlHover": "#32374b",
            "controlPressed": "#292e42",
            "overlay": "{neutral.150}",
            "scrim": "#242b48"
          },
          "text": {
            "primary": "{neutral.800}",
            "muted": "{neutral.700}",
            "faint": "{neutral.600}",
            "placeholder": "#858db5",
            "disabled": "#787fa8",
            "onAccent": "{neutral.ink}",
            "onPrimaryFill": "{neutral.ink}"
          },
          "interactive": {
            "hover": "{neutral.850}/14",
            "active": "{neutral.850}/24",
            "selected": "{neutral.850}/1c",
            "hairline": "{neutral.900}/14",
            "hairlineStrong": "{neutral.900}/66",
            "track": "{neutral.900}/66",
            "divider": "{neutral.900}/10",
            "controlHairline": "#ffffff1a",
            "controlHighlight": "#ffffff14",
            "focus": "#7aa2f7",
            "primaryFill": "{neutral.800}",
            "whiteFill": "#ffffff",
            "whiteFillHover": "#f5f5f5",
            "whiteFillActive": "#ebebeb"
          },
          "semantic": {
            "accent": "#7aa2f7",
            "accentStrong": "#bb9af7",
            "danger": "#f7768e",
            "warning": "#e0af68",
            "success": "#9ece6a",
            "info": "#7dcfff"
          },
          "sequence": {
            "categorical": [
              "{series.1}",
              "{series.2}",
              "{series.3}",
              "{series.4}",
              "{series.5}",
              "{series.6}",
              "{series.7}",
              "{series.8}"
            ]
          },
          "node": {
            "headerWash": "{neutral.900}/0f",
            "portIdle": "{neutral.500}",
            "portHover": "#7aa2f7",
            "portConnected": "#bb9af7",
            "edge": "{neutral.500}",
            "edgeTarget": "#bb9af7",
            "edgeActive": "#7aa2f7",
            "edgeFlowHighlight": "#bb9af7",
            "edgeFeedback": "#e0af68b8",
            "edgeFeedbackActive": "#e0af68",
            "auraActive": "#7aa2f7",
            "auraSuccess": "#9ece6a",
            "auraAttention": "#e0af68",
            "auraDanger": "#f7768e",
            "labelWash": "{neutral.100}/f0",
            "grid": "{neutral.900}/14",
            "gridStrong": "{neutral.900}/29",
            "gridAxis": "{neutral.900}/4d"
          },
          "agent": {
            "read": "{agent.read}",
            "network": "{agent.network}",
            "shell": "{agent.shell}",
            "edit": "{agent.edit}",
            "external": "{agent.external}",
            "evidenceWash": "{neutral.900}/0a"
          },
          "loader": {
            "mark": "#7aa2f7",
            "track": "{neutral.900}/24",
            "placeholder": "{neutral.900}/14",
            "sheen": "{neutral.900}/29"
          },
          "syntax": {
            "keyword": "{syntax.keyword}",
            "string": "{syntax.string}",
            "comment": "{neutral.600}",
            "number": "{syntax.number}",
            "inline": "{syntax.inline}",
            "inlineWash": "{syntax.inlineWash}/1f",
            "added": "#9ece6a",
            "addedWash": "#9ece6a24",
            "removed": "#f7768e",
            "removedWash": "#f7768e24"
          },
          "terminal": {
            "background": "{terminal.background}",
            "selection": "{terminal.wash}/38",
            "ansi": [
              "{ansi.0}",
              "{ansi.1}",
              "{ansi.2}",
              "{ansi.3}",
              "{ansi.4}",
              "{ansi.5}",
              "{ansi.6}",
              "{ansi.7}",
              "{ansi.8}",
              "{ansi.9}",
              "{ansi.10}",
              "{ansi.11}",
              "{ansi.12}",
              "{ansi.13}",
              "{ansi.14}",
              "{ansi.15}"
            ]
          }
        },
        "space": {
          "xxs": 2,
          "xs": 4,
          "sm": 8,
          "md": 12,
          "lg": 16,
          "xl": 24,
          "xxl": 32
        },
        "measure": {
          "settingsLabel": 120,
          "readableWidth": 360,
          "dialogWidth": 360,
          "menuMinWidth": 200,
          "compactMenuMinWidth": 180,
          "menuMaxHeight": 320,
          "compactMenuMaxHeight": 240,
          "standaloneIcon": 20,
          "scrollbarTrack": 10,
          "scrollbarThumb": 6,
          "scrollbarMinThumb": 24,
          "caretWidth": 1.5,
          "textDecorationWidth": 1,
          "progressTrackHeight": 4,
          "sliderTrackHeight": 6,
          "sliderVerticalHeight": 160,
          "containerSmall": 640,
          "containerMedium": 768,
          "containerLarge": 1024,
          "containerExtraLarge": 1280,
          "compactOverlayWidth": 320,
          "mediaViewerHeight": 320,
          "timelineRailWidth": 16,
          "statusMark": 7,
          "nodeEdgeWidth": 2,
          "nodeEdgeCorner": 18,
          "nodeEdgeLead": 36,
          "nodeEdgeCorridor": 48,
          "nodeEdgeLane": 16,
          "nodePort": 20,
          "nodeProgress": 3
        },
        "radius": {
          "small": 5,
          "control": 8,
          "card": 12,
          "dialog": 16,
          "bubble": 16,
          "pill": 999
        },
        "control": {
          "xs": {
            "height": 20,
            "paddingX": 6,
            "gap": 4,
            "fontSize": 11,
            "iconSize": 12
          },
          "sm": {
            "height": 24,
            "paddingX": 8,
            "gap": 5,
            "fontSize": 12,
            "iconSize": 14
          },
          "md": {
            "height": 28,
            "paddingX": 12,
            "gap": 6,
            "fontSize": 13,
            "iconSize": 15
          },
          "lg": {
            "height": 34,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 14,
            "iconSize": 17
          },
          "touch": {
            "height": 48,
            "paddingX": 16,
            "gap": 8,
            "fontSize": 16,
            "iconSize": 20
          }
        },
        "border": {
          "hairline": 1,
          "thick": 2
        },
        "opacity": {
          "disabled": 0.62,
          "muted": 0.68,
          "scrim": 0.6
        },
        "elevation": {
          "flat": [],
          "raised": [
            {
              "y": 1,
              "blur": 3,
              "spread": 0,
              "color": "{neutral.0}/35"
            },
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/59"
            }
          ],
          "overlay": [
            {
              "y": 2,
              "blur": 6,
              "spread": -1,
              "color": "{neutral.0}/3d"
            },
            {
              "y": 8,
              "blur": 24,
              "spread": -4,
              "color": "{neutral.0}/66"
            }
          ],
          "modal": [
            {
              "y": 4,
              "blur": 12,
              "spread": -2,
              "color": "{neutral.0}/54"
            },
            {
              "y": 16,
              "blur": 48,
              "spread": -8,
              "color": "{neutral.0}/8c"
            }
          ]
        },
        "zIndex": {
          "content": 0,
          "sticky": 100,
          "dock": 200,
          "popover": 300,
          "tooltip": 400,
          "modal": 500,
          "toast": 600
        },
        "density": {
          "compact": {
            "space": 0.75,
            "control": 0.86,
            "font": 0.94
          },
          "comfortable": {
            "space": 1,
            "control": 1,
            "font": 1
          }
        },
        "typography": {
          "sans": {
            "family": "Geist",
            "fallbackMacos": "Helvetica",
            "fallbackWindows": "Segoe UI",
            "fallbackLinux": "DejaVu Sans"
          },
          "mono": {
            "family": "Geist Mono",
            "fallbackMacos": "Menlo",
            "fallbackWindows": "Consolas",
            "fallbackLinux": "DejaVu Sans Mono"
          },
          "readoutScale": 1.6,
          "scale": {
            "caption": {
              "size": 10.5,
              "lineHeight": 14,
              "weight": 400
            },
            "label": {
              "size": 12,
              "lineHeight": 16,
              "weight": 500
            },
            "body": {
              "size": 13,
              "lineHeight": 19,
              "weight": 400
            },
            "strong": {
              "size": 13,
              "lineHeight": 19,
              "weight": 600
            },
            "subtitle": {
              "size": 14,
              "lineHeight": 20,
              "weight": 600
            },
            "title": {
              "size": 16,
              "lineHeight": 22,
              "weight": 600
            },
            "code": {
              "size": 12,
              "lineHeight": 18,
              "weight": 400
            }
          }
        },
        "motion": {
          "durationMs": {
            "instant": 90,
            "quick": 150,
            "exit": 120,
            "menu": 140,
            "dialog": 180,
            "resize": 200,
            "entrance": 500,
            "slow": 320,
            "staggerStep": 16,
            "microBounce": 360,
            "microWobble": 280,
            "microPop": 240,
            "spin": 900,
            "pulse": 2400,
            "nodeAuraPulse": 2800,
            "nodeFlow": 1800,
            "shimmer": 1400,
            "toast": 6000,
            "hoverCardOpen": 400,
            "hoverCardGrace": 300,
            "feedback": 900,
            "celebration": 1600,
            "confirmation": 1600
          },
          "easing": {
            "linear": [
              0,
              0,
              1,
              1
            ],
            "standard": [
              0.4,
              0,
              0.2,
              1
            ],
            "easeIn": [
              0.42,
              0,
              1,
              1
            ],
            "easeOut": [
              0,
              0,
              0.58,
              1
            ],
            "easeInOut": [
              0.42,
              0,
              0.58,
              1
            ],
            "emphasized": [
              0.2,
              0,
              0,
              1
            ],
            "overshoot": [
              0.34,
              1.56,
              0.64,
              1
            ],
            "exit": [
              0.4,
              0,
              1,
              1
            ],
            "settle": [
              0.16,
              1,
              0.3,
              1
            ]
          },
          "spring": {
            "snappy": {
              "stiffness": 380,
              "damping": 30,
              "mass": 1
            },
            "smooth": {
              "stiffness": 180,
              "damping": 26,
              "mass": 1
            },
            "bouncy": {
              "stiffness": 260,
              "damping": 16,
              "mass": 1
            },
            "grab": {
              "stiffness": 520,
              "damping": 42,
              "mass": 1
            }
          },
          "staggerMaxItems": 8,
          "pressOffsetPx": 1,
          "hoverLiftPx": 1,
          "flickVelocityPxPerSec": 420,
          "rubberBandTension": 0.55
        },
        "effect": {
          "fieldFocus": "ring",
          "edgeFadeBand": 20,
          "focusRingWidth": 2,
          "focusRingAlpha": 0.7,
          "glowAlpha": 0.26,
          "glowBlur": 12,
          "glowSpread": -5,
          "glassAlpha": 0.72,
          "glassFrostBlur": 24,
          "glassSaturation": 1.5,
          "glassWash": 0.45,
          "glassBevelRatio": 0.225,
          "glassBevelMin": 8,
          "glassBevelMax": 36,
          "glassDimming": 0.35,
          "glassFlipMaxExtent": 72,
          "glassShadowMin": 0.8,
          "glassShadowMax": 1.5,
          "glassRefraction": 0.34,
          "glassThickness": 0,
          "glassRefractiveIndex": 1.5,
          "glassBackdropDepth": 0,
          "glassDispersion": 0.005,
          "glassSpecular": 0.06,
          "glassTransmissionGain": 1.042,
          "glassOpticalLift": 0.075,
          "glassHairline": 1,
          "glassSpecularSharpness": 12,
          "glassLightAngle": 0.7853982,
          "glassMergeDistance": 28,
          "glassContrastFlipLow": 0.42,
          "glassContrastFlipHigh": 0.58,
          "glassPressDepth": 1.5,
          "glassPressScale": 1.014,
          "scrollEdgeBand": 28,
          "scrollEdgeBlur": 16,
          "sheenAlpha": 0.08,
          "areaWashAlpha": 0.22,
          "headerTintAlpha": 0.18,
          "nodeActiveWashAlpha": 0.14,
          "nodeActiveStrokeAlpha": 0.72,
          "nodeTrafficAlpha": 0.82,
          "nodePreviewAlpha": 0.88,
          "nodeMinimapAlpha": 0.7,
          "nodeOverviewVeilAlpha": 0.55,
          "nodeAuraRestingAlpha": 0.72,
          "nodeAuraPulseFloorAlpha": 0.54,
          "nodeAuraPulsePeakAlpha": 1,
          "nodeAuraSettlePeakAlpha": 1,
          "nodeAuraSettleExpansion": 0.65,
          "nodeEdgeHoverWidthScale": 1.8,
          "nodeEdgeSelectedWidthScale": 2.4,
          "nodeEdgeGlowWidthScale": 5.5,
          "railWidth": 3,
          "semanticWashFaintAlpha": 0.06,
          "semanticWashAlpha": 0.1,
          "semanticWashStrongAlpha": 0.16,
          "semanticBorderAlpha": 0.4,
          "accentBorderAlpha": 0.55,
          "accentBorderStrongAlpha": 0.7,
          "subtleHoverAlpha": 0.3,
          "softContrastAlpha": 0.18,
          "contrastTintAlpha": 0.28,
          "trackRestingAlpha": 0.55,
          "contentVeilAlpha": 0.88,
          "criticalFillAlpha": 0.84,
          "criticalInactiveAlpha": 0.1,
          "variantLightAlpha": 0.15,
          "variantLightHoverAlpha": 0.22,
          "variantLightActiveAlpha": 0.28,
          "variantSubtleHoverAlpha": 0.12,
          "variantSubtleActiveAlpha": 0.18,
          "primaryHoverOpacity": 0.9,
          "customColorReadableDarkFloor": 0.72,
          "customColorReadableLightCeiling": 0.4,
          "customColorHoverLightnessDelta": 0.05,
          "customColorActiveLightnessDelta": 0.1
        }
      }
    }
  ],
  "guides": [
    {
      "slug": "abi-vocabulary",
      "title": "ABI vocabulary feasibility",
      "path": "docs/abi-vocabulary.md",
      "summary": "GPUI Box Kit can be the public visual vocabulary of a host-rendered plugin ABI. It cannot become that vocabulary by serializing its current public API. The components are renderer contracts: they take GPUI elements, entities, focus handles, and callbacks, while the wire needs stable data and typed intent."
    },
    {
      "slug": "accessibility",
      "title": "Accessibility",
      "path": "docs/accessibility.md",
      "summary": "Every pointer action has a keyboard path. Menus support Up, Down, Enter, and Escape. Modified Enter is modeled separately when an application assigns it a distinct action."
    },
    {
      "slug": "bounds-tree-performance",
      "title": "BoundsTree balance and CPU evidence",
      "path": "docs/bounds-tree-performance.md",
      "summary": "This is index-only Linux/x86-64 orb evidence from 2026-09-13, against the pre-change [base](https://github.com/fran0220/gpui-box/commit/53ddf792b9ec641d8c5d3bcb47fb22c532f50a09). It measures neither native GPU performance nor FPS. Scene recording, renderers, resource leases, geography components and presentation are outside this change."
    },
    {
      "slug": "cartesian-charts",
      "title": "Raw Cartesian charts",
      "path": "docs/cartesian-charts.md",
      "summary": "The normalized `LineChart`, `AreaChart`, `BarChart`, `ScatterChart`, `StackedBarChart`, `PieChart`, `RadarChart` and `GaugeChart` APIs are unchanged. Use `display::chart::cartesian::CartesianChart` when Kit should compute a shared coordinate system from raw observations rather than receive normalized points."
    },
    {
      "slug": "compatibility",
      "title": "GPUI Box compatibility",
      "path": "docs/compatibility.md",
      "summary": "GPUI Box owns its framework and package compatibility. There is one package and type universe: applications use Cargo package `gpui-box` as Rust crate `gpui`, and `gpui-box-kit` as `gpui_kit`. Zed crates must not be mixed into that graph."
    },
    {
      "slug": "component-contracts",
      "title": "Component contracts",
      "path": "docs/component-contracts.md",
      "summary": "Every component:"
    },
    {
      "slug": "components",
      "title": "Components",
      "path": "docs/components.md",
      "summary": "Every component derives its GPUI element id and its semantic assertion id from one caller-supplied `Ident`, reads the theme from the application context, and publishes a semantic node during prepaint. Builders are `RenderOnce`; anything that must survive a frame is a view."
    },
    {
      "slug": "content",
      "title": "Content",
      "path": "docs/content.md",
      "summary": "`Markdown`, `AgentDocument`, and `MessageList` are the surfaces in this library that draw text nobody in the application wrote. A button's label is authored; a document's contents, a typed model result, and a message's body are not. They arrive from a file, a model, or another person, and they may contain a tag, a destination, or an image reference that would act on the reader if anything here acted on it."
    },
    {
      "slug": "coverage",
      "title": "Coverage",
      "path": "docs/coverage.md",
      "summary": "What a general-purpose desktop UI library is expected to provide, what this one provides, and what is deliberately out of scope. GPUI Box is the application substrate: if a downstream desktop or browser-hosted product needs a surface to exist, the surface belongs here unless it is a host fact, a locale fact, a transport, or a platform chrome the OS already owns. `docs/components.md` describes the components themselves; this file exists so a gap is a recorded decision rather than an oversight."
    },
    {
      "slug": "datetime",
      "title": "Date and time",
      "path": "docs/datetime.md",
      "summary": "The date-picker components have no calendar system, time-zone database, locale, or notion of what day it is. `Calendar`, `DateInput`, `RangePicker`, and `TimeInput` draw dates and read them, and every fact they draw arrives through one trait the host implements: `gpui_kit::datetime::DateAdapter`."
    },
    {
      "slug": "deploying",
      "title": "Deploying the GPUI Box catalog",
      "path": "docs/deploying.md",
      "summary": "The production service is owned entirely by this repository and runs on BWG. Nginx serves the generated site and terminates TLS; a dedicated unprivileged systemd service listens on `127.0.0.1:9350` for stateless MCP requests. `gpui-box.origingame.dev` is canonical and `gpui-kit.origingame.dev` remains an alias to the same release. There is no Cloudflare Worker or Pages runtime and no OriginGame repository dependency."
    },
    {
      "slug": "design-principles",
      "title": "Design principles",
      "path": "docs/design-principles.md",
      "summary": "This is application chrome, not a marketing page. Controls are compact, information remains scannable, and vertical rhythm favors work over spectacle."
    },
    {
      "slug": "foundation-roadmap",
      "title": "Product foundation roadmap",
      "path": "docs/foundation-roadmap.md",
      "summary": "This roadmap closes five substrate gaps that otherwise force every host to invent a private UI framework beside GPUI Box: basic rich-text editing, Linux/Web media, real platform accessibility, enforceable performance budgets, and window-safe plugin mounting. They are in scope. The work is staged because they share framework primitives and must not become five unrelated component implementations."
    },
    {
      "slug": "geography",
      "title": "Local geographic visualization",
      "path": "docs/geography.md",
      "summary": "`gpui_kit::display::geography` provides `GeoMap`, immutable validated `GeoData`, and f64 projection/camera types. The `geography` exhibit uses original synthetic regions, not boundaries of any real territory. No tiles, geocoding, network, provider assets, geodesic engine, or 3D renderer is included. Local GeoJSON ingestion supports the explicit subset below."
    },
    {
      "slug": "gpui-recipes",
      "title": "GPUI recipes",
      "path": "docs/gpui-recipes.md",
      "summary": "```rust let app = gpui_platform::application() .with_assets(gpui_kit::assets::Assets);"
    },
    {
      "slug": "graph-trace-visualization",
      "title": "Graph layout and temporal viewport contracts",
      "path": "docs/graph-trace-visualization.md",
      "summary": "`canvas::layered_layout_sized` is an opt-in caller-side layout. It consumes stable identities, positive finite measured sizes and edges, returning bounds sorted by identity. Lexical ordering is independent of node/edge input order. Weak components occupy separate bands; column widths and row heights use the largest/actual dimensions rather than fixed center-to-center spacing."
    },
    {
      "slug": "host-view-boundary",
      "title": "Host/view boundary",
      "path": "docs/host-view-boundary.md",
      "summary": "A GPUI view may:"
    },
    {
      "slug": "interaction",
      "title": "Drag and drop",
      "path": "docs/interaction.md",
      "summary": "A drag starts in one component and finishes in another, so the rules cannot live inside either of them. They live in `gpui_kit::interaction::dnd`, and every surface that can be dragged from or dropped on implements the same contract: `List`, `Tree`, `Tabs`, and `Dropzone`."
    },
    {
      "slug": "mcp",
      "title": "GPUI Box Developer MCP",
      "path": "docs/mcp.md",
      "summary": "The MCP is the generated developer surface of this repository, not a wrapper around the last crates.io cohort. It covers the complete package authority, public Rust source declarations and methods, Kit's compiler-checked component API, themes and token documents, guides and guide-section recipes, assets, compatibility data, scenes, committed captures, and redacted semantic trees."
    },
    {
      "slug": "measured-semantic-leaves",
      "title": "Measured descriptive leaves without per-target layout",
      "path": "docs/measured-semantic-leaves.md",
      "summary": "`gpui_kit_semantics::MeasuredLeafBatch` is for descriptions of many caller-owned geometries, not controls. It uses one layout element and a real native Group, publishing native children with the existing `A11ySubtreeBuilder` authority. Diagnostics go to the installed, window-scoped semantic coordinator. No second registry, renderer, clip engine, input route or retained leaf cache is added."
    },
    {
      "slug": "migration-guide",
      "title": "Migration guide",
      "path": "docs/migration-guide.md",
      "summary": "This guide moves an existing GPUI application onto the `gpui-box` framework and `gpui-box-kit` component library without a big-bang shell rewrite."
    },
    {
      "slug": "motion",
      "title": "Motion",
      "path": "docs/motion.md",
      "summary": "Motion in this library is layered, and every layer is pure enough to test without a window."
    },
    {
      "slug": "performance-testing",
      "title": "Deterministic performance testing",
      "path": "docs/performance-testing.md",
      "summary": "GPUI Box treats performance shape as a compatibility contract. A large data set must not make a bounded viewport mount, lay out, paint, or publish every item. The authority check is:"
    },
    {
      "slug": "reactive",
      "title": "Reactive state",
      "path": "docs/reactive.md",
      "summary": "`gpui_kit::reactive` is caller-owned state and the wiring that connects it to a control. Nothing in it renders, and no component owns any of it."
    },
    {
      "slug": "releasing",
      "title": "Releasing GPUI Box",
      "path": "docs/releasing.md",
      "summary": "This is the runbook for GPUI Box source releases and crates.io publication. Source releases do not imply that a version exists on crates.io."
    },
    {
      "slug": "screenshot-testing",
      "title": "Screenshot testing",
      "path": "docs/screenshot-testing.md",
      "summary": "The `gpui_kit_testkit::capture` module from Cargo package `gpui-box-kit-testkit` answers two different questions with two functions."
    },
    {
      "slug": "semantic-automation",
      "title": "Semantic automation",
      "path": "docs/semantic-automation.md",
      "summary": "GPUI renders native windows without a browser DOM. `gpui-box-kit-semantics` provides a small, transport-independent semantic tree."
    },
    {
      "slug": "specialized-visualizations",
      "title": "Specialized visualization interaction and motion",
      "path": "docs/specialized-visualizations.md",
      "summary": "`SpecializedData` validates raw measurements and builds normalized geometry. `SpecializedChart` renders the geometry, exact-value key, selection, hierarchy navigation, and optional visual transitions. `ContinuousHeatmap` maps an explicit raw domain to colors. `Plot` owns measured frame/input/readout/label placement; it does not infer a second scale system."
    },
    {
      "slug": "token-model",
      "title": "Token model",
      "path": "docs/token-model.md",
      "summary": "The documents under `crates/gpui-kit-tokens/tokens/` are the authority, and they sit inside the crate that embeds them so that crate can be packaged on its own. `schema.json` is the single current portable schema; documents and nested objects reject unknown or legacy fields rather than carrying compatibility readers. Cargo package `gpui-box-kit-tokens` embeds and validates every bundled theme; `gpui-box-kit-theme` is the only GPUI adapter. `studio-dark` is the default and `studio-light` is its light counterpart."
    },
    {
      "slug": "token-reference",
      "title": "Token reference",
      "path": "docs/token-reference.md",
      "summary": "<!-- @generated by `cargo xtask tokens generate`; do not edit. --> # Token reference"
    },
    {
      "slug": "truthful-ui",
      "title": "Truthful UI",
      "path": "docs/truthful-ui.md",
      "summary": "Truthful UI means the display does not claim more than the owning application layer knows."
    },
    {
      "slug": "upstream-resync-assessment",
      "title": "Upstream resynchronization assessment",
      "path": "docs/upstream-resync-assessment.md",
      "summary": "This is a cost assessment, not an import plan or an update receipt. GPUI Box remains the development authority, no upstream tree was merged, and the frozen vendor refs were not advanced."
    },
    {
      "slug": "visualization-data",
      "title": "Calendar ticks and source-traceable transforms",
      "path": "docs/visualization-data.md",
      "summary": "These pure utilities prepare caller-owned data. They do not fetch, query, guess a timezone, translate labels, or modify a chart's selection. Keep their results with the immutable data revision rather than recomputing during paint."
    },
    {
      "slug": "webview",
      "title": "Native browser host",
      "path": "docs/webview.md",
      "summary": "`gpui-box-webview` is an independent caller-owned host, not a Kit transport or the application/plugin JavaScript runtime. `BrowserHost` owns Wry 0.57.0 and the operating-system browser: WKWebView on macOS, WebView2 on Windows, WebKitGTK 4.1 on Linux X11/XWayland. These engines supply full HTML, CSS, JavaScript, DOM, text selection and native keyboard/IME behavior. Their web standards/codec coverage follows the installed engine, not a GPUI HTML subset."
    }
  ],
  "recipes": [
    {
      "id": "abi-vocabulary-verdict",
      "title": "Verdict",
      "guide": "abi-vocabulary",
      "anchor": "verdict"
    },
    {
      "id": "abi-vocabulary-how-this-inventory-reads-the-current-api",
      "title": "How this inventory reads the current API",
      "guide": "abi-vocabulary",
      "anchor": "how-this-inventory-reads-the-current-api"
    },
    {
      "id": "abi-vocabulary-component-inventory",
      "title": "Component inventory",
      "guide": "abi-vocabulary",
      "anchor": "component-inventory"
    },
    {
      "id": "abi-vocabulary-the-current-serializable-boundary-is-semantic-output",
      "title": "The current serializable boundary is semantic output",
      "guide": "abi-vocabulary",
      "anchor": "the-current-serializable-boundary-is-semantic-output"
    },
    {
      "id": "abi-vocabulary-derive-a-parallel-dto-vocabulary",
      "title": "Derive a parallel DTO vocabulary",
      "guide": "abi-vocabulary",
      "anchor": "derive-a-parallel-dto-vocabulary"
    },
    {
      "id": "abi-vocabulary-vocabulary-evolution-is-additive-within-a-major",
      "title": "Vocabulary evolution is additive within a major",
      "guide": "abi-vocabulary",
      "anchor": "vocabulary-evolution-is-additive-within-a-major"
    },
    {
      "id": "abi-vocabulary-plugin-mounted-semantic-trees",
      "title": "Plugin-mounted semantic trees",
      "guide": "abi-vocabulary",
      "anchor": "plugin-mounted-semantic-trees"
    },
    {
      "id": "abi-vocabulary-gaps-ranked-for-plugin-abi-v1",
      "title": "Gaps ranked for plugin ABI v1",
      "guide": "abi-vocabulary",
      "anchor": "gaps-ranked-for-plugin-abi-v1"
    },
    {
      "id": "accessibility-keyboard",
      "title": "Keyboard",
      "guide": "accessibility",
      "anchor": "keyboard"
    },
    {
      "id": "accessibility-focus",
      "title": "Focus",
      "guide": "accessibility",
      "anchor": "focus"
    },
    {
      "id": "accessibility-roles-and-names",
      "title": "Roles and names",
      "guide": "accessibility",
      "anchor": "roles-and-names"
    },
    {
      "id": "accessibility-contrast",
      "title": "Contrast",
      "guide": "accessibility",
      "anchor": "contrast"
    },
    {
      "id": "accessibility-motion",
      "title": "Motion",
      "guide": "accessibility",
      "anchor": "motion"
    },
    {
      "id": "accessibility-content-boundaries",
      "title": "Content boundaries",
      "guide": "accessibility",
      "anchor": "content-boundaries"
    },
    {
      "id": "accessibility-platform-claims",
      "title": "Platform claims",
      "guide": "accessibility",
      "anchor": "platform-claims"
    },
    {
      "id": "bounds-tree-performance-contract-and-algorithm",
      "title": "Contract and algorithm",
      "guide": "bounds-tree-performance",
      "anchor": "contract-and-algorithm"
    },
    {
      "id": "bounds-tree-performance-reproduce-the-isolated-comparison",
      "title": "Reproduce the isolated comparison",
      "guide": "bounds-tree-performance",
      "anchor": "reproduce-the-isolated-comparison"
    },
    {
      "id": "bounds-tree-performance-structural-evidence-exposes-the-old-degeneration",
      "title": "Structural evidence exposes the old degeneration",
      "guide": "bounds-tree-performance",
      "anchor": "structural-evidence-exposes-the-old-degeneration"
    },
    {
      "id": "bounds-tree-performance-optimized-cpu-samples",
      "title": "Optimized CPU samples",
      "guide": "bounds-tree-performance",
      "anchor": "optimized-cpu-samples"
    },
    {
      "id": "bounds-tree-performance-debug-cpu-samples-and-completed-checks",
      "title": "Debug CPU samples and completed checks",
      "guide": "bounds-tree-performance",
      "anchor": "debug-cpu-samples-and-completed-checks"
    },
    {
      "id": "bounds-tree-performance-correctness-and-remaining-integration-checks",
      "title": "Correctness and remaining integration checks",
      "guide": "bounds-tree-performance",
      "anchor": "correctness-and-remaining-integration-checks"
    },
    {
      "id": "cartesian-charts-coordinate-contracts",
      "title": "Coordinate contracts",
      "guide": "cartesian-charts",
      "anchor": "coordinate-contracts"
    },
    {
      "id": "cartesian-charts-composition-and-controlled-input",
      "title": "Composition and controlled input",
      "guide": "cartesian-charts",
      "anchor": "composition-and-controlled-input"
    },
    {
      "id": "cartesian-charts-orientation-caller-ticks-and-custom-marks",
      "title": "Orientation, caller ticks and custom marks",
      "guide": "cartesian-charts",
      "anchor": "orientation-caller-ticks-and-custom-marks"
    },
    {
      "id": "cartesian-charts-keyed-geometry-style-and-presence",
      "title": "Keyed geometry, style and presence",
      "guide": "cartesian-charts",
      "anchor": "keyed-geometry-style-and-presence"
    },
    {
      "id": "cartesian-charts-persistent-selection-and-overview",
      "title": "Persistent selection and overview",
      "guide": "cartesian-charts",
      "anchor": "persistent-selection-and-overview"
    },
    {
      "id": "cartesian-charts-shared-data-sampling-and-measured-performance",
      "title": "Shared data, sampling and measured performance",
      "guide": "cartesian-charts",
      "anchor": "shared-data-sampling-and-measured-performance"
    },
    {
      "id": "compatibility-0-1-x-matrix",
      "title": "0.1.x matrix",
      "guide": "compatibility",
      "anchor": "0-1-x-matrix"
    },
    {
      "id": "compatibility-platform-evidence-and-limits",
      "title": "Platform evidence and limits",
      "guide": "compatibility",
      "anchor": "platform-evidence-and-limits"
    },
    {
      "id": "compatibility-focus-visibility",
      "title": "Focus visibility",
      "guide": "compatibility",
      "anchor": "focus-visibility"
    },
    {
      "id": "compatibility-native-external-data-drag-and-drop",
      "title": "Native external data drag and drop",
      "guide": "compatibility",
      "anchor": "native-external-data-drag-and-drop"
    },
    {
      "id": "compatibility-framework-development-contract",
      "title": "Framework development contract",
      "guide": "compatibility",
      "anchor": "framework-development-contract"
    },
    {
      "id": "compatibility-editable-layout-ownership-and-lazy-source-geometry",
      "title": "Editable layout ownership and lazy source geometry",
      "guide": "compatibility",
      "anchor": "editable-layout-ownership-and-lazy-source-geometry"
    },
    {
      "id": "compatibility-native-browser-host-evidence",
      "title": "Native browser host evidence",
      "guide": "compatibility",
      "anchor": "native-browser-host-evidence"
    },
    {
      "id": "compatibility-editable-viewport-browsing",
      "title": "Editable viewport browsing",
      "guide": "compatibility",
      "anchor": "editable-viewport-browsing"
    },
    {
      "id": "component-contracts-general-contract",
      "title": "General contract",
      "guide": "component-contracts",
      "anchor": "general-contract"
    },
    {
      "id": "component-contracts-buttons",
      "title": "Buttons",
      "guide": "component-contracts",
      "anchor": "buttons"
    },
    {
      "id": "component-contracts-badge-and-status",
      "title": "Badge and status",
      "guide": "component-contracts",
      "anchor": "badge-and-status"
    },
    {
      "id": "component-contracts-cards-and-settings",
      "title": "Cards and settings",
      "guide": "component-contracts",
      "anchor": "cards-and-settings"
    },
    {
      "id": "component-contracts-popovers-and-dialogs",
      "title": "Popovers and dialogs",
      "guide": "component-contracts",
      "anchor": "popovers-and-dialogs"
    },
    {
      "id": "component-contracts-loading",
      "title": "Loading",
      "guide": "component-contracts",
      "anchor": "loading"
    },
    {
      "id": "component-contracts-long-content",
      "title": "Long content",
      "guide": "component-contracts",
      "anchor": "long-content"
    },
    {
      "id": "components-controls",
      "title": "Controls",
      "guide": "components",
      "anchor": "controls"
    },
    {
      "id": "components-display",
      "title": "Display",
      "guide": "components",
      "anchor": "display"
    },
    {
      "id": "components-agent-experience",
      "title": "Agent experience",
      "guide": "components",
      "anchor": "agent-experience"
    },
    {
      "id": "components-game-experience",
      "title": "Game experience",
      "guide": "components",
      "anchor": "game-experience"
    },
    {
      "id": "components-navigation",
      "title": "Navigation",
      "guide": "components",
      "anchor": "navigation"
    },
    {
      "id": "components-layout",
      "title": "Layout",
      "guide": "components",
      "anchor": "layout"
    },
    {
      "id": "components-data",
      "title": "Data",
      "guide": "components",
      "anchor": "data"
    },
    {
      "id": "components-date-and-time",
      "title": "Date and time",
      "guide": "components",
      "anchor": "date-and-time"
    },
    {
      "id": "components-content",
      "title": "Content",
      "guide": "components",
      "anchor": "content"
    },
    {
      "id": "components-media",
      "title": "Media",
      "guide": "components",
      "anchor": "media"
    },
    {
      "id": "components-interaction",
      "title": "Interaction",
      "guide": "components",
      "anchor": "interaction"
    },
    {
      "id": "components-overlay",
      "title": "Overlay",
      "guide": "components",
      "anchor": "overlay"
    },
    {
      "id": "components-agent-run",
      "title": "Agent run",
      "guide": "components",
      "anchor": "agent-run"
    },
    {
      "id": "components-permission-and-cost",
      "title": "Permission and cost",
      "guide": "components",
      "anchor": "permission-and-cost"
    },
    {
      "id": "components-structured-data",
      "title": "Structured data",
      "guide": "components",
      "anchor": "structured-data"
    },
    {
      "id": "components-what-every-component-agrees-on",
      "title": "What every component agrees on",
      "guide": "components",
      "anchor": "what-every-component-agrees-on"
    },
    {
      "id": "components-what-a-node-s-value-means",
      "title": "What a node's `value` means",
      "guide": "components",
      "anchor": "what-a-node-s-value-means"
    },
    {
      "id": "components-what-a-component-owns",
      "title": "What a component owns",
      "guide": "components",
      "anchor": "what-a-component-owns"
    },
    {
      "id": "components-validation",
      "title": "Validation",
      "guide": "components",
      "anchor": "validation"
    },
    {
      "id": "content-the-markdown-security-posture",
      "title": "The Markdown security posture",
      "guide": "content",
      "anchor": "the-markdown-security-posture"
    },
    {
      "id": "content-the-message-list-s-delivery-vocabulary",
      "title": "The message list's delivery vocabulary",
      "guide": "content",
      "anchor": "the-message-list-s-delivery-vocabulary"
    },
    {
      "id": "content-media",
      "title": "Media",
      "guide": "content",
      "anchor": "media"
    },
    {
      "id": "coverage-covered",
      "title": "Covered",
      "guide": "coverage",
      "anchor": "covered"
    },
    {
      "id": "coverage-systems-which-span-more-than-one-component",
      "title": "Systems, which span more than one component",
      "guide": "coverage",
      "anchor": "systems-which-span-more-than-one-component"
    },
    {
      "id": "coverage-one-resize-implementation",
      "title": "One resize implementation",
      "guide": "coverage",
      "anchor": "one-resize-implementation"
    },
    {
      "id": "coverage-table-or-datagrid",
      "title": "Table or DataGrid",
      "guide": "coverage",
      "anchor": "table-or-datagrid"
    },
    {
      "id": "coverage-helpers-which-the-four-part-rule-does-not-reach",
      "title": "Helpers, which the four-part rule does not reach",
      "guide": "coverage",
      "anchor": "helpers-which-the-four-part-rule-does-not-reach"
    },
    {
      "id": "coverage-out-of-scope-and-why",
      "title": "Out of scope, and why",
      "guide": "coverage",
      "anchor": "out-of-scope-and-why"
    },
    {
      "id": "coverage-framework-and-platform-limitations",
      "title": "Framework and platform limitations",
      "guide": "coverage",
      "anchor": "framework-and-platform-limitations"
    },
    {
      "id": "coverage-rules-every-covered-component-follows",
      "title": "Rules every covered component follows",
      "guide": "coverage",
      "anchor": "rules-every-covered-component-follows"
    },
    {
      "id": "coverage-headless-capture-order-dependence-glass-probes",
      "title": "Headless capture order dependence — glass probes",
      "guide": "coverage",
      "anchor": "headless-capture-order-dependence-glass-probes"
    },
    {
      "id": "coverage-image-atlas-placement-precision-separate-from-probe-ownership",
      "title": "Image-atlas placement precision — separate from probe ownership",
      "guide": "coverage",
      "anchor": "image-atlas-placement-precision-separate-from-probe-ownership"
    },
    {
      "id": "coverage-clear-pill-geometry-and-dimming-order",
      "title": "Clear Pill geometry and dimming order",
      "guide": "coverage",
      "anchor": "clear-pill-geometry-and-dimming-order"
    },
    {
      "id": "coverage-unicode-line-breaks-across-text-and-inline-objects",
      "title": "Unicode line breaks across text and inline objects",
      "guide": "coverage",
      "anchor": "unicode-line-breaks-across-text-and-inline-objects"
    },
    {
      "id": "coverage-intrinsic-image-sizing-is-separate-from-object-fitting",
      "title": "Intrinsic image sizing is separate from object fitting",
      "guide": "coverage",
      "anchor": "intrinsic-image-sizing-is-separate-from-object-fitting"
    },
    {
      "id": "coverage-incremental-source-text-foundation",
      "title": "Incremental source-text foundation",
      "guide": "coverage",
      "anchor": "incremental-source-text-foundation"
    },
    {
      "id": "coverage-native-browser-engines-remain-independent-of-kit",
      "title": "Native browser engines remain independent of Kit",
      "guide": "coverage",
      "anchor": "native-browser-engines-remain-independent-of-kit"
    },
    {
      "id": "coverage-native-editable-geometry-preserves-affinity-not-missing-font-data",
      "title": "Native editable geometry preserves affinity, not missing font data",
      "guide": "coverage",
      "anchor": "native-editable-geometry-preserves-affinity-not-missing-font-data"
    },
    {
      "id": "coverage-virtual-root-reflow-and-ambient-offsets",
      "title": "Virtual-root reflow and ambient offsets",
      "guide": "coverage",
      "anchor": "virtual-root-reflow-and-ambient-offsets"
    },
    {
      "id": "datetime-why-the-seam-is-here",
      "title": "Why the seam is here",
      "guide": "datetime",
      "anchor": "why-the-seam-is-here"
    },
    {
      "id": "datetime-what-a-host-implements",
      "title": "What a host implements",
      "guide": "datetime",
      "anchor": "what-a-host-implements"
    },
    {
      "id": "datetime-what-each-component-does-when-the-adapter-knows-nothing",
      "title": "What each component does when the adapter knows nothing",
      "guide": "datetime",
      "anchor": "what-each-component-does-when-the-adapter-knows-nothing"
    },
    {
      "id": "datetime-what-the-components-own",
      "title": "What the components own",
      "guide": "datetime",
      "anchor": "what-the-components-own"
    },
    {
      "id": "datetime-the-fixture-calendar",
      "title": "The fixture calendar",
      "guide": "datetime",
      "anchor": "the-fixture-calendar"
    },
    {
      "id": "datetime-semantics",
      "title": "Semantics",
      "guide": "datetime",
      "anchor": "semantics"
    },
    {
      "id": "deploying-release-flow",
      "title": "Release flow",
      "guide": "deploying",
      "anchor": "release-flow"
    },
    {
      "id": "deploying-one-time-host-bootstrap",
      "title": "One-time host bootstrap",
      "guide": "deploying",
      "anchor": "one-time-host-bootstrap"
    },
    {
      "id": "deploying-published-inputs",
      "title": "Published inputs",
      "guide": "deploying",
      "anchor": "published-inputs"
    },
    {
      "id": "deploying-routing-and-rollback",
      "title": "Routing and rollback",
      "guide": "deploying",
      "anchor": "routing-and-rollback"
    },
    {
      "id": "design-principles-compact-native-desktop-density",
      "title": "Compact native desktop density",
      "guide": "design-principles",
      "anchor": "compact-native-desktop-density"
    },
    {
      "id": "design-principles-surfaces-establish-hierarchy",
      "title": "Surfaces establish hierarchy",
      "guide": "design-principles",
      "anchor": "surfaces-establish-hierarchy"
    },
    {
      "id": "design-principles-a-line-says-something-a-surface-cannot",
      "title": "A line says something a surface cannot",
      "guide": "design-principles",
      "anchor": "a-line-says-something-a-surface-cannot"
    },
    {
      "id": "design-principles-selection-is-a-tonal-fill",
      "title": "Selection is a tonal fill",
      "guide": "design-principles",
      "anchor": "selection-is-a-tonal-fill"
    },
    {
      "id": "design-principles-accent-has-limited-area",
      "title": "Accent has limited area",
      "guide": "design-principles",
      "anchor": "accent-has-limited-area"
    },
    {
      "id": "design-principles-geometry-is-semantic",
      "title": "Geometry is semantic",
      "guide": "design-principles",
      "anchor": "geometry-is-semantic"
    },
    {
      "id": "design-principles-production-style-has-one-authority",
      "title": "Production style has one authority",
      "guide": "design-principles",
      "anchor": "production-style-has-one-authority"
    },
    {
      "id": "design-principles-state-is-complete",
      "title": "State is complete",
      "guide": "design-principles",
      "anchor": "state-is-complete"
    },
    {
      "id": "design-principles-motion-supports-continuity",
      "title": "Motion supports continuity",
      "guide": "design-principles",
      "anchor": "motion-supports-continuity"
    },
    {
      "id": "design-principles-effects-preserve-structure",
      "title": "Effects preserve structure",
      "guide": "design-principles",
      "anchor": "effects-preserve-structure"
    },
    {
      "id": "design-principles-truth-over-optimistic-appearance",
      "title": "Truth over optimistic appearance",
      "guide": "design-principles",
      "anchor": "truth-over-optimistic-appearance"
    },
    {
      "id": "design-principles-testability-is-part-of-the-component",
      "title": "Testability is part of the component",
      "guide": "design-principles",
      "anchor": "testability-is-part-of-the-component"
    },
    {
      "id": "foundation-roadmap-fixed-boundaries",
      "title": "Fixed boundaries",
      "guide": "foundation-roadmap",
      "anchor": "fixed-boundaries"
    },
    {
      "id": "foundation-roadmap-dependency-order",
      "title": "Dependency order",
      "guide": "foundation-roadmap",
      "anchor": "dependency-order"
    },
    {
      "id": "foundation-roadmap-phase-0-truthful-inventory-and-baseline",
      "title": "Phase 0: truthful inventory and baseline",
      "guide": "foundation-roadmap",
      "anchor": "phase-0-truthful-inventory-and-baseline"
    },
    {
      "id": "foundation-roadmap-phase-1-one-runtime-context-per-window",
      "title": "Phase 1: one runtime context per window",
      "guide": "foundation-roadmap",
      "anchor": "phase-1-one-runtime-context-per-window"
    },
    {
      "id": "foundation-roadmap-phase-2-deterministic-performance-budgets",
      "title": "Phase 2: deterministic performance budgets",
      "guide": "foundation-roadmap",
      "anchor": "phase-2-deterministic-performance-budgets"
    },
    {
      "id": "foundation-roadmap-phase-3-editable-shaped-text-and-basic-rich-text",
      "title": "Phase 3: editable shaped text and basic rich text",
      "guide": "foundation-roadmap",
      "anchor": "phase-3-editable-shaped-text-and-basic-rich-text"
    },
    {
      "id": "foundation-roadmap-phase-4-platform-accessibility-completion",
      "title": "Phase 4: platform accessibility completion",
      "guide": "foundation-roadmap",
      "anchor": "phase-4-platform-accessibility-completion"
    },
    {
      "id": "foundation-roadmap-phase-5-linux-and-web-media-backends",
      "title": "Phase 5: Linux and Web media backends",
      "guide": "foundation-roadmap",
      "anchor": "phase-5-linux-and-web-media-backends"
    },
    {
      "id": "foundation-roadmap-phase-6-plugin-mount-and-action-isolation",
      "title": "Phase 6: plugin mount and action isolation",
      "guide": "foundation-roadmap",
      "anchor": "phase-6-plugin-mount-and-action-isolation"
    },
    {
      "id": "foundation-roadmap-release-and-cross-platform-gate",
      "title": "Release and cross-platform gate",
      "guide": "foundation-roadmap",
      "anchor": "release-and-cross-platform-gate"
    },
    {
      "id": "geography-supported-geometry-is-explicit",
      "title": "Supported geometry is explicit",
      "guide": "geography",
      "anchor": "supported-geometry-is-explicit"
    },
    {
      "id": "geography-values-state-and-interaction-stay-caller-owned",
      "title": "Values, state, and interaction stay caller-owned",
      "guide": "geography",
      "anchor": "values-state-and-interaction-stay-caller-owned"
    },
    {
      "id": "geography-preparation-and-validation-envelope",
      "title": "Preparation and validation envelope",
      "guide": "geography",
      "anchor": "preparation-and-validation-envelope"
    },
    {
      "id": "geography-geojson-and-finite-world-policy",
      "title": "GeoJSON and finite-world policy",
      "guide": "geography",
      "anchor": "geojson-and-finite-world-policy"
    },
    {
      "id": "geography-references-and-source-provenance",
      "title": "References and source provenance",
      "guide": "geography",
      "anchor": "references-and-source-provenance"
    },
    {
      "id": "gpui-recipes-theme-boot",
      "title": "Theme boot",
      "guide": "gpui-recipes",
      "anchor": "theme-boot"
    },
    {
      "id": "gpui-recipes-per-frame-semantics",
      "title": "Per-frame semantics",
      "guide": "gpui-recipes",
      "anchor": "per-frame-semantics"
    },
    {
      "id": "gpui-recipes-disabled-action",
      "title": "Disabled action",
      "guide": "gpui-recipes",
      "anchor": "disabled-action"
    },
    {
      "id": "gpui-recipes-async-refresh-with-stale-data",
      "title": "Async refresh with stale data",
      "guide": "gpui-recipes",
      "anchor": "async-refresh-with-stale-data"
    },
    {
      "id": "gpui-recipes-anchored-menu",
      "title": "Anchored menu",
      "guide": "gpui-recipes",
      "anchor": "anchored-menu"
    },
    {
      "id": "gpui-recipes-capture-after-settle",
      "title": "Capture after settle",
      "guide": "gpui-recipes",
      "anchor": "capture-after-settle"
    },
    {
      "id": "graph-trace-visualization-raw-time-and-normalized-compatibility",
      "title": "Raw time and normalized compatibility",
      "guide": "graph-trace-visualization",
      "anchor": "raw-time-and-normalized-compatibility"
    },
    {
      "id": "graph-trace-visualization-focused-workload-evidence",
      "title": "Focused workload evidence",
      "guide": "graph-trace-visualization",
      "anchor": "focused-workload-evidence"
    },
    {
      "id": "host-view-boundary-view-responsibilities",
      "title": "View responsibilities",
      "guide": "host-view-boundary",
      "anchor": "view-responsibilities"
    },
    {
      "id": "host-view-boundary-suggested-shape",
      "title": "Suggested shape",
      "guide": "host-view-boundary",
      "anchor": "suggested-shape"
    },
    {
      "id": "host-view-boundary-secret-boundary",
      "title": "Secret boundary",
      "guide": "host-view-boundary",
      "anchor": "secret-boundary"
    },
    {
      "id": "host-view-boundary-blocking-work",
      "title": "Blocking work",
      "guide": "host-view-boundary",
      "anchor": "blocking-work"
    },
    {
      "id": "host-view-boundary-fixtures",
      "title": "Fixtures",
      "guide": "host-view-boundary",
      "anchor": "fixtures"
    },
    {
      "id": "interaction-the-contract",
      "title": "The contract",
      "guide": "interaction",
      "anchor": "the-contract"
    },
    {
      "id": "interaction-where-a-drop-lands",
      "title": "Where a drop lands",
      "guide": "interaction",
      "anchor": "where-a-drop-lands"
    },
    {
      "id": "interaction-what-is-carried",
      "title": "What is carried",
      "guide": "interaction",
      "anchor": "what-is-carried"
    },
    {
      "id": "interaction-how-fast-it-was-going",
      "title": "How fast it was going",
      "guide": "interaction",
      "anchor": "how-fast-it-was-going"
    },
    {
      "id": "interaction-what-a-drag-publishes",
      "title": "What a drag publishes",
      "guide": "interaction",
      "anchor": "what-a-drag-publishes"
    },
    {
      "id": "interaction-refusals",
      "title": "Refusals",
      "guide": "interaction",
      "anchor": "refusals"
    },
    {
      "id": "interaction-deferred-acceptance-keeps-a-released-candidate-not-the-drag",
      "title": "Deferred acceptance keeps a released candidate, not the drag",
      "guide": "interaction",
      "anchor": "deferred-acceptance-keeps-a-released-candidate-not-the-drag"
    },
    {
      "id": "interaction-cancelling",
      "title": "Cancelling",
      "guide": "interaction",
      "anchor": "cancelling"
    },
    {
      "id": "interaction-what-the-host-has-to-do",
      "title": "What the host has to do",
      "guide": "interaction",
      "anchor": "what-the-host-has-to-do"
    },
    {
      "id": "interaction-what-the-pointer-sees",
      "title": "What the pointer sees",
      "guide": "interaction",
      "anchor": "what-the-pointer-sees"
    },
    {
      "id": "interaction-reduced-motion",
      "title": "Reduced motion",
      "guide": "interaction",
      "anchor": "reduced-motion"
    },
    {
      "id": "interaction-files-from-the-platform",
      "title": "Files from the platform",
      "guide": "interaction",
      "anchor": "files-from-the-platform"
    },
    {
      "id": "interaction-staging-for-captures",
      "title": "Staging, for captures",
      "guide": "interaction",
      "anchor": "staging-for-captures"
    },
    {
      "id": "mcp-connect",
      "title": "Connect",
      "guide": "mcp",
      "anchor": "connect"
    },
    {
      "id": "mcp-remote-tools",
      "title": "Remote tools",
      "guide": "mcp",
      "anchor": "remote-tools"
    },
    {
      "id": "mcp-checkout-only-sessions",
      "title": "Checkout-only sessions",
      "guide": "mcp",
      "anchor": "checkout-only-sessions"
    },
    {
      "id": "mcp-generated-authority",
      "title": "Generated authority",
      "guide": "mcp",
      "anchor": "generated-authority"
    },
    {
      "id": "measured-semantic-leaves-supply-current-frame-window-geometry",
      "title": "Supply current-frame window geometry",
      "guide": "measured-semantic-leaves",
      "anchor": "supply-current-frame-window-geometry"
    },
    {
      "id": "measured-semantic-leaves-identity-ancestry-and-clipping-are-explicit",
      "title": "Identity, ancestry and clipping are explicit",
      "guide": "measured-semantic-leaves",
      "anchor": "identity-ancestry-and-clipping-are-explicit"
    },
    {
      "id": "measured-semantic-leaves-mounted-verification-and-reproduction",
      "title": "Mounted verification and reproduction",
      "guide": "measured-semantic-leaves",
      "anchor": "mounted-verification-and-reproduction"
    },
    {
      "id": "migration-guide-native-windows-and-platform-views",
      "title": "Native windows and platform views",
      "guide": "migration-guide",
      "anchor": "native-windows-and-platform-views"
    },
    {
      "id": "migration-guide-1-inventory",
      "title": "1. Inventory",
      "guide": "migration-guide",
      "anchor": "1-inventory"
    },
    {
      "id": "migration-guide-2-establish-visual-baselines",
      "title": "2. Establish visual baselines",
      "guide": "migration-guide",
      "anchor": "2-establish-visual-baselines"
    },
    {
      "id": "migration-guide-3-map-tokens",
      "title": "3. Map tokens",
      "guide": "migration-guide",
      "anchor": "3-map-tokens"
    },
    {
      "id": "migration-guide-4-install-assets-and-theme",
      "title": "4. Install assets and theme",
      "guide": "migration-guide",
      "anchor": "4-install-assets-and-theme"
    },
    {
      "id": "migration-guide-5-migrate-low-coupling-primitives",
      "title": "5. Migrate low-coupling primitives",
      "guide": "migration-guide",
      "anchor": "5-migrate-low-coupling-primitives"
    },
    {
      "id": "migration-guide-6-add-semantic-ids",
      "title": "6. Add semantic IDs",
      "guide": "migration-guide",
      "anchor": "6-add-semantic-ids"
    },
    {
      "id": "migration-guide-7-preserve-the-host-boundary",
      "title": "7. Preserve the host boundary",
      "guide": "migration-guide",
      "anchor": "7-preserve-the-host-boundary"
    },
    {
      "id": "migration-guide-8-replace-automation",
      "title": "8. Replace automation",
      "guide": "migration-guide",
      "anchor": "8-replace-automation"
    },
    {
      "id": "migration-guide-9-remove-duplicates",
      "title": "9. Remove duplicates",
      "guide": "migration-guide",
      "anchor": "9-remove-duplicates"
    },
    {
      "id": "migration-guide-forge-specific-note",
      "title": "Forge-specific note",
      "guide": "migration-guide",
      "anchor": "forge-specific-note"
    },
    {
      "id": "motion-components-choose-roles-not-timings",
      "title": "Components choose roles, not timings",
      "guide": "motion",
      "anchor": "components-choose-roles-not-timings"
    },
    {
      "id": "motion-what-moves-where",
      "title": "What moves, where",
      "guide": "motion",
      "anchor": "what-moves-where"
    },
    {
      "id": "motion-and-then",
      "title": "And then",
      "guide": "motion",
      "anchor": "and-then"
    },
    {
      "id": "motion-motion-never-changes-what-is-published",
      "title": "Motion never changes what is published",
      "guide": "motion",
      "anchor": "motion-never-changes-what-is-published"
    },
    {
      "id": "motion-reduced-motion",
      "title": "Reduced motion",
      "guide": "motion",
      "anchor": "reduced-motion"
    },
    {
      "id": "motion-choosing-a-layer",
      "title": "Choosing a layer",
      "guide": "motion",
      "anchor": "choosing-a-layer"
    },
    {
      "id": "motion-describing-a-run-and-driving-it-by-hand",
      "title": "Describing a run, and driving it by hand",
      "guide": "motion",
      "anchor": "describing-a-run-and-driving-it-by-hand"
    },
    {
      "id": "motion-velocity-handover",
      "title": "Velocity handover",
      "guide": "motion",
      "anchor": "velocity-handover"
    },
    {
      "id": "motion-gesture-velocity",
      "title": "Gesture velocity",
      "guide": "motion",
      "anchor": "gesture-velocity"
    },
    {
      "id": "motion-scroll-linked-values",
      "title": "Scroll-linked values",
      "guide": "motion",
      "anchor": "scroll-linked-values"
    },
    {
      "id": "motion-keyframes",
      "title": "Keyframes",
      "guide": "motion",
      "anchor": "keyframes"
    },
    {
      "id": "motion-exit-animations",
      "title": "Exit animations",
      "guide": "motion",
      "anchor": "exit-animations"
    },
    {
      "id": "motion-springs",
      "title": "Springs",
      "guide": "motion",
      "anchor": "springs"
    },
    {
      "id": "motion-flip",
      "title": "FLIP",
      "guide": "motion",
      "anchor": "flip"
    },
    {
      "id": "motion-pointer-responses",
      "title": "Pointer responses",
      "guide": "motion",
      "anchor": "pointer-responses"
    },
    {
      "id": "motion-animated-numbers",
      "title": "Animated numbers",
      "guide": "motion",
      "anchor": "animated-numbers"
    },
    {
      "id": "motion-tokens",
      "title": "Tokens",
      "guide": "motion",
      "anchor": "tokens"
    },
    {
      "id": "performance-testing-wide-grids-are-measured-on-both-axes",
      "title": "Wide grids are measured on both axes",
      "guide": "performance-testing",
      "anchor": "wide-grids-are-measured-on-both-axes"
    },
    {
      "id": "performance-testing-mounted-markdown-and-editable-documents",
      "title": "Mounted Markdown and editable documents",
      "guide": "performance-testing",
      "anchor": "mounted-markdown-and-editable-documents"
    },
    {
      "id": "performance-testing-what-is-counted",
      "title": "What is counted",
      "guide": "performance-testing",
      "anchor": "what-is-counted"
    },
    {
      "id": "performance-testing-timing",
      "title": "Timing",
      "guide": "performance-testing",
      "anchor": "timing"
    },
    {
      "id": "reactive-a-signal",
      "title": "A signal",
      "guide": "reactive",
      "anchor": "a-signal"
    },
    {
      "id": "reactive-a-binding",
      "title": "A binding",
      "guide": "reactive",
      "anchor": "a-binding"
    },
    {
      "id": "reactive-a-history",
      "title": "A history",
      "guide": "reactive",
      "anchor": "a-history"
    },
    {
      "id": "reactive-binding-a-control",
      "title": "Binding a control",
      "guide": "reactive",
      "anchor": "binding-a-control"
    },
    {
      "id": "reactive-a-form",
      "title": "A form",
      "guide": "reactive",
      "anchor": "a-form"
    },
    {
      "id": "reactive-what-is-not-printed",
      "title": "What is not printed",
      "guide": "reactive",
      "anchor": "what-is-not-printed"
    },
    {
      "id": "releasing-git-only-0-2-0-release",
      "title": "Git-only 0.2.0 release",
      "guide": "releasing",
      "anchor": "git-only-0-2-0-release"
    },
    {
      "id": "releasing-cohort-and-authority",
      "title": "Cohort and authority",
      "guide": "releasing",
      "anchor": "cohort-and-authority"
    },
    {
      "id": "releasing-preflight-and-dry-run",
      "title": "Preflight and dry run",
      "guide": "releasing",
      "anchor": "preflight-and-dry-run"
    },
    {
      "id": "releasing-publish",
      "title": "Publish",
      "guide": "releasing",
      "anchor": "publish"
    },
    {
      "id": "releasing-post-publication-acceptance",
      "title": "Post-publication acceptance",
      "guide": "releasing",
      "anchor": "post-publication-acceptance"
    },
    {
      "id": "releasing-external-crates-io-setup",
      "title": "External crates.io setup",
      "guide": "releasing",
      "anchor": "external-crates-io-setup"
    },
    {
      "id": "releasing-failure-yank-and-recovery",
      "title": "Failure, yank, and recovery",
      "guide": "releasing",
      "anchor": "failure-yank-and-recovery"
    },
    {
      "id": "screenshot-testing-two-captures-two-questions",
      "title": "Two captures, two questions",
      "guide": "screenshot-testing",
      "anchor": "two-captures-two-questions"
    },
    {
      "id": "screenshot-testing-settle-before-capture",
      "title": "Settle before capture",
      "guide": "screenshot-testing",
      "anchor": "settle-before-capture"
    },
    {
      "id": "screenshot-testing-fixed-fixture-contract",
      "title": "Fixed fixture contract",
      "guide": "screenshot-testing",
      "anchor": "fixed-fixture-contract"
    },
    {
      "id": "screenshot-testing-frame-comparison",
      "title": "Frame comparison",
      "guide": "screenshot-testing",
      "anchor": "frame-comparison"
    },
    {
      "id": "screenshot-testing-visual-and-behavioral-proof",
      "title": "Visual and behavioral proof",
      "guide": "screenshot-testing",
      "anchor": "visual-and-behavioral-proof"
    },
    {
      "id": "screenshot-testing-scenes",
      "title": "Scenes",
      "guide": "screenshot-testing",
      "anchor": "scenes"
    },
    {
      "id": "screenshot-testing-the-gate",
      "title": "The gate",
      "guide": "screenshot-testing",
      "anchor": "the-gate"
    },
    {
      "id": "screenshot-testing-downstream-theme-and-gallery-contract",
      "title": "Downstream theme and gallery contract",
      "guide": "screenshot-testing",
      "anchor": "downstream-theme-and-gallery-contract"
    },
    {
      "id": "screenshot-testing-browser-visual-gate",
      "title": "Browser visual gate",
      "guide": "screenshot-testing",
      "anchor": "browser-visual-gate"
    },
    {
      "id": "screenshot-testing-the-headless-gate",
      "title": "The headless gate",
      "guide": "screenshot-testing",
      "anchor": "the-headless-gate"
    },
    {
      "id": "screenshot-testing-audit",
      "title": "Audit",
      "guide": "screenshot-testing",
      "anchor": "audit"
    },
    {
      "id": "semantic-automation-registration",
      "title": "Registration",
      "guide": "semantic-automation",
      "anchor": "registration"
    },
    {
      "id": "semantic-automation-frame-lifecycle",
      "title": "Frame lifecycle",
      "guide": "semantic-automation",
      "anchor": "frame-lifecycle"
    },
    {
      "id": "semantic-automation-stable-ids",
      "title": "Stable IDs",
      "guide": "semantic-automation",
      "anchor": "stable-ids"
    },
    {
      "id": "semantic-automation-node-data",
      "title": "Node data",
      "guide": "semantic-automation",
      "anchor": "node-data"
    },
    {
      "id": "semantic-automation-security",
      "title": "Security",
      "guide": "semantic-automation",
      "anchor": "security"
    },
    {
      "id": "semantic-automation-waiting",
      "title": "Waiting",
      "guide": "semantic-automation",
      "anchor": "waiting"
    },
    {
      "id": "specialized-visualizations-new-experiences-animate-by-default-legacy-presentation-stays-compatible",
      "title": "New experiences animate by default; legacy presentation stays compatible",
      "guide": "specialized-visualizations",
      "anchor": "new-experiences-animate-by-default-legacy-presentation-stays-compatible"
    },
    {
      "id": "specialized-visualizations-downstream-composition-lifecycle-and-budgets",
      "title": "Downstream composition, lifecycle and budgets",
      "guide": "specialized-visualizations",
      "anchor": "downstream-composition-lifecycle-and-budgets"
    },
    {
      "id": "specialized-visualizations-caller-owned-state",
      "title": "Caller-owned state",
      "guide": "specialized-visualizations",
      "anchor": "caller-owned-state"
    },
    {
      "id": "specialized-visualizations-exact-geometry-and-semantic-envelopes",
      "title": "Exact geometry and semantic envelopes",
      "guide": "specialized-visualizations",
      "anchor": "exact-geometry-and-semantic-envelopes"
    },
    {
      "id": "specialized-visualizations-visual-motion-never-invents-raw-readings",
      "title": "Visual motion never invents raw readings",
      "guide": "specialized-visualizations",
      "anchor": "visual-motion-never-invents-raw-readings"
    },
    {
      "id": "specialized-visualizations-measured-labels-and-conserved-flows",
      "title": "Measured labels and conserved flows",
      "guide": "specialized-visualizations",
      "anchor": "measured-labels-and-conserved-flows"
    },
    {
      "id": "specialized-visualizations-review-surfaces",
      "title": "Review surfaces",
      "guide": "specialized-visualizations",
      "anchor": "review-surfaces"
    },
    {
      "id": "token-model-authority",
      "title": "Authority",
      "guide": "token-model",
      "anchor": "authority"
    },
    {
      "id": "token-model-three-layers",
      "title": "Three layers",
      "guide": "token-model",
      "anchor": "three-layers"
    },
    {
      "id": "token-model-color",
      "title": "Color",
      "guide": "token-model",
      "anchor": "color"
    },
    {
      "id": "token-model-elevation-layers-and-density",
      "title": "Elevation, layers, and density",
      "guide": "token-model",
      "anchor": "elevation-layers-and-density"
    },
    {
      "id": "token-model-themes-at-runtime",
      "title": "Themes at runtime",
      "guide": "token-model",
      "anchor": "themes-at-runtime"
    },
    {
      "id": "token-model-typography",
      "title": "Typography",
      "guide": "token-model",
      "anchor": "typography"
    },
    {
      "id": "token-model-motion-and-effects",
      "title": "Motion and effects",
      "guide": "token-model",
      "anchor": "motion-and-effects"
    },
    {
      "id": "token-model-validation",
      "title": "Validation",
      "guide": "token-model",
      "anchor": "validation"
    },
    {
      "id": "token-reference-studio-dark-studio-dark",
      "title": "Studio Dark (`studio-dark`)",
      "guide": "token-reference",
      "anchor": "studio-dark-studio-dark"
    },
    {
      "id": "token-reference-studio-light-studio-light",
      "title": "Studio Light (`studio-light`)",
      "guide": "token-reference",
      "anchor": "studio-light-studio-light"
    },
    {
      "id": "token-reference-catppuccin-mocha-catppuccin-mocha",
      "title": "Catppuccin Mocha (`catppuccin-mocha`)",
      "guide": "token-reference",
      "anchor": "catppuccin-mocha-catppuccin-mocha"
    },
    {
      "id": "token-reference-catppuccin-latte-catppuccin-latte",
      "title": "Catppuccin Latte (`catppuccin-latte`)",
      "guide": "token-reference",
      "anchor": "catppuccin-latte-catppuccin-latte"
    },
    {
      "id": "token-reference-nord-nord",
      "title": "Nord (`nord`)",
      "guide": "token-reference",
      "anchor": "nord-nord"
    },
    {
      "id": "token-reference-tokyo-night-tokyo-night",
      "title": "Tokyo Night (`tokyo-night`)",
      "guide": "token-reference",
      "anchor": "tokyo-night-tokyo-night"
    },
    {
      "id": "token-reference-gruvbox-dark-gruvbox-dark",
      "title": "Gruvbox Dark (`gruvbox-dark`)",
      "guide": "token-reference",
      "anchor": "gruvbox-dark-gruvbox-dark"
    },
    {
      "id": "token-reference-dracula-dracula",
      "title": "Dracula (`dracula`)",
      "guide": "token-reference",
      "anchor": "dracula-dracula"
    },
    {
      "id": "token-reference-solarized-dark-solarized-dark",
      "title": "Solarized Dark (`solarized-dark`)",
      "guide": "token-reference",
      "anchor": "solarized-dark-solarized-dark"
    },
    {
      "id": "token-reference-solarized-light-solarized-light",
      "title": "Solarized Light (`solarized-light`)",
      "guide": "token-reference",
      "anchor": "solarized-light-solarized-light"
    },
    {
      "id": "truthful-ui-required-states",
      "title": "Required states",
      "guide": "truthful-ui",
      "anchor": "required-states"
    },
    {
      "id": "truthful-ui-phase",
      "title": "Phase",
      "guide": "truthful-ui",
      "anchor": "phase"
    },
    {
      "id": "truthful-ui-refresh-without-erasure",
      "title": "Refresh without erasure",
      "guide": "truthful-ui",
      "anchor": "refresh-without-erasure"
    },
    {
      "id": "truthful-ui-actions",
      "title": "Actions",
      "guide": "truthful-ui",
      "anchor": "actions"
    },
    {
      "id": "truthful-ui-refusals",
      "title": "Refusals",
      "guide": "truthful-ui",
      "anchor": "refusals"
    },
    {
      "id": "truthful-ui-disabled-behavior",
      "title": "Disabled behavior",
      "guide": "truthful-ui",
      "anchor": "disabled-behavior"
    },
    {
      "id": "truthful-ui-attempts-and-stale-results",
      "title": "Attempts and stale results",
      "guide": "truthful-ui",
      "anchor": "attempts-and-stale-results"
    },
    {
      "id": "upstream-resync-assessment-assessed-coordinates",
      "title": "Assessed coordinates",
      "guide": "upstream-resync-assessment",
      "anchor": "assessed-coordinates"
    },
    {
      "id": "upstream-resync-assessment-measured-merge-surface",
      "title": "Measured merge surface",
      "guide": "upstream-resync-assessment",
      "anchor": "measured-merge-surface"
    },
    {
      "id": "upstream-resync-assessment-already-adapted-versus-absent",
      "title": "Already adapted versus absent",
      "guide": "upstream-resync-assessment",
      "anchor": "already-adapted-versus-absent"
    },
    {
      "id": "upstream-resync-assessment-cost-comparison-and-decision",
      "title": "Cost comparison and decision",
      "guide": "upstream-resync-assessment",
      "anchor": "cost-comparison-and-decision"
    },
    {
      "id": "visualization-data-calendar-boundaries-use-an-explicit-timezone",
      "title": "Calendar boundaries use an explicit timezone",
      "guide": "visualization-data",
      "anchor": "calendar-boundaries-use-an-explicit-timezone"
    },
    {
      "id": "visualization-data-aggregation-is-distinct-from-visual-sampling",
      "title": "Aggregation is distinct from visual sampling",
      "guide": "visualization-data",
      "anchor": "aggregation-is-distinct-from-visual-sampling"
    },
    {
      "id": "visualization-data-executed-focused-evidence",
      "title": "Executed focused evidence",
      "guide": "visualization-data",
      "anchor": "executed-focused-evidence"
    },
    {
      "id": "webview-linux-route-and-native-constraints",
      "title": "Linux route and native constraints",
      "guide": "webview",
      "anchor": "linux-route-and-native-constraints"
    },
    {
      "id": "webview-security-and-truthful-events",
      "title": "Security and truthful events",
      "guide": "webview",
      "anchor": "security-and-truthful-events"
    },
    {
      "id": "webview-reproduce-validation",
      "title": "Reproduce validation",
      "guide": "webview",
      "anchor": "reproduce-validation"
    }
  ],
  "scenes": [
    {
      "name": "bottom-sheet",
      "capture": "cargo run -p xtask -- headless capture bottom-sheet",
      "kind": "exhibit",
      "subjects": [
        "BottomSheet"
      ],
      "uses": [
        "BottomSheet"
      ],
      "example": "fn bottom_sheet(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::overlay::sheet::{BottomSheet, BottomSheetEvent, SheetDetent};\n    if !cx.has_global::<SceneBottomSheet>() {\n        let sheet = cx.new(|cx| BottomSheet::new(\"scene.bottom-sheet\", window, cx));\n        sheet.update(cx, |sheet, cx| {\n            sheet.set_title(\"Choose destination · fixture\", cx);\n            sheet.set_detents(\n                vec![\n                    SheetDetent::new(\"Compact\", 290.0),\n                    SheetDetent::new(\"Half\", 430.0),\n                    SheetDetent::new(\"Full\", 640.0),\n                ],\n                \"Half\",\n                cx,\n            );\n            let scroll = gpui::ScrollHandle::new();\n            sheet.set_scroll_handle(Some(scroll.clone()), cx);\n            sheet.set_content(\n                Some(Rc::new(move |_, cx| {\n                    let _theme = cx.theme().clone();\n                    div()\n                        .id(\"scene.bottom-sheet.list\")\n                        .column()\n                        .size_full()\n                        .overflow_y_scroll()\n                        .track_scroll(&scroll)\n                        .children(\n                            [\n                                (\"home\", \"Home\"),\n                                (\"work\", \"Work\"),\n                                (\"library\", \"Library\"),\n                                (\"airport\", \"Airport\"),\n                                (\"station\", \"Station\"),\n                                (\"garden\", \"Garden\"),\n                                (\"museum\", \"Museum\"),\n                            ]\n                            .into_iter()\n                            .map(|(id, label)| {\n                                Button::new(format!(\"scene.bottom-sheet.destination.{id}\"))\n                                    .label(label)\n                                    .secondary()\n                                    .control_size(gpui_kit_theme::ControlSize::Touch)\n                                    .on_click(|_, _| {})\n                            }),\n                        )\n                        .into_any_element()\n                })),\n                cx,\n            );\n            sheet.open(window, cx);\n            sheet.settle(cx);\n        });\n        cx.subscribe(&sheet, |sheet, event, cx| {\n            if let BottomSheetEvent::DetentRequested(id) = event {\n                sheet.update(cx, |sheet, cx| {\n                    sheet.set_detent(id.clone(), cx);\n                });\n            }\n        })\n        .detach();\n        cx.set_global(SceneBottomSheet(sheet));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .h(px(640.0))\n        .child(page_behind(&theme, \"Caller-owned destinations\"))\n        .child(cx.global::<SceneBottomSheet>().0.clone())\n        .into_any_element()\n}"
    },
    {
      "name": "action-sheet",
      "capture": "cargo run -p xtask -- headless capture action-sheet",
      "kind": "exhibit",
      "subjects": [
        "ActionSheet"
      ],
      "uses": [
        "ActionSheet"
      ],
      "example": "fn action_sheet(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::overlay::sheet::{ActionSheet, SheetAction, SheetActionState};\n    if !cx.has_global::<SceneActionSheet>() {\n        let sheet = cx.new(|cx| ActionSheet::new(\"scene.action-sheet\", window, cx));\n        sheet.update(cx, |sheet, cx| {\n            let mut remove = SheetAction::new(\"remove\", \"Remove from collection\");\n            remove.destructive = true;\n            let mut share = SheetAction::new(\"share\", \"Share unavailable\");\n            share.disabled = true;\n            sheet.set_actions(\n                vec![SheetAction::new(\"save\", \"Save a copy\"), share, remove],\n                cx,\n            );\n            sheet.set_state(\n                SheetActionState::Error(\n                    \"Fixture refusal: the last attempt failed; nothing was removed.\".into(),\n                ),\n                cx,\n            );\n            sheet.sheet().update(cx, |sheet, cx| {\n                sheet.set_title(\"Collection actions · fixture\", cx);\n            });\n            sheet.open(window, cx);\n            sheet.sheet().update(cx, |sheet, cx| sheet.settle(cx));\n        });\n        cx.set_global(SceneActionSheet(sheet));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .h(px(600.0))\n        .child(page_behind(&theme, \"Last verified collection\"))\n        .child(cx.global::<SceneActionSheet>().0.clone())\n        .into_any_element()\n}"
    },
    {
      "name": "pull-to-refresh",
      "capture": "cargo run -p xtask -- headless capture pull-to-refresh",
      "kind": "exhibit",
      "subjects": [
        "PullToRefresh"
      ],
      "uses": [
        "PullToRefresh"
      ],
      "example": "fn pull_to_refresh(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneRefresh>() {\n        let states = [\n            (\"ready\", RefreshState::Ready),\n            (\n                \"pending\",\n                RefreshState::Pending(\"Waiting for caller\".into()),\n            ),\n            (\n                \"loading\",\n                RefreshState::Loading(\"Refreshing fixture\".into()),\n            ),\n            (\n                \"error\",\n                RefreshState::Error(\"Refresh failed · retained rows\".into()),\n            ),\n        ];\n        let mut views = Vec::new();\n        for (id, state) in states {\n            let scroll = gpui::ScrollHandle::new();\n            let view = cx.new(|_| {\n                PullToRefresh::new(\n                    format!(\"scene.refresh.{id}\"),\n                    scroll.clone(),\n                    \"Refresh\",\n                    \"Release to refresh\",\n                )\n            });\n            view.update(cx, |refresh, cx| {\n                refresh.set_state(state, cx);\n                refresh.set_content(\n                    Some(Rc::new(move |_, cx| {\n                        let theme = cx.theme().clone();\n                        div()\n                            .id(SharedString::from(format!(\"scene.refresh.{id}.scroll\")))\n                            .column()\n                            .size_full()\n                            .overflow_y_scroll()\n                            .track_scroll(&scroll)\n                            .children(\n                                [\n                                    (\"notes\", \"Notes · verified fixture\"),\n                                    (\"draft\", \"Draft · verified fixture\"),\n                                    (\"archive\", \"Archive · verified fixture\"),\n                                    (\"saved\", \"Saved · verified fixture\"),\n                                ]\n                                .into_iter()\n                                .map(|(key, label)| {\n                                    div()\n                                        .h(px(64.0))\n                                        .flex_none()\n                                        .p_token(&theme, Space::Sm)\n                                        .child(crate::foundation::text(\n                                            &theme,\n                                            TypeScale::Body,\n                                            label,\n                                        ))\n                                        .semantic_in(\n                                            cx,\n                                            NodeSpec::new(\n                                                format!(\"scene.refresh.{id}.{key}\"),\n                                                Role::Group,\n                                            )\n                                            .text(label),\n                                        )\n                                }),\n                            )\n                            .into_any_element()\n                    })),\n                    cx,\n                );\n            });\n            views.push(view);\n        }\n        cx.set_global(SceneRefresh(views));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .child(caption(\n            &theme,\n            \"Fixture states · refreshing never replaces the verified rows\",\n        ))\n        .child(\n            row(&theme).items_start().children(\n                cx.global::<SceneRefresh>()\n                    .0\n                    .iter()\n                    .map(|view| div().w(px(250.0)).h(px(370.0)).child(view.clone())),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "swipe-actions",
      "capture": "cargo run -p xtask -- headless capture swipe-actions",
      "kind": "exhibit",
      "subjects": [
        "SwipeActions"
      ],
      "uses": [
        "SwipeActions"
      ],
      "example": "fn swipe_actions(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSwipe>() {\n        let mut views = Vec::new();\n        for (id, side, state) in [\n            (\"closed\", None, SheetActionState::Ready),\n            (\"left\", Some(SwipeSide::Left), SheetActionState::Ready),\n            (\n                \"right\",\n                Some(SwipeSide::Right),\n                SheetActionState::Error(\"Deletion failed; row retained\".into()),\n            ),\n            (\n                \"pending\",\n                Some(SwipeSide::Right),\n                SheetActionState::Pending(\"Waiting for caller\".into()),\n            ),\n        ] {\n            let view = cx.new(|_| SwipeActions::new(format!(\"scene.swipe.{id}\"), \"Actions\"));\n            view.update(cx, |swipe, cx| {\n                let mut remove = SheetAction::new(\"remove\", \"Delete\");\n                remove.destructive = true;\n                swipe.set_actions(SwipeSide::Left, vec![SheetAction::new(\"pin\", \"Pin\")], cx);\n                swipe.set_actions(SwipeSide::Right, vec![remove], cx);\n                swipe.set_content(\n                    Some(Rc::new(move |_, cx| {\n                        let theme = cx.theme().clone();\n                        div()\n                            .h(px(64.0))\n                            .column()\n                            .justify_center()\n                            .child(crate::foundation::text(\n                                &theme,\n                                TypeScale::Label,\n                                \"Project notes · fixture\",\n                            ))\n                            .child(crate::foundation::text(\n                                &theme,\n                                TypeScale::Body,\n                                \"Last verified content remains visible\",\n                            ))\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(format!(\"scene.swipe.{id}.content\"), Role::Group)\n                                    .text(\"Project notes · fixture\"),\n                            )\n                            .into_any_element()\n                    })),\n                    cx,\n                );\n                swipe.reveal(side, cx);\n                swipe.set_state(state, cx);\n            });\n            views.push(view);\n        }\n        cx.set_global(SceneSwipe(views));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(580.0))\n        .child(caption(\n            &theme,\n            \"Reveal is not activation · physical left and right trays\",\n        ))\n        .children(cx.global::<SceneSwipe>().0.iter().cloned())\n        .into_any_element()\n}"
    },
    {
      "name": "button",
      "capture": "cargo run -p xtask -- headless capture button",
      "kind": "exhibit",
      "subjects": [
        "Button"
      ],
      "uses": [
        "Button"
      ],
      "example": "fn button(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"how much weight the action carries\"))\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(caption(\n            &theme,\n            \"refused is not in flight, and neither is the current answer\",\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(caption(&theme, \"the control scale, smallest to largest\"))\n        .child(\n            row(&theme)\n                .child(\n                    Button::new(\"scene.button.xs\")\n                        .label(\"Extra small\")\n                        .secondary()\n                        .xs(),\n                )\n                .child(\n                    Button::new(\"scene.button.sm\")\n                        .label(\"Small\")\n                        .secondary()\n                        .small(),\n                )\n                .child(\n                    Button::new(\"scene.button.md\")\n                        .label(\"Medium\")\n                        .secondary()\n                        .medium(),\n                )\n                .child(\n                    Button::new(\"scene.button.lg\")\n                        .label(\"Large\")\n                        .secondary()\n                        .large(),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"White is on-media: a bright-background fixture\",\n        ))\n        .child(\n            row(&theme)\n                .p(px(theme.spacing.md))\n                .radius(&theme, Radius::Card)\n                .bg(theme.colors.on_media_foreground)\n                .child(\n                    Button::new(\"scene.button.media\")\n                        .label(\"Play\")\n                        .icon(Icon::Play)\n                        .variant(Variant::White)\n                        .on_click(|_, _| {}),\n                )\n                .child(\n                    Button::new(\"scene.button.media-busy\")\n                        .label(\"Loading\")\n                        .variant(Variant::White)\n                        .loading(true),\n                )\n                .child(\n                    Button::new(\"scene.button.media-disabled\")\n                        .label(\"Unavailable\")\n                        .variant(Variant::White)\n                        .disabled(true),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"the shared tiers, resolved against a palette colour\",\n        ))\n        .children([\"indigo\", \"teal\", \"red\"].map(|group| {\n            row(&theme).children(\n                [\n                    Variant::Filled,\n                    Variant::Light,\n                    Variant::Subtle,\n                    Variant::Default,\n                    Variant::Transparent,\n                ]\n                .map(|tier| {\n                    Button::new(format!(\"scene.button.{group}.{}\", tier.name()))\n                        .label(tier.name())\n                        .variant(tier)\n                        .color(SharedString::from(group))\n                        .on_click(|_, _| {})\n                }),\n            )\n        }))\n        .child(caption(\n            &theme,\n            \"the same tiers, chosen: selection is a stronger step of the ladder the \\\n             caller picked, so the colour survives being the current answer\",\n        ))\n        .child(\n            row(&theme).children(\n                [\n                    Variant::Filled,\n                    Variant::Light,\n                    Variant::Subtle,\n                    Variant::Default,\n                    Variant::Transparent,\n                ]\n                .map(|tier| {\n                    Button::new(format!(\"scene.button.chosen.{}\", tier.name()))\n                        .label(tier.name())\n                        .variant(tier)\n                        .color(SharedString::from(\"indigo\"))\n                        .selected(true)\n                        .on_click(|_, _| {})\n                }),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "badge",
      "capture": "cargo run -p xtask -- headless capture badge",
      "kind": "exhibit",
      "subjects": [
        "Badge"
      ],
      "uses": [
        "Badge"
      ],
      "example": "fn badge(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(&theme, \"Tones, which report rather than decorate\"))\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        .child(caption(\n            &theme,\n            \"A glyph or a mark, for a badge whose claim has a picture\",\n        ))\n        .child(\n            row(&theme)\n                .child(\n                    Badge::new(\"Passed\")\n                        .success()\n                        .icon(Icon::Check)\n                        .id(\"scene.badge.icon\"),\n                )\n                .child(Badge::new(\"Live\").success().dot(true).id(\"scene.badge.dot\"))\n                .child(\n                    Badge::new(\"Refused\")\n                        .danger()\n                        .icon(Icon::CloseCircle)\n                        .id(\"scene.badge.refused\"),\n                ),\n        )\n        .child(caption(&theme, \"The size ramp\"))\n        .child(\n            row(&theme)\n                .child(Badge::new(\"Extra small\").xs().id(\"scene.badge.xs\"))\n                .child(Badge::new(\"Small\").small().id(\"scene.badge.sm\"))\n                .child(Badge::new(\"Medium\").medium().id(\"scene.badge.md\"))\n                .child(Badge::new(\"Large\").large().id(\"scene.badge.lg\")),\n        )\n        .child(caption(\n            &theme,\n            \"Counts: tabular figures without a status wash\",\n        ))\n        .child(\n            row(&theme)\n                .child(Badge::new(\"3\").count().id(\"scene.badge.count-single\"))\n                .child(Badge::new(\"111\").count().id(\"scene.badge.count-narrow\"))\n                .child(Badge::new(\"888\").count().id(\"scene.badge.count-wide\")),\n        )\n        // A tint says whose the badge is. The colours come from the theme's\n        // own palette rather than from literals, so a retinted document\n        // retints these too, and the tone underneath still reports itself.\n        .child(caption(\n            &theme,\n            \"An identity tint, which says whose and not how it is going\",\n        ))\n        .child(\n            row(&theme)\n                .child(\n                    Badge::new(\"Ada\")\n                        .tint(identity_tint(&theme, \"agent.external\"))\n                        .id(\"scene.badge.tinted-neutral\"),\n                )\n                .child(\n                    Badge::new(\"Grace\")\n                        .tint(identity_tint(&theme, \"agent.shell\"))\n                        .warning()\n                        .id(\"scene.badge.tinted-warning\"),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"The shared tiers, resolved against a palette colour\",\n        ))\n        .children([\"grape\", \"cyan\"].map(|group| {\n            row(&theme).children(\n                [Variant::Filled, Variant::Light, Variant::Subtle].map(|tier| {\n                    Badge::new(tier.name())\n                        .variant(tier)\n                        .color(SharedString::from(group))\n                        .id(format!(\"scene.badge.{group}.{}\", tier.name()))\n                }),\n            )\n        }))\n        .into_any_element()\n}"
    },
    {
      "name": "card",
      "capture": "cargo run -p xtask -- headless capture card",
      "kind": "exhibit",
      "subjects": [
        "Card",
        "ListRow"
      ],
      "uses": [
        "Card",
        "ListRow"
      ],
      "example": "fn card(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let label = |content: &'static str| {\n        div()\n            .flex_1()\n            .min_w_0()\n            .child(crate::foundation::text(&theme, TypeScale::Label, content))\n    };\n    let caption = |content: &'static str| {\n        crate::foundation::text(&theme, TypeScale::Caption, content)\n            .text_tone(&theme, TextTone::Muted)\n    };\n    let column = |card: Card| div().flex_1().min_w_0().child(card);\n\n    stack(&theme)\n        .child(\n            Card::new()\n                .id(\"scene.card\")\n                .header(\n                    CardHeader::new(\"Workspace services\")\n                        .subtitle(\"Four checked a moment ago\")\n                        .action(|_window, _cx| {\n                            Button::new(\"scene.card.refresh\")\n                                .label(\"Refresh\")\n                                .secondary()\n                                .small()\n                                .into_any_element()\n                        }),\n                )\n                .child(\n                    ListRow::new()\n                        .id(\"scene.card.runtime\")\n                        .leading(StatusDot::new(Tone::Success))\n                        .child(label(\"Native runtime\"))\n                        .trailing(Badge::new(\"Ready\").success()),\n                )\n                .child(\n                    ListRow::new()\n                        .id(\"scene.card.catalog\")\n                        .leading(StatusDot::new(Tone::Warning))\n                        .child(label(\"Model catalog\"))\n                        .trailing(Badge::new(\"Stale\").warning()),\n                )\n                .child(\n                    ListRow::new()\n                        .id(\"scene.card.index\")\n                        .selected(true)\n                        .leading(StatusDot::new(Tone::Success))\n                        .child(label(\"Search index\"))\n                        .trailing(Badge::new(\"Ready\").success()),\n                )\n                .child(\n                    ListRow::new()\n                        .id(\"scene.card.telemetry\")\n                        .disabled(true)\n                        .leading(StatusDot::new(Tone::Neutral))\n                        .child(label(\"Telemetry export\"))\n                        .trailing(Badge::new(\"Off\")),\n                )\n                .footer(|_window, cx| {\n                    let theme = cx.theme().clone();\n                    div()\n                        .row()\n                        .w_full()\n                        .gap(px(theme.spacing.sm))\n                        .child(\n                            Button::new(\"scene.card.restart\")\n                                .label(\"Restart all\")\n                                .secondary()\n                                .small(),\n                        )\n                        .child(div().flex_1())\n                        .child(\n                            crate::foundation::text(&theme, TypeScale::Caption, \"4 services\")\n                                .text_tone(&theme, TextTone::Faint),\n                        )\n                        .into_any_element()\n                }),\n        )\n        .child(\n            row(&theme)\n                .items_start()\n                .child(column(\n                    Card::new()\n                        .id(\"scene.card.elevated\")\n                        .variant(CardVariant::Elevated)\n                        .padding(Space::Lg)\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Strong,\n                            \"Elevated\",\n                        ))\n                        .child(caption(\"A shadow. One card on a page.\")),\n                ))\n                .child(column(\n                    Card::new()\n                        .id(\"scene.card.filled\")\n                        .variant(CardVariant::Filled)\n                        .padding(Space::Lg)\n                        .child(crate::foundation::text(&theme, TypeScale::Strong, \"Filled\"))\n                        .child(caption(\"A tonal plane for a dense grid.\")),\n                ))\n                .child(column(\n                    Card::new()\n                        .id(\"scene.card.ghost\")\n                        .variant(CardVariant::Ghost)\n                        .padding(Space::Lg)\n                        .child(crate::foundation::text(&theme, TypeScale::Strong, \"Ghost\"))\n                        .child(caption(\"Neither. Structure without a plane.\")),\n                )),\n        )\n        .child(\n            row(&theme)\n                .items_start()\n                .child(column(\n                    Card::new()\n                        .id(\"scene.card.actionable\")\n                        .padding(Space::Lg)\n                        .on_click(|_window, _cx| {})\n                        .header(CardHeader::new(\"Open the run\").subtitle(\"The whole card acts\"))\n                        .child(caption(\"Enter and space reach it from the keyboard.\")),\n                ))\n                .child(column(\n                    // The pairing the rows above never put together, which is\n                    // how a card with no plane came to be lifted off one.\n                    Card::new()\n                        .id(\"scene.card.actionable-ghost\")\n                        .variant(CardVariant::Ghost)\n                        .padding(Space::Lg)\n                        .on_click(|_window, _cx| {})\n                        .header(CardHeader::new(\"Open the line\").subtitle(\"A ghost card acts too\"))\n                        .child(caption(\"No plane to rise off, so the pointer gets a wash.\")),\n                ))\n                .child(column(\n                    Card::new()\n                        .id(\"scene.card.chosen\")\n                        .padding(Space::Lg)\n                        .selected(true)\n                        .header(CardHeader::new(\"Selected\").subtitle(\"A stronger material wash\"))\n                        .child(caption(\n                            \"Fill carries selection without moving the content.\",\n                        )),\n                ))\n                .child(column(\n                    Card::new()\n                        .id(\"scene.card.unavailable\")\n                        .padding(Space::Lg)\n                        .disabled(true)\n                        .on_click(|_window, _cx| {})\n                        .header(CardHeader::new(\"Unavailable\").subtitle(\"Says so, and stays read\"))\n                        .child(caption(\"A disabled card installs no handler at all.\")),\n                )),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "rating",
      "capture": "cargo run -p xtask -- headless capture rating",
      "kind": "exhibit",
      "subjects": [
        "Rating"
      ],
      "uses": [
        "Rating"
      ],
      "example": "fn rating(_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 numeric rating is distinct from helpful or unhelpful feedback\",\n        ))\n        .child(\n            Rating::new(\"scene.rating.precise\")\n                .label(\"Quality\")\n                .value(Some(3.5))\n                .precision(RatingPrecision::Half)\n                .clearable(true)\n                .on_change(|_, _, _| {}),\n        )\n        .child(\n            Rating::new(\"scene.rating.unrated\")\n                .label(\"Not reviewed\")\n                .maximum(10)\n                .value(None)\n                .on_change(|_, _, _| {}),\n        )\n        .child(\n            Rating::new(\"scene.rating.disabled\")\n                .label(\"Managed score\")\n                .value(Some(4.0))\n                .disabled(true)\n                .on_change(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "bubble",
      "capture": "cargo run -p xtask -- headless capture bubble",
      "kind": "exhibit",
      "subjects": [
        "Bubble"
      ],
      "uses": [
        "Bubble"
      ],
      "example": "fn bubble(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let message = |id: &'static str, label: &'static str, body: &'static str, placement| {\n        Bubble::new(id, label)\n            .placement(placement)\n            .content(crate::foundation::text(&theme, TypeScale::Body, body))\n            .actions([Button::new(format!(\"{id}.action\")).label(\"Reply\").ghost()])\n    };\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"Placement and grouping are visual policy; the message and actions belong to the caller\",\n        ))\n        .child(message(\n            \"scene.bubble.start\",\n            \"Incoming message\",\n            \"The gateway is ready for the next run.\",\n            BubblePlacement::Start,\n        ))\n        .child(message(\n            \"scene.bubble.end\",\n            \"Outgoing message\",\n            \"Start the run when the inputs are verified.\",\n            BubblePlacement::End,\n        ))\n        .child(\n            Bubble::new(\"scene.bubble.grouped\", \"Grouped message\")\n                .grouped(true)\n                .content(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"A grouped follow-up shares the control radius.\",\n                )),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "status",
      "capture": "cargo run -p xtask -- headless capture status",
      "kind": "exhibit",
      "subjects": [
        "Callout",
        "StatusDot",
        "StatusLine"
      ],
      "uses": [
        "Callout",
        "StatusDot",
        "StatusLine"
      ],
      "example": "fn status(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // A dot on its own says a thing has a state without saying which; the\n    // name beside it is what the row is for.\n    let named = |label: &'static str, dot: StatusDot| {\n        div()\n            .row()\n            .items_center()\n            .gap(px(theme.space(Space::Xs)))\n            .child(dot)\n            .child(caption(&theme, label))\n    };\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(&theme, \"The smallest mark, and what each one claims\"))\n        .child(\n            row(&theme)\n                .gap(px(theme.space(Space::Lg)))\n                .child(named(\"ready\", StatusDot::new(Tone::Success)))\n                .child(named(\"stale\", StatusDot::new(Tone::Warning)))\n                .child(named(\"refused\", StatusDot::new(Tone::Danger)))\n                .child(named(\"off\", StatusDot::new(Tone::Neutral)))\n                // The same dot wearing an identity colour: a state the six\n                // severities cannot name, still reporting the severity it\n                // claims through the surface around it.\n                .child(named(\n                    \"Ada\",\n                    StatusDot::new(Tone::Neutral).tint(identity_tint(&theme, \"agent.external\")),\n                )),\n        )\n        .child(caption(&theme, \"Work that is still going\"))\n        .child(\n            row(&theme)\n                .child(\n                    StatusDot::new(Tone::Accent)\n                        .busy(\"scene.status.deliberating\")\n                        .activity(crate::motion::Activity::Deliberating),\n                )\n                .child(\n                    StatusDot::new(Tone::Info)\n                        .busy(\"scene.status.working\")\n                        .activity(crate::motion::Activity::Working),\n                )\n                .child(\n                    StatusDot::new(Tone::Success)\n                        .busy(\"scene.status.advancing\")\n                        .activity(crate::motion::Activity::Advancing),\n                ),\n        )\n        .child(caption(&theme, \"The same claim, named\"))\n        .child(\n            StatusLine::new(\"Connected\", Tone::Success).id(\"scene.status.line\"),\n        )\n        .child(\n            StatusLine::new(\"Ada · reviewing\", Tone::Neutral)\n                .tint(identity_tint(&theme, \"agent.external\"))\n                .busy(\"scene.status.tinted\")\n                .id(\"scene.status.tinted\"),\n        )\n        .child(caption(\n            &theme,\n            \"A report: a wash and a glyph carry the severity, so two of them differ \\\n             by meaning and never by weight\",\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 -- headless capture loading",
      "kind": "exhibit",
      "subjects": [
        "BarLoader",
        "LoadMore",
        "PulseLoader",
        "RefreshVeil",
        "Skeleton",
        "Spinner"
      ],
      "uses": [
        "BarLoader",
        "LoadMore",
        "PulseLoader",
        "RefreshVeil",
        "Skeleton",
        "Spinner"
      ],
      "example": "fn loading(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let indicator = |title: &'static str, loader: AnyElement| {\n        div()\n            .column()\n            .items_center()\n            .justify_center()\n            .gap_token(&theme, Space::Md)\n            .w(px(220.0))\n            .h(px(112.0))\n            .p_token(&theme, Space::Md)\n            .radius(&theme, Radius::Card)\n            .surface(&theme, gpui_kit_theme::Surface::Panel)\n            .child(crate::foundation::text(&theme, TypeScale::Label, title))\n            .child(loader)\n    };\n    stack(&theme)\n        .w_full()\n        .max_w(px(520.0))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Md)\n                .child(indicator(\n                    \"Loading providers\",\n                    PulseLoader::new(\"scene.loading.pulse\")\n                        .label(\"Loading providers\")\n                        .into_any_element(),\n                ))\n                .child(indicator(\n                    \"Inline wait\",\n                    Spinner::new(\"scene.loading.inline\")\n                        .label(\"Inline wait\")\n                        .into_any_element(),\n                )),\n        )\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Md)\n                .child(indicator(\n                    \"Region filling in\",\n                    BarLoader::new(\"scene.loading.bar\")\n                        .label(\"Region filling in\")\n                        .into_any_element(),\n                ))\n                .child(indicator(\n                    \"Refreshing in place\",\n                    RefreshVeil::new(\n                        \"scene.loading.veil\",\n                        crate::foundation::text(&theme, TypeScale::Body, \"Last verified list\"),\n                    )\n                    .label(\"Refreshing\")\n                    .into_any_element(),\n                )),\n        )\n        .child(\n            div()\n                .column()\n                .gap_token(&theme, Space::Sm)\n                .w_full()\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"List tails\",\n                ))\n                .child(LoadMore::new(\"scene.loading.more-idle\").on_more(|_, _| {}))\n                .child(LoadMore::new(\"scene.loading.more-loading\").state(LoadMoreState::Loading))\n                .child(LoadMore::new(\"scene.loading.more-end\").state(LoadMoreState::Exhausted)),\n        )\n        .child(\n            div()\n                .column()\n                .gap_token(&theme, Space::Sm)\n                .w_full()\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Loading list\",\n                ))\n                .child(\n                    Skeleton::new(\"scene.loading.skeleton\")\n                        .rows(3)\n                        .label(\"Loading list\"),\n                ),\n        )\n        .child(\n            div()\n                .column()\n                .gap_token(&theme, Space::Sm)\n                .w_full()\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Card and paragraph placeholders\",\n                ))\n                .child(\n                    Skeleton::new(\"scene.loading.shapes\")\n                        .shapes([\n                            SkeletonShape::Card,\n                            SkeletonShape::Paragraph { lines: 3 },\n                            SkeletonShape::Circle { size: 28.0 },\n                        ])\n                        .label(\"Loading card\"),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "visual-effects",
      "capture": "cargo run -p xtask -- headless capture visual-effects",
      "kind": "exhibit",
      "subjects": [
        "EffectParticles"
      ],
      "uses": [
        "EffectParticles"
      ],
      "example": "fn visual_effects(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let radial = radial_gradient_stops(\n        point(0.32, 0.36),\n        point(0.68, 0.72),\n        [\n            linear_color_stop(theme.colors.accent_strong, 0.0),\n            linear_color_stop(theme.colors.info.opacity(0.86), 0.34),\n            linear_color_stop(theme.colors.accent.opacity(0.38), 0.7),\n            linear_color_stop(theme.colors.canvas.opacity(0.0), 1.0),\n        ],\n    )\n    .color_space(gpui::ColorSpace::Oklab);\n    let conic = conic_gradient_stops(\n        -24.0,\n        point(0.5, 0.5),\n        [\n            linear_color_stop(theme.colors.accent_strong, 0.0),\n            linear_color_stop(theme.colors.info, 0.22),\n            linear_color_stop(theme.colors.success, 0.48),\n            linear_color_stop(theme.colors.warning, 0.72),\n            linear_color_stop(theme.colors.danger, 1.0),\n        ],\n    )\n    .color_space(gpui::ColorSpace::Oklab);\n    let path_fill = conic;\n    let stroke_fill = radial;\n    let stroke_base = theme.colors.hairline_strong.opacity(0.32);\n    let sprite_atlas = composited_sprite_atlas(&theme);\n    let additive_tint = theme.colors.accent_strong;\n    let additive_tint_alt = theme.colors.info;\n    let screen_tint = theme.colors.success;\n    let screen_tint_alt = theme.colors.warning;\n    let mut effect_planner = EffectPlanner::new(EffectPolicy::new(EffectQuality::Cinematic));\n    let success_particles = effect_planner.plan(\n        EffectEvent::new(\n            \"scene-success\",\n            \"visual-effects\",\n            \"success-card\",\n            VisualCue::Success,\n        ),\n        1,\n        false,\n    );\n    let reward_particles = effect_planner.plan(\n        EffectEvent::new(\n            \"scene-reward\",\n            \"visual-effects\",\n            \"reward-card\",\n            VisualCue::Reward,\n        ),\n        1,\n        false,\n    );\n    let mut static_planner = EffectPlanner::new(EffectPolicy::new(EffectQuality::Cinematic));\n    let static_particles = static_planner.plan(\n        EffectEvent::new(\n            \"scene-static\",\n            \"visual-effects-static\",\n            \"static-card\",\n            VisualCue::Reward,\n        ),\n        1,\n        true,\n    );\n    let label = |text: &'static str| {\n        div()\n            .absolute()\n            .bottom(px(theme.spacing.sm))\n            .left(px(theme.spacing.sm))\n            .px_token(&theme, Space::Sm)\n            .py_token(&theme, Space::Xs)\n            .radius(&theme, Radius::Pill)\n            // The caption sits on top of artwork it does not control, so it\n            // carries its own opaque surface rather than a scrim: a legend\n            // that dims with what it labels stops being a legend.\n            .frame(&theme, Surface::Panel, Elevation::Raised)\n            .child(crate::foundation::text(&theme, TypeScale::Caption, text))\n    };\n\n    stack(&theme)\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Renderer-backed gradients\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Md)\n                .child(\n                    div()\n                        .relative()\n                        .w(px(248.0))\n                        .h(px(164.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .bg(radial)\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(\"scene.effects.radial\", Role::Image)\n                                .text(\"Elliptical radial gradient\")\n                                .description(\"Four ordered Oklab color stops\"),\n                        )\n                        .child(label(\"Radial · 4 stops\")),\n                )\n                .child(\n                    div()\n                        .relative()\n                        .w(px(248.0))\n                        .h(px(164.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .bg(conic)\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(\"scene.effects.conic\", Role::Image)\n                                .text(\"Clockwise conic gradient\")\n                                .description(\"Five ordered Oklab color stops\"),\n                        )\n                        .child(label(\"Conic · 5 stops\")),\n                )\n                .child(\n                    div()\n                        .relative()\n                        .w(px(248.0))\n                        .h(px(164.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .bg(theme.colors.sunken)\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(\"scene.effects.path-gradient\", Role::Image)\n                                .text(\"Conic gradient path fill\")\n                                .description(\"The same renderer primitive clipped by a GPUI path\"),\n                        )\n                        .child(\n                            div().absolute().inset_0().child(\n                                canvas(\n                                    |_, _, _| {},\n                                    move |bounds, _, window, _| {\n                                        let inset = px(22.0);\n                                        let center = bounds.center();\n                                        let mut builder = gpui::PathBuilder::fill();\n                                        builder.move_to(point(center.x, bounds.top() + inset));\n                                        builder.line_to(point(bounds.right() - inset, center.y));\n                                        builder.line_to(point(center.x, bounds.bottom() - inset));\n                                        builder.line_to(point(bounds.left() + inset, center.y));\n                                        builder.close();\n                                        if let Ok(path) = builder.build() {\n                                            window.paint_path(path, path_fill);\n                                        }\n                                    },\n                                )\n                                .size_full(),\n                            ),\n                        )\n                        .child(label(\"Path fill · conic\")),\n                ),\n        )\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Measured path strokes\",\n        ))\n        .child(\n            div()\n                .relative()\n                .w(px(776.0))\n                .h(px(180.0))\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .bg(theme.colors.sunken)\n                .semantic_in(\n                    cx,\n                    NodeSpec::new(\"scene.effects.path-strokes\", Role::Image)\n                        .text(\"Measured path stroke effects\")\n                        .description(\"Trimmed, dash-offset, and combined stroke geometry\"),\n                )\n                .child(\n                    div().absolute().inset_0().child(\n                        canvas(\n                            |_, _, _| {},\n                            move |bounds, _, window, _| {\n                                let build = |mut builder: gpui::PathBuilder, y: f32| {\n                                    let start =\n                                        point(bounds.left() + px(128.0), bounds.top() + px(y));\n                                    let end =\n                                        point(bounds.right() - px(24.0), bounds.top() + px(y));\n                                    builder.move_to(start);\n                                    builder.cubic_bezier_to(\n                                        end,\n                                        point(start.x + px(132.0), start.y - px(24.0)),\n                                        point(end.x - px(132.0), end.y + px(24.0)),\n                                    );\n                                    builder.build()\n                                };\n\n                                if let Ok(path) = build(gpui::PathBuilder::stroke(px(8.0)), 42.0) {\n                                    window.paint_path(path, stroke_base);\n                                }\n                                if let Ok(path) = build(\n                                    gpui::PathBuilder::stroke(px(8.0)).stroke_trim(0.0, 0.68),\n                                    42.0,\n                                ) {\n                                    window.paint_path(path, stroke_fill);\n                                }\n                                if let Ok(path) = build(\n                                    gpui::PathBuilder::stroke(px(7.0))\n                                        .dash_array(&[px(18.0), px(11.0)])\n                                        .dash_offset(px(9.0)),\n                                    92.0,\n                                ) {\n                                    window.paint_path(path, conic);\n                                }\n                                if let Ok(path) = build(\n                                    gpui::PathBuilder::stroke(px(7.0))\n                                        .dash_array(&[px(14.0), px(8.0)])\n                                        .dash_offset(px(-6.0))\n                                        .stroke_trim(0.16, 0.84),\n                                    142.0,\n                                ) {\n                                    window.paint_path(path, stroke_fill);\n                                }\n                            },\n                        )\n                        .size_full(),\n                    ),\n                )\n                .child(div().absolute().left(px(16.0)).top(px(31.0)).child(\n                    crate::foundation::text(&theme, TypeScale::Caption, \"Trim · 68%\"),\n                ))\n                .child(div().absolute().left(px(16.0)).top(px(81.0)).child(\n                    crate::foundation::text(&theme, TypeScale::Caption, \"Dash phase · 9 px\"),\n                ))\n                .child(div().absolute().left(px(16.0)).top(px(131.0)).child(\n                    crate::foundation::text(&theme, TypeScale::Caption, \"Trim + phase\"),\n                )),\n        )\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Composited sprite batches\",\n        ))\n        .child(\n            div()\n                .relative()\n                .w(px(776.0))\n                .h(px(190.0))\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .bg(theme.colors.sunken)\n                .semantic_in(\n                    cx,\n                    NodeSpec::new(\"scene.effects.sprite-batch\", Role::Image)\n                        .text(\"Composited sprite batch\")\n                        .description(\n                            \"One atlas with explicit source rectangles, transforms, masks, and normal, additive, and screen blending\",\n                        ),\n                )\n                .child(\n                    div().absolute().inset_0().child(\n                        canvas(\n                            |_, _, _| {},\n                            move |frame, _, window, _| {\n                                let source = |column| {\n                                    bounds(\n                                        point(DevicePixels(column * 48), DevicePixels(0)),\n                                        size(DevicePixels(48), DevicePixels(48)),\n                                    )\n                                };\n                                let destination = |x, y, width, height| {\n                                    bounds(\n                                        point(frame.left() + px(x), frame.top() + px(y)),\n                                        size(px(width), px(height)),\n                                    )\n                                };\n                                let sprites = [\n                                    SpriteInstance::new(\n                                        destination(56.0, 26.0, 104.0, 104.0),\n                                        source(0),\n                                    )\n                                    .corner_radii(Corners::all(px(28.0)))\n                                    .transform(\n                                        SpriteTransform::identity().rotate(radians(-0.16)),\n                                    ),\n                                    SpriteInstance::new(\n                                        destination(270.0, 34.0, 96.0, 96.0),\n                                        source(1),\n                                    )\n                                    .color_mode(SpriteColorMode::AlphaMask, additive_tint)\n                                    .blend_mode(SpriteBlendMode::Additive),\n                                    SpriteInstance::new(\n                                        destination(314.0, 34.0, 96.0, 96.0),\n                                        source(1),\n                                    )\n                                    .transform(\n                                        SpriteTransform::identity().rotate(radians(0.22)),\n                                    )\n                                    .color_mode(SpriteColorMode::AlphaMask, additive_tint_alt)\n                                    .blend_mode(SpriteBlendMode::Additive),\n                                    SpriteInstance::new(\n                                        destination(536.0, 24.0, 112.0, 112.0),\n                                        source(2),\n                                    )\n                                    .color_mode(SpriteColorMode::AlphaMask, screen_tint)\n                                    .blend_mode(SpriteBlendMode::Screen),\n                                    SpriteInstance::new(\n                                        destination(582.0, 30.0, 100.0, 100.0),\n                                        source(2),\n                                    )\n                                    .transform(\n                                        SpriteTransform::identity().rotate(radians(0.42)),\n                                    )\n                                    .color_mode(SpriteColorMode::AlphaMask, screen_tint_alt)\n                                    .blend_mode(SpriteBlendMode::Screen),\n                                ];\n                                window\n                                    .paint_sprite_batch(sprite_atlas.clone(), 0, &sprites)\n                                    .expect(\"the canonical sprite batch is valid\");\n                            },\n                        )\n                        .size_full(),\n                    ),\n                )\n                .child(\n                    div()\n                        .absolute()\n                        .left(px(64.0))\n                        .bottom(px(12.0))\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Normal · crop + rotate\",\n                        )),\n                )\n                .child(\n                    div()\n                        .absolute()\n                        .left(px(282.0))\n                        .bottom(px(12.0))\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Additive · alpha mask\",\n                        )),\n                )\n                .child(\n                    div()\n                        .absolute()\n                        .left(px(550.0))\n                        .bottom(px(12.0))\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Screen · atlas reuse\",\n                        )),\n                ),\n        )\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Policy-owned particle recipes\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Md)\n                .child(\n                    div()\n                        .relative()\n                        .w(px(248.0))\n                        .h(px(164.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .bg(theme.colors.sunken)\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(\"scene.effects.particles-success\", Role::Image)\n                                .text(\"Deterministic success burst\")\n                                .description(\n                                    \"A policy-owned recipe sampled at a fixed absolute time\",\n                                ),\n                        )\n                        .child(\n                            EffectParticles::new(success_particles)\n                                .sample_at(Duration::from_millis(420)),\n                        )\n                        .child(label(\"Success · 36 instances\")),\n                )\n                .child(\n                    div()\n                        .relative()\n                        .w(px(248.0))\n                        .h(px(164.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .bg(theme.colors.sunken)\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(\"scene.effects.particles-reward\", Role::Image)\n                                .text(\"Deterministic reward celebration\")\n                                .description(\n                                    \"Two emitters share one atlas upload and one sprite batch\",\n                                ),\n                        )\n                        .child(\n                            EffectParticles::new(reward_particles)\n                                .sample_at(Duration::from_millis(620)),\n                        )\n                        .child(label(\"Reward · 2 emitters\")),\n                )\n                .child(\n                    div()\n                        .relative()\n                        .w(px(248.0))\n                        .h(px(164.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .bg(theme.colors.sunken)\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(\"scene.effects.particles-static\", Role::Image)\n                                .text(\"Reduced motion particle fallback\")\n                                .description(\n                                    \"A fixed bounded constellation with no animation frames\",\n                                ),\n                        )\n                        .child(EffectParticles::new(static_particles))\n                        .child(label(\"Static · no timeline\")),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "cinematic-effects",
      "capture": "cargo run -p xtask -- headless capture cinematic-effects",
      "kind": "exhibit",
      "subjects": [
        "CinematicEffect"
      ],
      "uses": [
        "CinematicEffect"
      ],
      "example": "fn cinematic_effects(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let clip: Rc<dyn DotLottieClip> = Rc::new(SceneCinematicClip);\n    let mut planner = EffectPlanner::new(EffectPolicy::new(EffectQuality::Cinematic));\n    let success = planner.plan(\n        EffectEvent::new(\n            \"scene-cinematic-success\",\n            \"cinematic-effects\",\n            \"success\",\n            VisualCue::Success,\n        ),\n        1,\n        false,\n    );\n    let handoff = planner.plan(\n        EffectEvent::new(\n            \"scene-cinematic-handoff\",\n            \"cinematic-effects\",\n            \"handoff\",\n            VisualCue::Handoff,\n        ),\n        1,\n        false,\n    );\n    let reward = planner.plan(\n        EffectEvent::new(\n            \"scene-cinematic-reward\",\n            \"cinematic-effects\",\n            \"reward\",\n            VisualCue::Reward,\n        ),\n        1,\n        false,\n    );\n    let mut static_planner = EffectPlanner::new(EffectPolicy::new(EffectQuality::Cinematic));\n    let static_reward = static_planner.plan(\n        EffectEvent::new(\n            \"scene-cinematic-static\",\n            \"cinematic-effects-static\",\n            \"reward\",\n            VisualCue::Reward,\n        ),\n        1,\n        true,\n    );\n\n    let card = |title: &'static str, detail: &'static str, effect: AnyElement| {\n        div()\n            .column()\n            .w(px(372.0))\n            .h(px(228.0))\n            .radius(&theme, Radius::Card)\n            .overflow_hidden()\n            .bg(theme.colors.sunken)\n            .child(div().relative().w_full().h(px(154.0)).child(effect))\n            .child(\n                div()\n                    .column()\n                    .gap_token(&theme, Space::Xs)\n                    .px_token(&theme, Space::Md)\n                    .py_token(&theme, Space::Sm)\n                    .child(crate::foundation::text(&theme, TypeScale::Label, title))\n                    .child(\n                        crate::foundation::text(&theme, TypeScale::Caption, detail)\n                            .text_color(theme.colors.text_muted),\n                    ),\n            )\n    };\n\n    stack(&theme)\n        .w(px(808.0))\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Semantic cinematic effects\",\n        ))\n        .child(caption(\n            &theme,\n            \"events choose recipes; hosts resolve bytes and own playback requests\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Md)\n                .child(card(\n                    \"Handoff · deterministic sample\",\n                    \"A resolved clip sampled at 575 ms; RTL mirrors its directional trail.\",\n                    CinematicEffect::new(\"scene.cinematic.handoff\", handoff)\n                        .clip(clip.clone())\n                        .sample_at(Duration::from_millis(575))\n                        .into_any_element(),\n                ))\n                .child(card(\n                    \"Success · runtime unavailable\",\n                    \"The semantic recipe falls back to the policy-owned particle burst.\",\n                    CinematicEffect::new(\"scene.cinematic.success\", success)\n                        .unavailable(DotLottieError::new(\n                            DotLottieErrorKind::RuntimeUnavailable,\n                            \"dotLottie backend is not installed\",\n                        ))\n                        .sample_at(Duration::from_millis(520))\n                        .into_any_element(),\n                )),\n        )\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Md)\n                .child(card(\n                    \"Reward · invalid asset fallback\",\n                    \"A refused archive stays explicit while a bounded particle recipe renders.\",\n                    CinematicEffect::new(\"scene.cinematic.invalid\", reward)\n                        .unavailable(DotLottieError::new(\n                            DotLottieErrorKind::ArchiveInvalid,\n                            \"animation archive did not pass validation\",\n                        ))\n                        .sample_at(Duration::from_millis(620))\n                        .into_any_element(),\n                ))\n                .child(card(\n                    \"Reward · reduced-motion poster\",\n                    \"The same recipe becomes a deterministic poster with no frame timeline.\",\n                    CinematicEffect::new(\"scene.cinematic.poster\", static_reward)\n                        .clip(clip)\n                        .into_any_element(),\n                )),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "choice",
      "capture": "cargo run -p xtask -- headless capture choice",
      "kind": "exhibit",
      "subjects": [
        "Checkbox",
        "Radio",
        "Slider",
        "Switch"
      ],
      "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            Switch::new(\"scene.choice.background-updates\")\n                .label(\"Background updates\")\n                .on(false)\n                .on_change(|_, _, _| {}),\n        )\n        .child(\n            Switch::new(\"scene.choice.managed-updates\")\n                .label(\"Managed updates\")\n                .on(true)\n                .disabled(true),\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        .child(\n            Slider::new(\"scene.choice.window\")\n                .label(\"Window\")\n                .range(0.0, 1.0)\n                .values(0.2, 0.8)\n                .marks([0.0, 0.25, 0.5, 0.75, 1.0])\n                .display(\"0.2 – 0.8\")\n                .on_range_change(|_, _, _, _| {}),\n        )\n        .child(caption(\n            &theme,\n            \"Vertical range uses the same value, marks, and keyboard contract\",\n        ))\n        .child(\n            div().h(px(220.0)).child(\n                Slider::new(\"scene.choice.vertical\")\n                    .label(\"Vertical\")\n                    .orientation(SliderOrientation::Vertical)\n                    .range(0.0, 100.0)\n                    .step(10.0)\n                    .value(60.0)\n                    .marks([0.0, 25.0, 50.0, 75.0, 100.0])\n                    .display(\"60\")\n                    .on_change(|_, _, _| {}),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "multi-select",
      "capture": "cargo run -p xtask -- headless capture multi-select",
      "kind": "exhibit",
      "subjects": [
        "MultiSelect"
      ],
      "uses": [
        "MultiSelect"
      ],
      "example": "fn multi_select(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneMultiSelect>() {\n        let control = cx.new(|cx| {\n            MultiSelect::new(\"scene.multi-select\", window, cx)\n                .name(\"Enabled providers\")\n                .placeholder(\"Choose providers\")\n                .selected([\"native\", \"remote\"])\n                .options([\n                    SelectOption::new(\"native\", \"Native runtime\")\n                        .description(\"Runs on this machine\"),\n                    SelectOption::new(\"remote\", \"Remote gateway\")\n                        .description(\"Uses the workspace gateway\"),\n                    SelectOption::new(\"preview\", \"Preview models\").disabled(true),\n                    SelectOption::new(\"archive\", \"Archive models\"),\n                ])\n                .clearable(true)\n        });\n        control.update(cx, |control, cx| control.open(window, cx));\n        let disabled = cx.new(|cx| {\n            MultiSelect::new(\"scene.multi-select-disabled\", window, cx)\n                .name(\"Disabled providers\")\n                .selected([\"native\", \"remote\"])\n                .options([\n                    SelectOption::new(\"native\", \"Native runtime\"),\n                    SelectOption::new(\"remote\", \"Remote gateway\"),\n                ])\n                .disabled(true)\n        });\n        cx.set_global(SceneMultiSelect { control, disabled });\n    }\n    let theme = cx.theme().clone();\n    let control = cx.global::<SceneMultiSelect>().control.clone();\n    let disabled = cx.global::<SceneMultiSelect>().disabled.clone();\n    stack(&theme)\n        .w(px(520.0))\n        .child(caption(\n            &theme,\n            \"Selected ids stay with the host; search, chips, and option focus stay with the view\",\n        ))\n        .child(caption(\n            &theme,\n            \"Disabled: selected values remain visible, without remove actions\",\n        ))\n        .child(disabled)\n        .child(control)\n        .into_any_element()\n}"
    },
    {
      "name": "transfer-list",
      "capture": "cargo run -p xtask -- headless capture transfer-list",
      "kind": "exhibit",
      "subjects": [
        "TransferList"
      ],
      "uses": [
        "TransferList"
      ],
      "example": "fn transfer_list(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneTransferList>() {\n        let control = cx.new(|cx| {\n            TransferList::new(\"scene.transfer-list\", window, cx)\n                .source([\n                    TransferItem::new(\"runtime\", \"Native runtime\"),\n                    TransferItem::new(\"gateway\", \"Remote gateway\"),\n                    TransferItem::new(\"preview\", \"Preview models\").disabled(true),\n                ])\n                .target([TransferItem::new(\"logs\", \"Run logs\")])\n                .source_selected([\"gateway\"])\n                .target_selected([\"logs\"])\n                .source_label(\"Available capabilities\")\n                .target_label(\"Assigned capabilities\")\n        });\n        cx.set_global(SceneTransferList { control });\n    }\n    let theme = cx.theme().clone();\n    let control = cx.global::<SceneTransferList>().control.clone();\n    stack(&theme)\n        .w(px(720.0))\n        .child(caption(\n            &theme,\n            \"Each pane reports stable item intents; the host performs the assignment\",\n        ))\n        .child(control)\n        .into_any_element()\n}"
    },
    {
      "name": "input",
      "capture": "cargo run -p xtask -- headless capture input",
      "kind": "exhibit",
      "subjects": [
        "Select",
        "TextInput"
      ],
      "uses": [
        "Select",
        "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    // A field with no label is a box. Each one is put where a product would\n    // put it: under the words that say what it is for, and above the sentence\n    // that says what is wrong with it.\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            FormField::new(\"scene.input.token.field\", \"API token\")\n                .control(\"scene.input.token\")\n                .description(\"Kept on this machine, never published.\")\n                .child(token),\n        )\n        .child(\n            FormField::new(\"scene.input.disabled.field\", \"Workspace id\")\n                .control(\"scene.input.disabled\")\n                .description(\"Set when the workspace was created.\")\n                .child(disabled),\n        )\n        .child(\n            FormField::new(\"scene.input.invalid.field\", \"Email\")\n                .control(\"scene.input.invalid\")\n                .required(true)\n                .error(\"This is not an address anyone can be reached at.\")\n                .child(invalid),\n        )\n        .child(\n            FormField::new(\"scene.input.provider.field\", \"Provider\")\n                .control(\"scene.input.provider\")\n                .description(\"Where a run is sent.\")\n                .child(provider),\n        )\n        .child(caption(&theme, \"Focused chrome fixture · not an editor\"))\n        .child(\n            crate::controls::field::field_shell(\n                &theme,\n                ControlSize::Md,\n                crate::controls::field::FieldState::default().focused(true),\n            )\n            .child(\"Halo retains the inner highlight\")\n            .semantic_in(cx, NodeSpec::new(\"scene.input.focused-chrome\", Role::Group)),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "touch-inputs",
      "capture": "cargo run -p xtask -- headless capture touch-inputs",
      "kind": "exhibit",
      "subjects": [
        "TextInput",
        "TextArea",
        "PasswordInput",
        "OneTimeCodeInput"
      ],
      "uses": [
        "TextInput",
        "TextArea",
        "PasswordInput",
        "OneTimeCodeInput"
      ],
      "example": "fn touch_inputs(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<TouchInputs>() {\n        let email = cx.new(|cx| {\n            TextInput::new(\"scene.touch.email\", window, cx)\n                .name(\"Email\")\n                .placeholder(\"you@example.com\")\n                .control_size(ControlSize::Touch)\n                .input_options(gpui::TextInputOptions {\n                    purpose: gpui::KeyboardPurpose::Email,\n                    action: gpui::TextInputAction::Next,\n                    autofill: Some(gpui::AutofillPurpose::Email),\n                    ..Default::default()\n                })\n        });\n        let password = cx.new(|cx| {\n            PasswordInput::new(\"scene.touch.password\", window, cx)\n                .name(\"Password\")\n                .placeholder(\"Password\")\n                .control_size(ControlSize::Touch)\n                .input_options(gpui::TextInputOptions {\n                    action: gpui::TextInputAction::Done,\n                    autofill: Some(gpui::AutofillPurpose::CurrentPassword),\n                    ..Default::default()\n                })\n        });\n        let password_focus = password.clone();\n        let host_window = window.window_handle();\n        let next = cx.subscribe(&email, move |_, action: &gpui::TextInputAction, cx| {\n            if *action == gpui::TextInputAction::Next {\n                let focus = password_focus.read(cx).focus_handle(cx);\n                cx.update_window(host_window, |_, window, cx| focus.focus(window, cx))\n                    .ok();\n            }\n        });\n        let code = cx.new(|cx| {\n            OneTimeCodeInput::new(\"scene.touch.code\", window, cx)\n                .name(\"Code\")\n                .slots(6)\n                .control_size(ControlSize::Touch)\n                .input_options(gpui::TextInputOptions {\n                    purpose: gpui::KeyboardPurpose::Number,\n                    autofill: Some(gpui::AutofillPurpose::OneTimeCode),\n                    ..Default::default()\n                })\n        });\n        let notes = cx.new(|cx| {\n            TextArea::new(\"scene.touch.notes\", window, cx)\n                .placeholder(\"Notes · wraps at this width\")\n                .rows(2)\n                .control_size(ControlSize::Touch)\n        });\n        let disabled = cx.new(|cx| {\n            TextInput::new(\"scene.touch.disabled\", window, cx)\n                .name(\"Disabled fixture\")\n                .text(\"Managed by the host\")\n                .disabled(true)\n                .control_size(ControlSize::Touch)\n        });\n        let invalid = cx.new(|cx| {\n            TextInput::new(\"scene.touch.invalid\", window, cx)\n                .name(\"Invalid email fixture\")\n                .text(\"not an address\")\n                .invalid(true)\n                .control_size(ControlSize::Touch)\n        });\n        cx.set_global(TouchInputs {\n            fields: vec![\n                (\"scene.touch.email\", \"Email\", email.into()),\n                (\"scene.touch.password\", \"Password\", password.into()),\n                (\n                    \"scene.touch.code\",\n                    \"Verification code · 6 characters\",\n                    code.into(),\n                ),\n                (\"scene.touch.notes\", \"Notes\", notes.into()),\n                (\"scene.touch.disabled\", \"Managed field\", disabled.into()),\n                (\"scene.touch.invalid\", \"Invalid email\", invalid.into()),\n            ],\n            _next: next,\n        });\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(390.0))\n        .max_w_full()\n        .child(caption(\n            &theme,\n            \"Touch editing fixtures · keyboard hints are platform-dependent\",\n        ))\n        .children(\n            cx.global::<TouchInputs>()\n                .fields\n                .iter()\n                .map(|(id, label, view)| {\n                    FormField::new(format!(\"{id}.field\"), *label)\n                        .control(*id)\n                        .child(view.clone())\n                }),\n        )\n        .child(caption(\n            &theme,\n            \"Code paste is not SMS autofill. Error and disabled values remain visible.\",\n        ))\n        .into_any_element()\n}"
    },
    {
      "name": "touch-pickers",
      "capture": "cargo run -p xtask -- headless capture touch-pickers",
      "kind": "exhibit",
      "subjects": [
        "Select",
        "Combobox",
        "MultiSelect"
      ],
      "uses": [
        "Select",
        "Combobox",
        "MultiSelect"
      ],
      "example": "fn touch_pickers(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::overlay::popover::PickerPresentation;\n    if !cx.has_global::<TouchPickers>() {\n        let options: Vec<_> = (1..=12)\n            .map(|id| {\n                SelectOption::new(format!(\"item-{id}\"), format!(\"Fixture choice {id}\"))\n                    .disabled(id == 3)\n            })\n            .collect();\n        let select = cx.new(|cx| {\n            Select::new(\"scene.touch.select\", window, cx)\n                .name(\"Choose one\")\n                .options(options.clone())\n                .selected(\"item-2\")\n                .clearable(true)\n                .control_size(ControlSize::Touch)\n                .presentation(PickerPresentation::Bottom)\n        });\n        let search = cx.new(|cx| {\n            Combobox::new(\"scene.touch.search\", window, cx)\n                .name(\"Search choices\")\n                .options(options.clone())\n                .control_size(ControlSize::Touch)\n                .presentation(PickerPresentation::Bottom)\n        });\n        let multi = cx.new(|cx| {\n            MultiSelect::new(\"scene.touch.multi\", window, cx)\n                .name(\"Choose several\")\n                .options(options)\n                .selected([\"item-2\", \"item-5\"])\n                .control_size(ControlSize::Touch)\n                .presentation(PickerPresentation::Bottom)\n        });\n        cx.set_global(TouchPickers {\n            select,\n            search,\n            multi,\n        });\n    }\n    let theme = cx.theme().clone();\n    let pickers = cx.global::<TouchPickers>();\n    stack(&theme)\n        .w(px(390.0))\n        .max_w_full()\n        .child(caption(\n            &theme,\n            \"Bottom picker fixtures · choices remain caller-owned\",\n        ))\n        .child(pickers.select.clone())\n        .child(pickers.search.clone())\n        .child(pickers.multi.clone())\n        .into_any_element()\n}"
    },
    {
      "name": "touch-pickers-open",
      "capture": "cargo run -p xtask -- headless capture touch-pickers-open",
      "kind": "exhibit",
      "subjects": [
        "Combobox"
      ],
      "uses": [
        "Combobox"
      ],
      "example": "fn touch_pickers_open(window: &mut Window, cx: &mut App) -> AnyElement {\n    let body = touch_pickers(window, cx);\n    if !cx.has_global::<TouchPickerOpened>() {\n        cx.global::<TouchPickers>()\n            .search\n            .clone()\n            .update(cx, |picker, cx| picker.open(cx));\n        cx.set_global(TouchPickerOpened);\n    }\n    body\n}"
    },
    {
      "name": "textarea",
      "capture": "cargo run -p xtask -- headless capture textarea",
      "kind": "exhibit",
      "subjects": [
        "TextArea"
      ],
      "uses": [
        "TextArea"
      ],
      "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, message, asked, told) = (\n        inputs.notes.clone(),\n        inputs.review.clone(),\n        inputs.frozen.clone(),\n        inputs.message.clone(),\n        inputs.asked.clone(),\n        inputs.told.clone(),\n    );\n    // Focus belongs to this scene's mounted lifetime, not the first scene that\n    // happens to initialize the shared input fixtures. Do not steal it back\n    // from another field on later renders.\n    window.use_keyed_state(\"scene.textarea.initial-focus\", cx, |window, cx| {\n        window.focus(&review.read(cx).focus_handle(cx), cx);\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(\n            FormField::new(\"scene.textarea.notes.field\", \"Release notes\")\n                .control(\"scene.textarea.notes\")\n                .description(\"Shown to everyone who opens this run.\")\n                .child(notes),\n        )\n        .child(\n            FormField::new(\"scene.textarea.review.field\", \"Review\")\n                .control(\"scene.textarea.review\")\n                .child(review),\n        )\n        .child(\n            FormField::new(\"scene.textarea.frozen.field\", \"Policy\")\n                .control(\"scene.textarea.frozen\")\n                .child(frozen),\n        )\n        // The other enter policy, for text that is a message rather than a\n        // value. Nothing about it looks different, which is the point: what\n        // changes is which key is the common act.\n        .child(message)\n        .child(caption(\n            &theme,\n            \"a frame that measures its text rather than its rows: the same pill \\\n             holds one line, and becomes a panel for a message that outgrew it\",\n        ))\n        .child(asked)\n        .child(told)\n        .into_any_element()\n}"
    },
    {
      "name": "editor",
      "capture": "cargo run -p xtask -- headless capture editor",
      "kind": "exhibit",
      "subjects": [
        "Editor"
      ],
      "uses": [
        "Editor"
      ],
      "example": "fn editor(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_editor(window, cx);\n    let editor = cx.global::<SceneEditor>().editor.clone();\n    let theme = cx.theme().clone();\n    let scene = stack(&theme)\n        .w(px(760.0))\n        .child(caption(\n            &theme,\n            \"one text/IME/history geometry; caller-owned revision highlights and indentation\",\n        ))\n        .child(editor);\n    #[cfg(feature = \"syntax\")]\n    let scene = scene\n        .child(caption(\n            &theme,\n            \"JSON fixture · in-process incremental syntax, no language server\",\n        ))\n        .child(cx.global::<SceneEditor>().syntax.clone());\n    scene.into_any_element()\n}"
    },
    {
      "name": "editor-multicursor",
      "capture": "cargo run -p xtask -- headless capture editor-multicursor",
      "kind": "exhibit",
      "subjects": [
        "Editor"
      ],
      "uses": [
        "Editor"
      ],
      "example": "fn editor_multicursor(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneMulticursorEditor>() {\n        let source = \"let alpha = 1;\\nlet beta  = 2;\\nlet gamma = 3;\";\n        let editor = cx.new(|cx| {\n            Editor::new(\n                \"scene.editor.multiple\",\n                \"Multicursor source fixture\",\n                source,\n                window,\n                cx,\n            )\n            .rows(4)\n        });\n        editor.update(cx, |editor, cx| {\n            let selections = [\"gamma\", \"alpha\", \"beta\"].map(|name| {\n                let start = source.find(name).expect(\"fixture variable\");\n                (start..start + name.len(), false)\n            });\n            editor.set_selections(selections, cx);\n        });\n        window.focus(&editor.read(cx).text_area().read(cx).focus_handle(cx), cx);\n        cx.set_global(SceneMulticursorEditor(editor));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme).w(px(760.0))\n        .child(caption(&theme, \"fixture · type in three selections; undo restores all · Alt-click adds a caret · Alt-Shift-drag selects columns\"))\n        .child(cx.global::<SceneMulticursorEditor>().0.clone())\n        .into_any_element()\n}"
    },
    {
      "name": "editor-services",
      "capture": "cargo run -p xtask -- headless capture editor-services",
      "kind": "exhibit",
      "subjects": [
        "Editor"
      ],
      "uses": [
        "Editor"
      ],
      "example": "fn editor_services(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::controls::editor::*;\n    if !cx.has_global::<SceneEditorServices>() {\n        let editors = [\"ready\", \"loading\", \"refused\", \"hover\"].map(|state| {\n            let editor = cx.new(|cx| {\n                Editor::new(\n                    format!(\"scene.editor.services.{state}\"),\n                    format!(\"Language service {state} fixture\"),\n                    \"let count = val;\\n// caller-owned fixture\",\n                    window,\n                    cx,\n                )\n                .rows(3)\n                .language_services(true)\n            });\n            editor.update(cx, |editor, cx| {\n                let kind = if state == \"hover\" {\n                    EditorServiceKind::Hover\n                } else {\n                    EditorServiceKind::Completion\n                };\n                let request = editor\n                    .request_service(kind, 14, cx)\n                    .expect(\"fixture request\");\n                editor.set_diagnostics(\n                    0,\n                    vec![EditorDiagnostic {\n                        id: \"unresolved-value\".into(),\n                        range: 12..15,\n                        message: \"Fixture: unresolved name\".into(),\n                        severity: EditorDiagnosticSeverity::Warning,\n                    }],\n                    cx,\n                );\n                editor.set_semantic_tokens(\n                    0,\n                    vec![EditorSemanticToken {\n                        range: 0..3,\n                        class: gpui_kit_theme::SyntaxColor::Keyword,\n                    }],\n                    cx,\n                );\n                let result = match state {\n                    \"loading\" => AsyncValue::loading(),\n                    \"refused\" => AsyncValue::refused(\"Fixture host denied this request\"),\n                    \"hover\" => AsyncValue::ready(EditorServiceResult::Hover(EditorHover {\n                        range: 12..15,\n                        contents: \"Fixture: value → integer\\nDocumentation is caller text.\".into(),\n                    })),\n                    _ => AsyncValue::ready(EditorServiceResult::Items(vec![EditorServiceItem {\n                        id: \"value\".into(),\n                        label: \"value\".into(),\n                        detail: Some(\" · integer (fixture)\".into()),\n                        effect: EditorServiceEffect::Edits(vec![EditorReplacement {\n                            range: 12..15,\n                            text: \"value\".into(),\n                        }]),\n                    }])),\n                };\n                editor.set_service_result(request.id, result, cx);\n            });\n            editor\n        });\n        cx.set_global(SceneEditorServices(editors.into()));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme).w(px(900.0))\n        .child(caption(&theme, \"caller fixtures · completion / loading / host refusal / hover + diagnostic · no server process\"))\n        .children(cx.global::<SceneEditorServices>().0.chunks(2).map(|pair| {\n            row(&theme).items_start().children(pair.iter().map(|editor| div().w(px(430.0)).h(px(225.0)).child(editor.clone())))\n        }))\n        .into_any_element()\n}"
    },
    {
      "name": "editor-folding",
      "capture": "cargo run -p xtask -- headless capture editor-folding",
      "kind": "exhibit",
      "subjects": [
        "Editor"
      ],
      "uses": [
        "Editor"
      ],
      "example": "fn editor_folding(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneFoldedEditor>() {\n        let editor = cx.new(|cx| Editor::new(\"scene.editor.folding\", \"Folded Unicode source fixture\", \"fn outer() {\\n    let 界 = 13;\\n    if ready {\\n        process();\\n    }\\n}\\nfn tail() {}\\n\", window, cx).rows(6));\n        editor.update(cx, |editor, cx| {\n            use crate::controls::editor::EditorFold;\n            editor.set_folds(\n                0,\n                vec![\n                    EditorFold {\n                        id: \"outer\".into(),\n                        lines: 0..6,\n                    },\n                    EditorFold {\n                        id: \"ready\".into(),\n                        lines: 2..5,\n                    },\n                ],\n                cx,\n            );\n            editor.set_fold_collapsed(\"ready\", true, cx);\n        });\n        cx.set_global(SceneFoldedEditor(editor));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme).w(px(760.0))\n        .child(caption(&theme, \"fixture · nested source folds · gutter toggles or Ctrl-Alt-F · hidden text remains in the document\"))\n        .child(cx.global::<SceneFoldedEditor>().0.clone())\n        .into_any_element()\n}"
    },
    {
      "name": "editor-options",
      "capture": "cargo run -p xtask -- headless capture editor-options",
      "kind": "exhibit",
      "subjects": [
        "Editor",
        "TextArea",
        "RichTextEditor"
      ],
      "uses": [
        "Editor",
        "TextArea",
        "RichTextEditor"
      ],
      "example": "fn editor_options(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneEditorOptions>() {\n        let area = cx.new(|cx| {\n            TextArea::new(\"scene.options.area\", window, cx)\n                .text(\"Caller text survives layout changes. 界 😀\\nA retained second line.\")\n        });\n        area.update(cx, |area, cx| {\n            area.set_control_size(ControlSize::Lg, cx);\n            area.set_autosize(Some((2, 4)), cx);\n            area.set_required(true, cx);\n        });\n        let editor = cx.new(|cx| {\n            Editor::new(\n                \"scene.options.editor\",\n                \"Retained source fixture\",\n                \"let unchanged = 13;\\n// same entity, new options\",\n                window,\n                cx,\n            )\n        });\n        editor.update(cx, |editor, cx| {\n            editor.set_rows(3, cx);\n            editor.set_line_numbers(false, cx);\n            editor.set_read_only(true, cx);\n        });\n        let document = RichTextDocument::new([RichTextBlock::new(\n            \"options-body\",\n            \"Caller-owned rich text remains attached to the same session.\",\n        )])\n        .expect(\"fixture document is valid\");\n        let session = cx.new(|_| RichTextEditSession::new(document));\n        let next_id = Rc::new(std::cell::Cell::new(0_u64));\n        let rich = cx.new(|cx| {\n            RichTextEditor::new(\n                \"scene.options.rich\",\n                session,\n                move || {\n                    let id = next_id.get() + 1;\n                    next_id.set(id);\n                    RichTextBlockId::new(format!(\"options-{id}\"))\n                },\n                window,\n                cx,\n            )\n        });\n        rich.update(cx, |editor, cx| {\n            editor.set_rows(2, cx);\n            editor.set_max_rows(None, cx);\n            editor.set_toolbar(false, cx);\n        });\n        cx.set_global(SceneEditorOptions(area, editor, rich));\n    }\n    let theme = cx.theme().clone();\n    let editors = cx.global::<SceneEditorOptions>();\n    stack(&theme).w(px(720.0))\n        .child(caption(&theme, \"fixture · retained options: large autosizing text / read-only source without gutter / fixed rich text without toolbar\"))\n        .child(editors.0.clone()).child(editors.1.clone()).child(editors.2.clone())\n        .into_any_element()\n}"
    },
    {
      "name": "mention-input",
      "capture": "cargo run -p xtask -- headless capture mention-input",
      "kind": "exhibit",
      "subjects": [
        "MentionInput"
      ],
      "uses": [
        "MentionInput"
      ],
      "example": "fn mention_input(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_mention_input(window, cx);\n    let input = cx.global::<SceneMentionInput>().input.clone();\n    let theme = cx.theme().clone();\n    div()\n        .column()\n        .gap_token(&theme, Space::Sm)\n        .p_token(&theme, Space::Lg)\n        .w(px(420.0))\n        .child(caption(\n            &theme,\n            \"the editor owns text; the anchored menu owns only @query completion\",\n        ))\n        .child(input)\n        .into_any_element()\n}"
    },
    {
      "name": "rich-text-editor",
      "capture": "cargo run -p xtask -- headless capture rich-text-editor",
      "kind": "exhibit",
      "subjects": [
        "RichTextEditor"
      ],
      "uses": [
        "RichTextEditor"
      ],
      "example": "fn rich_text_editor(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_rich_text_editor(window, cx);\n    let editor = cx.global::<SceneRichTextEditor>().editor.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(720.0))\n        .child(caption(\n            &theme,\n            \"one caller-owned document; styled blocks, lists, diagnostics, IME, and semantics share one projection\",\n        ))\n        .child(editor)\n        .into_any_element()\n}"
    },
    {
      "name": "form",
      "capture": "cargo run -p xtask -- headless capture form",
      "kind": "exhibit",
      "subjects": [
        "Combobox",
        "FormField",
        "NumberInput",
        "SegmentedControl",
        "TagInput"
      ],
      "uses": [
        "Combobox",
        "FormField",
        "NumberInput",
        "SegmentedControl",
        "TagInput"
      ],
      "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    // No fixed height and nothing pushed to the bottom: a form is a stack of\n    // fields one gap apart, and the 250px of nothing that a pinned last field\n    // opened up is not a rhythm anything else in the library keeps.\n    stack(&theme)\n        .w(px(420.0))\n        .child(\n            FormField::new(\"scene.form.name.form-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.form-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.form-field\", \"Visibility\")\n                .control(\"scene.form.visibility\")\n                .description(\"Who can open the runs in this workspace.\")\n                .validation(ValidationState::Validating)\n                .child(\n                    SegmentedControl::new(\"scene.form.visibility\")\n                        .label(\"Visibility\")\n                        .segments([\n                            Segment::new(\"private\", \"Only me\"),\n                            Segment::new(\"team\", \"Workspace team\"),\n                            Segment::new(\"public\", \"Public\").disabled(true),\n                        ])\n                        .selected(\"team\")\n                        .on_select(|_, _, _| {}),\n                ),\n        )\n        .child(\n            // The neutral strip above uses a raised knob alone. This large\n            // capsule opts into identity tint; selection does not invent it.\n            FormField::new(\"scene.form.lane.form-field\", \"Lane\")\n                .control(\"scene.form.lane\")\n                .description(\"Each lane keeps the colour it is known by.\")\n                .child(\n                    SegmentedControl::new(\"scene.form.lane\")\n                        .label(\"Lane\")\n                        .control_size(ControlSize::Lg)\n                        .segments([\n                            Segment::new(\"read\", \"Read\")\n                                .tint(super::display::identity_tint(&theme, \"agent.read\")),\n                            Segment::new(\"shell\", \"Shell\")\n                                .tint(super::display::identity_tint(&theme, \"agent.shell\")),\n                            Segment::new(\"network\", \"Network\")\n                                .tint(super::display::identity_tint(&theme, \"agent.network\")),\n                        ])\n                        .selected(\"shell\")\n                        .on_select(|_, _, _| {}),\n                ),\n        )\n        .child(\n            FormField::new(\"scene.form.labels.form-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.form-field\", \"All Agent models\")\n                .control(\"scene.form.region\")\n                .description(\"Choose a chat-capable model for direct runs.\")\n                .child(region),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "auth-sign-in",
      "capture": "cargo run -p xtask -- headless capture auth-sign-in",
      "kind": "exhibit",
      "subjects": [
        "PasswordInput"
      ],
      "uses": [
        "PasswordInput"
      ],
      "example": "fn auth_sign_in(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_auth_sign_in(window, cx);\n    let identity = cx.global::<SceneAuthSignIn>().identity.clone();\n    let password = cx.global::<SceneAuthSignIn>().password.clone();\n    let theme = cx.theme().clone();\n    let card_id = \"scene.auth.sign-in.card\";\n    let heading = div()\n        .column()\n        .gap_token(&theme, Space::Xs)\n        .child(\n            crate::foundation::text(&theme, TypeScale::Title, \"Sign in\").semantic_in(\n                cx,\n                NodeSpec::new(\"scene.auth.sign-in.title\", Role::Text)\n                    .parent(card_id)\n                    .text(\"Sign in\"),\n            ),\n        )\n        .child(\n            crate::foundation::text(\n                &theme,\n                TypeScale::Body,\n                \"Continue to the workspace you were invited to.\",\n            )\n            .text_color(theme.colors.text_muted)\n            .semantic_in(\n                cx,\n                NodeSpec::new(\"scene.auth.sign-in.subtitle\", Role::Text)\n                    .parent(card_id)\n                    .text(\"Continue to the workspace you were invited to.\"),\n            ),\n        );\n\n    stack(&theme)\n        .w(px(440.0))\n        .child(\n            Card::new().id(card_id).padded(true).child(\n                div()\n                    .column()\n                    .gap_token(&theme, Space::Md)\n                    .child(heading)\n                    .child(\n                        Callout::new(\"Credentials are verified by the caller.\", Tone::Info)\n                            .id(\"scene.auth.sign-in.boundary\"),\n                    )\n                    .child(\n                        FormField::new(\"scene.auth.sign-in.identity.field\", \"Email\")\n                            .control(\"scene.auth.sign-in.identity\")\n                            .required(true)\n                            .child(identity),\n                    )\n                    .child(\n                        FormField::new(\"scene.auth.sign-in.password.field\", \"Password\")\n                            .control(\"scene.auth.sign-in.password\")\n                            .required(true)\n                            .child(password),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.sign-in.submit\")\n                            .label(\"Sign in\")\n                            .full_width(true)\n                            .on_click(|_, _| {}),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.sign-in.passkey\")\n                            .label(\"Continue with passkey\")\n                            .icon(Icon::Key)\n                            .secondary()\n                            .full_width(true)\n                            .on_click(|_, _| {}),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.sign-in.organization\")\n                            .label(\"Continue with organization sign-on\")\n                            .icon(Icon::Global)\n                            .secondary()\n                            .full_width(true)\n                            .on_click(|_, _| {}),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.sign-in.recovery\")\n                            .label(\"Use a recovery option\")\n                            .link()\n                            .on_click(|_, _| {}),\n                    ),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "auth-verification",
      "capture": "cargo run -p xtask -- headless capture auth-verification",
      "kind": "exhibit",
      "subjects": [
        "OneTimeCodeInput"
      ],
      "uses": [
        "OneTimeCodeInput"
      ],
      "example": "fn auth_verification(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_auth_verification(window, cx);\n    let code = cx.global::<SceneAuthVerification>().code.clone();\n    let theme = cx.theme().clone();\n    let card_id = \"scene.auth.verification.card\";\n    let title = crate::foundation::text(&theme, TypeScale::Title, \"Verify sign-in\").semantic_in(\n        cx,\n        NodeSpec::new(\"scene.auth.verification.title\", Role::Text)\n            .parent(card_id)\n            .text(\"Verify sign-in\"),\n    );\n\n    stack(&theme)\n        .w(px(440.0))\n        .child(\n            Card::new().id(card_id).padded(true).child(\n                div()\n                    .column()\n                    .gap_token(&theme, Space::Md)\n                    .child(title)\n                    .child(\n                        Callout::new(\n                            \"Enter the code from your authenticator or recovery method.\",\n                            Tone::Info,\n                        )\n                        .id(\"scene.auth.verification.guidance\"),\n                    )\n                    .child(\n                        FormField::new(\"scene.auth.verification.code.field\", \"Verification code\")\n                            .control(\"scene.auth.verification.code\")\n                            .required(true)\n                            .child(code),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.verification.submit\")\n                            .label(\"Verify\")\n                            .full_width(true)\n                            .on_click(|_, _| {}),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.verification.alternative\")\n                            .label(\"Use another method\")\n                            .secondary()\n                            .full_width(true)\n                            .on_click(|_, _| {}),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.verification.recovery\")\n                            .label(\"Use a recovery option\")\n                            .link()\n                            .on_click(|_, _| {}),\n                    ),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "actions",
      "capture": "cargo run -p xtask -- headless capture actions",
      "kind": "exhibit",
      "subjects": [
        "ButtonGroup",
        "IconButton",
        "SplitButton"
      ],
      "uses": [
        "ButtonGroup",
        "IconButton",
        "SplitButton"
      ],
      "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                    // One row, one weight: a chipless button beside four\n                    // chipped ones reads as the one that is unavailable.\n                    IconButton::new(\"scene.actions.copy\", Icon::Copy, \"Copy run id\")\n                        .secondary()\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                // A range picker built the way a host would build one: the\n                // track is the group's, the answers that are not current stay\n                // bare on it, and the one that is holds a chip in the colour\n                // the library reserves for the current answer.\n                ButtonGroup::new(\"scene.actions.range\")\n                    .children([\n                        Button::new(\"scene.actions.range.day\")\n                            .label(\"Day\")\n                            .ghost()\n                            .on_click(|_, _| {}),\n                        Button::new(\"scene.actions.range.week\")\n                            .label(\"Week\")\n                            .variant(gpui_kit_theme::Variant::Light)\n                            .selected(true)\n                            .on_click(|_, _| {}),\n                        Button::new(\"scene.actions.range.month\")\n                            .label(\"Month\")\n                            .ghost()\n                            .on_click(|_, _| {}),\n                    ])\n                    .small(),\n            ),\n        )\n        .child(row(&theme).child(split))\n        .into_any_element()\n}"
    },
    {
      "name": "progress-bar",
      "capture": "cargo run -p xtask -- headless capture progress-bar",
      "kind": "exhibit",
      "subjects": [
        "ProgressBar"
      ],
      "uses": [
        "ProgressBar"
      ],
      "example": "fn progress_bar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(420.0))\n        .child(caption(&theme, \"A count the host reported\"))\n        .child(\n            ProgressBar::new(\"scene.progress-bar.counted\")\n                .label(\"Indexing workspace\")\n                .count(3, 12),\n        )\n        .child(\n            ProgressBar::new(\"scene.progress-bar.nearly\")\n                .label(\"Uploading\")\n                .count(11, 12),\n        )\n        .child(caption(\n            &theme,\n            \"No count yet. The bar says it is working, and does not invent a fraction\",\n        ))\n        .child(ProgressBar::new(\"scene.progress-bar.unknown\").label(\"Contacting host\"))\n        .child(caption(&theme, \"Stopped, without inventing a fraction\"))\n        .child(\n            ProgressBar::new(\"scene.progress-bar.stalled\")\n                .label(\"Indexing workspace\")\n                .count(3, 12)\n                .stalled(true),\n        )\n        .child(\n            ProgressBar::new(\"scene.progress-bar.paused\")\n                .label(\"Uploading\")\n                .count(6, 12)\n                .paused(true)\n                .on_cancel(|_, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "state-ladder",
      "capture": "cargo run -p xtask -- headless capture state-ladder",
      "kind": "exhibit",
      "subjects": [
        "StateView",
        "StaleMark"
      ],
      "uses": [
        "StateView",
        "StaleMark"
      ],
      "example": "fn state_ladder(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let pane = |title: &'static str, view: StateView| {\n        div()\n            .column()\n            .gap_token(&theme, Space::Xs)\n            .w(px(240.0))\n            .child(crate::foundation::text(&theme, TypeScale::Caption, title))\n            .child(view)\n    };\n    stack(&theme)\n        .w_full()\n        .child(caption(\n            &theme,\n            \"Ten phases, one surface. A refusal is not an empty list.\",\n        ))\n        .child(\n            row(&theme)\n                .child(pane(\n                    \"Idle\",\n                    StateView::new(\"scene.state.idle\", Phase::Idle),\n                ))\n                .child(pane(\n                    \"Queued\",\n                    StateView::new(\"scene.state.queued\", Phase::Queued),\n                ))\n                .child(pane(\n                    \"Blocked\",\n                    StateView::new(\"scene.state.blocked\", Phase::Blocked),\n                )),\n        )\n        .child(\n            row(&theme)\n                .child(pane(\n                    \"Loading\",\n                    StateView::new(\"scene.state.loading\", Phase::Loading),\n                ))\n                .child(pane(\n                    \"Empty\",\n                    StateView::new(\"scene.state.empty\", Phase::Empty),\n                ))\n                .child(pane(\n                    \"Cancelled\",\n                    StateView::new(\"scene.state.cancelled\", Phase::Cancelled).content(div()),\n                )),\n        )\n        .child(\n            row(&theme)\n                .child(pane(\n                    \"Unavailable\",\n                    StateView::new(\n                        \"scene.state.unavailable\",\n                        Loadable::<(), String>::Unavailable(\"the host refused\".into()),\n                    ),\n                ))\n                .child(pane(\n                    \"Error\",\n                    StateView::new(\n                        \"scene.state.error\",\n                        AsyncValue::<(), String>::error(\"the index is still building\".into()),\n                    ),\n                ))\n                .child(pane(\n                    \"Ready\",\n                    StateView::from_async(\n                        \"scene.state.ready\",\n                        &AsyncValue::<_, String>::ready(\"12 runs\"),\n                        |value| {\n                            crate::foundation::text(&theme, TypeScale::Body, *value)\n                                .into_any_element()\n                        },\n                    ),\n                )),\n        )\n        .child(pane(\"Refreshing, last value kept\", {\n            let mut value = AsyncValue::<_, String>::ready(\"12 runs\");\n            value.refresh();\n            StateView::from_async(\"scene.state.refreshing\", &value, |text| {\n                crate::foundation::text(&theme, TypeScale::Body, *text).into_any_element()\n            })\n        }))\n        .child(\n            StaleMark::new(\n                \"scene.state.stale\",\n                \"Refreshing failed. The last verified value remains.\",\n            )\n            .updated(\"a moment ago\"),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "banner",
      "capture": "cargo run -p xtask -- headless capture banner",
      "kind": "exhibit",
      "subjects": [
        "Banner"
      ],
      "uses": [
        "Banner"
      ],
      "example": "fn banner(_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 report the reader may put away, because the caller gave it somewhere to go\",\n        ))\n        .child(\n            Banner::new(\n                \"scene.banner.warning\",\n                \"The last refresh failed. The verified list is still on screen.\",\n                Tone::Warning,\n            )\n            .title(\"Stale workspace\")\n            .action(\n                Button::new(\"scene.banner.retry\")\n                    .label(\"Try again\")\n                    .secondary()\n                    .small(),\n            )\n            .on_dismiss(|_, _| {}),\n        )\n        .child(caption(\n            &theme,\n            \"A refusal the caller did not offer a way out of, so no dismiss appears\",\n        ))\n        .child(\n            Banner::new(\n                \"scene.banner.danger\",\n                \"The host refused this action.\",\n                Tone::Danger,\n            )\n            .title(\"Refused\"),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "outcome-panel",
      "capture": "cargo run -p xtask -- headless capture outcome-panel",
      "kind": "exhibit",
      "subjects": [
        "OutcomePanel"
      ],
      "uses": [
        "OutcomePanel"
      ],
      "example": "fn outcome_panel(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(&theme, \"Finished\"))\n        .child(\n            OutcomePanel::new(\"scene.outcome.success\", OutcomeKind::Success)\n                .title(\"Import finished\")\n                .count(\"50 files imported\"),\n        )\n        .child(caption(&theme, \"Finished, with failures the host numbered\"))\n        .child(\n            OutcomePanel::new(\"scene.outcome.partial\", OutcomeKind::Partial)\n                .title(\"Import finished, with failures\")\n                .count(\"47 succeeded, 3 failed\")\n                .detail(\"The three that failed are still in the queue.\")\n                .action(\n                    Button::new(\"scene.outcome.review\")\n                        .label(\"Review the three\")\n                        .secondary()\n                        .small()\n                        .on_click(|_, _| {}),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Did not finish. What the reader can do about it is a control, not a \\\n             sentence about a control\",\n        ))\n        .child(\n            OutcomePanel::new(\"scene.outcome.failed\", OutcomeKind::Failed)\n                .detail(\"The host closed the connection before any file landed.\")\n                .action(\n                    Button::new(\"scene.outcome.retry\")\n                        .label(\"Import again\")\n                        .small()\n                        .on_click(|_, _| {}),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "stage-progress",
      "capture": "cargo run -p xtask -- headless capture stage-progress",
      "kind": "exhibit",
      "subjects": [
        "StageProgress"
      ],
      "uses": [
        "StageProgress"
      ],
      "example": "fn stage_progress(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(420.0))\n        .child(caption(&theme, \"Download, then verify, then install\"))\n        .child(StageProgress::new(\"scene.stage.running\").stages([\n            ProgressStage::new(\"download\", \"Download\", StageStatus::Done),\n            ProgressStage::new(\"verify\", \"Verify\", StageStatus::Active),\n            ProgressStage::new(\"install\", \"Install\", StageStatus::Pending),\n        ]))\n        .child(caption(&theme, \"A stage that failed keeps its name\"))\n        .child(StageProgress::new(\"scene.stage.failed\").stages([\n            ProgressStage::new(\"download\", \"Download\", StageStatus::Done),\n            ProgressStage::new(\"verify\", \"Verify\", StageStatus::Failed),\n            ProgressStage::new(\"install\", \"Install\", StageStatus::Pending),\n        ]))\n        .into_any_element()\n}"
    },
    {
      "name": "divider",
      "capture": "cargo run -p xtask -- headless capture divider",
      "kind": "exhibit",
      "subjects": [
        "Divider"
      ],
      "uses": [
        "Divider"
      ],
      "example": "fn divider(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(420.0))\n        .child(caption(&theme, \"Plain\"))\n        .child(Divider::new().id(\"scene.divider.plain\"))\n        .child(caption(&theme, \"Labelled, which names the group below it\"))\n        .child(Divider::new().id(\"scene.divider.labelled\").label(\"Filters\"))\n        .child(Divider::new().id(\"scene.divider.archive\").label(\"Archive\"))\n        .child(caption(\n            &theme,\n            \"Inset, for a rule inside a padded container that should not reach its \\\n             corners\",\n        ))\n        .child(\n            div()\n                .column()\n                .w_full()\n                .py(px(theme.space(Space::Sm)))\n                .radius(&theme, Radius::Card)\n                .surface(&theme, Surface::Panel)\n                .child(\n                    div()\n                        .px(px(theme.space(Space::Md)))\n                        .py(px(theme.space(Space::Xs)))\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Label,\n                            \"Workspace\",\n                        )),\n                )\n                .child(Divider::new().id(\"scene.divider.inset\").inset(Space::Md))\n                .child(\n                    div()\n                        .px(px(theme.space(Space::Md)))\n                        .py(px(theme.space(Space::Xs)))\n                        .child(caption(&theme, \"Two rows, one rule between them\")),\n                ),\n        )\n        .child(caption(&theme, \"Standing up, between two columns\"))\n        .child(\n            div()\n                .row()\n                .items_stretch()\n                .h(px(64.0))\n                .w_full()\n                .gap(px(theme.space(Space::Md)))\n                .child(div().flex_1().child(caption(&theme, \"Left column\")))\n                .child(Divider::new().id(\"scene.divider.vertical\").vertical())\n                .child(div().flex_1().child(caption(&theme, \"Right column\"))),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "tag",
      "capture": "cargo run -p xtask -- headless capture tag",
      "kind": "exhibit",
      "subjects": [
        "Tag"
      ],
      "uses": [
        "Tag"
      ],
      "example": "fn tag(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Tones, which report rather than decorate\"))\n        .child(\n            row(&theme)\n                .child(Tag::new(\"scene.tag.rust\", \"rust\").on_remove(|_, _| {}))\n                .child(\n                    Tag::new(\"scene.tag.failing\", \"failing\")\n                        .tone(Tone::Danger)\n                        .on_remove(|_, _| {}),\n                )\n                .child(\n                    Tag::new(\"scene.tag.passing\", \"passing\")\n                        .tone(Tone::Success)\n                        .on_remove(|_, _| {}),\n                )\n                .child(\n                    Tag::new(\"scene.tag.review\", \"needs review\")\n                        .tone(Tone::Warning)\n                        .on_remove(|_, _| {}),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"An identity tint, which is a fact about who and not about severity\",\n        ))\n        .child(\n            row(&theme)\n                .child(\n                    Tag::new(\"scene.tag.ada\", \"Ada\")\n                        .tint(identity_tint(&theme, \"agent.external\"))\n                        .on_remove(|_, _| {}),\n                )\n                .child(\n                    Tag::new(\"scene.tag.grace\", \"Grace\")\n                        .tint(identity_tint(&theme, \"agent.shell\"))\n                        .on_remove(|_, _| {}),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Read-only: nothing offers to remove it, because no handler was given\",\n        ))\n        .child(row(&theme).child(Tag::new(\"scene.tag.plain\", \"read-only\")))\n        .child(caption(\n            &theme,\n            \"Disabled: the host refuses to act on it at all, and it dims to say so\",\n        ))\n        .child(\n            row(&theme).child(\n                Tag::new(\"scene.tag.pinned\", \"pinned\")\n                    .disabled(true)\n                    .on_remove(|_, _| {}),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"Singled out by the keyboard, which is what the next keystroke acts on\",\n        ))\n        .child(\n            row(&theme).child(\n                Tag::new(\"scene.tag.selected\", \"selected\")\n                    .selected(true)\n                    .on_remove(|_, _| {}),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"The shared tiers, resolved against a palette colour\",\n        ))\n        .child(\n            row(&theme).children(\n                [Variant::Filled, Variant::Light, Variant::Subtle].map(|tier| {\n                    Tag::new(format!(\"scene.tag.lime.{}\", tier.name()), tier.name())\n                        .variant(tier)\n                        .color(\"lime\")\n                        .on_remove(|_, _| {})\n                }),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "avatar",
      "capture": "cargo run -p xtask -- headless capture avatar",
      "kind": "exhibit",
      "subjects": [
        "Avatar",
        "AvatarGroup"
      ],
      "uses": [
        "Avatar",
        "AvatarGroup"
      ],
      "example": "fn avatar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Derived from the name it was given\"))\n        .child(\n            row(&theme)\n                .child(Avatar::new(\"Ada Lovelace\").id(\"scene.avatar.ada\"))\n                .child(Avatar::new(\"Grace Hopper\").id(\"scene.avatar.grace\"))\n                .child(Avatar::new(\"Katherine Johnson\").id(\"scene.avatar.katherine\")),\n        )\n        .child(caption(\n            &theme,\n            \"An identity tint the caller owns, and no name at all — which is drawn \\\n             as its own state rather than as a picture that failed to arrive\",\n        ))\n        .child(\n            row(&theme)\n                .child(\n                    Avatar::new(\"Grace Hopper\")\n                        .tint(identity_tint(&theme, \"agent.shell\"))\n                        .id(\"scene.avatar.tinted\"),\n                )\n                .child(Avatar::new(\"\").id(\"scene.avatar.anonymous\")),\n        )\n        .child(caption(\n            &theme,\n            \"Presence, which the host knows and the mark does not derive. No dot at \\\n             all is not the same claim as offline\",\n        ))\n        .child(\n            row(&theme)\n                .gap(px(theme.space(Space::Md)))\n                .child(\n                    Avatar::new(\"Ada Lovelace\")\n                        .presence(AvatarPresence::Online)\n                        .id(\"scene.avatar.online\"),\n                )\n                .child(\n                    Avatar::new(\"Grace Hopper\")\n                        .presence(AvatarPresence::Away)\n                        .id(\"scene.avatar.away\"),\n                )\n                .child(\n                    Avatar::new(\"Katherine Johnson\")\n                        .presence(AvatarPresence::Busy)\n                        .id(\"scene.avatar.busy\"),\n                )\n                .child(\n                    Avatar::new(\"Ada Lovelace\")\n                        .presence(AvatarPresence::Offline)\n                        .id(\"scene.avatar.offline\"),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"A stack, where each mark is cut out of the one behind it and the \\\n             remainder is a count the host supplied\",\n        ))\n        .child(\n            row(&theme).child(\n                AvatarGroup::new()\n                    .id(\"scene.avatar.group\")\n                    .size(32.0)\n                    .members([\n                        Avatar::new(\"Ada Lovelace\").presence(AvatarPresence::Online),\n                        Avatar::new(\"Grace Hopper\").presence(AvatarPresence::Away),\n                        Avatar::new(\"Katherine Johnson\"),\n                    ])\n                    .overflow(\"+4\"),\n            ),\n        )\n        .child(caption(&theme, \"Sizes\"))\n        .child(\n            row(&theme)\n                .items_center()\n                .gap(px(theme.space(Space::Md)))\n                .child(\n                    Avatar::new(\"Ada Lovelace\")\n                        .size(20.0)\n                        .id(\"scene.avatar.small\"),\n                )\n                .child(Avatar::new(\"Ada Lovelace\").id(\"scene.avatar.default\"))\n                .child(\n                    Avatar::new(\"Ada Lovelace\")\n                        .size(40.0)\n                        .id(\"scene.avatar.medium\"),\n                )\n                .child(\n                    Avatar::new(\"Ada Lovelace\")\n                        .size(56.0)\n                        .id(\"scene.avatar.large\"),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "empty-state",
      "capture": "cargo run -p xtask -- headless capture empty-state",
      "kind": "exhibit",
      "subjects": [
        "EmptyState"
      ],
      "uses": [
        "EmptyState"
      ],
      "example": "fn empty_state(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // An empty state fills the region whose contents are missing. Drawn on\n    // bare canvas it reads as loose centred text with no edge to be centred\n    // in, which is the one thing it never is in a product.\n    let region = |state: EmptyState| {\n        div()\n            .w_full()\n            .radius(&theme, Radius::Card)\n            .frame(&theme, Surface::Panel, Elevation::Raised)\n            .child(state)\n    };\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(&theme, \"Nothing has been started yet\"))\n        .child(region(\n            EmptyState::new(\"scene.empty-state.unstarted\", \"No runs yet\")\n                .kind(EmptyKind::Unstarted)\n                .detail(\"A run appears here once one has been started.\"),\n        ))\n        .child(caption(&theme, \"The host refused, and says so\"))\n        .child(region(\n            EmptyState::new(\n                \"scene.empty-state.unavailable\",\n                \"The host refused the request\",\n            )\n            .kind(EmptyKind::Unavailable)\n            .detail(\"Approval is required for this workspace.\")\n            .action(\n                Button::new(\"scene.empty-state.retry\")\n                    .label(\"Try again\")\n                    .on_click(|_, _| {}),\n            ),\n        ))\n        .child(caption(&theme, \"A collection that really is empty\"))\n        .child(region(\n            EmptyState::new(\"scene.empty-state.empty\", \"No runs match “failing”\")\n                .kind(EmptyKind::Empty)\n                .detail(\"Clear the filter to see every run.\"),\n        ))\n        .child(caption(&theme, \"It was tried, and it failed\"))\n        .child(region(\n            EmptyState::new(\"scene.empty-state.failed\", \"The run could not be read\")\n                .kind(EmptyKind::Failed)\n                .detail(\"The snapshot on disk is from a newer version of the format.\")\n                .action(\n                    Button::new(\"scene.empty-state.reload\")\n                        .label(\"Reload\")\n                        .on_click(|_, _| {}),\n                ),\n        ))\n        .child(caption(\n            &theme,\n            \"The host refused because the reader is not allowed\",\n        ))\n        .child(region(\n            EmptyState::new(\"scene.empty-state.unauthorized\", \"This workspace is locked\")\n                .kind(EmptyKind::Unauthorized)\n                .detail(\"Ask an owner to grant access.\"),\n        ))\n        .into_any_element()\n}"
    },
    {
      "name": "kbd",
      "capture": "cargo run -p xtask -- headless capture kbd",
      "kind": "exhibit",
      "subjects": [
        "Kbd"
      ],
      "uses": [
        "Kbd"
      ],
      "example": "fn kbd(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // A keystroke is only ever read beside the thing it performs, so the\n    // exhibit shows it where it is used: at the end of a menu row, at the end\n    // of a sentence, and in the run of special keys whose glyphs are the part\n    // that goes wrong.\n    let named = |label: &'static str, keystroke: &'static str, id: &'static str| {\n        div()\n            .row()\n            .w_full()\n            .items_center()\n            .justify_between()\n            .gap_token(&theme, Space::Md)\n            .py_token(&theme, Space::Xs)\n            .child(crate::foundation::text(&theme, TypeScale::Body, label))\n            .child(Kbd::new(keystroke).id(id))\n    };\n\n    stack(&theme)\n        .w(px(420.0))\n        .child(caption(&theme, \"the shortcut sits with the thing it does\"))\n        .child(\n            div()\n                .column()\n                .w_full()\n                .card_surface(&theme, CardVariant::Elevated)\n                .px_token(&theme, Space::Md)\n                .py_token(&theme, Space::Sm)\n                .child(named(\n                    \"Open the command palette\",\n                    \"cmd-shift-p\",\n                    \"scene.kbd.palette\",\n                ))\n                .child(div().w_full().h(px(theme.space(Space::Sm))))\n                .child(named(\"Copy the selection\", \"ctrl-c\", \"scene.kbd.copy\"))\n                .child(div().w_full().h(px(theme.space(Space::Sm))))\n                .child(named(\"Rename in place\", \"cmd-alt-r\", \"scene.kbd.rename\")),\n        )\n        .child(caption(\n            &theme,\n            \"the keys that need the bundled symbol face\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(Kbd::new(\"enter\").id(\"scene.kbd.confirm\"))\n                .child(Kbd::new(\"escape\").id(\"scene.kbd.dismiss\"))\n                .child(Kbd::new(\"backspace\").id(\"scene.kbd.erase\"))\n                .child(Kbd::new(\"delete\").id(\"scene.kbd.delete\"))\n                .child(Kbd::new(\"tab\").id(\"scene.kbd.advance\"))\n                .child(Kbd::new(\"space\").id(\"scene.kbd.space\"))\n                .child(Kbd::new(\"up\").id(\"scene.kbd.up\"))\n                .child(Kbd::new(\"down\").id(\"scene.kbd.down\")),\n        )\n        .child(\n            div()\n                .row()\n                .items_center()\n                .gap_token(&theme, Space::Xs)\n                .child(crate::foundation::text(&theme, TypeScale::Body, \"Press\"))\n                .child(Kbd::new(\"cmd-enter\").id(\"scene.kbd.inline\"))\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"to send the message.\",\n                ))\n                .text_color(theme.colors.text_muted),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "overlay",
      "capture": "cargo run -p xtask -- headless capture overlay",
      "kind": "exhibit",
      "subjects": [
        "Overlay"
      ],
      "uses": [
        "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(page_behind(&theme, \"Workspace settings\"))\n        .child(\n            Overlay::modal(\"scene.overlay.dialog\")\n                .placement(Placement::Center)\n                .child(\n                    crate::overlay::surface(\n                        \"scene.overlay.surface\",\n                        &theme,\n                        crate::overlay::OverlaySurface::MODAL,\n                    )\n                    .w(px(320.0))\n                    .p(px(theme.spacing.lg))\n                    .gap(px(theme.spacing.sm))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Subtitle,\n                        \"Delete this workspace?\",\n                    ))\n                    .child(\n                        crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Its runs, filters and saved views are removed for everyone. This \\\n                                 cannot be undone.\",\n                        )\n                        .text_tone(&theme, TextTone::Muted),\n                    )\n                    .child(\n                        div()\n                            .row()\n                            .justify_end()\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 -- headless capture dialog",
      "kind": "exhibit",
      "subjects": [
        "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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Content behind the dialog\",\n        ))\n        .child(replace)\n        .into_any_element()\n}"
    },
    {
      "name": "tooltip",
      "capture": "cargo run -p xtask -- headless capture tooltip",
      "kind": "exhibit",
      "subjects": [
        "Tooltip"
      ],
      "uses": [
        "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                            .accessible_description(\"Writes the theme to a file on disk\")\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 -- headless capture menu",
      "kind": "exhibit",
      "subjects": [
        "Menu"
      ],
      "uses": [
        "Menu"
      ],
      "example": "fn menu(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_menus(window, cx);\n    let menus = cx.global::<SceneMenus>();\n    let menu = menus.menu.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .h(px(320.0))\n        // An open surface is an overlay and takes no room in the flow, so the\n        // scene reserves the panel's review area explicitly.\n        .child(div().h(px(300.0)).child(menu))\n        .into_any_element()\n}"
    },
    {
      "name": "context-menu",
      "capture": "cargo run -p xtask -- headless capture context-menu",
      "kind": "exhibit",
      "subjects": [
        "ContextMenu"
      ],
      "uses": [
        "ContextMenu"
      ],
      "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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The right-click reports the row. Nothing is selected by it.\",\n        ))\n        .child(context)\n        .into_any_element()\n}"
    },
    {
      "name": "popover",
      "capture": "cargo run -p xtask -- headless capture popover",
      "kind": "exhibit",
      "subjects": [
        "Popover"
      ],
      "uses": [
        "Popover"
      ],
      "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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The trigger owns whether the surface is open.\",\n        ))\n        .child(popover)\n        .into_any_element()\n}"
    },
    {
      "name": "command-palette",
      "capture": "cargo run -p xtask -- headless capture command-palette",
      "kind": "exhibit",
      "subjects": [
        "CommandPalette"
      ],
      "uses": [
        "CommandPalette"
      ],
      "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 -- headless capture toast",
      "kind": "exhibit",
      "subjects": [
        "ToastLayer"
      ],
      "uses": [
        "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(window, cx).capacity(4));\n        cx.set_global(SceneToasts { layer });\n        toast_push(\n            window,\n            cx,\n            Toast::new(\"scene.toast.saved\", \"Theme exported to disk\").tone(Tone::Success),\n        );\n        toast_push(\n            window,\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            window,\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            window,\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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Content behind the notifications\",\n        ))\n        // A failure keeps its report on screen; only the success times out.\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"A danger or warning toast stays until it is dismissed.\",\n        ))\n        .child(layer)\n        .into_any_element()\n}"
    },
    {
      "name": "tabs",
      "capture": "cargo run -p xtask -- headless capture tabs",
      "kind": "exhibit",
      "subjects": [
        "Tabs"
      ],
      "uses": [
        "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(caption(\n            &theme,\n            \"In-content tabs: raised control, quiet track, tabular count\",\n        ))\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        .child(caption(\n            &theme,\n            \"places, not documents: Regular Liquid capsules, \\\n             with a translucent selected fill on the material\",\n        ))\n        .child(\n            Tabs::new(\"scene.tabs.capsules\")\n                .capsules()\n                .control_size(ControlSize::Sm)\n                .tabs([\n                    TabItem::new(\"code\", \"Portal\")\n                        .icon(Icon::Terminal)\n                        .tint(theme.colors.accent),\n                    TabItem::new(\"game\", \"Harbour\")\n                        .icon(Icon::Play)\n                        .tint(theme.colors.warning),\n                    TabItem::new(\"design\", \"notes\")\n                        .icon(Icon::Pen)\n                        .tint(theme.colors.info),\n                ])\n                .selected(\"code\")\n                .on_select(|_, _, _| {}),\n        )\n        // The body belongs to the caller: tabs render the strip only.\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Runs are rendered by the caller, not by the strip.\",\n        ))\n        .child(caption(\n            &theme,\n            \"the other answer to a strip with no room: it scrolls, and the \\\n             edge with more behind it fades\",\n        ))\n        // Deliberately narrower than its tabs, because a strip that fits shows\n        // nothing about what a strip that does not fit does.\n        .child(\n            div().w(px(300.0)).child(\n                Tabs::new(\"scene.tabs.spaces\")\n                    .tabs((1..=9).map(|n| {\n                        TabItem::new(format!(\"space-{n}\"), format!(\"Workspace {n}\"))\n                            .icon(Icon::Widget)\n                    }))\n                    .selected(\"space-5\")\n                    .scrolling()\n                    .on_select(|_, _, _| {}),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "carousel",
      "capture": "cargo run -p xtask -- headless capture carousel",
      "kind": "exhibit",
      "subjects": [
        "Carousel"
      ],
      "uses": [
        "Carousel"
      ],
      "example": "fn carousel(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let page = |id: &'static str, label: &'static str, text: &'static str| {\n        CarouselItem::new(\n            id,\n            label,\n            Card::new()\n                .id(format!(\"scene.carousel.card.{id}\"))\n                .padding(Space::Xl)\n                .child(crate::foundation::text(&theme, TypeScale::Title, label))\n                .child(crate::foundation::text(&theme, TypeScale::Body, text)),\n        )\n    };\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"A controlled, focusable page track with direct selection and reduced-motion-aware transitions\",\n        ))\n        .child(\n            Carousel::new(\"scene.carousel.ready\")\n                .items([\n                    page(\"overview\", \"Overview\", \"The first page is active.\"),\n                    page(\"details\", \"Details\", \"The caller owns the page content.\"),\n                    page(\"history\", \"History\", \"The track reports page intents.\"),\n                ])\n                .active(\"details\")\n                .looped(true)\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Carousel::new(\"scene.carousel.empty\")\n                .phase(Phase::Empty)\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "nav-stack",
      "capture": "cargo run -p xtask -- headless capture nav-stack",
      "kind": "exhibit",
      "subjects": [
        "NavStack"
      ],
      "uses": [
        "NavStack"
      ],
      "example": "fn nav_stack(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::nav_stack::{NavHistory, NavStack};\n    let theme = cx.theme().clone();\n    let state = window.use_keyed_state(\"scene.nav-stack.state\", cx, |_, cx| {\n        (\n            NavHistory::new(\"overview\"),\n            cx.focus_handle(),\n            cx.focus_handle(),\n            cx.focus_handle(),\n        )\n    });\n    let (history, overview, details, replacement) = state.read(cx).clone();\n    let focus = match history.current().as_ref() {\n        \"details\" => details,\n        \"replacement\" => replacement,\n        _ => overview,\n    };\n    let back = state.clone();\n    let forward = state.clone();\n    let push = state.clone();\n    let replace = state.clone();\n    stack(&theme).w(px(620.0))\n        .child(caption(&theme, \"Caller-owned visit history; back retains forward visits, push forks, replace preserves branches\"))\n        .child(row(&theme)\n            .child(Button::new(\"scene.nav-stack.back\").label(\"Back\").disabled(!history.can_pop())\n                .on_click(move |_, cx| back.update(cx, |state, cx| { state.0.pop(); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.forward\").label(\"Forward\").disabled(!history.can_forward())\n                .on_click(move |_, cx| forward.update(cx, |state, cx| { state.0.forward(); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.push\").label(\"Push details\")\n                .disabled(history.entries().iter().any(|id| id.as_ref() == \"details\"))\n                .on_click(move |_, cx| push.update(cx, |state, cx| { state.0.push(\"details\"); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.replace\").label(\"Replace\")\n                .disabled(history.entries().iter().any(|id| id.as_ref() == \"replacement\"))\n                .on_click(move |_, cx| replace.update(cx, |state, cx| { state.0.replace(\"replacement\"); cx.notify(); }))))\n        .child(NavStack::new(\"scene.nav-stack\", &history, history.current().clone(), focus,\n            Card::new().padding(Space::Xl)\n                .child(crate::foundation::text(&theme, TypeScale::Title, history.current().clone()))\n                .child(crate::foundation::text(&theme, TypeScale::Body,\n                    \"Only the active page is mounted. Return visits restore focus without keeping inactive controls live.\"))))\n        .into_any_element()\n}"
    },
    {
      "name": "accordion",
      "capture": "cargo run -p xtask -- headless capture accordion",
      "kind": "exhibit",
      "subjects": [
        "Accordion"
      ],
      "uses": [
        "Accordion"
      ],
      "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(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Requests go out over the system proxy.\",\n                        )),\n                )\n                .section(\n                    AccordionSection::new(\"storage\", \"Storage\")\n                        .description(\"Where verified results are kept\")\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Nothing is written outside the workspace.\",\n                        )),\n                )\n                .section(\n                    AccordionSection::new(\"policy\", \"Managed by policy\")\n                        .description(\"This machine cannot change these\")\n                        .disabled(true)\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Set by the administrator.\",\n                        )),\n                ),\n        )\n        // The open section is the last one, which is the case where the body\n        // meets the card's rounded corners.\n        .child(\n            Accordion::new(\"scene.accordion.release\")\n                .expanded_ids(&[\"publish\"])\n                .on_toggle(|_, _, _, _| {})\n                .section(\n                    AccordionSection::new(\"build\", \"Build\")\n                        .description(\"What the last run produced\"),\n                )\n                .section(\n                    AccordionSection::new(\"publish\", \"Publish\")\n                        .description(\"Where the signed bundle goes\")\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"The bundle is published to the workspace channel.\",\n                        )),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "breadcrumb",
      "capture": "cargo run -p xtask -- headless capture breadcrumb",
      "kind": "exhibit",
      "subjects": [
        "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 -- headless capture list",
      "kind": "exhibit",
      "subjects": [
        "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            crate::foundation::text(\n                &theme,\n                TypeScale::Caption,\n                SharedString::from(format!(\n                    \"{FIXTURE_RECORDS} fixture records; only the rendered ones publish\"\n                )),\n            )\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .py_token(&theme, Space::Sm)\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": "image-list",
      "capture": "cargo run -p xtask -- headless capture image-list",
      "kind": "exhibit",
      "subjects": [
        "ImageList"
      ],
      "uses": [
        "ImageList"
      ],
      "example": "fn image_list(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let items = [\n        (\"native\", \"Native runtime\", \"Runtime\"),\n        (\"gateway\", \"Remote gateway\", \"Gateway\"),\n        (\"archive\", \"Archive models\", \"Archive\"),\n        (\"preview\", \"Preview models\", \"Preview\"),\n        (\"disabled\", \"Managed image\", \"Policy\"),\n    ];\n    stack(&theme)\n        .w(px(840.0))\n        .child(caption(\n            &theme,\n            \"Caller-owned media tiles reflow from two to four measured columns\",\n        ))\n        .child(\n            ImageList::new(\"scene.image-list\")\n                .columns(2)\n                .columns_at(Breakpoint::Medium, 4)\n                .selected(\"gateway\")\n                .items(items.into_iter().map(|(id, label, image)| {\n                    ImageListItem::new(id, label, scene_picture(image, cx))\n                        .disabled(id == \"disabled\")\n                }))\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "masonry",
      "capture": "cargo run -p xtask -- headless capture masonry",
      "kind": "exhibit",
      "subjects": [
        "Masonry"
      ],
      "uses": [
        "Masonry"
      ],
      "example": "fn masonry(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let cards = [\n        (\"short\", \"Short result\", 72.0),\n        (\"medium\", \"A result with a little more detail\", 124.0),\n        (\n            \"tall\",\n            \"A result whose caller-measured content is taller\",\n            184.0,\n        ),\n        (\"another\", \"Another result\", 96.0),\n        (\"last\", \"The final result\", 140.0),\n    ];\n    stack(&theme)\n        .w(px(640.0))\n        .child(caption(\n            &theme,\n            \"Column placement uses caller-measured heights and reflows at measured container breakpoints\",\n        ))\n        .child(\n            Masonry::new(\"scene.masonry\")\n                .columns(2)\n                .columns_at(Breakpoint::Medium, 3)\n                .gap(Space::Sm)\n                .items(cards.into_iter().map(|(id, label, height)| {\n                    MasonryItem::new(\n                        id,\n                        Card::new()\n                            .id(format!(\"scene.masonry.card.{id}\"))\n                            .padding(Space::Md)\n                            .child(crate::foundation::text(&theme, TypeScale::Label, label)),\n                        height,\n                    )\n                })),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "flow",
      "capture": "cargo run -p xtask -- headless capture flow",
      "kind": "exhibit",
      "subjects": [
        "Flow"
      ],
      "uses": [
        "Flow"
      ],
      "example": "fn flow(_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            \"rows drawn by the caller, laid out only where the viewport reaches; \\\n             a row is as tall as what it holds\",\n        ))\n        .child(\n            div()\n                .column()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    // A row is as tall as its prose, so the viewport's edge\n                    // falls wherever it falls — through a line of text as\n                    // often as between two. The fade is what turns that from\n                    // a glyph sliced in half into a statement that the entries\n                    // carry on past the edge.\n                    ScrollFade::new(\"scene.flow.edge\")\n                        .bottom(true)\n                        .fit_height()\n                        .child({\n                            let theme = theme.clone();\n                            div()\n                                .w_full()\n                                .child(\n                                    Flow::new(\n                                        \"scene.flow.entries\",\n                                        FIXTURE_RECORDS,\n                                        move |index, _, cx| {\n                                            let (id, body) = fixture_entry(index);\n                                            // A flow publishes nothing of its own, so the rows say\n                                            // what they are — which is the arrangement any caller\n                                            // drawing its own rows ends up with.\n                                            div()\n                                                .w_full()\n                                                .column()\n                                                .gap_token(&theme, Space::Xs)\n                                                .px_token(&theme, Space::Md)\n                                                .py_token(&theme, Space::Sm)\n                                                .child(\n                                                    crate::foundation::text(\n                                                        &theme,\n                                                        TypeScale::Caption,\n                                                        id.clone(),\n                                                    )\n                                                    .text_tone(&theme, TextTone::Muted),\n                                                )\n                                                .child(crate::foundation::text(\n                                                    &theme,\n                                                    TypeScale::Body,\n                                                    body.clone(),\n                                                ))\n                                                .semantic_in(\n                                                    cx,\n                                                    NodeSpec::new(\n                                                        format!(\"scene.flow.entries.{id}\"),\n                                                        Role::Row,\n                                                    )\n                                                    .parent(\"scene.flow.entries\")\n                                                    .text(body),\n                                                )\n                                                .into_any_element()\n                                        },\n                                    )\n                                    .estimate(72.0)\n                                    .visible_rows(FLOW_VISIBLE_ROWS),\n                                )\n                                .semantic_in(\n                                    cx,\n                                    NodeSpec::new(\"scene.flow.entries\", Role::List)\n                                        .value(FIXTURE_RECORDS.to_string()),\n                                )\n                        }),\n                )\n                .child(rule(&theme))\n                // How much is past the edge, and something to do about it. A\n                // count on its own states the overflow and leaves the reader\n                // to find the rest by dragging.\n                .child(\n                    div()\n                        .row()\n                        .w_full()\n                        .gap_token(&theme, Space::Sm)\n                        .px_token(&theme, Space::Md)\n                        .py_token(&theme, Space::Xs)\n                        .child(caption(\n                            &theme,\n                            SharedString::from(format!(\n                                \"{} more below\",\n                                FIXTURE_RECORDS - FLOW_VISIBLE_ROWS\n                            )),\n                        ))\n                        .child(div().flex_1())\n                        .child(\n                            Button::new(\"scene.flow.end\")\n                                .label(\"Go to the end\")\n                                .ghost()\n                                .small()\n                                .on_click(|window, cx| {\n                                    crate::data::glide_to_row(\n                                        &Ident::from(\"scene.flow.entries\"),\n                                        FIXTURE_RECORDS - 1,\n                                        window,\n                                        cx,\n                                    );\n                                }),\n                        ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "table",
      "capture": "cargo run -p xtask -- headless capture table",
      "kind": "exhibit",
      "subjects": [
        "Table"
      ],
      "uses": [
        "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    let 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    stack(&theme)\n        .w(px(600.0))\n        .child(\n            Table::new(\"scene.table.runs\")\n                .columns(columns.clone())\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        .child(\n            Table::new(\"scene.table.stale\")\n                .columns(columns.clone())\n                .rows([Row::new(\"run-a04\")\n                    .text(\"Indexing\")\n                    .cell(\"name\", \"Indexing\")\n                    .cell(\"state\", state(\"Ready\", Tone::Success))\n                    .cell(\"duration\", \"4m 12s\")])\n                .failure(\"The host refused the refresh\")\n                .on_select(|_, _, _| {}),\n        )\n        .child(\n            Table::new(\"scene.table.empty\")\n                .columns(columns)\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "data-grid",
      "capture": "cargo run -p xtask -- headless capture data-grid",
      "kind": "exhibit",
      "subjects": [
        "BulkBar",
        "DataGrid"
      ],
      "uses": [
        "BulkBar",
        "DataGrid"
      ],
      "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            // Groups stay within one scrolling section, so each bracket has\n            // one visual address while the Job section remains frozen.\n            .group(ColumnGroup::new(\"identity\", \"Identity\").columns([\"name\"]))\n            .group(\n                ColumnGroup::new(\"execution\", \"Execution\").columns([\"owner\", \"state\", \"duration\"]),\n            )\n            .footer_cell(\"duration\", \"4.2s\")\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            .range(Some(CellRange::new(\n                \"job-0001\", \"name\", \"job-0003\", \"state\",\n            )))\n            .on_range_change(|_, _, _| {})\n            .on_copy(|_, _, _| {}),\n        )\n        .child(\n            crate::foundation::text(\n                &theme,\n                TypeScale::Caption,\n                SharedString::from(format!(\n                    \"{FIXTURE_JOBS_LOADED} of {FIXTURE_JOBS_TOTAL} loaded · scroll right for \\\n                     Duration · Job stays pinned\"\n                )),\n            )\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "data-grid-editing",
      "capture": "cargo run -p xtask -- headless capture data-grid-editing",
      "kind": "exhibit",
      "subjects": [
        "DataGrid"
      ],
      "uses": [
        "DataGrid"
      ],
      "example": "fn data_grid_editing(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        // The four columns are 860 wide between them. At 760 the grid was\n        // correct — a wide grid scrolls — but the exhibit was not: it sorts by\n        // duration and hid the duration column, so the one end-aligned column\n        // in the catalogue and the sort mark on it were both off the edge of\n        // the picture a reviewer is sent to.\n        .w(px(880.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            crate::foundation::text(\n                &theme,\n                TypeScale::Caption,\n                SharedString::from(\n                    \"Escape reverts, enter commits, tab commits and moves on. The grid never \\\n                     writes the value.\",\n                ),\n            )\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "tree-grid",
      "capture": "cargo run -p xtask -- headless capture tree-grid",
      "kind": "exhibit",
      "subjects": [
        "TreeGrid"
      ],
      "uses": [
        "TreeGrid"
      ],
      "example": "fn tree_grid(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // Whether a branch is open is structure, and the disclosure already says\n    // it. What belongs in a state column is what is true of the record — the\n    // same vocabulary, in the same pills, that `table` and `data-grid` use.\n    let rows = [\n        (\n            \"workspace\",\n            \"Workspace\",\n            1,\n            true,\n            true,\n            None,\n            \"Ready\",\n            Tone::Success,\n        ),\n        (\n            \"src\",\n            \"src\",\n            2,\n            true,\n            true,\n            Some(\"workspace\"),\n            \"Ready\",\n            Tone::Success,\n        ),\n        (\n            \"components\",\n            \"components\",\n            3,\n            false,\n            false,\n            Some(\"src\"),\n            \"Stale\",\n            Tone::Warning,\n        ),\n        (\n            \"lib\",\n            \"lib.rs\",\n            3,\n            false,\n            false,\n            Some(\"src\"),\n            \"Ready\",\n            Tone::Success,\n        ),\n        (\n            \"docs\",\n            \"docs\",\n            2,\n            true,\n            false,\n            Some(\"workspace\"),\n            \"Refused\",\n            Tone::Danger,\n        ),\n    ];\n    let owners = [\"Platform\", \"Runtime\", \"UI systems\", \"Runtime\", \"Docs\"];\n    let modified = [\"12:42\", \"12:31\", \"11:58\", \"11:44\", \"Yesterday\"];\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            TreeGrid::new(\"scene.tree-grid.files\", rows.len(), move |index, _, _| {\n                let (id, name, level, branch, expanded, parent, state, tone) = rows[index];\n                let mut row = TreeGridRow::new(id, level)\n                    .text(name)\n                    .cell(\"name\", Cell::new(name).text(name).published(true))\n                    .cell(\"kind\", if branch { \"Folder\" } else { \"File\" })\n                    .cell(\n                        \"state\",\n                        Cell::new(Badge::new(state).tone(tone))\n                            .text(state)\n                            .published(true),\n                    )\n                    .cell(\"owner\", owners[index])\n                    .cell(\"modified\", modified[index]);\n                if branch {\n                    row = row.branch(expanded);\n                }\n                if let Some(parent) = parent {\n                    row = row.parent(parent);\n                }\n                row\n            })\n            .columns([\n                GridColumn::new(\"name\", \"Name\").fixed(300.0).pinned(true),\n                GridColumn::new(\"kind\", \"Kind\").fixed(160.0),\n                GridColumn::new(\"state\", \"State\").fixed(180.0),\n                GridColumn::new(\"owner\", \"Owner\").fixed(200.0),\n                GridColumn::new(\"modified\", \"Modified\").fixed(180.0),\n            ])\n            .selected(\"components\")\n            .visible_rows(5)\n            .on_select(|_, _, _| {})\n            .on_expand(|_, _, _, _| {}),\n        )\n        .child(\n            crate::foundation::text(\n                &theme,\n                TypeScale::Caption,\n                SharedString::from(\n                    \"Scroll right for Owner and Modified; the hierarchy remains pinned.\",\n                ),\n            )\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "tree",
      "capture": "cargo run -p xtask -- headless capture tree",
      "kind": "exhibit",
      "subjects": [
        "Tree"
      ],
      "uses": [
        "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                .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                    TreeNode::new(\"remote\", \"remote\")\n                        .icon(Icon::Folder)\n                        .branch(BranchState::Loading),\n                    // A branch the host declined to list and one whose listing\n                    // failed are two different facts, and a reader deciding\n                    // whether to retry needs to know which one they are\n                    // looking at.\n                    TreeNode::new(\"vault\", \"vault\").icon(Icon::Folder).branch(\n                        BranchState::Unavailable(\n                            \"This workspace is not permitted to read it.\".into(),\n                        ),\n                    ),\n                    TreeNode::new(\"archive\", \"archive\")\n                        .icon(Icon::Folder)\n                        .branch(BranchState::Failed(\"The listing timed out.\".into())),\n                ])\n                .expanded_ids(&[\"workspace\", \"crates\", \"remote\", \"vault\", \"archive\"])\n                .on_toggle(|_, _, _, _| {})\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "split-pane",
      "capture": "cargo run -p xtask -- headless capture split-pane",
      "kind": "exhibit",
      "subjects": [
        "SplitPane"
      ],
      "uses": [
        "SplitPane"
      ],
      "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                .surface(&theme, Surface::Panel)\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(pane(\n                            &theme,\n                            \"Files\",\n                            &[\n                                \"src/\",\n                                \"  main.rs\",\n                                \"  theme.rs\",\n                                \"  layout/\",\n                                \"    split.rs\",\n                                \"    scroll.rs\",\n                                \"Cargo.toml\",\n                            ],\n                        ))\n                        .end(pane(\n                            &theme,\n                            \"split.rs\",\n                            &[\n                                \"pub struct SplitPane {\",\n                                \"    ratio: f32,\",\n                                \"    min_start: f32,\",\n                                \"    min_end: f32,\",\n                                \"}\",\n                                \"\",\n                                \"// The divider reports the ratio a drag\",\n                                \"// asked for; the caller decides it.\",\n                            ],\n                        ))\n                        .on_resize(|_, _, _| {})\n                        .on_collapse(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "grid",
      "capture": "cargo run -p xtask -- headless capture grid",
      "kind": "exhibit",
      "subjects": [
        "Grid"
      ],
      "uses": [
        "Grid"
      ],
      "example": "fn grid(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let item = |id: &'static str, label: &'static str| {\n        GridItem::new(\n            id,\n            Card::new()\n                .id(format!(\"scene.grid.card.{id}\"))\n                .padding(Space::Md)\n                .child(crate::foundation::text(&theme, TypeScale::Label, label))\n                .child(caption(&theme, \"Caller-owned content\")),\n        )\n        .span_at(Breakpoint::Large, if id == \"summary\" { 2 } else { 1 })\n    };\n    stack(&theme)\n        .w(px(840.0))\n        .child(caption(\n            &theme,\n            \"Columns and spans resolve from the grid's measured width while semantic order stays source order\",\n        ))\n        .child(\n            Grid::new(\"scene.grid\")\n                .columns(1)\n                .columns_at(Breakpoint::Medium, 2)\n                .columns_at(Breakpoint::Large, 3)\n                .gap(Space::Sm)\n                .items([\n                    item(\"summary\", \"Summary\"),\n                    item(\"settings\", \"Settings\"),\n                    item(\"history\", \"History\"),\n                    item(\"policy\", \"Policy\"),\n                ]),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "container",
      "capture": "cargo run -p xtask -- headless capture container",
      "kind": "exhibit",
      "subjects": [
        "Container"
      ],
      "uses": [
        "Container"
      ],
      "example": "fn container(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"Page width and gutters come from the installed theme, not component-local pixels\",\n        ))\n        .child(\n            Container::new(\"scene.container.readable\")\n                .width(ContainerWidth::Readable)\n                .child(\n                    Card::new()\n                        .id(\"scene.container.readable.card\")\n                        .padding(Space::Md)\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Readable content\",\n                        )),\n                ),\n        )\n        .child(\n            Container::new(\"scene.container.dialog\")\n                .width(ContainerWidth::Dialog)\n                .child(\n                    Card::new()\n                        .id(\"scene.container.dialog.card\")\n                        .padding(Space::Md)\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Dialog-width content\",\n                        )),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "scroll-area",
      "capture": "cargo run -p xtask -- headless capture scroll-area",
      "kind": "exhibit",
      "subjects": [
        "ScrollArea"
      ],
      "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(caption(\n            &theme,\n            \"Overflowing: a scrollbar, and the edges fade\",\n        ))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\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 and\n        // no edge fades. The area is as tall as what it holds rather than a\n        // height guessed at and hoped to be enough: a box a few pixels short\n        // of its content draws the scrollbar and the fade of the card above\n        // while claiming to be the card that does neither.\n        .child(caption(&theme, \"Fits: no scrollbar, no fade\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollArea::new(\"scene.scroll.summary\")\n                        .label(\"Summary\")\n                        .vertical()\n                        .fit_height()\n                        .child(filler(&theme, \"Summary\", 4)),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "scroll-shadow",
      "capture": "cargo run -p xtask -- headless capture scroll-shadow",
      "kind": "exhibit",
      "subjects": [
        "ScrollArea"
      ],
      "uses": [
        "ScrollArea"
      ],
      "example": "fn scroll_shadow(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    crate::layout::scroll_to(\n        \"scene.scroll.scrolled\",\n        gpui::point(px(0.0), px(120.0)),\n        window,\n        cx,\n    );\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(\n            &theme,\n            \"Scrolled to the middle: content is hidden past both ends, so both \\\n             fade\",\n        ))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\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": "scroll-fade",
      "capture": "cargo run -p xtask -- headless capture scroll-fade",
      "kind": "exhibit",
      "subjects": [
        "ScrollFade"
      ],
      "uses": [
        "ScrollFade"
      ],
      "example": "fn scroll_fade(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    crate::layout::scroll_to(\n        \"scene.fade.output\",\n        gpui::point(px(0.0), px(120.0)),\n        window,\n        cx,\n    );\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(&theme, \"Scrolled: content runs past both ends\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollFade::new(\"scene.fade.scrolled\")\n                        .edges(FadeEdges::vertical())\n                        .fit_height()\n                        .child(\n                            ScrollArea::new(\"scene.fade.output\")\n                                .label(\"Run output\")\n                                .vertical()\n                                .height(200.0)\n                                .child(filler(&theme, \"Output\", 20)),\n                        ),\n                ),\n        )\n        // Nothing is hidden here, so no edge fades and the caller says so.\n        .child(caption(&theme, \"Nothing hidden: no edge fades\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollFade::new(\"scene.fade.settled\").fit_height().child(\n                        ScrollArea::new(\"scene.fade.summary\")\n                            .label(\"Summary\")\n                            .vertical()\n                            .height(200.0)\n                            .child(filler(&theme, \"Summary\", 7)),\n                    ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "scroll-edge-effect",
      "capture": "cargo run -p xtask -- headless capture scroll-edge-effect",
      "kind": "exhibit",
      "subjects": [
        "ScrollEdgeEffect"
      ],
      "uses": [
        "ScrollEdgeEffect"
      ],
      "example": "fn scroll_edge_effect(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"Fixture transcript: content scrolls beneath a Regular glass toolbar\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(240.0))\n                .overflow_hidden()\n                .child(\n                    crate::layout::ScrollEdgeEffect::new(\"scene.scroll-edge.soft\")\n                        .top(true)\n                        .soft()\n                        .band(64.0)\n                        .child(filler(&theme, \"Earlier messages beneath the toolbar\", 10)),\n                )\n                .child(\n                    div().absolute().top(px(8.0)).left(px(16.0)).child(\n                        Glass::new(\"scene.scroll-edge.toolbar\")\n                            .radius(Radius::Pill)\n                            .child(\n                                div()\n                                    .px(px(20.0))\n                                    .py(px(10.0))\n                                    .child(\"Transcript · fixture\"),\n                            ),\n                    ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Reduced transparency: opaque scroll-edge backing\",\n        ))\n        .child(\n            div().h(px(160.0)).overflow_hidden().child(\n                crate::layout::ScrollEdgeEffect::new(\"scene.scroll-edge.hard\")\n                    .top(true)\n                    .hard()\n                    .band(64.0)\n                    .child(filler(&theme, \"The same transcript\", 7)),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "frost",
      "capture": "cargo run -p xtask -- headless capture frost",
      "kind": "exhibit",
      "subjects": [
        "Frost"
      ],
      "uses": [
        "Frost"
      ],
      "example": "fn frost(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let card = |title: &'static str, body: &'static str| {\n        div()\n            .column()\n            .gap(px(theme.space(Space::Xs)))\n            .p(px(theme.space(Space::Md)))\n            .child(crate::foundation::text(\n                &theme,\n                TypeScale::Label,\n                SharedString::from(title),\n            ))\n            .child(caption(&theme, body))\n    };\n    // What is behind the glass is a page, not a test pattern. A block of\n    // accent stripes dropped into a panel reads as a hole cut in it, and it\n    // answers the wrong question anyway: the thing a reader has to be able to\n    // judge is whether text they can otherwise read has gone out of focus.\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(&theme, \"A floating surface on glass\"))\n        .child(\n            div()\n                .relative()\n                .h(px(200.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(filler(&theme, \"Document\", 8))\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(48.0))\n                        // Far enough left to cross the lines. Placed clear of\n                        // them the glass had nothing behind it, so the picture\n                        // could not answer the one question it is here for:\n                        // whether text a reader can otherwise read has gone\n                        // out of focus.\n                        .left(px(64.0))\n                        .w(px(240.0))\n                        .child(\n                            Frost::new(\"scene.frost.popover\")\n                                .radius(Radius::Card)\n                                .child(card(\n                                    \"Rename\",\n                                    \"The page behind stays visible, out of focus\",\n                                )),\n                        ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"The same glass, blurred further and raised above the panel\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(160.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(filler(&theme, \"Files\", 6))\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(32.0))\n                        .left(px(64.0))\n                        .w(px(280.0))\n                        .child(\n                            Frost::new(\"scene.frost.rail\")\n                                // A surface a step above the page it covers.\n                                // Tinted with the page's own colour the glass\n                                // had no surface of its own: at any alpha, a\n                                // fill the colour of what is behind it adds\n                                // nothing, and the rail's words landed\n                                // directly on the words of the file list.\n                                .surface(gpui_kit_theme::Surface::Raised)\n                                .radius(Radius::Dialog)\n                                .blur(32.0)\n                                .child(card(\n                                    \"Rail\",\n                                    \"The lines behind stay legible and out of focus\",\n                                )),\n                        ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "glass",
      "capture": "cargo run -p xtask -- headless capture glass",
      "kind": "exhibit",
      "subjects": [
        "Glass"
      ],
      "uses": [
        "Glass"
      ],
      "example": "fn glass(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let label = |title: &'static str, body: &'static str| {\n        div()\n            .column()\n            .gap(px(theme.space(Space::Xs)))\n            .p(px(theme.space(Space::Md)))\n            .child(div().type_scale(&theme, TypeScale::Label).child(title))\n            .child(div().type_scale(&theme, TypeScale::Caption).child(body))\n    };\n\n    // A ruled checkerboard makes the material contract visible: Regular's\n    // rim refracts the scattered source, bending colour and luminance bands\n    // without restoring recognizable fine lines. Clear stays sharp because\n    // its blur is zero. The board is neutral, and every plate is an exact\n    // number of squares across and down: a board cut through the middle of a\n    // square at the plate edge reads as a broken pattern rather than as the\n    // ruled backdrop the optics are being measured against.\n    let checker_light = theme.colors.text_faint;\n    let checker_dark = theme.colors.canvas;\n    let checker_rule = theme.colors.divider.opacity(0.55);\n    let checkerboard =\n        |width: f32, height: f32| {\n            let columns = (width / TILE).ceil() as usize;\n            let rows = (height / TILE).ceil() as usize;\n            div()\n                .absolute()\n                .top(px(0.0))\n                .left(px(0.0))\n                .w(px(width))\n                .h(px(height))\n                .column()\n                .overflow_hidden()\n                .children((0..rows).map(|row| {\n                    div()\n                        .flex()\n                        .flex_none()\n                        .h(px(TILE))\n                        .children((0..columns).map(move |column| {\n                            div().flex_none().w(px(TILE)).h(px(TILE)).bg(\n                                if (row + column) % 2 == 0 {\n                                    checker_light\n                                } else {\n                                    checker_dark\n                                },\n                            )\n                        }))\n                }))\n                .children((0..=(width / 12.0) as usize).map(|column| {\n                    div()\n                        .absolute()\n                        .top(px(0.0))\n                        .left(px(column as f32 * 12.0))\n                        .w(px(1.0))\n                        .h(px(height))\n                        .bg(checker_rule)\n                }))\n                .children((0..=(height / 12.0) as usize).map(|row| {\n                    div()\n                        .absolute()\n                        .top(px(row as f32 * 12.0))\n                        .left(px(0.0))\n                        .w(px(width))\n                        .h(px(1.0))\n                        .bg(checker_rule)\n                }))\n        };\n\n    let plate =\n        |ident: &'static str, preset: GlassPreset, title: &'static str, body: &'static str| {\n            div()\n                .relative()\n                .h(px(PLATE_HEIGHT))\n                .w(px(PLATE_WIDTH))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    if preset == GlassPreset::Clear || ident == \"scene.glass.media\" {\n                        gpui::img(glass_media())\n                            .object_fit(gpui::ObjectFit::Cover)\n                            .w(px(PLATE_WIDTH))\n                            .h(px(PLATE_HEIGHT))\n                            .into_any_element()\n                    } else {\n                        checkerboard(PLATE_WIDTH, PLATE_HEIGHT).into_any_element()\n                    },\n                )\n                .when(ident == \"scene.glass.liquid\", |element| {\n                    element.child(div().absolute().inset_0().child(filler(\n                        &theme,\n                        \"Document text behind Regular glass\",\n                        6,\n                    )))\n                })\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(28.0))\n                        .left(px(52.0))\n                        .w(px(280.0))\n                        .child(\n                            Glass::new(ident)\n                                .preset(preset)\n                                .dimmed(preset == GlassPreset::Clear)\n                                .adaptive(true)\n                                .radius(Radius::Dialog)\n                                .child(label(title, body)),\n                        ),\n                )\n        };\n\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"Clear: dark Frosted / reduced transparency           Clear + 35% dimming / media only\",\n        ))\n        .child(\n            row(&theme)\n                .child(crate::foundation::ThemeOverlay::theme(\n                    theme.clone().with_reduce_transparency(true),\n                    plate(\n                        \"scene.glass.frosted\",\n                        GlassPreset::Clear,\n                        \"Clear: reduced transparency\",\n                        \"Dark Frosted and light content in every theme\",\n                    ),\n                ))\n                .child(plate(\n                    \"scene.glass.clear\",\n                    GlassPreset::Clear,\n                    \"Clear + dimmed\",\n                    \"A sharp media fixture, never default chrome\",\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"Regular over text and media: blur, achromatic wash, lensing and hairline\",\n        ))\n        .child(\n            row(&theme)\n                .child(plate(\n                    \"scene.glass.liquid\",\n                    GlassPreset::Liquid,\n                    \"Regular Liquid\",\n                    \"Large reading surfaces keep the window appearance\",\n                ))\n                .child(plate(\n                    \"scene.glass.media\",\n                    GlassPreset::Liquid,\n                    \"Regular on media\",\n                    \"The same material, not the Clear variant\",\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"Compact Regular controls: appearance may flip; no opaque face\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(TILE * 2.0))\n                .w(px(PLATE_WIDTH))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(div().absolute().inset_0().bg(gpui::white()))\n                .child(\n                    div()\n                        .absolute()\n                        .right_0()\n                        .top_0()\n                        .w(px(PLATE_WIDTH / 2.0))\n                        .h_full()\n                        .bg(gpui::black()),\n                )\n                .child(\n                    div()\n                        .absolute()\n                        .inset_0()\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(\n                            Glass::new(\"scene.glass.regular.one\")\n                                .preset(GlassPreset::Liquid)\n                                .surface(Surface::Raised)\n                                .radius(Radius::Pill)\n                                .adaptive(true)\n                                .child(\n                                    div()\n                                        .w(px(110.0))\n                                        .h(px(32.0))\n                                        .flex()\n                                        .items_center()\n                                        .justify_center()\n                                        .child(\"Portal\"),\n                                ),\n                        )\n                        .child(\n                            Glass::new(\"scene.glass.regular.two\")\n                                .preset(GlassPreset::Liquid)\n                                .radius(Radius::Pill)\n                                .adaptive(true)\n                                .child(\n                                    div()\n                                        .w(px(110.0))\n                                        .h(px(32.0))\n                                        .rounded(px(theme.radius(Radius::Pill)))\n                                        .bg(theme.colors.selected)\n                                        .flex()\n                                        .items_center()\n                                        .justify_center()\n                                        .child(\"Harbour\"),\n                                ),\n                        ),\n                ),\n        )\n        // The last two demonstrations sit side by side so the whole scene\n        // stays inside the window a real display can give the gallery, which\n        // is where the DirectX renderer gets looked at.\n        .child(\n            div()\n                .flex()\n                .flex_row()\n                .gap(px(theme.space(Space::Md)))\n                .child(\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(caption(&theme, \"Fused: two panes joined into one body\"))\n                        .child(\n                            div()\n                                .relative()\n                                .h(px(PLATE_HEIGHT))\n                                .w(px(JOIN_WIDTH))\n                                .surface(&theme, Surface::Panel)\n                                .radius(&theme, Radius::Card)\n                                .overflow_hidden()\n                                .child(checkerboard(JOIN_WIDTH, PLATE_HEIGHT))\n                                .child(\n                                    div().absolute().top(px(40.0)).left(px(40.0)).child(\n                                        GlassGroup::new(\"scene.glass.fused\")\n                                            .preset(GlassPreset::Liquid)\n                                            .radius(Radius::Dialog)\n                                            .gap(12.0)\n                                            .pane(\n                                                \"scene.glass.fused.left\",\n                                                label(\"Left\", \"One lobe of the body\"),\n                                            )\n                                            .pane(\n                                                \"scene.glass.fused.right\",\n                                                label(\"Right\", \"Joined across the gap\"),\n                                            ),\n                                    ),\n                                ),\n                        ),\n                )\n                .child(\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(caption(&theme, \"Large adaptive surfaces never flip\"))\n                        .child(\n                            div()\n                                .relative()\n                                .h(px(PLATE_HEIGHT))\n                                .w(px(JOIN_WIDTH))\n                                .surface(&theme, Surface::Panel)\n                                .radius(&theme, Radius::Card)\n                                .overflow_hidden()\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(0.0))\n                                        .left(px(0.0))\n                                        .w(px(JOIN_WIDTH / 2.0))\n                                        .h(px(PLATE_HEIGHT))\n                                        .bg(gpui::white()),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(0.0))\n                                        .left(px(JOIN_WIDTH / 2.0))\n                                        .w(px(JOIN_WIDTH / 2.0))\n                                        .h(px(PLATE_HEIGHT))\n                                        .bg(gpui::black()),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(28.0))\n                                        .left(px(15.0))\n                                        .w(px(160.0))\n                                        .child(\n                                            Glass::new(\"scene.glass.adaptive.bright\")\n                                                .preset(GlassPreset::Liquid)\n                                                .radius(Radius::Dialog)\n                                                .adaptive(true)\n                                                .adaptive_appearance(true)\n                                                .child(label(\n                                                    \"Bright\",\n                                                    \"The reading lands next frame\",\n                                                )),\n                                        ),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(28.0))\n                                        .left(px(JOIN_WIDTH / 2.0 + 15.0))\n                                        .w(px(160.0))\n                                        .child(\n                                            Glass::new(\"scene.glass.adaptive.dark\")\n                                                .preset(GlassPreset::Liquid)\n                                                .radius(Radius::Dialog)\n                                                .adaptive(true)\n                                                .child(label(\"Dark\", \"The same glass, other side\")),\n                                        ),\n                                ),\n                        ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Focused: one inward report edge — Regular, Clear + dimmed, Frosted, reduced\",\n        ))\n        .child(\n            row(&theme).children(\n                [\n                    (\"regular\", GlassPreset::Liquid, false, \"Regular\"),\n                    (\"clear\", GlassPreset::Clear, false, \"Clear + dimmed\"),\n                    (\"frosted\", GlassPreset::Frosted, false, \"Frosted\"),\n                    (\"reduced\", GlassPreset::Clear, true, \"Reduced\"),\n                ]\n                .into_iter()\n                .map(|(name, preset, reduced, title)| {\n                    div()\n                        .relative()\n                        .w(px(210.0))\n                        .h(px(96.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .child(\n                            gpui::img(glass_media())\n                                .size_full()\n                                .object_fit(gpui::ObjectFit::Cover),\n                        )\n                        .child(\n                            div()\n                                .absolute()\n                                .left(px(12.0))\n                                .right(px(12.0))\n                                .top(px(24.0))\n                                .child(crate::foundation::ThemeOverlay::theme(\n                                    theme.clone().with_reduce_transparency(reduced),\n                                    Glass::new(format!(\"scene.glass.focused.{name}\"))\n                                        .preset(preset)\n                                        .dimmed(preset == GlassPreset::Clear)\n                                        .focused(true)\n                                        .radius(Radius::Pill)\n                                        .child(\n                                            div()\n                                                .w_full()\n                                                .h(px(40.0))\n                                                .flex()\n                                                .items_center()\n                                                .justify_center()\n                                                .type_scale(&theme, TypeScale::Label)\n                                                .child(title),\n                                        ),\n                                )),\n                        )\n                }),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"Budget fallback: opaque cards, never holes — R keeps its focus report\",\n        ))\n        .child(div().flex().gap(px(4.0)).children(('A'..='R').map(|name| {\n            Glass::new(format!(\"scene.glass.budget.{name}\"))\n                .focused(name == 'R')\n                .child(\n                    div()\n                        .w(px(38.0))\n                        .h(px(30.0))\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .child(name.to_string()),\n                )\n        })))\n        .child(caption(\n            &theme,\n            \"Nine lobes exceed the fused budget: every pane retains an opaque face\",\n        ))\n        .child(\n            ('A'..='I').fold(GlassGroup::new(\"scene.glass.lobe-budget\"), |group, name| {\n                group.pane(\n                    format!(\"scene.glass.lobe-budget.{name}\"),\n                    div()\n                        .w(px(58.0))\n                        .h(px(30.0))\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .child(name.to_string()),\n                )\n            }),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "glass-optics",
      "capture": "cargo run -p xtask -- headless capture glass-optics",
      "kind": "exhibit",
      "subjects": [
        "Glass",
        "GlassGroup"
      ],
      "uses": [
        "Glass",
        "GlassGroup"
      ],
      "example": "fn glass_optics(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let specimens = [\n        (\"identity\", \"Index 1 / unchanged\", 1., 24., 24., 0., 0.),\n        (\"water\", \"Index 1.33 / shallow bend\", 1.33, 24., 24., 0., 0.),\n        (\"glass\", \"Index 1.5 / deeper bend\", 1.5, 24., 24., 0., 0.),\n        (\n            \"thick\",\n            \"48px thickness / same index\",\n            1.5,\n            48.,\n            24.,\n            0.,\n            0.,\n        ),\n        (\"contact\", \"Source plane at base\", 1.5, 24., 0., 0., 0.),\n        (\n            \"dispersion\",\n            \"Spectral indices / no highlight\",\n            1.5,\n            24.,\n            24.,\n            0.25,\n            0.,\n        ),\n        (\n            \"reflection\",\n            \"Fresnel / same surface normal\",\n            1.5,\n            24.,\n            24.,\n            0.,\n            1.,\n        ),\n        (\n            \"scatter\",\n            \"Same optics / 8px scattering\",\n            1.5,\n            24.,\n            24.,\n            0.,\n            0.,\n        ),\n    ];\n    stack(&theme)\n        .w(px(900.))\n        .child(caption(\n            &theme,\n            \"Snell refraction — fixture grid; foreground content is not distorted\",\n        ))\n        .children(specimens.chunks(4).map(|specimens| {\n            row(&theme).children(specimens.iter().map(\n                |&(name, title, index, thickness, depth, dispersion, specular)| {\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .w(px(210.))\n                        .child(caption(&theme, title))\n                        .child(\n                            div()\n                                .relative()\n                                .w(px(210.))\n                                .h(px(180.))\n                                .overflow_hidden()\n                                .bg(theme.colors.canvas)\n                                .children((0..18).map(|line| {\n                                    div()\n                                        .absolute()\n                                        .top(px(line as f32 * 10.))\n                                        .left_0()\n                                        .w_full()\n                                        .h(px(1.))\n                                        .bg(theme.colors.text_faint)\n                                }))\n                                .children((0..21).map(|line| {\n                                    div()\n                                        .absolute()\n                                        .left(px(line as f32 * 10.))\n                                        .top_0()\n                                        .h_full()\n                                        .w(px(1.))\n                                        .bg(theme.colors.text_faint)\n                                }))\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(22.))\n                                        .left(px(25.))\n                                        .w(px(160.))\n                                        .child(\n                                            Glass::new(format!(\"scene.glass-optics.{name}\"))\n                                                .preset(GlassPreset::Lens)\n                                                .radius_px(48.)\n                                                .refraction(1.)\n                                                .thickness(thickness)\n                                                .refractive_index(index)\n                                                .backdrop_depth(depth)\n                                                .dispersion(dispersion)\n                                                .specular(specular)\n                                                .blur(if name == \"scatter\" { 8. } else { 0. })\n                                                .track_pointer(name == \"reflection\")\n                                                .pressable(true)\n                                                .child(\n                                                    div()\n                                                        .w_full()\n                                                        .h(px(136.))\n                                                        .flex()\n                                                        .items_center()\n                                                        .justify_center()\n                                                        .child(\n                                                            div()\n                                                                .px_token(&theme, Space::Sm)\n                                                                .bg(theme.colors.panel)\n                                                                .child(\"Aa 123\"),\n                                                        ),\n                                                ),\n                                        ),\n                                ),\n                        )\n                },\n            ))\n        }))\n        .child(caption(\n            &theme,\n            \"Fused Regular / zero blur — one height field; press changes thickness and its normal\",\n        ))\n        .child(\n            div()\n                .relative()\n                .w(px(864.))\n                .h(px(120.))\n                .overflow_hidden()\n                .children((0..87).map(|line| {\n                    div()\n                        .absolute()\n                        .left(px(line as f32 * 10.))\n                        .top_0()\n                        .h_full()\n                        .w(px(1.))\n                        .bg(theme.colors.text_faint)\n                }))\n                .children((0..12).map(|line| {\n                    div()\n                        .absolute()\n                        .top(px(line as f32 * 10.))\n                        .left_0()\n                        .w_full()\n                        .h(px(1.))\n                        .bg(theme.colors.text_faint)\n                }))\n                .child(\n                    div().absolute().left(px(24.)).top(px(24.)).child(\n                        GlassGroup::new(\"scene.glass-optics.fused\")\n                            .preset(GlassPreset::Liquid)\n                            .blur(0.)\n                            .thickness(48.)\n                            .refractive_index(1.5)\n                            .backdrop_depth(24.)\n                            .radius(Radius::Pill)\n                            .gap(8.)\n                            .merge(32.)\n                            .pressable(true)\n                            .pane(\n                                \"scene.glass-optics.fused.left\",\n                                div()\n                                    .w(px(380.))\n                                    .h(px(72.))\n                                    .flex()\n                                    .items_center()\n                                    .justify_center()\n                                    .child(\"Left\"),\n                            )\n                            .pane(\n                                \"scene.glass-optics.fused.right\",\n                                div()\n                                    .w(px(380.))\n                                    .h(px(72.))\n                                    .flex()\n                                    .items_center()\n                                    .justify_center()\n                                    .child(\"Right\"),\n                            ),\n                    ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "glass-materials",
      "capture": "cargo run -p xtask -- headless capture glass-materials",
      "kind": "exhibit",
      "subjects": [
        "Glass",
        "GlassGroup"
      ],
      "uses": [
        "Glass",
        "GlassGroup"
      ],
      "example": "fn glass_materials(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let specimens = [\n        (\"protected\", \"Default body protection\", true, None),\n        (\"material\", \"Caller-owned legibility\", false, None),\n        (\n            \"tint-partial\",\n            \"25% tint / visible backdrop\",\n            true,\n            Some(0.25),\n        ),\n        (\n            \"tint-solid\",\n            \"100% tint / rim above colour\",\n            true,\n            Some(1.0),\n        ),\n    ];\n    let backdrop = || {\n        div()\n            .relative()\n            .w(px(200.0))\n            .h(px(112.0))\n            .bg(gpui::rgb(0xffffff))\n            .children((0..8).map(|stripe| {\n                div()\n                    .absolute()\n                    .left(px(stripe as f32 * 25.0))\n                    .top_0()\n                    .w(px(12.0))\n                    .h_full()\n                    .bg(gpui::rgb(0x8090a0))\n            }))\n    };\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"Material policy / deterministic stripe fixture, not native reference\",\n        ))\n        .child(\n            row(&theme).children(specimens.into_iter().map(|(id, title, protect, tint)| {\n                let mut glass = Glass::new(format!(\"scene.glass-materials.{id}\"))\n                    .radius_px(24.0)\n                    .blur(2.0)\n                    .protect_text_contrast(protect);\n                if let Some(alpha) = tint {\n                    glass = glass.tint(theme.colors.accent.opacity(alpha));\n                }\n                div()\n                    .column()\n                    .gap_token(&theme, Space::Sm)\n                    .child(caption(&theme, title))\n                    .child(\n                        backdrop().child(\n                            div()\n                                .absolute()\n                                .left(px(20.0))\n                                .top(px(24.0))\n                                .child(glass.child(div().w(px(160.0)).h(px(64.0)))),\n                        ),\n                    )\n            })),\n        )\n        .child(caption(\n            &theme,\n            \"Tint across joined panes / reduced-transparency fallback\",\n        ))\n        .child(\n            row(&theme).children([false, true].into_iter().map(|reduced| {\n                let id = if reduced { \"reduced\" } else { \"joined\" };\n                let tint = theme.colors.accent.opacity(0.25);\n                let group = GlassGroup::new(format!(\"scene.glass-materials.{id}\"))\n                    .radius(Radius::Pill)\n                    .gap(8.0)\n                    .merge(32.0)\n                    .blur(2.0)\n                    .tint(tint)\n                    .pane(\n                        format!(\"scene.glass-materials.{id}.left\"),\n                        div().w(px(68.0)).h(px(56.0)),\n                    )\n                    .pane(\n                        format!(\"scene.glass-materials.{id}.right\"),\n                        div().w(px(68.0)).h(px(56.0)),\n                    );\n                backdrop().child(div().absolute().left(px(28.0)).top(px(28.0)).child(\n                    ThemeOverlay::new(move |t| t.clone().with_reduce_transparency(reduced), group),\n                ))\n            })),\n        )\n        .child(caption(\n            &theme,\n            \"Rounded foreground clips / surface shadows and joined optics stay outside\",\n        ))\n        .child(\n            row(&theme)\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(20.0)).top(px(24.0)).child(\n                            Glass::new(\"scene.glass-materials.clip-surface\")\n                                .radius_px(24.0)\n                                .child(div().w(px(160.0)).h(px(64.0)).bg(theme.colors.accent)),\n                        ),\n                    ),\n                )\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(28.0)).top(px(28.0)).child(\n                            GlassGroup::new(\"scene.glass-materials.clip-group\")\n                                .radius(Radius::Pill)\n                                .gap(8.0)\n                                .merge(32.0)\n                                .pane(\n                                    \"scene.glass-materials.clip-left\",\n                                    div().w(px(68.0)).h(px(56.0)).bg(theme.colors.accent),\n                                )\n                                .pane(\n                                    \"scene.glass-materials.clip-right\",\n                                    div().w(px(68.0)).h(px(56.0)).bg(theme.colors.accent),\n                                ),\n                        ),\n                    ),\n                )\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(20.0)).top(px(24.0)).child(\n                            crate::overlay::surface(\n                                \"scene.glass-materials.clip-frame\",\n                                &theme,\n                                crate::overlay::OverlaySurface::MODAL,\n                            )\n                            .w(px(160.0))\n                            .h(px(64.0))\n                            .children(\n                                [theme.colors.accent, theme.colors.text_faint]\n                                    .map(|color| div().w_full().h(px(32.0)).bg(color)),\n                            ),\n                        ),\n                    ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "media-caption",
      "capture": "cargo run -p xtask -- headless capture media-caption",
      "kind": "composition",
      "subjects": [],
      "uses": [
        "Button"
      ],
      "example": "fn media_caption(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let tile = |id: &'static str, reduced: bool| {\n        let material_theme = theme.clone().with_reduce_transparency(reduced);\n        div()\n            .relative()\n            .w_full()\n            .h(px(220.0))\n            .radius(&theme, Radius::Card)\n            .overflow_hidden()\n            .child(\n                gpui::img(glass_media())\n                    .size_full()\n                    .radius(&theme, Radius::Card)\n                    .object_fit(gpui::ObjectFit::Cover),\n            )\n            .child(\n                crate::overlay::surface(\n                    id,\n                    &material_theme,\n                    crate::overlay::OverlaySurface::MEDIA_CAPTION,\n                )\n                .absolute()\n                .left_0()\n                .right_0()\n                .bottom_0()\n                .flex_row()\n                .items_center()\n                .gap_token(&theme, Space::Md)\n                .p_token(&theme, Space::Md)\n                .child(\n                    div()\n                        .flex_1()\n                        .min_w_0()\n                        .type_scale(&theme, TypeScale::Label)\n                        .child(if reduced {\n                            \"Media fixture · reduced transparency\"\n                        } else {\n                            \"Media fixture · Clear caption\"\n                        }),\n                )\n                .child(\n                    div()\n                        .type_scale(&theme, TypeScale::Caption)\n                        .child(\"3 projects\"),\n                )\n                .child(\n                    Button::new(format!(\"{id}.new\"))\n                        .label(\"New project\")\n                        .ghost()\n                        .on_click(|_, _| {}),\n                ),\n            )\n    };\n    stack(&theme)\n        .w_full()\n        .child(caption(\n            &theme,\n            \"Parent-constrained width; caption height follows its content\",\n        ))\n        .child(tile(\"scene.media-caption.clear\", false))\n        .child(tile(\"scene.media-caption.reduced\", true))\n        .into_any_element()\n}"
    },
    {
      "name": "toolbar",
      "capture": "cargo run -p xtask -- headless capture toolbar",
      "kind": "exhibit",
      "subjects": [
        "Toolbar"
      ],
      "uses": [
        "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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The last two actions moved into the overflow menu.\",\n        ))\n        .into_any_element()\n}"
    },
    {
      "name": "desktop-titlebar",
      "capture": "cargo run -p xtask -- headless capture desktop-titlebar",
      "kind": "exhibit",
      "subjects": [
        "DesktopTitlebar"
      ],
      "uses": [
        "DesktopTitlebar"
      ],
      "example": "fn desktop_titlebar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    DesktopTitlebar::new(\"scene.desktop-titlebar\", \"Workspace\")\n                        .subtitle(\"main.rs\")\n                        .left(\n                            Button::new(\"scene.desktop-titlebar.workspace\")\n                                .label(\"Workspace menu\")\n                                .ghost()\n                                .small()\n                                .on_click(|_, _| {}),\n                        )\n                        .right(\n                            Badge::new(\"Connected\")\n                                .success()\n                                .id(\"scene.desktop-titlebar.status\"),\n                        )\n                        .on_event(|_, _, _| {}),\n                )\n                .child(div().h(px(112.0)).p_token(&theme, Space::Lg).child(caption(\n                    &theme,\n                    \"Host content is client input; maximize remains native Snap chrome.\",\n                ))),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "mobile-page",
      "capture": "cargo run -p xtask -- headless capture mobile-page",
      "kind": "exhibit",
      "subjects": [
        "AppBar",
        "PageLayout"
      ],
      "uses": [
        "AppBar",
        "PageLayout"
      ],
      "example": "fn mobile_page(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{AppBar, PageLayout};\n    let theme = cx.theme().clone();\n    let page = |name: &'static str, keyboard: bool, safe: bool| {\n        let id = format!(\"scene.mobile-page.{name}\");\n        let mut insets = gpui::WindowInsets::default();\n        if safe {\n            insets.safe_area.top = px(24.0);\n            insets.safe_area.bottom = px(20.0);\n            insets.safe_area.left = px(7.0);\n            insets.safe_area.right = px(11.0);\n        }\n        if keyboard {\n            insets.ime.bottom = px(140.0);\n        }\n        div()\n            .w(px(290.0))\n            .h(px(430.0))\n            .border_1()\n            .border_color(theme.colors.control_hairline)\n            .surface(&theme, Surface::Panel)\n            .child(\n                PageLayout::new(\n                    id.clone(),\n                    ScrollArea::new(format!(\"{id}.scroll\")).child(filler(\n                        &theme,\n                        \"Fixture page content\",\n                        12,\n                    )),\n                )\n                .insets(insets)\n                .hide_footer(keyboard)\n                .header(\n                    AppBar::new(format!(\"{id}.bar\"), name).leading(\n                        Button::new(format!(\"{id}.back\"))\n                            .label(\"Back\")\n                            .ghost()\n                            .control_size(ControlSize::Touch)\n                            .disabled(!safe)\n                            .on_click(|_, _| {}),\n                    ),\n                )\n                .footer(div().p(px(theme.space(Space::Sm))).child(\"Caller footer\")),\n            )\n    };\n    stack(&theme)\n        .child(caption(&theme, \"Fixture residual insets: desktop zero · safe area · overlapping IME with footer unmounted\"))\n        .child(row(&theme).items_start().child(page(\"Desktop\", false, false))\n            .child(page(\"Safe area\", false, true)).child(page(\"Keyboard\", true, true)))\n        .into_any_element()\n}"
    },
    {
      "name": "bottom-navigation",
      "capture": "cargo run -p xtask -- headless capture bottom-navigation",
      "kind": "exhibit",
      "subjects": [
        "BottomNavigation"
      ],
      "uses": [
        "BottomNavigation"
      ],
      "example": "fn bottom_navigation(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::{BottomNavigation, NavigationItem};\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(390.0))\n        .child(caption(\n            &theme,\n            \"Fixture destinations; selected, enabled and disabled actions\",\n        ))\n        .child(\n            BottomNavigation::new(\"scene.bottom-navigation.ready\")\n                .items([\n                    NavigationItem::new(\"library\", \"Library\"),\n                    NavigationItem::new(\"search\", \"Search\"),\n                    NavigationItem::new(\"settings\", \"Settings\").disabled(true),\n                ])\n                .selected(\"search\")\n                .on_select(|_, _, _| {}),\n        )\n        .child(caption(\n            &theme,\n            \"No host handler: destinations are unavailable\",\n        ))\n        .child(\n            BottomNavigation::new(\"scene.bottom-navigation.unavailable\")\n                .items([\n                    NavigationItem::new(\"library\", \"Library\"),\n                    NavigationItem::new(\"search\", \"Search\"),\n                ])\n                .selected(\"library\"),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "nav-back-preview",
      "capture": "cargo run -p xtask -- headless capture nav-back-preview",
      "kind": "exhibit",
      "subjects": [
        "NavStack"
      ],
      "uses": [
        "NavStack"
      ],
      "example": "fn nav_back_preview(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::{BackTransition, NavHistory, NavStack};\n    let theme = cx.theme().clone();\n    let state = window.use_keyed_state(\"scene.nav-back-preview.state\", cx, |_, cx| {\n        let mut history = NavHistory::new(\"overview\");\n        history.push(\"details\");\n        (history, None::<BackTransition>, cx.focus_handle())\n    });\n    let (history, preview, focus) = state.read(cx).clone();\n    let progress = state.clone();\n    let cancel = state.clone();\n    let commit = state.clone();\n    let reset = state.clone();\n    let mut page = NavStack::new(\n        \"scene.nav-back-preview\",\n        &history,\n        history.current().clone(),\n        focus,\n        Card::new()\n            .padding(Space::Xl)\n            .child(history.current().clone()),\n    );\n    if let Some(preview) = &preview {\n        page = page.back_transition(preview);\n    }\n    stack(&theme).w(px(550.0))\n        .child(caption(&theme, \"Fixture host-fed progress; cancel retains the page, accept mutates caller history. Reduced motion holds full opacity.\"))\n        .child(Slider::new(\"scene.nav-back-preview.progress\").label(\"Back progress\")\n            .range(0.0, 1.0).value(preview.as_ref().map_or(0.0, BackTransition::progress))\n            .disabled(!history.can_pop()).on_change(move |value, _, cx| progress.update(cx, |state, cx| {\n                if state.1.is_none() { state.1 = BackTransition::begin(&state.0); }\n                if let Some(preview) = &mut state.1 { preview.update(value); }\n                cx.notify();\n            })))\n        .child(row(&theme)\n            .child(Button::new(\"scene.nav-back-preview.cancel\").label(\"Cancel\").disabled(preview.is_none())\n                .on_click(move |_, cx| cancel.update(cx, |state, cx| {\n                    if let Some(preview) = state.1.take() { preview.cancel(); } cx.notify();\n                })))\n            .child(Button::new(\"scene.nav-back-preview.accept\").label(\"Accept back\").disabled(preview.is_none())\n                .on_click(move |_, cx| commit.update(cx, |state, cx| {\n                    if let Some(preview) = state.1.take() { preview.commit(&mut state.0); } cx.notify();\n                })))\n            .child(Button::new(\"scene.nav-back-preview.reset\").label(\"Forward\").disabled(!history.can_forward())\n                .on_click(move |_, cx| reset.update(cx, |state, cx| { state.0.forward(); cx.notify(); }))))\n        .child(page).into_any_element()\n}"
    },
    {
      "name": "adaptive-navigation",
      "capture": "cargo run -p xtask -- headless capture adaptive-navigation",
      "kind": "composition",
      "subjects": [],
      "uses": [
        "Responsive",
        "Sidebar",
        "BottomNavigation",
        "PageLayout",
        "AppBar"
      ],
      "example": "fn adaptive_navigation(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{AppBar, PageLayout, Responsive};\n    use crate::navigation::{BottomNavigation, NavigationItem};\n    let theme = cx.theme().clone();\n    let make = |id: &'static str, width: f32| {\n        div().w(px(width)).h(px(320.0)).child(\n            Responsive::new(id, move |size, _, _| {\n                let wide = size.at_least(600.0);\n                let body = div()\n                    .flex()\n                    .size_full()\n                    .when(wide, |body| {\n                        body.child(\n                            Sidebar::new(format!(\"{id}.rail\"))\n                                .section(SidebarSection::new(\"destinations\").items([\n                                    SidebarItem::new(\"library\", \"Library\"),\n                                    SidebarItem::new(\"search\", \"Search\"),\n                                ]))\n                                .active(\"search\")\n                                .on_select(|_, _, _| {}),\n                        )\n                    })\n                    .child(\n                        div()\n                            .flex_1()\n                            .p(px(16.0))\n                            .child(\"Fixture content · caller owns route selection\"),\n                    );\n                PageLayout::new(format!(\"{id}.page\"), body)\n                    .insets(gpui::WindowInsets::default())\n                    .header(AppBar::new(\n                        format!(\"{id}.bar\"),\n                        if wide {\n                            \"Wide container\"\n                        } else {\n                            \"Compact container\"\n                        },\n                    ))\n                    .hide_footer(wide)\n                    .footer(\n                        BottomNavigation::new(format!(\"{id}.bottom\"))\n                            .items([\n                                NavigationItem::new(\"library\", \"Library\"),\n                                NavigationItem::new(\"search\", \"Search\"),\n                            ])\n                            .selected(\"search\")\n                            .on_select(|_, _, _| {}),\n                    )\n                    .into_any_element()\n            })\n            .fill(),\n        )\n    };\n    stack(&theme)\n        .child(caption(&theme, \"Same caller data; measured container width selects rail or bottom destinations. No platform guessing.\"))\n        .child(make(\"scene.adaptive-navigation.wide\", 640.0))\n        .child(make(\"scene.adaptive-navigation.compact\", 350.0))\n        .into_any_element()\n}"
    },
    {
      "name": "sidebar",
      "capture": "cargo run -p xtask -- headless capture sidebar",
      "kind": "exhibit",
      "subjects": [
        "Sidebar"
      ],
      "uses": [
        "Sidebar"
      ],
      "example": "fn sidebar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSidebar>() {\n        cx.set_global(SceneSidebar::default());\n    }\n    let theme = cx.theme().clone();\n    let active = cx\n        .global::<SceneSidebar>()\n        .active\n        .clone()\n        .unwrap_or_else(|| \"runs.active\".into());\n    let collapsed = cx.global::<SceneSidebar>().collapsed;\n    let rail = |ident: &'static str, collapsed: bool| {\n        Sidebar::new(ident)\n            .sections(navigation_sections())\n            .active(active.clone())\n            .collapsed(collapsed)\n            .footer(\n                crate::foundation::text(\n                    &theme,\n                    TypeScale::Caption,\n                    if collapsed {\n                        SharedString::new_static(\"v0\")\n                    } else {\n                        SharedString::new_static(\"Fixture workspace\")\n                    },\n                )\n                .text_tone(&theme, TextTone::Faint),\n            )\n            .on_select(|id, window, cx| {\n                cx.global_mut::<SceneSidebar>().active = Some(id);\n                window.refresh();\n            })\n    };\n\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"Fixture navigation — select a destination, toggle a branch, or collapse the rail\",\n        ))\n        .child(\n            div()\n                .flex()\n                .flex_row()\n                .h(px(400.0))\n                .gap(px(theme.space(Space::Lg)))\n                .child(\n                    rail(\"scene.sidebar.expanded\", collapsed)\n                        .width(260.0)\n                        .header(caption(\n                            &theme,\n                            if collapsed { \"W\" } else { \"Fixture workspace\" },\n                        ))\n                        .on_collapse(|collapsed, window, cx| {\n                            cx.global_mut::<SceneSidebar>().collapsed = collapsed;\n                            window.refresh();\n                        }),\n                )\n                .child(rail(\"scene.sidebar.collapsed\", true)),\n        )\n        .child(caption(\n            &theme,\n            \"Current destination is caller-owned; arrow keys move focus without navigating\",\n        ))\n        .into_any_element()\n}"
    },
    {
      "name": "sidebar-overflow",
      "capture": "cargo run -p xtask -- headless capture sidebar-overflow",
      "kind": "exhibit",
      "subjects": [
        "Sidebar"
      ],
      "uses": [
        "Sidebar"
      ],
      "example": "fn sidebar_overflow(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Fixture stress states — fixed slots, scrolling, long labels, and a closed current branch\"))\n        .child(div().flex().gap(px(theme.space(Space::Lg))).h(px(320.0))\n            .child(div().w(px(300.0)).h_full().child(Sidebar::new(\"scene.sidebar-overflow.scroll\")\n                .fill_width()\n                .header(caption(&theme, \"Fixed header\"))\n                .footer(caption(&theme, \"Fixed footer\"))\n                .section(SidebarSection::new(\"destinations\").title(\"Destinations\").items(\n                    (0..24).map(|index| SidebarItem::new(format!(\"destination-{index}\"),\n                        if index == 1 { \"A long destination label that needs an ellipsis\".to_owned() }\n                        else { format!(\"Fixture destination {}\", index + 1) }).disabled(index == 2))\n                ))\n                .active(\"destination-1\")\n                .on_select(|_, _, _| {})))\n            .child(Sidebar::new(\"scene.sidebar-overflow.closed\")\n                .sections(navigation_sections()).expanded_ids(&[])\n                .active(\"runs.active\")\n                .header(caption(&theme, \"Host refuses branch expansion\"))\n                .footer(caption(&theme, \"Current: Active\"))\n                .on_select(|_, _, _| {}).on_toggle(|_, _, _, _| {})))\n        .into_any_element()\n}"
    },
    {
      "name": "pagination",
      "capture": "cargo run -p xtask -- headless capture pagination",
      "kind": "exhibit",
      "subjects": [
        "Pagination"
      ],
      "uses": [
        "Pagination"
      ],
      "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                .name(\"Rows per page\")\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(caption(\n            &theme,\n            \"a known total, with the page size the host offered\",\n        ))\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(caption(\n            &theme,\n            \"an unknown total: no numbers, no last page, and no count invented\",\n        ))\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 -- headless capture drawer",
      "kind": "exhibit",
      "subjects": [
        "Drawer"
      ],
      "uses": [
        "Drawer"
      ],
      "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                .resizable(true)\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                    let group = |heading: &'static str, rows: gpui::Div| {\n                        div()\n                            .column()\n                            .gap(px(theme.space(Space::Sm)))\n                            .child(\n                                crate::foundation::text(&theme, TypeScale::Label, heading)\n                                    .text_tone(&theme, TextTone::Muted),\n                            )\n                            .child(rows.column().gap(px(theme.space(Space::Sm))))\n                    };\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Lg)))\n                        .child(group(\n                            \"Outcome\",\n                            div()\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.cancelled\")\n                                        .label(\"Include cancelled\")\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .child(group(\n                            \"Ownership\",\n                            div()\n                                .child(\n                                    Checkbox::new(\"scene.drawer.mine\")\n                                        .label(\"Started by me\")\n                                        .on_change(|_, _, _| {}),\n                                )\n                                .child(\n                                    Checkbox::new(\"scene.drawer.watching\")\n                                        .label(\"Repositories I watch\")\n                                        .checked(true)\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .child(group(\n                            \"Window\",\n                            div()\n                                .child(\n                                    Checkbox::new(\"scene.drawer.today\")\n                                        .label(\"Today\")\n                                        .checked(true)\n                                        .on_change(|_, _, _| {}),\n                                )\n                                .child(\n                                    Checkbox::new(\"scene.drawer.week\")\n                                        .label(\"This week\")\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .into_any_element()\n                })\n                // Two controls, sized to their labels and pinned to the\n                // reading edge: a full-width primary slab is the loudest\n                // thing on the page and says the drawer has one exit.\n                .footer(|_, cx| {\n                    let theme = cx.theme().clone();\n                    div()\n                        .row()\n                        .justify_end()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(\n                            Button::new(\"scene.drawer.cancel\")\n                                .label(\"Cancel\")\n                                .secondary()\n                                .on_click(|_, _| {}),\n                        )\n                        .child(\n                            Button::new(\"scene.drawer.apply\")\n                                .label(\"Apply\")\n                                .primary()\n                                .on_click(|_, _| {}),\n                        )\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(page_behind(&theme, \"Runs\"))\n        .child(filters)\n        .into_any_element()\n}"
    },
    {
      "name": "motion-flip",
      "capture": "cargo run -p xtask -- headless capture motion-flip",
      "kind": "composition",
      "subjects": [],
      "uses": [
        "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(), window, cx);\n        // The position is what this scene is about, so it leads the row in a\n        // column of its own rather than trailing as a badge: a number that\n        // moves is only readable against the numbers above and below it.\n        let position = div()\n            .flex_none()\n            .size(px(theme\n                .control\n                .get(gpui_kit_theme::ControlSize::Xs)\n                .height))\n            .flex()\n            .items_center()\n            .justify_center()\n            .radius(&theme, Radius::Small)\n            .well(&theme)\n            .mono(&theme)\n            .type_scale(&theme, TypeScale::Caption)\n            .text_color(theme.colors.text)\n            .child(format!(\"{}\", index + 1));\n        queue = queue.child(\n            ListRow::new()\n                .id(ident)\n                .leading(position)\n                .child(div().flex_1().child(*label))\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            crate::foundation::text(\n                &theme,\n                TypeScale::Body,\n                \"Rows land in their new slot at once and slide into it.\",\n            )\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "flip-configuration",
      "capture": "cargo run -p xtask -- headless capture flip-configuration",
      "kind": "composition",
      "subjects": [],
      "uses": [
        "Button"
      ],
      "example": "fn flip_configuration(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<Demo>(\n        &\"scene.flip.config-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let grown = state.borrow().grown;\n    let change = state.clone();\n    let direct = state.clone();\n    let timing = state.clone();\n    let hits = state.clone();\n    let spec = if state.borrow().spring {\n        MotionSpec::sprung(Spring::new(400.0, 28.0, 1.0))\n    } else {\n        MotionSpec::new(600, CubicBezier::new(0.0, 0.0, 1.0, 1.0)).with_delay(100)\n    };\n    let handle = flip(\"scene.flip.config-box\", window, cx);\n    let box_element = div()\n        .id(\"scene.flip.config-hit\")\n        .w(px(if grown { 270.0 } else { 130.0 }))\n        .h(px(if grown { 100.0 } else { 40.0 }))\n        .bg(theme.colors.accent)\n        .border_1()\n        .border_color(theme.colors.text)\n        .overflow_hidden()\n        .p_token(&theme, Space::Xs)\n        .child(\"Border box\")\n        .on_mouse_down(gpui::MouseButton::Left, move |_, window, _| {\n            hits.borrow_mut().hits += 1;\n            window.refresh();\n        })\n        .semantic_in(\n            cx,\n            NodeSpec::new(\"scene.flip.config-hit\", Role::Button).text(\"Border box\"),\n        )\n        .flip_size(&handle, window, cx)\n        .animate(!state.borrow().direct)\n        .animation(spec);\n    stack(&theme).w(px(600.0))\n        .child(caption(&theme,\"Synthetic FLIP · delayed tween / spring · displayed size, hit target and semantic bounds agree\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.flip.config.change\").label(\"Move and resize\").on_click(move |window,_|{let mut s=change.borrow_mut();s.grown = !s.grown;window.refresh();}))\n            .child(Button::new(\"scene.flip.config.direct\").label(if state.borrow().direct {\"Enable animation\"} else {\"Snap directly\"}).on_click(move |window,_|{let mut s=direct.borrow_mut();s.direct = !s.direct;window.refresh();}))\n            .child(Button::new(\"scene.flip.config.timing\").label(if state.borrow().spring {\"Use tween\"} else {\"Use spring\"}).on_click(move |window,_|{let mut s=timing.borrow_mut();s.spring = !s.spring;window.refresh();})))\n        .child(div().w_full().h(px(150.0)).flex().flex_col().items_start().pl(px(if grown {180.0} else {0.0})).child(box_element))\n        .child(div().child(format!(\"Displayed hits: {}\",state.borrow().hits)).semantic_in(cx,NodeSpec::new(\"scene.flip.config.hits\",Role::Status).value(state.borrow().hits.to_string())))\n        .into_any_element()\n}\n\n//! Presentation a game shell needs and an application does not.\n\nuse super::support::*;\n\npub(super) fn game_ui(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let direction = cx.layout_direction();\n    let normalized = |value| GameFraction::new(value).expect(\"scene fraction is normalized\");\n    let lyra = AgentSnapshot::new(AgentDescriptor::new(\"lyra\", \"Lyra\").role(\"Pathfinder\"))\n        .presence(AgentPresence::Online)\n        .execution(AgentExecutionState::Active(AgentActivity::UsingTool(\n            \"prism scanner\".into(),\n        )));\n    let orin = AgentSnapshot::new(AgentDescriptor::new(\"orin\", \"Orin\").role(\"Warden\"))\n        .presence(AgentPresence::Online)\n        .execution(AgentExecutionState::Waiting(WaitReason::Dependency(\n            \"beacon\".into(),\n        )));\n    let party = PartySnapshot::new([\n        PartyMember::new(lyra)\n            .expression(PersonaExpression::Focused)\n            .gauge(PartyGauge::known(\n                \"resolve\",\n                \"Resolve\",\n                normalized(0.72),\n                \"72 / 100\",\n            )),\n        PartyMember::new(orin)\n            .expression(PersonaExpression::Neutral)\n            .gauge(PartyGauge::unknown(\"bond\", \"Bond\"))\n            .gauge(PartyGauge::unavailable(\n                \"aegis\",\n                \"Aegis\",\n                \"Telemetry was not verified\",\n            )),\n    ]);\n    let objectives = ObjectiveSnapshot::new([\n        Objective::new(\"beacon\", \"Restore the beacon\")\n            .detail(\"Bring the relay online without inventing an outcome.\")\n            .state(ObjectiveState::Active)\n            .progress(normalized(0.64)),\n        Objective::new(\"crystals\", \"Align the crystals\")\n            .parent(\"beacon\")\n            .state(ObjectiveState::Completed),\n        Objective::new(\"signal\", \"Trace the signal\")\n            .parent(\"beacon\")\n            .state(ObjectiveState::Locked),\n        Objective::new(\"archive\", \"Recover the archive\")\n            .parent(\"beacon\")\n            .state(ObjectiveState::Failed(\n                \"The archive host refused access.\".into(),\n            )),\n    ]);\n    let abilities = AbilitySet::new([\n        Ability::new(\"dash\", \"Phase dash\")\n            .icon(Icon::ArrowRight)\n            .shortcut(\"Q\")\n            .charges(AbilityCharges::new(2, 3).expect(\"scene charges are valid\")),\n        Ability::new(\"nova\", \"Nova pulse\")\n            .icon(Icon::AddCircle)\n            .shortcut(\"W\")\n            .cost(\"30 focus\")\n            .state(AbilityState::CoolingDown {\n                remaining_fraction: normalized(0.4),\n                remaining: \"2.4s\".into(),\n            }),\n        Ability::new(\"ward\", \"Signal ward\")\n            .icon(Icon::Key)\n            .shortcut(\"E\")\n            .state(AbilityState::Disabled(\"No open target\".into())),\n        Ability::new(\"gate\", \"Open gate\")\n            .icon(Icon::Global)\n            .shortcut(\"R\")\n            .state(AbilityState::Unavailable(\n                \"The route has not been verified\".into(),\n            )),\n    ]);\n    let reward = RewardSnapshot::new(\"beacon-cache\", \"Beacon cache\")\n        .detail(\"The host has confirmed this reveal; claiming remains a request.\")\n        .state(RewardState::Revealed)\n        .item(\n            RewardItem::new(\"shard\", \"Prism shard\")\n                .icon(Icon::Widget)\n                .quantity(3),\n        )\n        .item(\n            RewardItem::new(\"key\", \"Signal key\")\n                .icon(Icon::Key)\n                .detail(\"Opens one relay\"),\n        );\n    let mut planner = EffectPlanner::new(EffectPolicy::new(EffectQuality::Cinematic));\n    let reward_effect = planner.plan(\n        EffectEvent::new(\n            \"beacon-cache-revealed\",\n            \"game-ui\",\n            \"beacon-cache\",\n            VisualCue::Reward,\n        ),\n        1,\n        false,\n    );\n    let heading = |text: &'static str| {\n        div()\n            .type_scale(&theme, TypeScale::Subtitle)\n            .text_tone(&theme, TextTone::Primary)\n            .child(text)\n    };\n\n    stack(&theme)\n        .size_full()\n        .items_center()\n        .justify_center()\n        .child(\n            div()\n                .column()\n                .w(px(820.0))\n                .gap_token(&theme, Space::Lg)\n                .child(\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            div()\n                                .type_scale(&theme, TypeScale::Title)\n                                .text_tone(&theme, TextTone::Primary)\n                                .child(\"Expedition interface\"),\n                        )\n                        .child(\n                            div()\n                                .type_scale(&theme, TypeScale::Caption)\n                                .text_tone(&theme, TextTone::Muted)\n                                .child(\n                                    \"Typed facts in, typed requests out; progression stays with the host.\",\n                                ),\n                        ),\n                )\n                .child(\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .child(heading(\"Party\"))\n                        .child(\n                            PartyRoster::new(\"scene.game-ui.party\", party)\n                                .selected(\"lyra\")\n                                .on_event(|_, _, _| {}),\n                        ),\n                )\n                .child(\n                    div()\n                        .row_reading(direction)\n                        .items_start()\n                        .gap_token(&theme, Space::Lg)\n                        .child(\n                            div()\n                                .column()\n                                .w(px(400.0))\n                                .gap_token(&theme, Space::Sm)\n                                .child(heading(\"Objectives\"))\n                                .child(\n                                    ObjectiveTracker::new(\n                                        \"scene.game-ui.objectives\",\n                                        objectives,\n                                    )\n                                    .selected(\"beacon\")\n                                    .on_event(|_, _, _| {}),\n                                ),\n                        )\n                        .child(\n                            div()\n                                .column()\n                                .w(px(400.0))\n                                .gap_token(&theme, Space::Sm)\n                                .child(heading(\"Reward\"))\n                                .child(\n                                    RewardReveal::new(\"scene.game-ui.reward\", reward)\n                                        .effect(reward_effect)\n                                        .sample_at(Duration::from_millis(620))\n                                        .on_event(|_, _, _| {}),\n                                ),\n                        ),\n                )\n                .child(\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .child(heading(\"Abilities\"))\n                        .child(\n                            AbilityBar::new(\"scene.game-ui.abilities\", abilities)\n                                .selected(\"dash\")\n                                .on_event(|_, _, _| {}),\n                        ),\n                ),\n        )\n        .into_any_element()\n}\n\n//! Original synthetic local geography, not a depiction of any real territory.\nuse super::support::*;\nuse crate::display::geography::*;\n\nfn ring(points: &[(f64, f64)]) -> Vec<GeoPosition> {\n    points\n        .iter()\n        .map(|&(longitude, latitude)| GeoPosition {\n            longitude,\n            latitude,\n        })\n        .collect()\n}\n\nfn fixture(projection: GeoProjection) -> Rc<GeoData> {\n    let features = vec![\n        GeoFeature {\n            id: \"lagoon\".into(),\n            label: \"Lagoon region\".into(),\n            value: Some(12.0),\n            formatted_value: \"12 samples\".into(),\n            polygons: vec![GeoPolygon {\n                exterior: ring(&[\n                    (-110.0, -28.0),\n                    (-28.0, -38.0),\n                    (4.0, 2.0),\n                    (-24.0, 58.0),\n                    (-95.0, 48.0),\n                    (-110.0, -28.0),\n                ]),\n                holes: vec![ring(&[\n                    (-76.0, -3.0),\n                    (-44.0, -3.0),\n                    (-40.0, 24.0),\n                    (-71.0, 28.0),\n                    (-76.0, -3.0),\n                ])],\n            }],\n        },\n        GeoFeature {\n            id: \"ridge\".into(),\n            label: \"Ridge\".into(),\n            value: Some(31.0),\n            formatted_value: \"31 samples\".into(),\n            polygons: vec![GeoPolygon {\n                exterior: ring(&[\n                    (20.0, -45.0),\n                    (110.0, -23.0),\n                    (82.0, 42.0),\n                    (40.0, 55.0),\n                    (12.0, 8.0),\n                    (20.0, -45.0),\n                ]),\n                holes: vec![],\n            }],\n        },\n        GeoFeature {\n            id: \"unobserved\".into(),\n            label: \"Outer island\".into(),\n            value: None,\n            formatted_value: \"\".into(),\n            polygons: vec![GeoPolygon {\n                exterior: ring(&[\n                    (117.0, 32.0),\n                    (154.0, 44.0),\n                    (140.0, 65.0),\n                    (115.0, 59.0),\n                    (117.0, 32.0),\n                ]),\n                holes: vec![],\n            }],\n        },\n    ];\n    Rc::new(\n        GeoData::new(\n            projection,\n            features,\n            vec![\n                GeoPoint {\n                    id: \"station\".into(),\n                    label: \"Station A\".into(),\n                    position: GeoPosition {\n                        longitude: 50.0,\n                        latitude: 12.0,\n                    },\n                },\n                GeoPoint {\n                    id: \"lagoon-sensor\".into(),\n                    label: \"Lagoon sensor\".into(),\n                    position: GeoPosition {\n                        longitude: -58.0,\n                        latitude: 12.0,\n                    },\n                },\n            ],\n            GeoColorDomain {\n                minimum: 0.0,\n                maximum: 40.0,\n                minimum_label: \"0 samples\".into(),\n                maximum_label: \"40 samples\".into(),\n                missing_label: \"Unobserved\".into(),\n            },\n        )\n        .expect(\"original synthetic geometry is valid\"),\n    )\n}\n\n#[derive(Default)]\nstruct FixtureCamera {\n    viewport: GeoViewport,\n    selected: Option<SharedString>,\n    data: Option<Rc<GeoData>>,\n    seam: Option<Rc<GeoData>>,\n}\n\npub(super) fn geography(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<FixtureCamera>(\n        &\"scene.geography.camera\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let viewport = state.borrow().viewport;\n    let selected = state.borrow().selected.clone();\n    let data = state\n        .borrow_mut()\n        .data\n        .get_or_insert_with(|| fixture(GeoProjection::Equirectangular))\n        .clone();\n    let seam = state.borrow_mut().seam.get_or_insert_with(|| Rc::new(GeoData::from_geojson(\n        r#\"{\"type\":\"Feature\",\"id\":\"seam-island\",\"properties\":{},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[170,-20],[-170,-20],[-170,30],[170,30],[170,-20]],[[175,-5],[-175,-5],[-175,10],[175,10],[175,-5]]]}}\"#,\n        GeoProjection::WebMercator, GeoWorldPolicy::Auto,\n        GeoColorDomain { minimum:0.0, maximum:40.0,minimum_label:\"0 samples\".into(),maximum_label:\"40 samples\".into(),missing_label:\"Unobserved\".into() },\n        |_,_| Ok(GeoProperties {label:\"Synthetic seam island\".into(),value:Some(23.0),formatted_value:\"23 samples\".into()}),\n    ).expect(\"synthetic seam geometry\"))).clone();\n    let camera_target = state.clone();\n    let value_target = state.clone();\n    let geometry_target = state.clone();\n    stack(&theme).w(px(900.0))\n        .child(caption(&theme,\"Original synthetic geography · local geometry, no tiles or real territories\"))\n        .child(caption(&theme,\"Drag / touch to pan · pinch or Ctrl-wheel to zoom · F fits · arrows / +/- / Home · [ and ] select\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.geography.camera-target\").label(\"Retarget camera\").on_click(move |window,_| {\n                let mut target=camera_target.borrow_mut();\n                target.viewport=if target.viewport.zoom>1.0 {GeoViewport::default()} else {GeoViewport {center:GeoProjected{x:0.4,y:0.48},zoom:1.8}};\n                window.refresh();\n            }))\n            .child(Button::new(\"scene.geography.value-target\").label(\"Retarget observations\").on_click(move |window,_| {\n                let mut target=value_target.borrow_mut();\n                let source=target.data.as_ref().expect(\"prepared fixture\");\n                let mut features=source.features().to_vec();\n                let value=if features[0].value==Some(12.0) {34.0} else {12.0};\n                features[0].value=Some(value); features[0].formatted_value=format!(\"{value} samples\").into();\n                target.data=Some(Rc::new(GeoData::new(source.projection(),features,source.points().to_vec(),source.color_domain().clone()).expect(\"in-domain fixture observation\")));\n                window.refresh();\n            }))\n            .child(Button::new(\"scene.geography.geometry-target\").label(\"Replace geometry\").on_click(move |window,_| {\n                let mut target=geometry_target.borrow_mut();\n                let source=target.data.as_ref().expect(\"prepared fixture\");\n                if source.features().iter().any(|f| f.id.as_ref()==\"unobserved\") {\n                    let mut features=source.features().to_vec();features.retain(|f| f.id.as_ref()!=\"unobserved\");\n                    for p in features[0].polygons.iter_mut().flat_map(|p| std::iter::once(&mut p.exterior).chain(&mut p.holes)).flatten() {p.longitude+=40.0;}\n                    let mut points=source.points().to_vec(); points.push(GeoPoint{id:\"arriving\".into(),label:\"New overlapping sensor\".into(),position:GeoPosition{longitude:-55.0,latitude:12.0}});\n                    target.data=Some(Rc::new(GeoData::new(source.projection(),features,points,source.color_domain().clone()).expect(\"translated valid fixture\")));\n                } else {target.data=Some(fixture(GeoProjection::Equirectangular));}\n                window.refresh();\n            })))\n        .child(div().row().items_start().gap_token(&theme,Space::Md)\n            .child(div().w(px(500.0)).child(GeoMap::new(\"scene.geography.ready\",\"Equirectangular · controlled camera\")\n                .state(GeoState::Ready(data)).viewport(viewport).selected(selected)\n                .on_event(move |event,window,_| {\n                    match event { GeoEvent::Select(id) => state.borrow_mut().selected=id, GeoEvent::Viewport(viewport) => state.borrow_mut().viewport=viewport }\n                    window.refresh();\n                })))\n            .child(div().w(px(320.0)).child(GeoMap::new(\"scene.geography.zoomed\",\"Web Mercator · narrow, zoomed, selected\")\n                .state(GeoState::Stale { data:fixture(GeoProjection::WebMercator), reason:\"Refresh refused; verified geometry retained\".into() })\n                .viewport(GeoViewport { center:GeoProjected{x:0.38,y:0.46},zoom:2.2 }).selected(Some(\"lagoon\".into())))))\n        .child(div().row().items_start().gap_token(&theme,Space::Md)\n            .child(div().w(px(280.0)).child(GeoMap::new(\"scene.geography.loading\",\"Loading local features\")))\n            .child(div().w(px(280.0)).child(GeoMap::new(\"scene.geography.empty\",\"Valid empty collection\").state(GeoState::Empty)))\n            .child(div().w(px(280.0)).child(GeoMap::new(\"scene.geography.refused\",\"Unsupported input\").state(GeoState::Refused(GeoRefusal::AntimeridianEdge)))))\n        .child(GeoMap::new(\"scene.geography.seam\",\"Local GeoJSON · auto world cut · fitted island with a real hole\")\n            .viewport(seam.fit_viewport([850.0,280.0],16.0).expect(\"fit synthetic island\"))\n            .selected(Some(\"seam-island\".into())).state(GeoState::Ready(seam)))\n        .into_any_element()\n}\n\npub(super) fn geography_scale(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<FixtureCamera>(\n        &\"scene.geography.scale-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    if state.borrow().data.is_none() {\n        state.borrow_mut().viewport = GeoViewport {\n            center: GeoProjected { x: 0.5, y: 0.5 },\n            zoom: 8.0,\n        };\n    }\n    let data = state\n        .borrow_mut()\n        .data\n        .get_or_insert_with(|| {\n            Rc::new(\n                GeoData::new(\n                    GeoProjection::Equirectangular,\n                    vec![],\n                    (0..1000)\n                        .map(|i| GeoPoint {\n                            id: format!(\"sample-{i}\").into(),\n                            label: format!(\"Synthetic sample {i}\").into(),\n                            position: GeoPosition {\n                                longitude: -150.0 + f64::from(i % 100) * 3.0,\n                                latitude: -45.0 + f64::from(i / 100) * 10.0,\n                            },\n                        })\n                        .collect(),\n                    GeoColorDomain {\n                        minimum: 0.0,\n                        maximum: 1.0,\n                        minimum_label: \"0\".into(),\n                        maximum_label: \"1\".into(),\n                        missing_label: \"Unobserved\".into(),\n                    },\n                )\n                .expect(\"original point grid\"),\n            )\n        })\n        .clone();\n    let selected = state.borrow().selected.clone();\n    let viewport = state.borrow().viewport;\n    let dense = state.clone();\n    stack(&theme).w(px(900.0))\n        .child(caption(&theme,format!(\"{} original local point overlays · viewport culling · six-row virtual accessible readout\",data.points().len())))\n        .child(caption(&theme,\"Scroll the readout or navigate it by keyboard; offscreen rows retain source identities, not measured bounds\"))\n        .child(Button::new(\"scene.geography.scale-density\").label(\"Load 10,000 dense points\").on_click(move |window,_| {\n            let mut target=dense.borrow_mut();\n            let points=(0..10000).map(|i| GeoPoint{id:format!(\"sample-{i}\").into(),label:format!(\"Synthetic sample {i}\").into(),position:GeoPosition{longitude:-179.0+f64::from(i%1000)*0.358,latitude:-80.0+f64::from(i/1000)*1.6}}).collect();\n            let data=GeoData::new(GeoProjection::Equirectangular,vec![],points,target.data.as_ref().expect(\"prepared fixture\").color_domain().clone()).expect(\"original point grid\");\n            target.viewport=GeoViewport{center:data.projection().project(data.points()[5000].position).expect(\"prepared fixture\"),zoom:1.0};\n            target.data=Some(Rc::new(data));\n            window.refresh();\n        }))\n        .child(GeoMap::new(\"scene.geography.scale\",\"Controlled point cloud\").state(GeoState::Ready(data)).viewport(viewport).selected(selected)\n            .on_event(move |event,window,_| {match event {GeoEvent::Select(id)=>state.borrow_mut().selected=id,GeoEvent::Viewport(v)=>state.borrow_mut().viewport=v};window.refresh();}))\n        .into_any_element()\n}\n\n//! Explicit continuous color encodings, kept separate from contribution levels.\nuse super::support::*;\nuse crate::display::heatmap::{ContinuousHeatCell, ContinuousHeatmap, HeatColorScale};\n\n#[derive(Default)]\nstruct MatrixRevisions {\n    revision: usize,\n    direct: bool,\n    selected: Option<SharedString>,\n}\n\npub(super) fn heatmap_reordering(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<MatrixRevisions>(\n        &\"scene.heat.reorder-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision % 3;\n    let rows = match revision {\n        0 => vec![\"east\", \"west\"],\n        1 => vec![\"west\", \"north\", \"east\"],\n        _ => vec![\"east\"],\n    };\n    let columns = match revision {\n        0 => vec![\"a\", \"b\", \"c\"],\n        1 => vec![\"c\", \"a\", \"d\", \"b\"],\n        _ => vec![\"a\", \"b\"],\n    };\n    let cells = rows\n        .iter()\n        .flat_map(|row| {\n            columns.iter().map(move |column| {\n                let reading = match (*row, *column) {\n                    (\"east\", \"a\") => Some(3.0),\n                    (\"east\", \"b\") => Some(12.0),\n                    (\"west\", \"a\") => Some(42.0),\n                    (\"west\", \"c\") => Some(81.0),\n                    (\"north\", \"b\") => Some(65.0),\n                    _ => None,\n                };\n                ContinuousHeatCell::new(\n                    format!(\"{row}-{column}\"),\n                    *row,\n                    *column,\n                    format!(\"{row} / {column}\"),\n                    reading,\n                )\n            })\n        })\n        .collect();\n    let next = state.clone();\n    let direct = state.clone();\n    let selection = state.clone();\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"Synthetic keyed axes · reorder, enter, exit and reinsert · raw readings never tween\",\n        ))\n        .child(\n            div()\n                .row()\n                .gap_token(&theme, Space::Sm)\n                .child(\n                    Button::new(\"scene.heat.reorder.advance\")\n                        .label(\"Advance axes\")\n                        .on_click(move |window, _| {\n                            next.borrow_mut().revision += 1;\n                            window.refresh();\n                        }),\n                )\n                .child(\n                    Button::new(\"scene.heat.reorder.direct\")\n                        .label(if state.borrow().direct {\n                            \"Enable animation\"\n                        } else {\n                            \"Direct updates\"\n                        })\n                        .on_click(move |window, _| {\n                            let mut s = direct.borrow_mut();\n                            s.direct = !s.direct;\n                            window.refresh();\n                        }),\n                ),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.heat.reorder\",\n                \"Stable caller coordinates\",\n                HeatColorScale::sequential([0.0, 100.0], theme.colors.canvas, theme.colors.accent)\n                    .expect(\"domain\"),\n                PlotState::Ready(cells),\n            )\n            .rows(rows)\n            .columns(columns)\n            .animate(!state.borrow().direct)\n            .on_current(move |id, window, _| {\n                selection.borrow_mut().selected = Some(id);\n                window.refresh();\n            })\n            .when_some(state.borrow().selected.clone(), |chart, id| {\n                chart.current(id)\n            }),\n        )\n        .into_any_element()\n}\n\npub(super) fn continuous_heatmap_transition(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let revision = crate::motion::keyed::slot::<usize>(\n        &\"scene.heat.transition-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let value = match *revision.borrow() % 3 {\n        0 => Some(-8.0),\n        1 => Some(32.0),\n        _ => None,\n    };\n    let next = revision.clone();\n    stack(&theme)\n        .w(px(440.0))\n        .child(caption(\n            &theme,\n            \"Synthetic observations · exact latest text with animated color; missing is never zero\",\n        ))\n        .child(\n            Button::new(\"scene.heat.advance\")\n                .label(\"Advance reading\")\n                .on_click(move |window, _| {\n                    *next.borrow_mut() += 1;\n                    window.refresh();\n                }),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.heat.live\",\n                \"Controlled measurement\",\n                HeatColorScale::diverging(\n                    [-8.0, 2.0, 32.0],\n                    theme.colors.accent,\n                    theme.colors.canvas,\n                    theme.colors.danger,\n                )\n                .expect(\"domain\"),\n                PlotState::Ready(vec![\n                    ContinuousHeatCell::new(\"changing\", \"row\", \"a\", \"Changing reading\", value),\n                    ContinuousHeatCell::new(\"zero\", \"row\", \"b\", \"Verified zero\", Some(0.0)),\n                ]),\n            )\n            .rows([\"row\"])\n            .columns([\"a\", \"b\"])\n            .motion(true),\n        )\n        .into_any_element()\n}\n\npub(super) fn continuous_heatmap(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let diverging = HeatColorScale::diverging(\n        [-8.0, 2.0, 32.0],\n        theme.colors.accent,\n        theme.colors.canvas,\n        theme.colors.danger,\n    )\n    .expect(\"explicit domain\");\n    let sequential =\n        HeatColorScale::sequential([0.0, 100.0], theme.colors.canvas, theme.colors.success)\n            .expect(\"explicit domain\");\n    let cells = [\n        (\"east\", \"a\", Some(-8.0)),\n        (\"east\", \"b\", Some(0.0)),\n        (\"east\", \"c\", Some(2.0)),\n        (\"west\", \"a\", Some(17.0)),\n        (\"west\", \"b\", Some(32.0)),\n        (\"west\", \"c\", None),\n    ]\n    .into_iter()\n    .map(|(row, column, reading)| {\n        ContinuousHeatCell::new(\n            format!(\"{row}-{column}\"),\n            row,\n            column,\n            format!(\"Synthetic observation {row} / {column}\"),\n            reading,\n        )\n    })\n    .collect::<Vec<_>>();\n    stack(&theme)\n        .w(px(800.0))\n        .child(caption(\n            &theme,\n            \"Synthetic measurements · explicit neutral = 2 · no observation is not zero\",\n        ))\n        .child(\n            div().w(px(720.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.wide\",\n                    \"Diverging measurements\",\n                    diverging,\n                    PlotState::Ready(cells.clone()),\n                )\n                .rows([\"east\", \"west\"])\n                .columns([\"a\", \"b\", \"c\"])\n                .current(\"east-c\")\n                .on_current(|_, _, _| {}),\n            ),\n        )\n        .child(\n            div().w(px(240.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.narrow\",\n                    \"Narrow · last verified values\",\n                    diverging,\n                    PlotState::Stale {\n                        data: cells,\n                        reason: \"Refresh refused\".into(),\n                    },\n                )\n                .rows([\"east\", \"west\"])\n                .columns([\"a\", \"b\", \"c\"]),\n            ),\n        )\n        .child(\n            div().w(px(400.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.sequential\",\n                    \"Sequential · domain 0–100\",\n                    sequential,\n                    PlotState::Ready(vec![\n                        ContinuousHeatCell::new(\"zero\", \"r\", \"a\", \"Measured zero\", Some(0.0)),\n                        ContinuousHeatCell::new(\"middle\", \"r\", \"b\", \"Middle\", Some(50.0)),\n                        ContinuousHeatCell::new(\"high\", \"r\", \"c\", \"High\", Some(100.0)),\n                    ]),\n                )\n                .rows([\"r\"])\n                .columns([\"a\", \"b\", \"c\"]),\n            ),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.continuous.invalid\",\n                \"Invalid readings are errors\",\n                sequential,\n                PlotState::Ready(vec![ContinuousHeatCell::new(\n                    \"outside\",\n                    \"r\",\n                    \"c\",\n                    \"Outside domain\",\n                    Some(101.0),\n                )]),\n            )\n            .rows([\"r\"])\n            .columns([\"c\"]),\n        )\n        .into_any_element()\n}\n\n//! Mobile list interactions, with caller-owned async state and retained rows.\n\nuse super::support::*;\nuse crate::interaction::{\n    refresh::{PullToRefresh, RefreshState},\n    swipe::{SwipeActions, SwipeSide},\n};\nuse crate::overlay::sheet::{SheetAction, SheetActionState};\n\nstruct SceneRefresh(Vec<Entity<PullToRefresh>>);\nimpl Global for SceneRefresh {}\n\npub(super) fn pull_to_refresh(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneRefresh>() {\n        let states = [\n            (\"ready\", RefreshState::Ready),\n            (\n                \"pending\",\n                RefreshState::Pending(\"Waiting for caller\".into()),\n            ),\n            (\n                \"loading\",\n                RefreshState::Loading(\"Refreshing fixture\".into()),\n            ),\n            (\n                \"error\",\n                RefreshState::Error(\"Refresh failed · retained rows\".into()),\n            ),\n        ];\n        let mut views = Vec::new();\n        for (id, state) in states {\n            let scroll = gpui::ScrollHandle::new();\n            let view = cx.new(|_| {\n                PullToRefresh::new(\n                    format!(\"scene.refresh.{id}\"),\n                    scroll.clone(),\n                    \"Refresh\",\n                    \"Release to refresh\",\n                )\n            });\n            view.update(cx, |refresh, cx| {\n                refresh.set_state(state, cx);\n                refresh.set_content(\n                    Some(Rc::new(move |_, cx| {\n                        let theme = cx.theme().clone();\n                        div()\n                            .id(SharedString::from(format!(\"scene.refresh.{id}.scroll\")))\n                            .column()\n                            .size_full()\n                            .overflow_y_scroll()\n                            .track_scroll(&scroll)\n                            .children(\n                                [\n                                    (\"notes\", \"Notes · verified fixture\"),\n                                    (\"draft\", \"Draft · verified fixture\"),\n                                    (\"archive\", \"Archive · verified fixture\"),\n                                    (\"saved\", \"Saved · verified fixture\"),\n                                ]\n                                .into_iter()\n                                .map(|(key, label)| {\n                                    div()\n                                        .h(px(64.0))\n                                        .flex_none()\n                                        .p_token(&theme, Space::Sm)\n                                        .child(crate::foundation::text(\n                                            &theme,\n                                            TypeScale::Body,\n                                            label,\n                                        ))\n                                        .semantic_in(\n                                            cx,\n                                            NodeSpec::new(\n                                                format!(\"scene.refresh.{id}.{key}\"),\n                                                Role::Group,\n                                            )\n                                            .text(label),\n                                        )\n                                }),\n                            )\n                            .into_any_element()\n                    })),\n                    cx,\n                );\n            });\n            views.push(view);\n        }\n        cx.set_global(SceneRefresh(views));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .child(caption(\n            &theme,\n            \"Fixture states · refreshing never replaces the verified rows\",\n        ))\n        .child(\n            row(&theme).items_start().children(\n                cx.global::<SceneRefresh>()\n                    .0\n                    .iter()\n                    .map(|view| div().w(px(250.0)).h(px(370.0)).child(view.clone())),\n            ),\n        )\n        .into_any_element()\n}\n\nstruct SceneSwipe(Vec<Entity<SwipeActions>>);\nimpl Global for SceneSwipe {}\n\npub(super) fn swipe_actions(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSwipe>() {\n        let mut views = Vec::new();\n        for (id, side, state) in [\n            (\"closed\", None, SheetActionState::Ready),\n            (\"left\", Some(SwipeSide::Left), SheetActionState::Ready),\n            (\n                \"right\",\n                Some(SwipeSide::Right),\n                SheetActionState::Error(\"Deletion failed; row retained\".into()),\n            ),\n            (\n                \"pending\",\n                Some(SwipeSide::Right),\n                SheetActionState::Pending(\"Waiting for caller\".into()),\n            ),\n        ] {\n            let view = cx.new(|_| SwipeActions::new(format!(\"scene.swipe.{id}\"), \"Actions\"));\n            view.update(cx, |swipe, cx| {\n                let mut remove = SheetAction::new(\"remove\", \"Delete\");\n                remove.destructive = true;\n                swipe.set_actions(SwipeSide::Left, vec![SheetAction::new(\"pin\", \"Pin\")], cx);\n                swipe.set_actions(SwipeSide::Right, vec![remove], cx);\n                swipe.set_content(\n                    Some(Rc::new(move |_, cx| {\n                        let theme = cx.theme().clone();\n                        div()\n                            .h(px(64.0))\n                            .column()\n                            .justify_center()\n                            .child(crate::foundation::text(\n                                &theme,\n                                TypeScale::Label,\n                                \"Project notes · fixture\",\n                            ))\n                            .child(crate::foundation::text(\n                                &theme,\n                                TypeScale::Body,\n                                \"Last verified content remains visible\",\n                            ))\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(format!(\"scene.swipe.{id}.content\"), Role::Group)\n                                    .text(\"Project notes · fixture\"),\n                            )\n                            .into_any_element()\n                    })),\n                    cx,\n                );\n                swipe.reveal(side, cx);\n                swipe.set_state(state, cx);\n            });\n            views.push(view);\n        }\n        cx.set_global(SceneSwipe(views));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(580.0))\n        .child(caption(\n            &theme,\n            \"Reveal is not activation · physical left and right trays\",\n        ))\n        .children(cx.global::<SceneSwipe>().0.iter().cloned())\n        .into_any_element()\n}\n\n//! Frames that decide where their contents go.\n\nuse super::support::*;\n\npub(super) fn mobile_page(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{AppBar, PageLayout};\n    let theme = cx.theme().clone();\n    let page = |name: &'static str, keyboard: bool, safe: bool| {\n        let id = format!(\"scene.mobile-page.{name}\");\n        let mut insets = gpui::WindowInsets::default();\n        if safe {\n            insets.safe_area.top = px(24.0);\n            insets.safe_area.bottom = px(20.0);\n            insets.safe_area.left = px(7.0);\n            insets.safe_area.right = px(11.0);\n        }\n        if keyboard {\n            insets.ime.bottom = px(140.0);\n        }\n        div()\n            .w(px(290.0))\n            .h(px(430.0))\n            .border_1()\n            .border_color(theme.colors.control_hairline)\n            .surface(&theme, Surface::Panel)\n            .child(\n                PageLayout::new(\n                    id.clone(),\n                    ScrollArea::new(format!(\"{id}.scroll\")).child(filler(\n                        &theme,\n                        \"Fixture page content\",\n                        12,\n                    )),\n                )\n                .insets(insets)\n                .hide_footer(keyboard)\n                .header(\n                    AppBar::new(format!(\"{id}.bar\"), name).leading(\n                        Button::new(format!(\"{id}.back\"))\n                            .label(\"Back\")\n                            .ghost()\n                            .control_size(ControlSize::Touch)\n                            .disabled(!safe)\n                            .on_click(|_, _| {}),\n                    ),\n                )\n                .footer(div().p(px(theme.space(Space::Sm))).child(\"Caller footer\")),\n            )\n    };\n    stack(&theme)\n        .child(caption(&theme, \"Fixture residual insets: desktop zero · safe area · overlapping IME with footer unmounted\"))\n        .child(row(&theme).items_start().child(page(\"Desktop\", false, false))\n            .child(page(\"Safe area\", false, true)).child(page(\"Keyboard\", true, true)))\n        .into_any_element()\n}\n\npub(super) fn scroll_edge_effect(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"Fixture transcript: content scrolls beneath a Regular glass toolbar\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(240.0))\n                .overflow_hidden()\n                .child(\n                    crate::layout::ScrollEdgeEffect::new(\"scene.scroll-edge.soft\")\n                        .top(true)\n                        .soft()\n                        .band(64.0)\n                        .child(filler(&theme, \"Earlier messages beneath the toolbar\", 10)),\n                )\n                .child(\n                    div().absolute().top(px(8.0)).left(px(16.0)).child(\n                        Glass::new(\"scene.scroll-edge.toolbar\")\n                            .radius(Radius::Pill)\n                            .child(\n                                div()\n                                    .px(px(20.0))\n                                    .py(px(10.0))\n                                    .child(\"Transcript · fixture\"),\n                            ),\n                    ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Reduced transparency: opaque scroll-edge backing\",\n        ))\n        .child(\n            div().h(px(160.0)).overflow_hidden().child(\n                crate::layout::ScrollEdgeEffect::new(\"scene.scroll-edge.hard\")\n                    .top(true)\n                    .hard()\n                    .band(64.0)\n                    .child(filler(&theme, \"The same transcript\", 7)),\n            ),\n        )\n        .into_any_element()\n}\n\npub(super) fn grid(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let item = |id: &'static str, label: &'static str| {\n        GridItem::new(\n            id,\n            Card::new()\n                .id(format!(\"scene.grid.card.{id}\"))\n                .padding(Space::Md)\n                .child(crate::foundation::text(&theme, TypeScale::Label, label))\n                .child(caption(&theme, \"Caller-owned content\")),\n        )\n        .span_at(Breakpoint::Large, if id == \"summary\" { 2 } else { 1 })\n    };\n    stack(&theme)\n        .w(px(840.0))\n        .child(caption(\n            &theme,\n            \"Columns and spans resolve from the grid's measured width while semantic order stays source order\",\n        ))\n        .child(\n            Grid::new(\"scene.grid\")\n                .columns(1)\n                .columns_at(Breakpoint::Medium, 2)\n                .columns_at(Breakpoint::Large, 3)\n                .gap(Space::Sm)\n                .items([\n                    item(\"summary\", \"Summary\"),\n                    item(\"settings\", \"Settings\"),\n                    item(\"history\", \"History\"),\n                    item(\"policy\", \"Policy\"),\n                ]),\n        )\n        .into_any_element()\n}\n\npub(super) fn container(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"Page width and gutters come from the installed theme, not component-local pixels\",\n        ))\n        .child(\n            Container::new(\"scene.container.readable\")\n                .width(ContainerWidth::Readable)\n                .child(\n                    Card::new()\n                        .id(\"scene.container.readable.card\")\n                        .padding(Space::Md)\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Readable content\",\n                        )),\n                ),\n        )\n        .child(\n            Container::new(\"scene.container.dialog\")\n                .width(ContainerWidth::Dialog)\n                .child(\n                    Card::new()\n                        .id(\"scene.container.dialog.card\")\n                        .padding(Space::Md)\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Dialog-width content\",\n                        )),\n                ),\n        )\n        .into_any_element()\n}\n\n/// A pane with a heading and something under it worth resizing.\n///\n/// Two panes of the same fixture copy demonstrate a divider and nothing else:\n/// what a reader has to be able to judge is that the two sides hold different\n/// things and that dragging trades room between them, so each side is given\n/// its own kind of content and its own heading.\nfn pane(theme: &Theme, title: &'static str, rows: &'static [&'static str]) -> gpui::Div {\n    div()\n        .column()\n        .size_full()\n        .min_w_0()\n        .overflow_hidden()\n        .child(\n            div()\n                .row()\n                .items_center()\n                .px(px(theme.space(Space::Md)))\n                .py(px(theme.space(Space::Sm)))\n                .child(\n                    crate::foundation::text(theme, TypeScale::Label, title)\n                        .text_tone(theme, TextTone::Muted),\n                ),\n        )\n        .child(\n            div()\n                .column()\n                .gap(px(theme.space(Space::Xs)))\n                .px(px(theme.space(Space::Md)))\n                .py(px(theme.space(Space::Sm)))\n                .children(\n                    rows.iter()\n                        .map(|row| crate::foundation::text(theme, TypeScale::Body, *row)),\n                ),\n        )\n}\n\npub(super) 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                .surface(&theme, Surface::Panel)\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(pane(\n                            &theme,\n                            \"Files\",\n                            &[\n                                \"src/\",\n                                \"  main.rs\",\n                                \"  theme.rs\",\n                                \"  layout/\",\n                                \"    split.rs\",\n                                \"    scroll.rs\",\n                                \"Cargo.toml\",\n                            ],\n                        ))\n                        .end(pane(\n                            &theme,\n                            \"split.rs\",\n                            &[\n                                \"pub struct SplitPane {\",\n                                \"    ratio: f32,\",\n                                \"    min_start: f32,\",\n                                \"    min_end: f32,\",\n                                \"}\",\n                                \"\",\n                                \"// The divider reports the ratio a drag\",\n                                \"// asked for; the caller decides it.\",\n                            ],\n                        ))\n                        .on_resize(|_, _, _| {})\n                        .on_collapse(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}\n\n/// The same region, already scrolled, so the shadow that says there is content\n/// above the fold is in a captured image rather than only in a test.\npub(super) fn scroll_shadow(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    crate::layout::scroll_to(\n        \"scene.scroll.scrolled\",\n        gpui::point(px(0.0), px(120.0)),\n        window,\n        cx,\n    );\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(\n            &theme,\n            \"Scrolled to the middle: content is hidden past both ends, so both \\\n             fade\",\n        ))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\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}\n\npub(super) 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(caption(\n            &theme,\n            \"Overflowing: a scrollbar, and the edges fade\",\n        ))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\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 and\n        // no edge fades. The area is as tall as what it holds rather than a\n        // height guessed at and hoped to be enough: a box a few pixels short\n        // of its content draws the scrollbar and the fade of the card above\n        // while claiming to be the card that does neither.\n        .child(caption(&theme, \"Fits: no scrollbar, no fade\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollArea::new(\"scene.scroll.summary\")\n                        .label(\"Summary\")\n                        .vertical()\n                        .fit_height()\n                        .child(filler(&theme, \"Summary\", 4)),\n                ),\n        )\n        .into_any_element()\n}\n\n/// A region scrolled off both ends, so the fade that says there is more in\n/// either direction is in a captured image, beside one that hides nothing and\n/// therefore fades at neither edge.\npub(super) fn scroll_fade(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    crate::layout::scroll_to(\n        \"scene.fade.output\",\n        gpui::point(px(0.0), px(120.0)),\n        window,\n        cx,\n    );\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(&theme, \"Scrolled: content runs past both ends\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollFade::new(\"scene.fade.scrolled\")\n                        .edges(FadeEdges::vertical())\n                        .fit_height()\n                        .child(\n                            ScrollArea::new(\"scene.fade.output\")\n                                .label(\"Run output\")\n                                .vertical()\n                                .height(200.0)\n                                .child(filler(&theme, \"Output\", 20)),\n                        ),\n                ),\n        )\n        // Nothing is hidden here, so no edge fades and the caller says so.\n        .child(caption(&theme, \"Nothing hidden: no edge fades\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollFade::new(\"scene.fade.settled\").fit_height().child(\n                        ScrollArea::new(\"scene.fade.summary\")\n                            .label(\"Summary\")\n                            .vertical()\n                            .height(200.0)\n                            .child(filler(&theme, \"Summary\", 7)),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// A complete client titlebar: product content remains clickable inside the\n/// drag strip, and platform controls keep their native hit-test identities.\npub(super) fn desktop_titlebar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    DesktopTitlebar::new(\"scene.desktop-titlebar\", \"Workspace\")\n                        .subtitle(\"main.rs\")\n                        .left(\n                            Button::new(\"scene.desktop-titlebar.workspace\")\n                                .label(\"Workspace menu\")\n                                .ghost()\n                                .small()\n                                .on_click(|_, _| {}),\n                        )\n                        .right(\n                            Badge::new(\"Connected\")\n                                .success()\n                                .id(\"scene.desktop-titlebar.status\"),\n                        )\n                        .on_event(|_, _, _| {}),\n                )\n                .child(div().h(px(112.0)).p_token(&theme, Space::Lg).child(caption(\n                    &theme,\n                    \"Host content is client input; maximize remains native Snap chrome.\",\n                ))),\n        )\n        .into_any_element()\n}\n\n/// The overflow menu of the toolbar scene, kept across frames.\npub(super) struct SceneToolbar {\n    overflow: Entity<Menu>,\n}\n\nimpl Global for SceneToolbar {}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The last two actions moved into the overflow menu.\",\n        ))\n        .into_any_element()\n}\n\n/// A layout nested three deep, with one leaf collapsed to its rail. The tree\n/// is the caller's: every divider reports the ratio it was asked for and moves\n/// nothing here.\npub(super) 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                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    SplitTree::new(\"scene.tree.workspace\")\n                        .layout(layout)\n                        // Each pane holds enough to reach the bottom of the\n                        // room the tree gave it: a pane drawn half empty says\n                        // the divider above it is in the wrong place, which is\n                        // the one thing this scene is not about.\n                        .pane(\"files\", filler(&theme, \"Files\", 13))\n                        .pane(\"editor\", filler(&theme, \"main.rs\", 7))\n                        .pane(\"terminal\", filler(&theme, \"Terminal\", 4))\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}\n\n/// A recursive dock topology: tab stacks are leaves of the same split tree,\n/// an empty stack remains available, and a collapsed nested stack keeps its\n/// rail instead of flattening the caller's arrangement.\npub(super) fn dock_tree(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let topology = DockTopology::vertical(\n        \"root\",\n        0.78,\n        DockTopology::horizontal(\n            \"workspace\",\n            0.28,\n            DockTopology::Stack(DockStack::new(\"source\", [\"files\", \"search\"]).active(\"files\")),\n            DockTopology::horizontal(\n                \"editing\",\n                0.9,\n                DockTopology::stack(\"editor\", [\"main\"]),\n                DockTopology::Stack(DockStack::new(\"outline\", [\"symbols\"]).collapsed(true)),\n            ),\n        ),\n        DockTopology::stack(\"terminal\", std::iter::empty::<&str>()),\n    );\n\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"recursive caller topology; tab groups, empty destinations, rails, and split dividers share existing primitives\",\n        ))\n        .child(\n            div()\n                .h(px(600.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    DockTree::new(\"scene.dock-tree\", topology)\n                        .panels([\n                            DockPanel::new(\"files\", \"Files\")\n                                .icon(Icon::Folder)\n                                .content(filler(&theme, \"Workspace\", 12)),\n                            DockPanel::new(\"search\", \"Search\")\n                                .icon(Icon::Magnifier)\n                                .badge(\"12\"),\n                            DockPanel::new(\"main\", \"main.rs\")\n                                .icon(Icon::Document)\n                                .content(filler(&theme, \"fn main()\", 15)),\n                            DockPanel::new(\"symbols\", \"Outline\").icon(Icon::List),\n                        ])\n                        .on_event(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}\n\n#[derive(Default)]\nstruct SceneFloatingDock {\n    bounds: Option<gpui::Bounds<f32>>,\n    saved: Option<gpui::Bounds<f32>>,\n}\nimpl Global for SceneFloatingDock {}\n\npub(super) fn dock_floating(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{DockTreeEvent, FloatingDock};\n    if !cx.has_global::<SceneFloatingDock>() {\n        cx.set_global(SceneFloatingDock::default());\n    }\n    let theme = cx.theme().clone();\n    let bounds = cx\n        .global::<SceneFloatingDock>()\n        .bounds\n        .unwrap_or(gpui::Bounds::new(\n            gpui::point(0.36, 0.18),\n            gpui::size(0.48, 0.58),\n        ));\n    stack(&theme).w(px(850.0))\n        .child(caption(&theme, \"Fixture: drag the floating header or resize corner; arrow keys adjust either. Restore uses caller-saved completed gestures.\"))\n        .child(Button::new(\"scene.dock-floating.restore\").label(\"Restore saved layout\").on_click(|_, cx| {\n            let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = state.saved; cx.refresh_windows();\n        }))\n        .child(div().h(px(500.0)).child(\n            DockTree::new(\"scene.dock-floating\", DockTopology::stack(\"workspace\", [\"main\"]))\n                .floating([FloatingDock::new(DockStack::new(\"inspector\", [\"details\"]), bounds).expect(\"valid fixture\")]).expect(\"unique fixture identities\")\n                .panels([\n                    DockPanel::new(\"main\", \"Workspace\").content(filler(&theme, \"Caller-owned background\", 15)),\n                    DockPanel::new(\"details\", \"Details\").content(filler(&theme, \"Floating inspector\", 7)),\n                ])\n                .on_event(|event, _, cx| {\n                    match event {\n                        DockTreeEvent::FloatingChanged { bounds, finished, .. } => {\n                            let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = Some(bounds); if finished { state.saved = Some(bounds); }\n                        }\n                        DockTreeEvent::FloatingCancelled { .. } => { let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = state.saved; }\n                        _ => {}\n                    }\n                    cx.refresh_windows();\n                })\n        )).into_any_element()\n}\n\n/// A whole application frame: panels in regions, one region collapsed to a\n/// rail, one panel the host refuses, and a status bar under all of it.\npub(super) 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(940.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                    // The bottom region holds one refused panel, and a refusal\n                    // is a sentence rather than a document: given a third of\n                    // the frame it reads as a region that lost its content\n                    // instead of as a panel the host would not open.\n                    .share(DockRegion::Bottom, 0.17)\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                        // No badge: a panel that cannot list problems cannot\n                        // count them either, and one unavailable reason is the\n                        // whole claim. Gluing \"there is nothing here\" onto it\n                        // would report Empty and Unavailable at once.\n                        DockPanel::new(\"problems\", \"Problems\")\n                            .icon(Icon::Danger)\n                            .unavailable(\n                                \"The language server is not running, so problems cannot be listed.\",\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}\n\npub(super) fn aspect_ratio(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // The ratio is the subject, so the block it drives is drawn the way every\n    // other bounded region in the library is: a surface step, the card radius,\n    // and its label inside it.\n    let filled = |label: &'static str| {\n        div()\n            .size_full()\n            .flex()\n            .items_center()\n            .justify_center()\n            .surface(&theme, Surface::Sunken)\n            .radius(&theme, Radius::Card)\n            .overflow_hidden()\n            .child(\n                crate::foundation::text(&theme, TypeScale::Label, label)\n                    .text_tone(&theme, TextTone::Muted),\n            )\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}\n\n/// A container that arranges itself from its own measured width.\n///\n/// Both arrangements are shown at once, because the point of the component is\n/// that the caller decides them and neither is a fallback for the other. The\n/// unmeasured first frame is a state a still image cannot hold, so it is named\n/// rather than drawn.\npub(super) fn responsive(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let arrangement = move |id: &'static str| {\n        let theme = theme.clone();\n        move |size: ContainerSize, _: &mut Window, cx: &mut App| {\n            let wide = size.width().is_some_and(|measured| measured >= 480.0);\n            // The unmeasured frame is a real state and it is named rather than\n            // guessed, which is the whole argument the component makes.\n            let heading = match size.width() {\n                None => \"Not laid out yet, so neither arrangement is chosen\".to_string(),\n                Some(measured) if wide => format!(\"{measured:.0}px wide, so two columns\"),\n                Some(measured) => format!(\"{measured:.0}px wide, so one column\"),\n            };\n            // A card rather than a tinted rectangle, and with enough in it to\n            // be a column: two panels holding one word each say nothing about\n            // an arrangement, which is what the component is for.\n            let block = |label: &'static str, lines: &'static [&'static str], cx: &mut App| {\n                div()\n                    .flex_1()\n                    .min_w_0()\n                    .column()\n                    .gap_token(&theme, Space::Xs)\n                    .p_token(&theme, Space::Md)\n                    .card_surface(&theme, CardVariant::Elevated)\n                    .child(crate::foundation::text(&theme, TypeScale::Label, label))\n                    .children(lines.iter().map(|line| {\n                        crate::foundation::text(&theme, TypeScale::Caption, *line)\n                            .text_tone(&theme, TextTone::Muted)\n                    }))\n                    .semantic_in(\n                        cx,\n                        NodeSpec::new(format!(\"{id}.{}\", label.to_lowercase()), Role::Group)\n                            .text(label),\n                    )\n            };\n            let panes = div()\n                .gap_token(&theme, Space::Sm)\n                .child(block(\n                    \"Settings\",\n                    &[\"Theme\", \"Density\", \"Reading direction\"],\n                    cx,\n                ))\n                .child(block(\n                    \"Detail\",\n                    &[\"Studio Dark\", \"Comfortable\", \"Left to right\"],\n                    cx,\n                ));\n            div()\n                .column()\n                .gap_token(&theme, Space::Sm)\n                .child(\n                    crate::foundation::text(&theme, TypeScale::Caption, heading.clone())\n                        .text_tone(&theme, TextTone::Faint),\n                )\n                .child(if wide { panes.row() } else { panes.column() })\n                .semantic_in(cx, NodeSpec::new(id, Role::Group).value(heading))\n                .into_any_element()\n        }\n    };\n\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Wide enough for two columns\"))\n        .child(div().w(px(620.0)).child(Responsive::new(\n            \"scene.responsive.wide\",\n            arrangement(\"scene.responsive.wide.body\"),\n        )))\n        .child(caption(&theme, \"The same content, narrow\"))\n        .child(div().w(px(320.0)).child(Responsive::new(\n            \"scene.responsive.narrow\",\n            arrangement(\"scene.responsive.narrow.body\"),\n        )))\n        .into_any_element()\n}\n\n//! Time-based and dimensional media.\n\nuse super::support::*;\n\n/// The cube the model scenes read: a glTF document with its own buffer\n/// inside it, so the reader is exercised on the path a host would take and\n/// nothing is fetched to draw a scene.\npub(super) const CUBE: &[u8] = include_bytes!(\"../../assets/models/cube.gltf\");\n\n/// A measured envelope, in the shape a host that read the samples would hand\n/// over. It is written down rather than sampled, because a scene that drew a\n/// different waveform every run could not be a visual baseline.\npub(super) fn scene_peaks(count: usize) -> Vec<f32> {\n    (0..count)\n        .map(|index| {\n            let phase = index as f32 / count as f32;\n            let swell = (phase * 11.0).sin() * 0.32 + (phase * 3.0).cos() * 0.28;\n            (0.42 + swell).clamp(0.05, 1.0)\n        })\n        .collect()\n}\n\npub(super) fn audio_player(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(392.0))\n        .child(\n            AudioPlayer::new(\"scene.audio.ready\")\n                .control_size(gpui_kit_theme::ControlSize::Touch)\n                .title(\"Release walkthrough\")\n                .subtitle(\"Recorded 12 March\")\n                .transport(\n                    FixtureTransport::ready(240.0)\n                        .position(72.0)\n                        .state(TransportState::Playing)\n                        .volume(0.7)\n                        .buffered([BufferedRange::new(0.0, 156.0)])\n                        .shared(),\n                )\n                .elapsed(\"01:12\")\n                .remaining(\"-02:48\")\n                .peaks(scene_peaks(96))\n                .speeds([1.0, 1.5, 2.0])\n                .step_seconds(10.0)\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.audio.rule.backend\")\n                .label(\"Nothing here can decode it\"),\n        )\n        .child(\n            AudioPlayer::new(\"scene.audio.absent\")\n                .title(\"interview.opus\")\n                .transport(\n                    FixtureTransport::new()\n                        .no_backend(\"There is no Opus decoder on this machine.\")\n                        .shared(),\n                )\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.audio.rule.none\")\n                .label(\"No player connected at all\"),\n        )\n        .child(\n            AudioPlayer::new(\"scene.audio.none\")\n                .title(\"Standup recording\")\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\nfn walkthrough_frame(cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let metric = |label: &'static str, value: &'static str| {\n        div()\n            .flex_1()\n            .min_w_0()\n            .column()\n            .gap_token(&theme, Space::Xs)\n            .p_token(&theme, Space::Sm)\n            .radius(&theme, Radius::Small)\n            .bg(theme.colors.raised)\n            .child(\n                crate::foundation::text(&theme, TypeScale::Caption, label)\n                    .text_tone(&theme, TextTone::Muted),\n            )\n            .child(crate::foundation::text(&theme, TypeScale::Subtitle, value))\n    };\n    div()\n        .size_full()\n        .column()\n        .bg(theme.colors.panel)\n        .child(\n            div()\n                .row()\n                .items_center()\n                .gap_token(&theme, Space::Sm)\n                .px_token(&theme, Space::Md)\n                .py_token(&theme, Space::Sm)\n                .surface(&theme, Surface::Raised)\n                .child(div().size(px(7.0)).rounded_full().bg(theme.colors.success))\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Release command center\",\n                )),\n        )\n        .child(\n            div()\n                .flex_1()\n                .min_h_0()\n                .row()\n                .child(\n                    div()\n                        .w(px(76.0))\n                        .h_full()\n                        .flex_none()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .p_token(&theme, Space::Sm)\n                        .bg(theme.colors.sunken)\n                        .children([16.0, 34.0, 26.0, 42.0].map(|width| {\n                            div()\n                                .w(px(width))\n                                .h(px(theme.borders.thick))\n                                .rounded_full()\n                                .bg(theme.colors.hairline_strong)\n                        })),\n                )\n                .child(\n                    div()\n                        .flex_1()\n                        .min_w_0()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .p_token(&theme, Space::Md)\n                        .child(\n                            div()\n                                .row()\n                                .gap_token(&theme, Space::Sm)\n                                .child(metric(\"Checks\", \"48 / 52\"))\n                                .child(metric(\"Coverage\", \"92%\"))\n                                .child(metric(\"Elapsed\", \"04:18\")),\n                        )\n                        .child(\n                            div()\n                                .column()\n                                .gap_token(&theme, Space::Xs)\n                                .p_token(&theme, Space::Sm)\n                                .radius(&theme, Radius::Small)\n                                .surface(&theme, Surface::Raised)\n                                .child(crate::foundation::text(\n                                    &theme,\n                                    TypeScale::Caption,\n                                    \"Verification progress\",\n                                ))\n                                .child(\n                                    div()\n                                        .h(px(6.0))\n                                        .w_full()\n                                        .rounded_full()\n                                        .overflow_hidden()\n                                        .bg(theme.colors.track)\n                                        .child(\n                                            div()\n                                                .h_full()\n                                                .w(px(218.0))\n                                                .rounded_full()\n                                                .bg(theme.colors.accent),\n                                        ),\n                                ),\n                        ),\n                ),\n        )\n        .into_any_element()\n}\n\nfn walkthrough_poster(cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .size_full()\n        .flex()\n        .flex_col()\n        .items_center()\n        .justify_center()\n        .gap_token(&theme, Space::Sm)\n        .bg(theme.colors.sunken)\n        .child(\n            div()\n                .size(px(46.0))\n                .flex()\n                .items_center()\n                .justify_center()\n                .rounded_full()\n                .frame(&theme, Surface::Raised, Elevation::Raised)\n                .child(\n                    gpui_kit_assets::icon(Icon::Play)\n                        .size(px(theme.control.md.icon_size))\n                        .text_color(theme.colors.accent_strong),\n                ),\n        )\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Release walkthrough\",\n        ))\n        .child(\n            crate::foundation::text(&theme, TypeScale::Caption, \"4 minutes · 8 chapters\")\n                .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}\n\npub(super) fn video_player(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(392.0))\n        .child(\n            VideoPlayer::new(\"scene.video.frame\")\n                .control_size(gpui_kit_theme::ControlSize::Touch)\n                .presentation(\n                    crate::content::transport::MediaPresentation::Inline,\n                    \"Present video\",\n                )\n                .presentation_refused(\"Fixture host: native video presentation is unavailable.\")\n                .on_presentation_request(|_, _, _| {})\n                .title(\"Screen capture\")\n                .transport(\n                    FixtureTransport::ready(96.0)\n                        .position(24.0)\n                        .state(TransportState::Playing)\n                        .volume(0.6)\n                        .shared(),\n                )\n                .frame(|_, cx| Some(walkthrough_frame(cx)))\n                .elapsed(\"00:24\")\n                .remaining(\"-01:12\")\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.video.rule.poster\")\n                .label(\"Poster while the first frame is still unavailable\"),\n        )\n        .child(\n            VideoPlayer::new(\"scene.video.poster\")\n                .title(\"Release walkthrough\")\n                .transport(FixtureTransport::ready(240.0).shared())\n                .poster(|_, cx| Some(walkthrough_poster(cx)))\n                .elapsed(\"00:00\")\n                .remaining(\"-04:00\")\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) fn model_viewer(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let read = || ModelState::read(CUBE, ModelBounds::default());\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            div()\n                .row()\n                .items_start()\n                .gap(px(theme.spacing.lg))\n                .child(\n                    div().flex_1().min_w_0().child(\n                        ModelViewer::new(\"scene.model.flat\")\n                            .title(\"cube.gltf\")\n                            .state(read())\n                            .orbit(0.62, 0.42)\n                            .height(240.0)\n                            .on_event(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    div().flex_1().min_w_0().child(\n                        ModelViewer::new(\"scene.model.wireframe\")\n                            .title(\"cube.gltf\")\n                            .state(read())\n                            .shading(ModelShading::Wireframe)\n                            .orbit(0.62, 0.42)\n                            .height(240.0)\n                            .on_event(|_, _, _| {}),\n                    ),\n                ),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.model.rule.refused\")\n                .label(\"A document past a bound\"),\n        )\n        .child(\n            ModelViewer::new(\"scene.model.refused\")\n                .title(\"city-block.glb\")\n                .rejected(ModelError::TooLarge {\n                    limit: ModelLimit::Triangles,\n                    found: 412_930,\n                    allowed: 24_576,\n                })\n                .height(160.0)\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) fn audio_waveform(_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            \"already-normalized peaks; a missing playhead draws no played split\",\n        ))\n        .child(\n            AudioWaveform::new(\"scene.waveform.ready\")\n                .peaks(scene_peaks(48))\n                .playhead(0.38),\n        )\n        .child(AudioWaveform::new(\"scene.waveform.loading\").state(AudioWaveformState::Loading))\n        .child(AudioWaveform::new(\"scene.waveform.empty\").state(AudioWaveformState::Empty))\n        .child(AudioWaveform::new(\"scene.waveform.unavailable\").state(\n            AudioWaveformState::Unavailable(\"The sampler host refused the request.\".into()),\n        ))\n        .child(\n            AudioWaveform::new(\"scene.waveform.error\").state(AudioWaveformState::Error(\n                \"The sampler request failed.\".into(),\n            )),\n        )\n        .into_any_element()\n}\n\n//! One canonical rendering per component, grouped the way the components are.\n//!\n//! A scene is the single description of a component's states that both the\n//! gallery and the audit tests consume, so a component cannot be reviewed\n//! visually in one arrangement and tested in another.\n//!\n//! Almost every scene is an *exhibit*: it is about one component, it lives in\n//! the file named after that component's family, and it is where a reader is\n//! sent to review it. `xtask api check` fails when a public component has no\n//! exhibit, so a component cannot be added and left unseen.\n//!\n//! The rest are *compositions*, and there are three of them. A composition is\n//! built the way a product would build one, because components interact in\n//! ways none of them shows alone. It is nobody's coverage, and [`Shows`]\n//! records the difference so the catalog does not claim a component was\n//! reviewed when it was only recognised inside a shell.\n//!\n//! What is deliberately not here is a scene per screenshot. The files below\n//! are the component families, not a taxonomy invented for this module, so a\n//! component and the rendering that reviews it move together.\n\nmod support;\n\nmod agent;\nmod canvas;\nmod cartesian;\nmod compositions;\nmod content;\nmod controls;\nmod data;\n#[cfg(feature = \"fixtures\")]\nmod datetime;\nmod display;\nmod effects;\nmod flip_configuration;\nmod game;\nmod geography;\nmod heatmap;\nmod interaction;\nmod layout;\nmod media;\nmod motion;\nmod navigation;\nmod overlay;\nmod plot;\nmod specialized;\nmod structured;\n\nuse gpui::{AnyElement, App, Window};\n\nuse crate::foundation::direction::LayoutDirection;\n\nuse agent::{\n    agent_avatar, agent_plan, agent_roster, agent_run_canvas, agent_run_issues, approval,\n    artifact_preview, clarification, cost_meter, feedback_rating, offering_catalog,\n    permission_matrix, persona, prompt_builder, server_list, thinking, tool_call,\n};\nuse canvas::{\n    canvas_regions, canvas_tools, node_graph, node_graph_layout, node_graph_motion,\n    node_graph_routing,\n};\nuse cartesian::{\n    cartesian, cartesian_dense, cartesian_layout, cartesian_lifecycle, cartesian_linked,\n    cartesian_states,\n};\nuse compositions::{motion_flip, motion_state, reading_direction};\n#[cfg(all(feature = \"terminal\", not(target_family = \"wasm\")))]\nuse content::terminal;\nuse content::{\n    agent_document, browser_panel, code_view, conversation, conversation_growing, diff_view,\n    image_viewer, log_stream, markdown, outline, transport,\n};\nuse controls::{\n    actions, auth_sign_in, auth_verification, button, cascader, choice, color_picker, copy_button,\n    dropzone, editor, editor_folding, editor_multicursor, editor_options, editor_services,\n    filter_bar, find_replace, form, inline_edit, input, keybinding, keymap_editor, mention_input,\n    multi_select, rich_text_editor, search_field, search_input, settings, settings_page, textarea,\n    toggle, touch_inputs, touch_pickers, touch_pickers_open, transfer_list, translation_packs,\n    upload_list,\n};\nuse data::{\n    data_grid, data_grid_editing, deferred_drop, diagnostics_list, drag_list, drag_tree, flow,\n    image_list, kanban, list, masonry, table, tree, tree_grid,\n};\n#[cfg(feature = \"fixtures\")]\nuse datetime::{calendar, date_range, date_time, touch_dates};\nuse display::{\n    animated_number, attachment, avatar, badge, banner, bubble, card, chart, detail, divider,\n    empty_state, failure_panel, heatmap, icon, loading, metric_card, outcome_panel,\n    performance_hud, plot, progress_bar, progress_circle, rating, sparkline, stage_progress,\n    state_ladder, status, tag, trace, trace_time,\n};\nuse effects::{cinematic_effects, visual_effects};\nuse flip_configuration::flip_configuration;\nuse game::game_ui;\nuse geography::{geography, geography_scale};\nuse heatmap::{continuous_heatmap, continuous_heatmap_transition, heatmap_reordering};\nuse interaction::{pull_to_refresh, swipe_actions};\nuse layout::{\n    aspect_ratio, container, desktop_titlebar, dock_floating, dock_tree, grid, ide_shell,\n    mobile_page, responsive, scroll_area, scroll_edge_effect, scroll_fade, scroll_shadow,\n    split_pane, split_tree, toolbar,\n};\nuse media::{audio_player, audio_waveform, model_viewer, video_player};\nuse motion::{micro, motion_primitives};\nuse navigation::{\n    accordion, adaptive_navigation, anchor_list, bottom_navigation, breadcrumb, carousel,\n    collapsible, document_tabs, nav_back_preview, nav_stack, pagination, sidebar, sidebar_overflow,\n    tabs, undo_history, wizard,\n};\nuse overlay::{\n    action_sheet, bottom_sheet, command_palette, context_menu, dialog, drawer, frost, glass,\n    glass_materials, glass_optics, hover_card, kbd, media_caption, menu, menubar,\n    notification_center, overlay, popover, toast, tooltip,\n};\nuse plot::{raw_candlestick, sankey_layout, sankey_motion};\nuse specialized::{specialized, specialized_distribution, specialized_exploration};\nuse structured::{json_view, schema_form};\n\n/// What a rendering exists to show.\n///\n/// The distinction is the difference between reviewing a component and\n/// recognising it. A component that has only ever been seen inside a shell has\n/// been recognised; nobody has looked at its states, and the catalog should\n/// not claim otherwise, which is why only [`Shows::Subjects`] counts as\n/// coverage.\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum Shows {\n    /// The components this rendering is *about*. It arranges them so their\n    /// states can be compared, and it is where a reader is sent to review\n    /// them. Everything else it draws is scaffolding.\n    Subjects(&'static [&'static str]),\n    /// An arrangement the way a product would build one, kept because\n    /// components interact in ways none of them shows alone. It is nobody's\n    /// coverage: every component it draws is reviewed somewhere else.\n    Composition(&'static [&'static str]),\n}\n\nimpl Shows {\n    /// Every component named, whichever kind this is.\n    pub fn components(&self) -> &'static [&'static str] {\n        match self {\n            Self::Subjects(names) | Self::Composition(names) => names,\n        }\n    }\n\n    /// The components this rendering is the review of, which is empty for a\n    /// composition.\n    pub fn subjects(&self) -> &'static [&'static str] {\n        match self {\n            Self::Subjects(names) => names,\n            Self::Composition(_) => &[],\n        }\n    }\n}\n\n/// One canonical rendering, addressed by name.\npub struct Scene {\n    pub name: &'static str,\n    pub build: fn(&mut Window, &mut App) -> AnyElement,\n    /// What this rendering is for, declared rather than inferred.\n    ///\n    /// It used to be read back out of the source by following every helper a\n    /// scene called, which answered a different question — *what types does\n    /// this code path touch* — and answered it as an upper bound. Three\n    /// unrelated scenes that shared one fixture helper reported the same seven\n    /// components, so \"which scene shows me\" was a claim no reader could rely\n    /// on. Declaring it makes it exact, and `xtask api check` holds the\n    /// declaration to what the source can actually reach.\n    pub shows: Shows,\n}\n\nimpl std::fmt::Debug for Scene {\n    fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        formatter\n            .debug_struct(\"Scene\")\n            .field(\"name\", &self.name)\n            .field(\"shows\", &self.shows)\n            .finish()\n    }\n}\n\n/// Every scene, in a stable order.\npub fn catalog() -> Vec<Scene> {\n    #[allow(unused_mut)]\n    let mut scenes = vec![\n        Scene {\n            name: \"bottom-sheet\",\n            build: bottom_sheet,\n            shows: Shows::Subjects(&[\"BottomSheet\"]),\n        },\n        Scene {\n            name: \"action-sheet\",\n            build: action_sheet,\n            shows: Shows::Subjects(&[\"ActionSheet\"]),\n        },\n        Scene {\n            name: \"pull-to-refresh\",\n            build: pull_to_refresh,\n            shows: Shows::Subjects(&[\"PullToRefresh\"]),\n        },\n        Scene {\n            name: \"swipe-actions\",\n            build: swipe_actions,\n            shows: Shows::Subjects(&[\"SwipeActions\"]),\n        },\n        Scene {\n            name: \"button\",\n            build: button,\n            shows: Shows::Subjects(&[\"Button\"]),\n        },\n        Scene {\n            name: \"badge\",\n            build: badge,\n            shows: Shows::Subjects(&[\"Badge\"]),\n        },\n        Scene {\n            name: \"card\",\n            build: card,\n            shows: Shows::Subjects(&[\"Card\", \"ListRow\"]),\n        },\n        Scene {\n            name: \"rating\",\n            build: rating,\n            shows: Shows::Subjects(&[\"Rating\"]),\n        },\n        Scene {\n            name: \"bubble\",\n            build: bubble,\n            shows: Shows::Subjects(&[\"Bubble\"]),\n        },\n        Scene {\n            name: \"status\",\n            build: status,\n            shows: Shows::Subjects(&[\"Callout\", \"StatusDot\", \"StatusLine\"]),\n        },\n        Scene {\n            name: \"loading\",\n            build: loading,\n            shows: Shows::Subjects(&[\n                \"BarLoader\",\n                \"LoadMore\",\n                \"PulseLoader\",\n                \"RefreshVeil\",\n                \"Skeleton\",\n                \"Spinner\",\n            ]),\n        },\n        Scene {\n            name: \"visual-effects\",\n            build: visual_effects,\n            shows: Shows::Subjects(&[\"EffectParticles\"]),\n        },\n        Scene {\n            name: \"cinematic-effects\",\n            build: cinematic_effects,\n            shows: Shows::Subjects(&[\"CinematicEffect\"]),\n        },\n        Scene {\n            name: \"choice\",\n            build: choice,\n            shows: Shows::Subjects(&[\"Checkbox\", \"Radio\", \"Slider\", \"Switch\"]),\n        },\n        Scene {\n            name: \"multi-select\",\n            build: multi_select,\n            shows: Shows::Subjects(&[\"MultiSelect\"]),\n        },\n        Scene {\n            name: \"transfer-list\",\n            build: transfer_list,\n            shows: Shows::Subjects(&[\"TransferList\"]),\n        },\n        Scene {\n            name: \"input\",\n            build: input,\n            shows: Shows::Subjects(&[\"Select\", \"TextInput\"]),\n        },\n        Scene {\n            name: \"touch-inputs\",\n            build: touch_inputs,\n            shows: Shows::Subjects(&[\"TextInput\", \"TextArea\", \"PasswordInput\", \"OneTimeCodeInput\"]),\n        },\n        Scene {\n            name: \"touch-pickers\",\n            build: touch_pickers,\n            shows: Shows::Subjects(&[\"Select\", \"Combobox\", \"MultiSelect\"]),\n        },\n        Scene {\n            name: \"touch-pickers-open\",\n            build: touch_pickers_open,\n            shows: Shows::Subjects(&[\"Combobox\"]),\n        },\n        Scene {\n            name: \"textarea\",\n            build: textarea,\n            shows: Shows::Subjects(&[\"TextArea\"]),\n        },\n        Scene {\n            name: \"editor\",\n            build: editor,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-multicursor\",\n            build: editor_multicursor,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-services\",\n            build: editor_services,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-folding\",\n            build: editor_folding,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-options\",\n            build: editor_options,\n            shows: Shows::Subjects(&[\"Editor\", \"TextArea\", \"RichTextEditor\"]),\n        },\n        Scene {\n            name: \"mention-input\",\n            build: mention_input,\n            shows: Shows::Subjects(&[\"MentionInput\"]),\n        },\n        Scene {\n            name: \"rich-text-editor\",\n            build: rich_text_editor,\n            shows: Shows::Subjects(&[\"RichTextEditor\"]),\n        },\n        Scene {\n            name: \"form\",\n            build: form,\n            shows: Shows::Subjects(&[\n                \"Combobox\",\n                \"FormField\",\n                \"NumberInput\",\n                \"SegmentedControl\",\n                \"TagInput\",\n            ]),\n        },\n        Scene {\n            name: \"auth-sign-in\",\n            build: auth_sign_in,\n            shows: Shows::Subjects(&[\"PasswordInput\"]),\n        },\n        Scene {\n            name: \"auth-verification\",\n            build: auth_verification,\n            shows: Shows::Subjects(&[\"OneTimeCodeInput\"]),\n        },\n        Scene {\n            name: \"actions\",\n            build: actions,\n            shows: Shows::Subjects(&[\"ButtonGroup\", \"IconButton\", \"SplitButton\"]),\n        },\n        Scene {\n            name: \"progress-bar\",\n            build: progress_bar,\n            shows: Shows::Subjects(&[\"ProgressBar\"]),\n        },\n        Scene {\n            name: \"state-ladder\",\n            build: state_ladder,\n            shows: Shows::Subjects(&[\"StateView\", \"StaleMark\"]),\n        },\n        Scene {\n            name: \"banner\",\n            build: banner,\n            shows: Shows::Subjects(&[\"Banner\"]),\n        },\n        Scene {\n            name: \"outcome-panel\",\n            build: outcome_panel,\n            shows: Shows::Subjects(&[\"OutcomePanel\"]),\n        },\n        Scene {\n            name: \"stage-progress\",\n            build: stage_progress,\n            shows: Shows::Subjects(&[\"StageProgress\"]),\n        },\n        Scene {\n            name: \"divider\",\n            build: divider,\n            shows: Shows::Subjects(&[\"Divider\"]),\n        },\n        Scene {\n            name: \"tag\",\n            build: tag,\n            shows: Shows::Subjects(&[\"Tag\"]),\n        },\n        Scene {\n            name: \"avatar\",\n            build: avatar,\n            shows: Shows::Subjects(&[\"Avatar\", \"AvatarGroup\"]),\n        },\n        Scene {\n            name: \"empty-state\",\n            build: empty_state,\n            shows: Shows::Subjects(&[\"EmptyState\"]),\n        },\n        Scene {\n            name: \"kbd\",\n            build: kbd,\n            shows: Shows::Subjects(&[\"Kbd\"]),\n        },\n        Scene {\n            name: \"overlay\",\n            build: overlay,\n            shows: Shows::Subjects(&[\"Overlay\"]),\n        },\n        Scene {\n            name: \"dialog\",\n            build: dialog,\n            shows: Shows::Subjects(&[\"Dialog\"]),\n        },\n        Scene {\n            name: \"tooltip\",\n            build: tooltip,\n            shows: Shows::Subjects(&[\"Tooltip\"]),\n        },\n        Scene {\n            name: \"menu\",\n            build: menu,\n            shows: Shows::Subjects(&[\"Menu\"]),\n        },\n        Scene {\n            name: \"context-menu\",\n            build: context_menu,\n            shows: Shows::Subjects(&[\"ContextMenu\"]),\n        },\n        Scene {\n            name: \"popover\",\n            build: popover,\n            shows: Shows::Subjects(&[\"Popover\"]),\n        },\n        Scene {\n            name: \"command-palette\",\n            build: command_palette,\n            shows: Shows::Subjects(&[\"CommandPalette\"]),\n        },\n        Scene {\n            name: \"toast\",\n            build: toast,\n            shows: Shows::Subjects(&[\"ToastLayer\"]),\n        },\n        Scene {\n            name: \"tabs\",\n            build: tabs,\n            shows: Shows::Subjects(&[\"Tabs\"]),\n        },\n        Scene {\n            name: \"carousel\",\n            build: carousel,\n            shows: Shows::Subjects(&[\"Carousel\"]),\n        },\n        Scene {\n            name: \"nav-stack\",\n            build: nav_stack,\n            shows: Shows::Subjects(&[\"NavStack\"]),\n        },\n        Scene {\n            name: \"accordion\",\n            build: accordion,\n            shows: Shows::Subjects(&[\"Accordion\"]),\n        },\n        Scene {\n            name: \"breadcrumb\",\n            build: breadcrumb,\n            shows: Shows::Subjects(&[\"Breadcrumb\"]),\n        },\n        Scene {\n            name: \"list\",\n            build: list,\n            shows: Shows::Subjects(&[\"List\"]),\n        },\n        Scene {\n            name: \"image-list\",\n            build: image_list,\n            shows: Shows::Subjects(&[\"ImageList\"]),\n        },\n        Scene {\n            name: \"masonry\",\n            build: masonry,\n            shows: Shows::Subjects(&[\"Masonry\"]),\n        },\n        Scene {\n            name: \"flow\",\n            build: flow,\n            shows: Shows::Subjects(&[\"Flow\"]),\n        },\n        Scene {\n            name: \"table\",\n            build: table,\n            shows: Shows::Subjects(&[\"Table\"]),\n        },\n        Scene {\n            name: \"data-grid\",\n            build: data_grid,\n            shows: Shows::Subjects(&[\"BulkBar\", \"DataGrid\"]),\n        },\n        Scene {\n            name: \"data-grid-editing\",\n            build: data_grid_editing,\n            shows: Shows::Subjects(&[\"DataGrid\"]),\n        },\n        Scene {\n            name: \"tree-grid\",\n            build: tree_grid,\n            shows: Shows::Subjects(&[\"TreeGrid\"]),\n        },\n        Scene {\n            name: \"tree\",\n            build: tree,\n            shows: Shows::Subjects(&[\"Tree\"]),\n        },\n        Scene {\n            name: \"split-pane\",\n            build: split_pane,\n            shows: Shows::Subjects(&[\"SplitPane\"]),\n        },\n        Scene {\n            name: \"grid\",\n            build: grid,\n            shows: Shows::Subjects(&[\"Grid\"]),\n        },\n        Scene {\n            name: \"container\",\n            build: container,\n            shows: Shows::Subjects(&[\"Container\"]),\n        },\n        Scene {\n            name: \"scroll-area\",\n            build: scroll_area,\n            shows: Shows::Subjects(&[\"ScrollArea\"]),\n        },\n        Scene {\n            name: \"scroll-shadow\",\n            build: scroll_shadow,\n            shows: Shows::Subjects(&[\"ScrollArea\"]),\n        },\n        Scene {\n            name: \"scroll-fade\",\n            build: scroll_fade,\n            shows: Shows::Subjects(&[\"ScrollFade\"]),\n        },\n        Scene {\n            name: \"scroll-edge-effect\",\n            build: scroll_edge_effect,\n            shows: Shows::Subjects(&[\"ScrollEdgeEffect\"]),\n        },\n        Scene {\n            name: \"frost\",\n            build: frost,\n            shows: Shows::Subjects(&[\"Frost\"]),\n        },\n        Scene {\n            name: \"glass\",\n            build: glass,\n            shows: Shows::Subjects(&[\"Glass\"]),\n        },\n        Scene {\n            name: \"glass-optics\",\n            build: glass_optics,\n            shows: Shows::Subjects(&[\"Glass\", \"GlassGroup\"]),\n        },\n        Scene {\n            name: \"glass-materials\",\n            build: glass_materials,\n            shows: Shows::Subjects(&[\"Glass\", \"GlassGroup\"]),\n        },\n        Scene {\n            name: \"media-caption\",\n            build: media_caption,\n            shows: Shows::Composition(&[\"Button\"]),\n        },\n        Scene {\n            name: \"toolbar\",\n            build: toolbar,\n            shows: Shows::Subjects(&[\"Toolbar\"]),\n        },\n        Scene {\n            name: \"desktop-titlebar\",\n            build: desktop_titlebar,\n            shows: Shows::Subjects(&[\"DesktopTitlebar\"]),\n        },\n        Scene {\n            name: \"mobile-page\",\n            build: mobile_page,\n            shows: Shows::Subjects(&[\"AppBar\", \"PageLayout\"]),\n        },\n        Scene {\n            name: \"bottom-navigation\",\n            build: bottom_navigation,\n            shows: Shows::Subjects(&[\"BottomNavigation\"]),\n        },\n        Scene {\n            name: \"nav-back-preview\",\n            build: nav_back_preview,\n            shows: Shows::Subjects(&[\"NavStack\"]),\n        },\n        Scene {\n            name: \"adaptive-navigation\",\n            build: adaptive_navigation,\n            shows: Shows::Composition(&[\n                \"Responsive\",\n                \"Sidebar\",\n                \"BottomNavigation\",\n                \"PageLayout\",\n                \"AppBar\",\n            ]),\n        },\n        Scene {\n            name: \"sidebar\",\n            build: sidebar,\n            shows: Shows::Subjects(&[\"Sidebar\"]),\n        },\n        Scene {\n            name: \"sidebar-overflow\",\n            build: sidebar_overflow,\n            shows: Shows::Subjects(&[\"Sidebar\"]),\n        },\n        Scene {\n            name: \"pagination\",\n            build: pagination,\n            shows: Shows::Subjects(&[\"Pagination\"]),\n        },\n        Scene {\n            name: \"drawer\",\n            build: drawer,\n            shows: Shows::Subjects(&[\"Drawer\"]),\n        },\n        Scene {\n            name: \"motion-flip\",\n            build: motion_flip,\n            shows: Shows::Composition(&[\"Button\", \"Card\", \"ListRow\"]),\n        },\n        Scene {\n            name: \"flip-configuration\",\n            build: flip_configuration,\n            shows: Shows::Composition(&[\"Button\"]),\n        },\n        Scene {\n            name: \"motion-state\",\n            build: motion_state,\n            shows: Shows::Composition(&[\n                \"Accordion\",\n                \"Button\",\n                \"Checkbox\",\n                \"ProgressBar\",\n                \"Radio\",\n                \"SegmentedControl\",\n                \"Switch\",\n                \"Tabs\",\n            ]),\n        },\n        Scene {\n            name: \"motion-primitives\",\n            build: motion_primitives,\n            shows: Shows::Composition(&[\"Button\", \"Tabs\"]),\n        },\n        Scene {\n            name: \"animated-number\",\n            build: animated_number,\n            shows: Shows::Subjects(&[\"AnimatedNumber\"]),\n        },\n        Scene {\n            name: \"drag-list\",\n            build: drag_list,\n            shows: Shows::Subjects(&[\"List\"]),\n        },\n        Scene {\n            name: \"deferred-drop\",\n            build: deferred_drop,\n            shows: Shows::Composition(&[\"List\", \"Tabs\", \"Tree\", \"Button\"]),\n        },\n        Scene {\n            name: \"drag-tree\",\n            build: drag_tree,\n            shows: Shows::Subjects(&[\"Tree\"]),\n        },\n        Scene {\n            name: \"dropzone\",\n            build: dropzone,\n            shows: Shows::Subjects(&[\"Dropzone\"]),\n        },\n        Scene {\n            name: \"wizard\",\n            build: wizard,\n            shows: Shows::Subjects(&[\"Wizard\"]),\n        },\n        Scene {\n            name: \"undo-history\",\n            build: undo_history,\n            shows: Shows::Subjects(&[\"UndoHistory\"]),\n        },\n        Scene {\n            name: \"settings\",\n            build: settings,\n            shows: Shows::Subjects(&[\"SettingsList\", \"SettingsRow\", \"SettingsSection\"]),\n        },\n        Scene {\n            name: \"settings-page\",\n            build: settings_page,\n            shows: Shows::Subjects(&[\"SettingsList\"]),\n        },\n        Scene {\n            name: \"translation-packs\",\n            build: translation_packs,\n            shows: Shows::Composition(&[\"Card\", \"Button\"]),\n        },\n        Scene {\n            name: \"detail\",\n            build: detail,\n            shows: Shows::Subjects(&[\"DescriptionList\", \"Timeline\"]),\n        },\n        Scene {\n            name: \"filter-bar\",\n            build: filter_bar,\n            shows: Shows::Subjects(&[\"FilterBar\"]),\n        },\n        Scene {\n            name: \"inline-edit\",\n            build: inline_edit,\n            shows: Shows::Subjects(&[\"InlineEdit\"]),\n        },\n        Scene {\n            name: \"progress-circle\",\n            build: progress_circle,\n            shows: Shows::Subjects(&[\"ProgressCircle\"]),\n        },\n        Scene {\n            name: \"split-tree\",\n            build: split_tree,\n            shows: Shows::Subjects(&[\"SplitTree\"]),\n        },\n        Scene {\n            name: \"dock-tree\",\n            build: dock_tree,\n            shows: Shows::Subjects(&[\"DockTree\"]),\n        },\n        Scene {\n            name: \"dock-floating\",\n            build: dock_floating,\n            shows: Shows::Subjects(&[\"DockTree\"]),\n        },\n        Scene {\n            name: \"ide-shell\",\n            build: ide_shell,\n            shows: Shows::Subjects(&[\"Dock\", \"StatusBar\"]),\n        },\n        Scene {\n            name: \"keybinding\",\n            build: keybinding,\n            shows: Shows::Subjects(&[\"KeybindingRecorder\"]),\n        },\n        Scene {\n            name: \"keymap-editor\",\n            build: keymap_editor,\n            shows: Shows::Subjects(&[\"KeymapEditor\"]),\n        },\n        Scene {\n            name: \"markdown\",\n            build: markdown,\n            shows: Shows::Subjects(&[\"Markdown\"]),\n        },\n        Scene {\n            name: \"agent-document\",\n            build: agent_document,\n            shows: Shows::Subjects(&[\"AgentDocument\"]),\n        },\n        Scene {\n            name: \"agent-roster\",\n            build: agent_roster,\n            shows: Shows::Subjects(&[\"AgentCard\", \"AgentGroup\", \"AgentRoster\", \"SubagentTree\"]),\n        },\n        Scene {\n            name: \"persona\",\n            build: persona,\n            shows: Shows::Subjects(&[\"PersonaDialogue\", \"PersonaPortrait\", \"VoiceReactive\"]),\n        },\n        Scene {\n            name: \"game-ui\",\n            build: game_ui,\n            shows: Shows::Subjects(&[\n                \"AbilityBar\",\n                \"ObjectiveTracker\",\n                \"PartyRoster\",\n                \"RewardReveal\",\n            ]),\n        },\n        Scene {\n            name: \"agent-run-canvas\",\n            build: agent_run_canvas,\n            shows: Shows::Subjects(&[\"AgentRunCanvas\"]),\n        },\n        Scene {\n            name: \"agent-run-issues\",\n            build: agent_run_issues,\n            shows: Shows::Subjects(&[\"AgentRunIssues\"]),\n        },\n        Scene {\n            name: \"agent-avatar\",\n            build: agent_avatar,\n            shows: Shows::Subjects(&[\"AgentActivityLine\", \"AgentAvatar\"]),\n        },\n        Scene {\n            name: \"conversation\",\n            build: conversation,\n            shows: Shows::Subjects(&[\"MessageList\"]),\n        },\n        Scene {\n            name: \"outline\",\n            build: outline,\n            shows: Shows::Subjects(&[\"Outline\"]),\n        },\n        Scene {\n            name: \"conversation-growing\",\n            build: conversation_growing,\n            shows: Shows::Subjects(&[\"MessageList\"]),\n        },\n        Scene {\n            name: \"image-viewer\",\n            build: image_viewer,\n            shows: Shows::Subjects(&[\"ImageViewer\"]),\n        },\n        Scene {\n            name: \"transport\",\n            build: transport,\n            shows: Shows::Subjects(&[\"TransportBar\"]),\n        },\n        Scene {\n            name: \"audio-player\",\n            build: audio_player,\n            shows: Shows::Subjects(&[\"AudioPlayer\"]),\n        },\n        Scene {\n            name: \"audio-waveform\",\n            build: audio_waveform,\n            shows: Shows::Subjects(&[\"AudioWaveform\"]),\n        },\n        Scene {\n            name: \"video-player\",\n            build: video_player,\n            shows: Shows::Subjects(&[\"VideoPlayer\"]),\n        },\n        Scene {\n            name: \"model-viewer\",\n            build: model_viewer,\n            shows: Shows::Subjects(&[\"ModelViewer\"]),\n        },\n        Scene {\n            name: \"approval\",\n            build: approval,\n            shows: Shows::Subjects(&[\"ApprovalPrompt\"]),\n        },\n        Scene {\n            name: \"clarification\",\n            build: clarification,\n            shows: Shows::Subjects(&[\"ClarificationPanel\"]),\n        },\n        Scene {\n            name: \"permission-matrix\",\n            build: permission_matrix,\n            shows: Shows::Subjects(&[\"PermissionMatrix\"]),\n        },\n        Scene {\n            name: \"cost-meter\",\n            build: cost_meter,\n            shows: Shows::Subjects(&[\"ContextGauge\", \"CostMeter\"]),\n        },\n        Scene {\n            name: \"prompt-builder\",\n            build: prompt_builder,\n            shows: Shows::Subjects(&[\"PromptBuilder\"]),\n        },\n        Scene {\n            name: \"feedback-rating\",\n            build: feedback_rating,\n            shows: Shows::Subjects(&[\"FeedbackRating\"]),\n        },\n        Scene {\n            name: \"artifact-preview\",\n            build: artifact_preview,\n            shows: Shows::Subjects(&[\"ArtifactPreview\"]),\n        },\n        Scene {\n            name: \"tool-call\",\n            build: tool_call,\n            shows: Shows::Subjects(&[\"ToolCall\"]),\n        },\n        Scene {\n            name: \"agent-plan\",\n            build: agent_plan,\n            shows: Shows::Subjects(&[\"AgentPlan\"]),\n        },\n        Scene {\n            name: \"node-graph\",\n            build: node_graph,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"node-graph-layout\",\n            build: node_graph_layout,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"node-graph-routing\",\n            build: node_graph_routing,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"node-graph-motion\",\n            build: node_graph_motion,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"canvas-tools\",\n            build: canvas_tools,\n            shows: Shows::Subjects(&[\"CanvasToolbar\", \"Minimap\", \"NodeGroup\"]),\n        },\n        Scene {\n            name: \"canvas-regions\",\n            build: canvas_regions,\n            shows: Shows::Subjects(&[\"NodeGraph\"]),\n        },\n        Scene {\n            name: \"browser-panel\",\n            build: browser_panel,\n            shows: Shows::Subjects(&[\"BrowserPanel\"]),\n        },\n        Scene {\n            name: \"thinking\",\n            build: thinking,\n            shows: Shows::Subjects(&[\"ThinkingBlock\"]),\n        },\n        Scene {\n            name: \"json-view\",\n            build: json_view,\n            shows: Shows::Subjects(&[\"JsonView\"]),\n        },\n        Scene {\n            name: \"schema-form\",\n            build: schema_form,\n            shows: Shows::Subjects(&[\"SchemaForm\"]),\n        },\n        Scene {\n            name: \"server-list\",\n            build: server_list,\n            shows: Shows::Subjects(&[\"ServerList\"]),\n        },\n        Scene {\n            name: \"offering-catalog\",\n            build: offering_catalog,\n            shows: Shows::Subjects(&[\"OfferingCatalog\"]),\n        },\n        Scene {\n            name: \"reading-direction\",\n            build: reading_direction,\n            shows: Shows::Composition(&[\n                \"Accordion\",\n                \"Breadcrumb\",\n                \"Button\",\n                \"Card\",\n                \"Icon\",\n                \"JsonView\",\n                \"Tabs\",\n                \"Tree\",\n            ]),\n        },\n        Scene {\n            name: \"toggle\",\n            build: toggle,\n            shows: Shows::Subjects(&[\"Toggle\", \"ToggleGroup\"]),\n        },\n        Scene {\n            name: \"collapsible\",\n            build: collapsible,\n            shows: Shows::Subjects(&[\"Collapsible\"]),\n        },\n        Scene {\n            name: \"hover-card\",\n            build: hover_card,\n            shows: Shows::Subjects(&[\"HoverCard\"]),\n        },\n        Scene {\n            name: \"menubar\",\n            build: menubar,\n            shows: Shows::Subjects(&[\"Menubar\"]),\n        },\n        Scene {\n            name: \"copy-button\",\n            build: copy_button,\n            shows: Shows::Subjects(&[\"CopyButton\"]),\n        },\n        Scene {\n            name: \"aspect-ratio\",\n            build: aspect_ratio,\n            shows: Shows::Subjects(&[\"AspectRatio\"]),\n        },\n        Scene {\n            name: \"responsive\",\n            build: responsive,\n            shows: Shows::Subjects(&[\"Responsive\"]),\n        },\n        Scene {\n            name: \"icon\",\n            build: icon,\n            shows: Shows::Subjects(&[\"Icon\"]),\n        },\n        Scene {\n            name: \"document-tabs\",\n            build: document_tabs,\n            shows: Shows::Subjects(&[\"Tabs\"]),\n        },\n        Scene {\n            name: \"search-input\",\n            build: search_input,\n            shows: Shows::Subjects(&[\"SearchInput\"]),\n        },\n        Scene {\n            name: \"search-field\",\n            build: search_field,\n            shows: Shows::Subjects(&[\"HighlightedText\", \"SearchField\"]),\n        },\n        Scene {\n            name: \"find-replace\",\n            build: find_replace,\n            shows: Shows::Subjects(&[\"FindReplace\"]),\n        },\n        Scene {\n            name: \"notification-center\",\n            build: notification_center,\n            shows: Shows::Subjects(&[\"NotificationCenter\"]),\n        },\n        Scene {\n            name: \"failure-panel\",\n            build: failure_panel,\n            shows: Shows::Subjects(&[\"FailurePanel\"]),\n        },\n        Scene {\n            name: \"log-stream\",\n            build: log_stream,\n            shows: Shows::Subjects(&[\"LogStream\"]),\n        },\n        Scene {\n            name: \"diff-view\",\n            build: diff_view,\n            shows: Shows::Subjects(&[\"DiffView\"]),\n        },\n        Scene {\n            name: \"sparkline\",\n            build: sparkline,\n            shows: Shows::Subjects(&[\"Sparkline\"]),\n        },\n        Scene {\n            name: \"performance-hud\",\n            build: performance_hud,\n            shows: Shows::Subjects(&[\"PerformanceHud\"]),\n        },\n        Scene {\n            name: \"chart\",\n            build: chart,\n            shows: Shows::Subjects(&[\n                \"AreaChart\",\n                \"BarChart\",\n                \"ChartLegend\",\n                \"GaugeChart\",\n                \"LineChart\",\n                \"PieChart\",\n                \"RadarChart\",\n                \"ScatterChart\",\n                \"StackedBarChart\",\n            ]),\n        },\n        Scene {\n            name: \"cartesian\",\n            build: cartesian,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-linked\",\n            build: cartesian_linked,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-layout\",\n            build: cartesian_layout,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-lifecycle\",\n            build: cartesian_lifecycle,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-dense\",\n            build: cartesian_dense,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-states\",\n            build: cartesian_states,\n            shows: Shows::Subjects(&[\"CartesianChart\", \"PieChart\", \"RadarChart\", \"GaugeChart\"]),\n        },\n        Scene {\n            name: \"plot\",\n            build: plot,\n            shows: Shows::Subjects(&[\"CandlestickChart\", \"Plot\", \"SankeyChart\"]),\n        },\n        Scene {\n            name: \"specialized\",\n            build: specialized,\n            shows: Shows::Subjects(&[\"SpecializedChart\"]),\n        },\n        Scene {\n            name: \"specialized-distribution\",\n            build: specialized_distribution,\n            shows: Shows::Subjects(&[\"SpecializedChart\"]),\n        },\n        Scene {\n            name: \"specialized-exploration\",\n            build: specialized_exploration,\n            shows: Shows::Subjects(&[\"SpecializedChart\"]),\n        },\n        Scene {\n            name: \"continuous-heatmap-transition\",\n            build: continuous_heatmap_transition,\n            shows: Shows::Subjects(&[\"ContinuousHeatmap\"]),\n        },\n        Scene {\n            name: \"heatmap-reordering\",\n            build: heatmap_reordering,\n            shows: Shows::Subjects(&[\"ContinuousHeatmap\"]),\n        },\n        Scene {\n            name: \"sankey-motion\",\n            build: sankey_motion,\n            shows: Shows::Subjects(&[\"SankeyChart\"]),\n        },\n        Scene {\n            name: \"continuous-heatmap\",\n            build: continuous_heatmap,\n            shows: Shows::Subjects(&[\"ContinuousHeatmap\"]),\n        },\n        Scene {\n            name: \"sankey-layout\",\n            build: sankey_layout,\n            shows: Shows::Subjects(&[\"SankeyChart\"]),\n        },\n        Scene {\n            name: \"raw-candlestick\",\n            build: raw_candlestick,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"geography\",\n            build: geography,\n            shows: Shows::Subjects(&[\"GeoMap\"]),\n        },\n        Scene {\n            name: \"geography-scale\",\n            build: geography_scale,\n            shows: Shows::Subjects(&[\"GeoMap\"]),\n        },\n        Scene {\n            name: \"attachment\",\n            build: attachment,\n            shows: Shows::Subjects(&[\"AttachmentTile\"]),\n        },\n        Scene {\n            name: \"metric-card\",\n            build: metric_card,\n            shows: Shows::Subjects(&[\"MetricCard\"]),\n        },\n        Scene {\n            name: \"kanban\",\n            build: kanban,\n            shows: Shows::Subjects(&[\"KanbanBoard\"]),\n        },\n        Scene {\n            name: \"micro\",\n            build: micro,\n            shows: Shows::Subjects(&[\"MicroMark\"]),\n        },\n        Scene {\n            name: \"trace\",\n            build: trace,\n            shows: Shows::Subjects(&[\"SpanTimeline\", \"TraceView\"]),\n        },\n        Scene {\n            name: \"trace-time\",\n            build: trace_time,\n            shows: Shows::Subjects(&[\"SpanTimeline\", \"TraceView\"]),\n        },\n        Scene {\n            name: \"heatmap\",\n            build: heatmap,\n            shows: Shows::Subjects(&[\"Heatmap\"]),\n        },\n        Scene {\n            name: \"color-picker\",\n            build: color_picker,\n            shows: Shows::Subjects(&[\"ColorPicker\", \"ColorSwatch\"]),\n        },\n        Scene {\n            name: \"code-view\",\n            build: code_view,\n            shows: Shows::Subjects(&[\"CodeView\"]),\n        },\n        Scene {\n            name: \"upload-list\",\n            build: upload_list,\n            shows: Shows::Subjects(&[\"UploadList\"]),\n        },\n        Scene {\n            name: \"cascader\",\n            build: cascader,\n            shows: Shows::Subjects(&[\"Cascader\"]),\n        },\n        Scene {\n            name: \"anchor-list\",\n            build: anchor_list,\n            shows: Shows::Subjects(&[\"AnchorList\"]),\n        },\n        Scene {\n            name: \"diagnostics-list\",\n            build: diagnostics_list,\n            shows: Shows::Subjects(&[\"DiagnosticsList\"]),\n        },\n    ];\n    #[cfg(all(feature = \"terminal\", not(target_family = \"wasm\")))]\n    scenes.push(Scene {\n        name: \"terminal\",\n        build: terminal,\n        shows: Shows::Subjects(&[\"Terminal\"]),\n    });\n    #[cfg(feature = \"fixtures\")]\n    scenes.extend([\n        Scene {\n            name: \"calendar\",\n            build: calendar,\n            shows: Shows::Subjects(&[\"Calendar\"]),\n        },\n        Scene {\n            name: \"date-range\",\n            build: date_range,\n            shows: Shows::Subjects(&[\"RangePicker\"]),\n        },\n        Scene {\n            name: \"date-time\",\n            build: date_time,\n            shows: Shows::Subjects(&[\"DateInput\", \"TimeInput\"]),\n        },\n        Scene {\n            name: \"touch-dates\",\n            build: touch_dates,\n            shows: Shows::Subjects(&[\"DateInput\", \"TimeInput\", \"RangePicker\"]),\n        },\n    ]);\n    scenes\n}\n\n/// The scene registered under `name`, or `None` when nothing is.\npub fn find(name: &str) -> Option<Scene> {\n    catalog().into_iter().find(|scene| scene.name == name)\n}\n\n/// The reading direction a scene expects.\n///\n/// The direction is a global, like the theme, so a capture run that renders\n/// the whole catalog into one process has to set it per scene the same way it\n/// activates a theme per scene. A scene that changed it while rendering would\n/// leak into whichever scene came next, and the leak would show up as a\n/// changed image somewhere else entirely.\npub fn direction(name: &str) -> LayoutDirection {\n    match name {\n        \"reading-direction\" => LayoutDirection::RightToLeft,\n        _ => LayoutDirection::LeftToRight,\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn scene_names_are_unique_and_addressable() {\n        let mut names: Vec<&str> = catalog().iter().map(|scene| scene.name).collect();\n        let count = names.len();\n        names.sort_unstable();\n        names.dedup();\n        assert_eq!(names.len(), count);\n        assert!(find(\"button\").is_some());\n        assert!(find(\"nothing\").is_none());\n    }\n}\n\n//! Motion primitives exercised against a live clock, plus described motion at rest.\n\nuse super::support::*;\nuse crate::motion::{\n    CubicBezier, Easing, Keyframe, Keyframes, MotionSpec, Presence, Spring, Stagger, Transition,\n};\nuse web_time::Instant;\n\nconst CLOCK_START: u16 = 8 * 60;\nconst CLOCK_END: u16 = 20 * 60;\nconst CLOCK_STEP: u16 = 30;\nconst CLOCK_TICK: Duration = Duration::from_millis(500);\nconst CLOCK_TRANSITION_MS: u64 = 620;\n\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\nenum MotionDemo {\n    SlidingTime,\n    Spring,\n    Keyframes,\n    Presence,\n    Stagger,\n}\n\nimpl MotionDemo {\n    fn id(self) -> &'static str {\n        match self {\n            Self::SlidingTime => \"sliding-time\",\n            Self::Spring => \"spring\",\n            Self::Keyframes => \"keyframes\",\n            Self::Presence => \"presence\",\n            Self::Stagger => \"stagger\",\n        }\n    }\n\n    fn from_id(id: &str) -> Option<Self> {\n        match id {\n            \"sliding-time\" => Some(Self::SlidingTime),\n            \"spring\" => Some(Self::Spring),\n            \"keyframes\" => Some(Self::Keyframes),\n            \"presence\" => Some(Self::Presence),\n            \"stagger\" => Some(Self::Stagger),\n            _ => None,\n        }\n    }\n}\n\n/// Caller-owned state for the five demonstrations.\n///\n/// The catalog rebuilds a scene every frame, just as an ordinary host rebuilds\n/// component builders. The state therefore lives outside the element tree;\n/// every animated channel beneath it still has a stable semantic identity.\n#[derive(Debug)]\nstruct SceneMotionPrimitives {\n    demo: MotionDemo,\n    clock_minutes: u16,\n    clock_targets: [f32; 4],\n    clock_digits: [Transition<f32>; 4],\n    clock_playing: bool,\n    clock_started_at: Option<Instant>,\n    clock_ticks: u16,\n    spring_selected: usize,\n    spring_indicator: Transition<f32>,\n    present: bool,\n    presence: Presence,\n    keyframes_started_at: Option<Instant>,\n    stagger_generation: u64,\n    stagger_started_at: Option<Instant>,\n}\n\nimpl Global for SceneMotionPrimitives {}\n\nimpl SceneMotionPrimitives {\n    fn new(theme: &Theme) -> Self {\n        let clock_spec = clock_spec(theme);\n        let spring_spec = spring_spec();\n        let presence_spec = presence_spec(theme);\n        let targets = clock_digits(CLOCK_START).map(f32::from);\n        Self {\n            demo: MotionDemo::SlidingTime,\n            clock_minutes: CLOCK_START,\n            clock_targets: targets,\n            clock_digits: targets.map(|digit| Transition::new(digit, clock_spec)),\n            clock_playing: false,\n            clock_started_at: None,\n            clock_ticks: 0,\n            spring_selected: 0,\n            spring_indicator: Transition::new(0.0, spring_spec),\n            present: true,\n            presence: Presence::visible(presence_spec, presence_spec),\n            keyframes_started_at: None,\n            stagger_generation: 0,\n            stagger_started_at: None,\n        }\n    }\n\n    fn select(&mut self, demo: MotionDemo, theme: &Theme) {\n        self.demo = demo;\n        // Element-retained animation state disappears when its tab leaves the\n        // tree. Recreate that boundary here even though the scene state itself\n        // is longer lived, so returning to a tab never resumes an invisible\n        // half-frame from the previous visit.\n        match demo {\n            MotionDemo::SlidingTime => {\n                for (digit, target) in self\n                    .clock_digits\n                    .iter_mut()\n                    .zip(self.clock_targets.iter().copied())\n                {\n                    *digit = Transition::new(target, clock_spec(theme));\n                }\n            }\n            MotionDemo::Spring => self.spring_indicator.snap(if self.spring_selected == 0 {\n                0.0\n            } else {\n                120.0\n            }),\n            MotionDemo::Keyframes => self.keyframes_started_at = None,\n            MotionDemo::Presence => {\n                let spec = presence_spec(theme);\n                self.presence = if self.present {\n                    Presence::visible(spec, spec)\n                } else {\n                    Presence::hidden(spec, spec)\n                };\n            }\n            MotionDemo::Stagger => self.stagger_started_at = None,\n        }\n    }\n\n    fn toggle_clock(&mut self, now: Instant, theme: &Theme) {\n        if self.clock_playing {\n            self.clock_playing = false;\n            self.clock_started_at = None;\n            self.clock_ticks = 0;\n            return;\n        }\n        if self.clock_minutes >= CLOCK_END {\n            self.clock_minutes = CLOCK_START;\n            self.clock_targets = clock_digits(CLOCK_START).map(f32::from);\n            for (digit, target) in self\n                .clock_digits\n                .iter_mut()\n                .zip(self.clock_targets.iter().copied())\n            {\n                *digit = Transition::new(target, clock_spec(theme));\n            }\n        }\n        self.clock_playing = true;\n        self.clock_started_at = Some(now);\n        self.clock_ticks = 0;\n    }\n\n    fn update_clock(&mut self, now: Instant) {\n        let Some(started) = self.clock_started_at else {\n            return;\n        };\n        let due = now\n            .saturating_duration_since(started)\n            .as_millis()\n            .checked_div(CLOCK_TICK.as_millis())\n            .unwrap_or(0) as u16;\n        while self.clock_ticks < due && self.clock_minutes < CLOCK_END {\n            self.clock_ticks += 1;\n            self.clock_minutes = (self.clock_minutes + CLOCK_STEP).min(CLOCK_END);\n            for (target, next) in self\n                .clock_targets\n                .iter_mut()\n                .zip(clock_digits(self.clock_minutes))\n            {\n                *target = advance_digit(*target, next);\n            }\n        }\n        if self.clock_minutes >= CLOCK_END {\n            self.clock_playing = false;\n            self.clock_started_at = None;\n            self.clock_ticks = 0;\n        }\n    }\n\n    fn sliding_time(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let spec = clock_spec(theme);\n        let values: [f32; 4] = std::array::from_fn(|index| {\n            let mut digit = self.clock_digits[index].spec(spec);\n            digit.set(self.clock_targets[index]);\n            let value = digit.animate(window, cx);\n            self.clock_digits[index] = digit;\n            value\n        });\n        let announced = format_time(self.clock_minutes);\n        let play_label = if self.clock_playing { \"Pause\" } else { \"Play\" };\n\n        demo_panel(theme, \"Four interrupted transitions on one clock\")\n            .child(\n                div()\n                    .row()\n                    .items_center()\n                    .gap(px(theme.space(Space::Xs)))\n                    .child(rolling_digit(theme, values[0]))\n                    .child(rolling_digit(theme, values[1]))\n                    .child(\n                        div()\n                            .h(px(52.0))\n                            .flex()\n                            .items_center()\n                            .mono(theme)\n                            .text_size(px(36.0))\n                            .child(\":\"),\n                    )\n                    .child(rolling_digit(theme, values[2]))\n                    .child(rolling_digit(theme, values[3]))\n                    .semantic_in(\n                        cx,\n                        NodeSpec::new(\"scene.motion.clock\", Role::Status)\n                            .text(\"Simulated time\")\n                            .value(announced),\n                    ),\n            )\n            .child(\n                Button::new(\"scene.motion.clock.play\")\n                    .label(play_label)\n                    .secondary()\n                    .on_click(|_, cx| {\n                        let now = cx.background_executor().now();\n                        let theme = cx.theme().clone();\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.toggle_clock(now, &theme)\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n            .into_any_element()\n    }\n\n    fn spring(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let mut indicator = self.spring_indicator.spec(spring_spec());\n        indicator.set(if self.spring_selected == 0 {\n            0.0\n        } else {\n            120.0\n        });\n        let left = indicator.animate(window, cx);\n        self.spring_indicator = indicator;\n        let selected = self.spring_selected;\n\n        let segment = |id: &'static str, label: &'static str, index: usize| {\n            div().w(px(120.0)).child(\n                Button::new(id)\n                    .label(label)\n                    .ghost()\n                    .selected(selected == index)\n                    .full_width(true)\n                    .on_click(move |_, cx| {\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.spring_selected = index\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n        };\n\n        demo_panel(theme, \"Velocity survives rapid retargeting\")\n            .child(\n                div()\n                    .relative()\n                    .w(px(240.0))\n                    .radius(theme, Radius::Control)\n                    .well(theme)\n                    .child(\n                        div()\n                            .row()\n                            .child(segment(\"scene.motion.spring.queue\", \"Queue\", 0))\n                            .child(segment(\"scene.motion.spring.timeline\", \"Timeline\", 1)),\n                    )\n                    .child(\n                        div()\n                            .absolute()\n                            .left(px(left))\n                            .top_0()\n                            .w(px(120.0))\n                            .h(px(theme.control.md.height))\n                            .radius(theme, Radius::Control)\n                            .bg(theme.colors.selected)\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(\"scene.motion.spring.indicator\", Role::Status)\n                                    .text(\"Selected segment indicator\")\n                                    .value(if selected == 0 { \"Queue\" } else { \"Timeline\" }),\n                            ),\n                    ),\n            )\n            .into_any_element()\n    }\n\n    fn keyframes(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let now = cx.background_executor().now();\n        let started = *self.keyframes_started_at.get_or_insert(now);\n        let elapsed = now.saturating_duration_since(started);\n        let period = Duration::from_millis(1_200);\n        let still = cx.reduce_motion();\n        if !still {\n            window.request_animation_frame();\n        }\n        let path = activity_keyframes(theme);\n        let bars = [\n            \"clone\", \"resolve\", \"compile\", \"test\", \"lint\", \"package\", \"publish\",\n        ];\n\n        demo_panel(theme, \"One validated path, seven delayed playheads\")\n            .child(\n                div()\n                    .h(px(72.0))\n                    .row()\n                    .items_end()\n                    .gap(px(theme.space(Space::Sm)))\n                    .children(bars.into_iter().enumerate().map(|(index, name)| {\n                        let delay = Duration::from_millis(index as u64 * 80);\n                        let phase = if still || elapsed < delay {\n                            0.0\n                        } else {\n                            elapsed.saturating_sub(delay).as_secs_f32() / period.as_secs_f32()\n                        };\n                        let value = path.sample(phase.rem_euclid(1.0));\n                        div()\n                            .w(px(18.0))\n                            .h(px(18.0 + 38.0 * value))\n                            .radius(theme, Radius::Small)\n                            .bg(theme.colors.accent)\n                            .opacity(0.35 + 0.65 * value)\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(\n                                    format!(\"scene.motion.keyframes.{name}\"),\n                                    Role::Status,\n                                )\n                                .text(format!(\"{name} activity\"))\n                                .value(format!(\"{value:.3}\")),\n                            )\n                    })),\n            )\n            .into_any_element()\n    }\n\n    fn presence(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let progress = self.presence.animate(window, cx);\n        let visible = self.presence.is_rendered();\n        let button = if self.present {\n            \"Hide notice\"\n        } else {\n            \"Show notice\"\n        };\n\n        demo_panel(theme, \"Logical absence waits for the exit to finish\")\n            .child(\n                div()\n                    .h(px(76.0))\n                    .flex()\n                    .items_center()\n                    .children(visible.then(|| {\n                        div()\n                            .w(px(360.0))\n                            .p(px(theme.space(Space::Md)))\n                            .radius(theme, Radius::Card)\n                            .bg(theme.colors.accent.opacity(0.14))\n                            .opacity(progress)\n                            .child(crate::foundation::text(\n                                theme,\n                                TypeScale::Body,\n                                \"The verified result is ready to review.\",\n                            ))\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(\"scene.motion.presence.notice\", Role::Status)\n                                    .text(\"The verified result is ready to review.\"),\n                            )\n                    })),\n            )\n            .child(\n                Button::new(\"scene.motion.presence.toggle\")\n                    .label(button)\n                    .secondary()\n                    .on_click(|_, cx| {\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.present = !scene.present;\n                            if scene.present {\n                                scene.presence.show();\n                            } else {\n                                scene.presence.hide();\n                            }\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n            .into_any_element()\n    }\n\n    fn stagger(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let now = cx.background_executor().now();\n        let started = *self.stagger_started_at.get_or_insert(now);\n        let elapsed = now.saturating_duration_since(started);\n        let spec = MotionSpec::new(360, Easing::EaseOut.curve(theme));\n        let stagger = Stagger::from_millis(90);\n        let total = stagger.total(3, spec);\n        let still = cx.reduce_motion();\n        if !still && elapsed < total {\n            window.request_animation_frame();\n        }\n        let rows = [\n            (\"plan\", \"Plan the release\"),\n            (\"build\", \"Build the artifacts\"),\n            (\"publish\", \"Publish the result\"),\n        ];\n\n        demo_panel(theme, \"A shared clock spreads one entrance across a list\")\n            .child(div().column().gap(px(theme.space(Space::Sm))).children(\n                rows.into_iter().enumerate().map(|(index, (id, label))| {\n                    let progress = if still {\n                        1.0\n                    } else {\n                        stagger.progress_at(elapsed, index, 3, spec)\n                    };\n                    div()\n                        .relative()\n                        .left(px(24.0 * (1.0 - progress)))\n                        .w(px(360.0))\n                        .p(px(theme.space(Space::Sm)))\n                        .radius(theme, Radius::Control)\n                        .well(theme)\n                        .opacity(progress)\n                        .child(crate::foundation::text(theme, TypeScale::Body, label))\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(format!(\"scene.motion.stagger.{id}\"), Role::Status)\n                                .text(label)\n                                .value(format!(\"replay {}\", self.stagger_generation)),\n                        )\n                }),\n            ))\n            .child(\n                Button::new(\"scene.motion.stagger.replay\")\n                    .label(\"Replay\")\n                    .secondary()\n                    .on_click(|_, cx| {\n                        let now = cx.background_executor().now();\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.stagger_generation += 1;\n                            scene.stagger_started_at = Some(now);\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n            .into_any_element()\n    }\n}\n\n/// Five interactive demonstrations of interruption, physical motion,\n/// authored timelines, delayed unmount and list choreography.\npub(super) fn motion_primitives(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneMotionPrimitives>() {\n        cx.set_global(SceneMotionPrimitives::new(cx.theme()));\n    }\n    let now = cx.background_executor().now();\n    let theme = cx.theme().clone();\n    let selected = cx.global::<SceneMotionPrimitives>().demo;\n    let tabs = Tabs::new(\"scene.motion.tabs\")\n        .tabs([\n            TabItem::new(\"sliding-time\", \"Sliding time\"),\n            TabItem::new(\"spring\", \"Spring\"),\n            TabItem::new(\"keyframes\", \"Keyframes\"),\n            TabItem::new(\"presence\", \"Presence\"),\n            TabItem::new(\"stagger\", \"Stagger\"),\n        ])\n        .selected(selected.id())\n        .on_select(|id, _, cx| {\n            let Some(demo) = MotionDemo::from_id(id.as_ref()) else {\n                return;\n            };\n            let theme = cx.theme().clone();\n            cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| scene.select(demo, &theme));\n            cx.refresh_windows();\n        });\n\n    let body = cx.update_global::<SceneMotionPrimitives, AnyElement>(|scene, cx| {\n        scene.update_clock(now);\n        if scene.clock_playing {\n            window.request_animation_frame();\n        }\n        match scene.demo {\n            MotionDemo::SlidingTime => scene.sliding_time(&theme, window, cx),\n            MotionDemo::Spring => scene.spring(&theme, window, cx),\n            MotionDemo::Keyframes => scene.keyframes(&theme, window, cx),\n            MotionDemo::Presence => scene.presence(&theme, window, cx),\n            MotionDemo::Stagger => scene.stagger(&theme, window, cx),\n        }\n    });\n\n    stack(&theme)\n        .w(px(640.0))\n        .child(tabs)\n        .child(body)\n        .into_any_element()\n}\n\nfn clock_spec(theme: &Theme) -> MotionSpec {\n    MotionSpec::new(CLOCK_TRANSITION_MS, Easing::EaseInOut.curve(theme))\n}\n\nfn spring_spec() -> MotionSpec {\n    // `bounce = 1 - damping_ratio`, so this is the same 420ms / 0.68 policy\n    // used by the reference segmented indicator.\n    MotionSpec::sprung(Spring::perceptual(Duration::from_millis(420), 0.32))\n}\n\nfn presence_spec(theme: &Theme) -> MotionSpec {\n    MotionSpec::new(360, Easing::EaseInOut.curve(theme))\n}\n\nfn activity_keyframes(theme: &Theme) -> Keyframes<f32> {\n    let linear = MotionSpec::new(1_200, CubicBezier::new(0.0, 0.0, 1.0, 1.0));\n    Keyframes::new(\n        theme,\n        linear,\n        [\n            Keyframe::new(0.0, 0.0),\n            Keyframe::new(0.35, 1.0),\n            // Local keyframes attach the curve to the stop being reached. Put\n            // EaseOut on the 0.7 stop so the outgoing 0.35..0.7 segment has\n            // the same curve as the reference implementation.\n            Keyframe::new(0.7, 0.0).eased(Easing::EaseOut),\n            Keyframe::new(1.0, 0.0),\n        ],\n    )\n    .expect(\"the activity path has four stops\")\n}\n\nfn demo_panel(theme: &Theme, caption_text: &'static str) -> gpui::Div {\n    div()\n        .min_h(px(260.0))\n        .w_full()\n        .column()\n        .items_center()\n        .justify_center()\n        .gap(px(theme.space(Space::Lg)))\n        .p(px(theme.space(Space::Xl)))\n        .radius(theme, Radius::Card)\n        .card_surface(theme, CardVariant::Elevated)\n        .child(caption(theme, caption_text))\n}\n\nfn rolling_digit(theme: &Theme, value: f32) -> gpui::Div {\n    let whole = value.floor();\n    let fraction = value - whole;\n    let current = (whole as i32).rem_euclid(10);\n    let next = (current + 1).rem_euclid(10);\n    let glyph = |digit: i32, top: f32| {\n        div()\n            .absolute()\n            .left_0()\n            .right_0()\n            .top(px(top))\n            .h(px(52.0))\n            .flex()\n            .items_center()\n            .justify_center()\n            .child(digit.to_string())\n    };\n\n    div()\n        .relative()\n        .w(px(38.0))\n        .h(px(52.0))\n        .overflow_hidden()\n        .radius(theme, Radius::Control)\n        .well(theme)\n        .mono(theme)\n        .text_size(px(40.0))\n        .child(glyph(current, -52.0 * fraction))\n        .child(glyph(next, 52.0 * (1.0 - fraction)))\n}\n\nfn clock_digits(minutes: u16) -> [u8; 4] {\n    let hour = minutes / 60;\n    let minute = minutes % 60;\n    [\n        (hour / 10) as u8,\n        (hour % 10) as u8,\n        (minute / 10) as u8,\n        (minute % 10) as u8,\n    ]\n}\n\nfn format_time(minutes: u16) -> String {\n    format!(\"{:02}:{:02}\", minutes / 60, minutes % 60)\n}\n\n/// The next scalar congruent to `digit`, always travelling forward around the\n/// decimal wheel. Thus 8 → 0 becomes 8 → 10 rather than rolling backwards.\nfn advance_digit(current: f32, digit: u8) -> f32 {\n    let current_digit = (current.round() as i32).rem_euclid(10);\n    let distance = (i32::from(digit) - current_digit).rem_euclid(10);\n    current + distance as f32\n}\n\npub(super) fn micro(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // Each motion gets a cell of its own. A still frame cannot show any of\n    // them moving, so what the picture has to carry instead is that there are\n    // five of them, that they are the same size, and which name belongs to\n    // which mark.\n    let cell = |mark: MicroMark| {\n        div()\n            .w(px(96.0))\n            .flex_none()\n            .column()\n            .items_center()\n            .justify_center()\n            .gap_token(&theme, Space::Xs)\n            .py_token(&theme, Space::Md)\n            .radius(&theme, Radius::Card)\n            .well(&theme)\n            .child(mark)\n    };\n\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"named functions of time; reduced motion leaves the glyph still\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(cell(MicroMark::new(\n                    \"scene.micro.heartbeat\",\n                    Micro::Heartbeat,\n                    \"Hb\",\n                )))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.bounce\",\n                    Micro::Bounce,\n                    \"Bn\",\n                )))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.wobble\",\n                    Micro::Wobble,\n                    \"Wb\",\n                )))\n                .child(cell(MicroMark::new(\"scene.micro.pop\", Micro::Pop, \"Pp\")))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.sparkle\",\n                    Micro::Sparkle,\n                    \"Sk\",\n                ))),\n        )\n        .child(caption(\n            &theme,\n            \"the same functions on things that are not glyphs\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(div().child(Badge::new(\"12 unread\").neutral()).micro(\n                    \"scene.micro.badge\",\n                    Micro::Pop,\n                    cx,\n                ))\n                .child(div().child(Tag::new(\"scene.micro.tag\", \"fixture\")).micro(\n                    \"scene.micro.tag.mark\",\n                    Micro::Wobble,\n                    cx,\n                ))\n                .child(div().child(StatusDot::new(Tone::Success)).micro(\n                    \"scene.micro.dot\",\n                    Micro::Heartbeat,\n                    cx,\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"a described motion, sampled along its own run rather than played\",\n        ))\n        .child(described(&theme))\n        .into_any_element()\n}\n\n/// A motion written with `motion!`, laid out as the frames it passes through.\n///\n/// This is the one thing a still frame can say about motion: a described\n/// motion can be read at a point in its run without running it, so the frames\n/// are drawn side by side and the picture is the same every time. Playing it\n/// is [`Animator`]'s job and needs a window; the gallery is where that is\n/// looked at.\nfn described(theme: &Theme) -> gpui::Div {\n    let arrive = crate::motion! {\n        duration: 420;\n        ease: overshoot;\n        opacity: 0.0 => 1.0;\n        y: 12.0 => 0.0;\n    };\n\n    let frame = |head: f32, label: &'static str| {\n        let sample = arrive.sample(theme, head);\n        div()\n            .w(px(96.0))\n            .flex_none()\n            .column()\n            .items_center()\n            .gap_token(theme, Space::Xs)\n            .py_token(theme, Space::Md)\n            .radius(theme, Radius::Card)\n            .well(theme)\n            // The slot stays drawn at every head. At the start of the run the\n            // mark has not arrived yet, and a cell with nothing in it reads\n            // as a frame that failed to render rather than as the frame where\n            // the motion has not begun.\n            .child(\n                div()\n                    .w(px(56.0))\n                    .h(px(24.0))\n                    .radius(theme, Radius::Control)\n                    .bg(theme.colors.track)\n                    .child(\n                        sample.apply(\n                            div()\n                                .size_full()\n                                .radius(theme, Radius::Control)\n                                .bg(theme.colors.accent),\n                        ),\n                    ),\n            )\n            .child(caption(theme, label))\n    };\n\n    row(theme)\n        .gap_token(theme, Space::Sm)\n        .child(frame(0.0, \"start\"))\n        .child(frame(0.25, \"quarter\"))\n        .child(frame(0.5, \"half\"))\n        .child(frame(0.75, \"three quarters\"))\n        .child(frame(1.0, \"settled\"))\n}\n\n//! Getting to a place, and knowing which place you are in.\n\nuse super::support::*;\n\npub(super) fn bottom_navigation(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::{BottomNavigation, NavigationItem};\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(390.0))\n        .child(caption(\n            &theme,\n            \"Fixture destinations; selected, enabled and disabled actions\",\n        ))\n        .child(\n            BottomNavigation::new(\"scene.bottom-navigation.ready\")\n                .items([\n                    NavigationItem::new(\"library\", \"Library\"),\n                    NavigationItem::new(\"search\", \"Search\"),\n                    NavigationItem::new(\"settings\", \"Settings\").disabled(true),\n                ])\n                .selected(\"search\")\n                .on_select(|_, _, _| {}),\n        )\n        .child(caption(\n            &theme,\n            \"No host handler: destinations are unavailable\",\n        ))\n        .child(\n            BottomNavigation::new(\"scene.bottom-navigation.unavailable\")\n                .items([\n                    NavigationItem::new(\"library\", \"Library\"),\n                    NavigationItem::new(\"search\", \"Search\"),\n                ])\n                .selected(\"library\"),\n        )\n        .into_any_element()\n}\n\npub(super) fn adaptive_navigation(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{AppBar, PageLayout, Responsive};\n    use crate::navigation::{BottomNavigation, NavigationItem};\n    let theme = cx.theme().clone();\n    let make = |id: &'static str, width: f32| {\n        div().w(px(width)).h(px(320.0)).child(\n            Responsive::new(id, move |size, _, _| {\n                let wide = size.at_least(600.0);\n                let body = div()\n                    .flex()\n                    .size_full()\n                    .when(wide, |body| {\n                        body.child(\n                            Sidebar::new(format!(\"{id}.rail\"))\n                                .section(SidebarSection::new(\"destinations\").items([\n                                    SidebarItem::new(\"library\", \"Library\"),\n                                    SidebarItem::new(\"search\", \"Search\"),\n                                ]))\n                                .active(\"search\")\n                                .on_select(|_, _, _| {}),\n                        )\n                    })\n                    .child(\n                        div()\n                            .flex_1()\n                            .p(px(16.0))\n                            .child(\"Fixture content · caller owns route selection\"),\n                    );\n                PageLayout::new(format!(\"{id}.page\"), body)\n                    .insets(gpui::WindowInsets::default())\n                    .header(AppBar::new(\n                        format!(\"{id}.bar\"),\n                        if wide {\n                            \"Wide container\"\n                        } else {\n                            \"Compact container\"\n                        },\n                    ))\n                    .hide_footer(wide)\n                    .footer(\n                        BottomNavigation::new(format!(\"{id}.bottom\"))\n                            .items([\n                                NavigationItem::new(\"library\", \"Library\"),\n                                NavigationItem::new(\"search\", \"Search\"),\n                            ])\n                            .selected(\"search\")\n                            .on_select(|_, _, _| {}),\n                    )\n                    .into_any_element()\n            })\n            .fill(),\n        )\n    };\n    stack(&theme)\n        .child(caption(&theme, \"Same caller data; measured container width selects rail or bottom destinations. No platform guessing.\"))\n        .child(make(\"scene.adaptive-navigation.wide\", 640.0))\n        .child(make(\"scene.adaptive-navigation.compact\", 350.0))\n        .into_any_element()\n}\n\npub(super) fn nav_back_preview(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::{BackTransition, NavHistory, NavStack};\n    let theme = cx.theme().clone();\n    let state = window.use_keyed_state(\"scene.nav-back-preview.state\", cx, |_, cx| {\n        let mut history = NavHistory::new(\"overview\");\n        history.push(\"details\");\n        (history, None::<BackTransition>, cx.focus_handle())\n    });\n    let (history, preview, focus) = state.read(cx).clone();\n    let progress = state.clone();\n    let cancel = state.clone();\n    let commit = state.clone();\n    let reset = state.clone();\n    let mut page = NavStack::new(\n        \"scene.nav-back-preview\",\n        &history,\n        history.current().clone(),\n        focus,\n        Card::new()\n            .padding(Space::Xl)\n            .child(history.current().clone()),\n    );\n    if let Some(preview) = &preview {\n        page = page.back_transition(preview);\n    }\n    stack(&theme).w(px(550.0))\n        .child(caption(&theme, \"Fixture host-fed progress; cancel retains the page, accept mutates caller history. Reduced motion holds full opacity.\"))\n        .child(Slider::new(\"scene.nav-back-preview.progress\").label(\"Back progress\")\n            .range(0.0, 1.0).value(preview.as_ref().map_or(0.0, BackTransition::progress))\n            .disabled(!history.can_pop()).on_change(move |value, _, cx| progress.update(cx, |state, cx| {\n                if state.1.is_none() { state.1 = BackTransition::begin(&state.0); }\n                if let Some(preview) = &mut state.1 { preview.update(value); }\n                cx.notify();\n            })))\n        .child(row(&theme)\n            .child(Button::new(\"scene.nav-back-preview.cancel\").label(\"Cancel\").disabled(preview.is_none())\n                .on_click(move |_, cx| cancel.update(cx, |state, cx| {\n                    if let Some(preview) = state.1.take() { preview.cancel(); } cx.notify();\n                })))\n            .child(Button::new(\"scene.nav-back-preview.accept\").label(\"Accept back\").disabled(preview.is_none())\n                .on_click(move |_, cx| commit.update(cx, |state, cx| {\n                    if let Some(preview) = state.1.take() { preview.commit(&mut state.0); } cx.notify();\n                })))\n            .child(Button::new(\"scene.nav-back-preview.reset\").label(\"Forward\").disabled(!history.can_forward())\n                .on_click(move |_, cx| reset.update(cx, |state, cx| { state.0.forward(); cx.notify(); }))))\n        .child(page).into_any_element()\n}\n\npub(super) fn nav_stack(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::nav_stack::{NavHistory, NavStack};\n    let theme = cx.theme().clone();\n    let state = window.use_keyed_state(\"scene.nav-stack.state\", cx, |_, cx| {\n        (\n            NavHistory::new(\"overview\"),\n            cx.focus_handle(),\n            cx.focus_handle(),\n            cx.focus_handle(),\n        )\n    });\n    let (history, overview, details, replacement) = state.read(cx).clone();\n    let focus = match history.current().as_ref() {\n        \"details\" => details,\n        \"replacement\" => replacement,\n        _ => overview,\n    };\n    let back = state.clone();\n    let forward = state.clone();\n    let push = state.clone();\n    let replace = state.clone();\n    stack(&theme).w(px(620.0))\n        .child(caption(&theme, \"Caller-owned visit history; back retains forward visits, push forks, replace preserves branches\"))\n        .child(row(&theme)\n            .child(Button::new(\"scene.nav-stack.back\").label(\"Back\").disabled(!history.can_pop())\n                .on_click(move |_, cx| back.update(cx, |state, cx| { state.0.pop(); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.forward\").label(\"Forward\").disabled(!history.can_forward())\n                .on_click(move |_, cx| forward.update(cx, |state, cx| { state.0.forward(); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.push\").label(\"Push details\")\n                .disabled(history.entries().iter().any(|id| id.as_ref() == \"details\"))\n                .on_click(move |_, cx| push.update(cx, |state, cx| { state.0.push(\"details\"); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.replace\").label(\"Replace\")\n                .disabled(history.entries().iter().any(|id| id.as_ref() == \"replacement\"))\n                .on_click(move |_, cx| replace.update(cx, |state, cx| { state.0.replace(\"replacement\"); cx.notify(); }))))\n        .child(NavStack::new(\"scene.nav-stack\", &history, history.current().clone(), focus,\n            Card::new().padding(Space::Xl)\n                .child(crate::foundation::text(&theme, TypeScale::Title, history.current().clone()))\n                .child(crate::foundation::text(&theme, TypeScale::Body,\n                    \"Only the active page is mounted. Return visits restore focus without keeping inactive controls live.\"))))\n        .into_any_element()\n}\n\npub(super) fn carousel(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let page = |id: &'static str, label: &'static str, text: &'static str| {\n        CarouselItem::new(\n            id,\n            label,\n            Card::new()\n                .id(format!(\"scene.carousel.card.{id}\"))\n                .padding(Space::Xl)\n                .child(crate::foundation::text(&theme, TypeScale::Title, label))\n                .child(crate::foundation::text(&theme, TypeScale::Body, text)),\n        )\n    };\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"A controlled, focusable page track with direct selection and reduced-motion-aware transitions\",\n        ))\n        .child(\n            Carousel::new(\"scene.carousel.ready\")\n                .items([\n                    page(\"overview\", \"Overview\", \"The first page is active.\"),\n                    page(\"details\", \"Details\", \"The caller owns the page content.\"),\n                    page(\"history\", \"History\", \"The track reports page intents.\"),\n                ])\n                .active(\"details\")\n                .looped(true)\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Carousel::new(\"scene.carousel.empty\")\n                .phase(Phase::Empty)\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(caption(\n            &theme,\n            \"In-content tabs: raised control, quiet track, tabular count\",\n        ))\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        .child(caption(\n            &theme,\n            \"places, not documents: Regular Liquid capsules, \\\n             with a translucent selected fill on the material\",\n        ))\n        .child(\n            Tabs::new(\"scene.tabs.capsules\")\n                .capsules()\n                .control_size(ControlSize::Sm)\n                .tabs([\n                    TabItem::new(\"code\", \"Portal\")\n                        .icon(Icon::Terminal)\n                        .tint(theme.colors.accent),\n                    TabItem::new(\"game\", \"Harbour\")\n                        .icon(Icon::Play)\n                        .tint(theme.colors.warning),\n                    TabItem::new(\"design\", \"notes\")\n                        .icon(Icon::Pen)\n                        .tint(theme.colors.info),\n                ])\n                .selected(\"code\")\n                .on_select(|_, _, _| {}),\n        )\n        // The body belongs to the caller: tabs render the strip only.\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Runs are rendered by the caller, not by the strip.\",\n        ))\n        .child(caption(\n            &theme,\n            \"the other answer to a strip with no room: it scrolls, and the \\\n             edge with more behind it fades\",\n        ))\n        // Deliberately narrower than its tabs, because a strip that fits shows\n        // nothing about what a strip that does not fit does.\n        .child(\n            div().w(px(300.0)).child(\n                Tabs::new(\"scene.tabs.spaces\")\n                    .tabs((1..=9).map(|n| {\n                        TabItem::new(format!(\"space-{n}\"), format!(\"Workspace {n}\"))\n                            .icon(Icon::Widget)\n                    }))\n                    .selected(\"space-5\")\n                    .scrolling()\n                    .on_select(|_, _, _| {}),\n            ),\n        )\n        .into_any_element()\n}\n\n/// The overflow menu the document-tab scene hangs off the strip.\n///\n/// The strip does not own it: a menu is an entity with an open state that\n/// outlives a frame, so the caller builds it and the strip fills it.\npub(super) struct SceneDocumentTabs {\n    overflow: Entity<Menu>,\n}\n\nimpl Global for SceneDocumentTabs {}\n\npub(super) 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}\n\npub(super) struct SceneAnchorList {\n    overflow: Entity<Menu>,\n}\n\nimpl Global for SceneAnchorList {}\n\npub(super) fn anchor_list(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneAnchorList>() {\n        let label = cx.strings().text(StringKey::AnchorMoreSections);\n        let overflow = cx.new(|cx| Menu::new(\"scene.anchor-list.menu\", window, cx).trigger(label));\n        cx.set_global(SceneAnchorList { overflow });\n    }\n    let theme = cx.theme().clone();\n    let overflow = cx.global::<SceneAnchorList>().overflow.clone();\n    stack(&theme)\n        .w(px(700.0))\n        .child(caption(\n            &theme,\n            \"section intents only; the declared overflow moves anchors into a menu\",\n        ))\n        .child(\n            AnchorList::new(\"scene.anchor-list\")\n                .anchors([\n                    Anchor::new(\"summary\", \"Summary\"),\n                    Anchor::new(\"inputs\", \"Inputs\"),\n                    Anchor::new(\"constraints\", \"Constraints\"),\n                    Anchor::new(\"verification\", \"Verification\"),\n                    Anchor::new(\"history\", \"History\").disabled(true),\n                ])\n                .active(\"inputs\")\n                .overflow_after(3)\n                .overflow_menu(overflow)\n                .on_navigate(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Requests go out over the system proxy.\",\n                        )),\n                )\n                .section(\n                    AccordionSection::new(\"storage\", \"Storage\")\n                        .description(\"Where verified results are kept\")\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Nothing is written outside the workspace.\",\n                        )),\n                )\n                .section(\n                    AccordionSection::new(\"policy\", \"Managed by policy\")\n                        .description(\"This machine cannot change these\")\n                        .disabled(true)\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Set by the administrator.\",\n                        )),\n                ),\n        )\n        // The open section is the last one, which is the case where the body\n        // meets the card's rounded corners.\n        .child(\n            Accordion::new(\"scene.accordion.release\")\n                .expanded_ids(&[\"publish\"])\n                .on_toggle(|_, _, _, _| {})\n                .section(\n                    AccordionSection::new(\"build\", \"Build\")\n                        .description(\"What the last run produced\"),\n                )\n                .section(\n                    AccordionSection::new(\"publish\", \"Publish\")\n                        .description(\"Where the signed bundle goes\")\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"The bundle is published to the workspace channel.\",\n                        )),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) 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}\n\npub(super) fn navigation_sections() -> Vec<SidebarSection> {\n    vec![\n        SidebarSection::new(\"work\").title(\"Work\").items([\n            SidebarItem::new(\"runs\", \"Runs\")\n                .icon(Icon::List)\n                .badge(\"12\")\n                .children([\n                    SidebarItem::new(\"runs.active\", \"Active\").icon(Icon::Refresh),\n                    SidebarItem::new(\"runs.archived\", \"Archived\").icon(Icon::Archive),\n                ]),\n            SidebarItem::new(\"files\", \"Files\").icon(Icon::Folder),\n        ]),\n        SidebarSection::new(\"admin\").title(\"Administration\").items([\n            SidebarItem::new(\"settings\", \"Settings\").icon(Icon::Settings),\n            SidebarItem::new(\"policy\", \"Managed by policy\")\n                .icon(Icon::Key)\n                .disabled(true),\n        ]),\n    ]\n}\n\n#[derive(Default)]\nstruct SceneSidebar {\n    active: Option<SharedString>,\n    collapsed: bool,\n}\n\nimpl Global for SceneSidebar {}\n\npub(super) fn sidebar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSidebar>() {\n        cx.set_global(SceneSidebar::default());\n    }\n    let theme = cx.theme().clone();\n    let active = cx\n        .global::<SceneSidebar>()\n        .active\n        .clone()\n        .unwrap_or_else(|| \"runs.active\".into());\n    let collapsed = cx.global::<SceneSidebar>().collapsed;\n    let rail = |ident: &'static str, collapsed: bool| {\n        Sidebar::new(ident)\n            .sections(navigation_sections())\n            .active(active.clone())\n            .collapsed(collapsed)\n            .footer(\n                crate::foundation::text(\n                    &theme,\n                    TypeScale::Caption,\n                    if collapsed {\n                        SharedString::new_static(\"v0\")\n                    } else {\n                        SharedString::new_static(\"Fixture workspace\")\n                    },\n                )\n                .text_tone(&theme, TextTone::Faint),\n            )\n            .on_select(|id, window, cx| {\n                cx.global_mut::<SceneSidebar>().active = Some(id);\n                window.refresh();\n            })\n    };\n\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"Fixture navigation — select a destination, toggle a branch, or collapse the rail\",\n        ))\n        .child(\n            div()\n                .flex()\n                .flex_row()\n                .h(px(400.0))\n                .gap(px(theme.space(Space::Lg)))\n                .child(\n                    rail(\"scene.sidebar.expanded\", collapsed)\n                        .width(260.0)\n                        .header(caption(\n                            &theme,\n                            if collapsed { \"W\" } else { \"Fixture workspace\" },\n                        ))\n                        .on_collapse(|collapsed, window, cx| {\n                            cx.global_mut::<SceneSidebar>().collapsed = collapsed;\n                            window.refresh();\n                        }),\n                )\n                .child(rail(\"scene.sidebar.collapsed\", true)),\n        )\n        .child(caption(\n            &theme,\n            \"Current destination is caller-owned; arrow keys move focus without navigating\",\n        ))\n        .into_any_element()\n}\n\npub(super) fn sidebar_overflow(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Fixture stress states — fixed slots, scrolling, long labels, and a closed current branch\"))\n        .child(div().flex().gap(px(theme.space(Space::Lg))).h(px(320.0))\n            .child(div().w(px(300.0)).h_full().child(Sidebar::new(\"scene.sidebar-overflow.scroll\")\n                .fill_width()\n                .header(caption(&theme, \"Fixed header\"))\n                .footer(caption(&theme, \"Fixed footer\"))\n                .section(SidebarSection::new(\"destinations\").title(\"Destinations\").items(\n                    (0..24).map(|index| SidebarItem::new(format!(\"destination-{index}\"),\n                        if index == 1 { \"A long destination label that needs an ellipsis\".to_owned() }\n                        else { format!(\"Fixture destination {}\", index + 1) }).disabled(index == 2))\n                ))\n                .active(\"destination-1\")\n                .on_select(|_, _, _| {})))\n            .child(Sidebar::new(\"scene.sidebar-overflow.closed\")\n                .sections(navigation_sections()).expanded_ids(&[])\n                .active(\"runs.active\")\n                .header(caption(&theme, \"Host refuses branch expansion\"))\n                .footer(caption(&theme, \"Current: Active\"))\n                .on_select(|_, _, _| {}).on_toggle(|_, _, _, _| {})))\n        .into_any_element()\n}\n\n/// The page-size control of the pagination scene, kept across frames.\npub(super) struct ScenePagination {\n    page_size: Entity<Select>,\n}\n\nimpl Global for ScenePagination {}\n\npub(super) 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                .name(\"Rows per page\")\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(caption(\n            &theme,\n            \"a known total, with the page size the host offered\",\n        ))\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(caption(\n            &theme,\n            \"an unknown total: no numbers, no last page, and no count invented\",\n        ))\n        .child(\n            Pagination::new(\"scene.pagination.unknown\")\n                .page(3)\n                .unknown_total(true)\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    SharedString::new_static(\"The body of the current step belongs to the caller.\"),\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}\n\npub(super) fn undo_history(_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            \"the caller owns every revision and whether it can be restored\",\n        ))\n        .child(\n            UndoHistory::new(\"scene.undo-history\", \"Document undo history\")\n                .entries([\n                    HistoryEntry::new(\"opened\", \"Opened the fixture\")\n                        .description(\"The initial verified document\")\n                        .source(\"Fixture host\")\n                        .time(\"10:14\"),\n                    HistoryEntry::new(\"renamed\", \"Renamed the title\")\n                        .source(\"Alex\")\n                        .time(\"10:16\"),\n                    HistoryEntry::new(\"imported\", \"Imported archived blocks\")\n                        .description(\"The archive is no longer available\")\n                        .source(\"Archive\")\n                        .time(\"10:18\")\n                        .unavailable(\"This revision cannot be restored without the archive.\"),\n                    HistoryEntry::new(\"current\", \"Reordered the summary\")\n                        .description(\"Current document\")\n                        .source(\"Alex\")\n                        .time(\"10:21\"),\n                    HistoryEntry::new(\"draft\", \"Drafted a new conclusion\")\n                        .source(\"Fixture host\")\n                        .time(\"10:23\"),\n                ])\n                .current(\"current\")\n                .on_jump(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"Requests go out over the system proxy.\",\n                ))\n                .on_toggle(|_, _, _| {}),\n        )\n        .child(\n            Collapsible::new(\"scene.collapsible.shut\", \"Diagnostics\")\n                .description(\"Nothing is collected until this is opened\")\n                .body(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"This body is absent from the tree while it is shut.\",\n                ))\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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"Set by the administrator.\",\n                )),\n        )\n        .into_any_element()\n}\n\n//! Surfaces that appear above the page and take a decision.\n\nuse super::support::*;\n\npub(super) fn kbd(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // A keystroke is only ever read beside the thing it performs, so the\n    // exhibit shows it where it is used: at the end of a menu row, at the end\n    // of a sentence, and in the run of special keys whose glyphs are the part\n    // that goes wrong.\n    let named = |label: &'static str, keystroke: &'static str, id: &'static str| {\n        div()\n            .row()\n            .w_full()\n            .items_center()\n            .justify_between()\n            .gap_token(&theme, Space::Md)\n            .py_token(&theme, Space::Xs)\n            .child(crate::foundation::text(&theme, TypeScale::Body, label))\n            .child(Kbd::new(keystroke).id(id))\n    };\n\n    stack(&theme)\n        .w(px(420.0))\n        .child(caption(&theme, \"the shortcut sits with the thing it does\"))\n        .child(\n            div()\n                .column()\n                .w_full()\n                .card_surface(&theme, CardVariant::Elevated)\n                .px_token(&theme, Space::Md)\n                .py_token(&theme, Space::Sm)\n                .child(named(\n                    \"Open the command palette\",\n                    \"cmd-shift-p\",\n                    \"scene.kbd.palette\",\n                ))\n                .child(div().w_full().h(px(theme.space(Space::Sm))))\n                .child(named(\"Copy the selection\", \"ctrl-c\", \"scene.kbd.copy\"))\n                .child(div().w_full().h(px(theme.space(Space::Sm))))\n                .child(named(\"Rename in place\", \"cmd-alt-r\", \"scene.kbd.rename\")),\n        )\n        .child(caption(\n            &theme,\n            \"the keys that need the bundled symbol face\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(Kbd::new(\"enter\").id(\"scene.kbd.confirm\"))\n                .child(Kbd::new(\"escape\").id(\"scene.kbd.dismiss\"))\n                .child(Kbd::new(\"backspace\").id(\"scene.kbd.erase\"))\n                .child(Kbd::new(\"delete\").id(\"scene.kbd.delete\"))\n                .child(Kbd::new(\"tab\").id(\"scene.kbd.advance\"))\n                .child(Kbd::new(\"space\").id(\"scene.kbd.space\"))\n                .child(Kbd::new(\"up\").id(\"scene.kbd.up\"))\n                .child(Kbd::new(\"down\").id(\"scene.kbd.down\")),\n        )\n        .child(\n            div()\n                .row()\n                .items_center()\n                .gap_token(&theme, Space::Xs)\n                .child(crate::foundation::text(&theme, TypeScale::Body, \"Press\"))\n                .child(Kbd::new(\"cmd-enter\").id(\"scene.kbd.inline\"))\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"to send the message.\",\n                ))\n                .text_color(theme.colors.text_muted),\n        )\n        .into_any_element()\n}\n\n/// A page for a modal layer to sit over.\n///\n/// A scrim drawn over an empty canvas is indistinguishable from a fill: the\n/// only thing that shows it is translucent is what stays legible underneath\n/// it. So every scene in this file that raises a modal layer puts a page worth\n/// obscuring behind it rather than one line of text.\nfn page_behind(theme: &Theme, title: &'static str) -> gpui::Div {\n    let card = |heading: &'static str, lines: usize| {\n        div()\n            .flex_1()\n            .min_w_0()\n            .card_surface(theme, CardVariant::Elevated)\n            .overflow_hidden()\n            .child(filler(theme, heading, lines))\n    };\n    div()\n        .column()\n        .w_full()\n        .gap(px(theme.space(Space::Md)))\n        .child(crate::foundation::text(theme, TypeScale::Subtitle, title))\n        .child(\n            div()\n                .row()\n                .w_full()\n                .gap(px(theme.space(Space::Md)))\n                .child(card(\"Runs\", 5))\n                .child(card(\"Details\", 5)),\n        )\n}\n\npub(super) 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(page_behind(&theme, \"Workspace settings\"))\n        .child(\n            Overlay::modal(\"scene.overlay.dialog\")\n                .placement(Placement::Center)\n                .child(\n                    crate::overlay::surface(\n                        \"scene.overlay.surface\",\n                        &theme,\n                        crate::overlay::OverlaySurface::MODAL,\n                    )\n                    .w(px(320.0))\n                    .p(px(theme.spacing.lg))\n                    .gap(px(theme.spacing.sm))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Subtitle,\n                        \"Delete this workspace?\",\n                    ))\n                    .child(\n                        crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Its runs, filters and saved views are removed for everyone. This \\\n                                 cannot be undone.\",\n                        )\n                        .text_tone(&theme, TextTone::Muted),\n                    )\n                    .child(\n                        div()\n                            .row()\n                            .justify_end()\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}\n\n/// The dialog the scene shows, kept across frames.\n///\n/// A dialog owns whether it is open and which element had the keyboard before\n/// it opened, so rebuilding it every frame would reopen it every frame.\npub(super) struct SceneDialog {\n    replace: Entity<Dialog>,\n}\n\nimpl Global for SceneDialog {}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Content behind the dialog\",\n        ))\n        .child(replace)\n        .into_any_element()\n}\n\npub(super) 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                            .accessible_description(\"Writes the theme to a file on disk\")\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}\n\n/// The menu family the scenes show, kept across frames.\n///\n/// Each of these owns whether it is open, where the keyboard is, and which\n/// submenu stands expanded, so rebuilding them every frame would reopen them\n/// every frame. Building them once is also what makes the capture static.\npub(super) struct SceneMenus {\n    menu: Entity<Menu>,\n    context: Entity<ContextMenu>,\n    palette: Entity<CommandPalette>,\n    popover: Entity<Popover>,\n}\n\nimpl Global for SceneMenus {}\n\npub(super) fn menu_items() -> Vec<MenuItem> {\n    vec![\n        MenuItem::section(\"group\", \"This run\"),\n        MenuItem::command(\"copy\", \"Copy run id\")\n            .icon(Icon::Copy)\n            .shortcut(\"cmd-c\"),\n        MenuItem::check(\"follow\", \"Follow output\", true),\n        MenuItem::separator(\"rule\"),\n        MenuItem::command(\"publish\", \"Publish\").disabled(true),\n        MenuItem::submenu(\n            \"share\",\n            \"Share\",\n            [\n                MenuItem::command(\"share.link\", \"Copy link\").shortcut(\"cmd-shift-c\"),\n                MenuItem::command(\"share.export\", \"Export as file\"),\n            ],\n        ),\n        MenuItem::separator(\"destroy\"),\n        MenuItem::command(\"delete\", \"Delete this run\")\n            .icon(Icon::Trash)\n            .destructive(true),\n    ]\n}\n\npub(super) fn scene_commands() -> Vec<Command> {\n    vec![\n        Command::new(\"workspace.open\", \"Open workspace\")\n            .section(\"Workspace\")\n            .shortcut(\"cmd-o\"),\n        Command::new(\"workspace.close\", \"Close workspace\").section(\"Workspace\"),\n        Command::new(\"workspace.publish\", \"Publish workspace\")\n            .section(\"Workspace\")\n            .unavailable(\"Approval is required\"),\n        Command::new(\"editor.wrap\", \"Toggle word wrap\").section(\"Editor\"),\n    ]\n}\n\npub(super) fn ensure_menus(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneMenus>() {\n        return;\n    }\n    let menu = cx.new(|cx| {\n        Menu::new(\"scene.menu.run\", window, cx)\n            .trigger(\"Run actions\")\n            .items(menu_items())\n    });\n    menu.update(cx, |menu, cx| {\n        menu.open_submenu(\"share\", window, cx);\n    });\n\n    // The catalog reviews the drawn surface. Left on `Native`, `open_at` would\n    // hand this list to the operating system on macOS and Windows: a modal\n    // popup no capture can hold, opened under every scene that shares these\n    // fixtures, and on Windows it takes the keyboard from the `menu` scene's\n    // exhibit while the native UIA check reads it.\n    let context = cx.new(|cx| {\n        ContextMenu::new(\"scene.context.run\", window, cx)\n            .name(\"Run actions\")\n            .target(\"run-a04\")\n            .presentation(ContextMenuPresentation::InWindow)\n            .menu(menu_items())\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .w(px(320.0))\n                    .p(px(theme.spacing.md))\n                    .surface(&theme, Surface::Panel)\n                    .radius(&theme, Radius::Card)\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Body,\n                        \"Right-click this fixture row\",\n                    ))\n                    .into_any_element()\n            })\n    });\n    context.update(cx, |context, cx| {\n        context\n            .open_at(gpui::point(px(180.0), px(150.0)), window, cx)\n            .expect(\"in-window fixture\");\n    });\n\n    let palette = cx.new(|cx| {\n        CommandPalette::new(\"scene.palette.commands\", window, cx).commands(scene_commands())\n    });\n    palette.update(cx, |palette, cx| palette.set_query(\"work\", cx));\n\n    let popover = cx.new(|cx| {\n        Popover::new(\"scene.popover.filters\", window, cx)\n            .trigger(\"Filters\")\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .column()\n                    .w(px(260.0))\n                    .gap(px(theme.spacing.sm))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Body,\n                        \"Anything can live in a popover.\",\n                    ))\n                    .child(\n                        Checkbox::new(\"scene.popover.failing\")\n                            .label(\"Failing runs only\")\n                            .on_change(|_, _, _| {}),\n                    )\n                    .into_any_element()\n            })\n    });\n    popover.update(cx, |popover, cx| popover.open(window, cx));\n\n    cx.set_global(SceneMenus {\n        menu,\n        context,\n        palette,\n        popover,\n    });\n}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The trigger owns whether the surface is open.\",\n        ))\n        .child(popover)\n        .into_any_element()\n}\n\npub(super) fn menu(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_menus(window, cx);\n    let menus = cx.global::<SceneMenus>();\n    let menu = menus.menu.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .h(px(320.0))\n        // An open surface is an overlay and takes no room in the flow, so the\n        // scene reserves the panel's review area explicitly.\n        .child(div().h(px(300.0)).child(menu))\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The right-click reports the row. Nothing is selected by it.\",\n        ))\n        .child(context)\n        .into_any_element()\n}\n\npub(super) 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}\n\n/// The notification layer the scene shows, kept across frames.\n///\n/// The stack, each timer, and each entry animation outlive a frame, so the\n/// layer is built once and the toasts are pushed once with it.\npub(super) struct SceneToasts {\n    layer: Entity<ToastLayer>,\n}\n\nimpl Global for SceneToasts {}\n\npub(super) fn toast(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneToasts>() {\n        let layer = cx.new(|cx| ToastLayer::new(window, cx).capacity(4));\n        cx.set_global(SceneToasts { layer });\n        toast_push(\n            window,\n            cx,\n            Toast::new(\"scene.toast.saved\", \"Theme exported to disk\").tone(Tone::Success),\n        );\n        toast_push(\n            window,\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            window,\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            window,\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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Content behind the notifications\",\n        ))\n        // A failure keeps its report on screen; only the success times out.\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"A danger or warning toast stays until it is dismissed.\",\n        ))\n        .child(layer)\n        .into_any_element()\n}\n\n/// The notification centre the scene shows, kept across frames.\npub(super) struct SceneNotifications {\n    centre: Entity<NotificationCenter>,\n}\n\nimpl Global for SceneNotifications {}\n\npub(super) 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}\n\n/// Glass over the page it covers, which is the only way to see that the\n/// backdrop is blurred rather than merely tinted.\npub(super) fn frost(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let card = |title: &'static str, body: &'static str| {\n        div()\n            .column()\n            .gap(px(theme.space(Space::Xs)))\n            .p(px(theme.space(Space::Md)))\n            .child(crate::foundation::text(\n                &theme,\n                TypeScale::Label,\n                SharedString::from(title),\n            ))\n            .child(caption(&theme, body))\n    };\n    // What is behind the glass is a page, not a test pattern. A block of\n    // accent stripes dropped into a panel reads as a hole cut in it, and it\n    // answers the wrong question anyway: the thing a reader has to be able to\n    // judge is whether text they can otherwise read has gone out of focus.\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(&theme, \"A floating surface on glass\"))\n        .child(\n            div()\n                .relative()\n                .h(px(200.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(filler(&theme, \"Document\", 8))\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(48.0))\n                        // Far enough left to cross the lines. Placed clear of\n                        // them the glass had nothing behind it, so the picture\n                        // could not answer the one question it is here for:\n                        // whether text a reader can otherwise read has gone\n                        // out of focus.\n                        .left(px(64.0))\n                        .w(px(240.0))\n                        .child(\n                            Frost::new(\"scene.frost.popover\")\n                                .radius(Radius::Card)\n                                .child(card(\n                                    \"Rename\",\n                                    \"The page behind stays visible, out of focus\",\n                                )),\n                        ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"The same glass, blurred further and raised above the panel\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(160.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(filler(&theme, \"Files\", 6))\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(32.0))\n                        .left(px(64.0))\n                        .w(px(280.0))\n                        .child(\n                            Frost::new(\"scene.frost.rail\")\n                                // A surface a step above the page it covers.\n                                // Tinted with the page's own colour the glass\n                                // had no surface of its own: at any alpha, a\n                                // fill the colour of what is behind it adds\n                                // nothing, and the rail's words landed\n                                // directly on the words of the file list.\n                                .surface(gpui_kit_theme::Surface::Raised)\n                                .radius(Radius::Dialog)\n                                .blur(32.0)\n                                .child(card(\n                                    \"Rail\",\n                                    \"The lines behind stay legible and out of focus\",\n                                )),\n                        ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// The optics, one at a time and then together, over a backdrop with enough\n/// structure in it that a bend is visible as a bend rather than as a smudge.\n///\n/// The presets sit side by side deliberately: `Frosted` is the control, and\n/// what separates it from `Lens` is exactly the refraction, so a reviewer\n/// looking at the pair is looking at the thing that changed.\n/// One square of the backdrop every optics plate is read against, and the two\n/// plate footprints built from it. Both are whole numbers of squares.\nconst TILE: f32 = 48.0;\nconst PLATE_WIDTH: f32 = TILE * 8.0;\nconst PLATE_HEIGHT: f32 = TILE * 3.0;\nconst JOIN_WIDTH: f32 = PLATE_WIDTH;\n\n/// A deterministic raster media fixture, not downloaded product content.\nfn glass_media() -> Arc<RenderImage> {\n    static IMAGE: OnceLock<Arc<RenderImage>> = OnceLock::new();\n    IMAGE\n        .get_or_init(|| {\n            let mut pixels = Vec::with_capacity(480 * 144 * 4);\n            for y in 0..144 {\n                for x in 0..480 {\n                    let ridge = 65 + ((x as f32 * 0.018).sin() * 30.0) as i32;\n                    let rgba = if y > ridge {\n                        [28, 91 + (x / 8) as u8, 91, 255]\n                    } else {\n                        [110 + (y / 2) as u8, 165, 220, 255]\n                    };\n                    pixels.extend_from_slice(&rgba);\n                }\n            }\n            Arc::new(\n                RenderImage::from_rgba(size(DevicePixels(480), DevicePixels(144)), pixels)\n                    .expect(\"media fixture dimensions\"),\n            )\n        })\n        .clone()\n}\n\n/// A constrained media tile owns size; its caption only names edge anchors.\npub(super) fn media_caption(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let tile = |id: &'static str, reduced: bool| {\n        let material_theme = theme.clone().with_reduce_transparency(reduced);\n        div()\n            .relative()\n            .w_full()\n            .h(px(220.0))\n            .radius(&theme, Radius::Card)\n            .overflow_hidden()\n            .child(\n                gpui::img(glass_media())\n                    .size_full()\n                    .radius(&theme, Radius::Card)\n                    .object_fit(gpui::ObjectFit::Cover),\n            )\n            .child(\n                crate::overlay::surface(\n                    id,\n                    &material_theme,\n                    crate::overlay::OverlaySurface::MEDIA_CAPTION,\n                )\n                .absolute()\n                .left_0()\n                .right_0()\n                .bottom_0()\n                .flex_row()\n                .items_center()\n                .gap_token(&theme, Space::Md)\n                .p_token(&theme, Space::Md)\n                .child(\n                    div()\n                        .flex_1()\n                        .min_w_0()\n                        .type_scale(&theme, TypeScale::Label)\n                        .child(if reduced {\n                            \"Media fixture · reduced transparency\"\n                        } else {\n                            \"Media fixture · Clear caption\"\n                        }),\n                )\n                .child(\n                    div()\n                        .type_scale(&theme, TypeScale::Caption)\n                        .child(\"3 projects\"),\n                )\n                .child(\n                    Button::new(format!(\"{id}.new\"))\n                        .label(\"New project\")\n                        .ghost()\n                        .on_click(|_, _| {}),\n                ),\n            )\n    };\n    stack(&theme)\n        .w_full()\n        .child(caption(\n            &theme,\n            \"Parent-constrained width; caption height follows its content\",\n        ))\n        .child(tile(\"scene.media-caption.clear\", false))\n        .child(tile(\"scene.media-caption.reduced\", true))\n        .into_any_element()\n}\n\npub(super) fn glass(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let label = |title: &'static str, body: &'static str| {\n        div()\n            .column()\n            .gap(px(theme.space(Space::Xs)))\n            .p(px(theme.space(Space::Md)))\n            .child(div().type_scale(&theme, TypeScale::Label).child(title))\n            .child(div().type_scale(&theme, TypeScale::Caption).child(body))\n    };\n\n    // A ruled checkerboard makes the material contract visible: Regular's\n    // rim refracts the scattered source, bending colour and luminance bands\n    // without restoring recognizable fine lines. Clear stays sharp because\n    // its blur is zero. The board is neutral, and every plate is an exact\n    // number of squares across and down: a board cut through the middle of a\n    // square at the plate edge reads as a broken pattern rather than as the\n    // ruled backdrop the optics are being measured against.\n    let checker_light = theme.colors.text_faint;\n    let checker_dark = theme.colors.canvas;\n    let checker_rule = theme.colors.divider.opacity(0.55);\n    let checkerboard =\n        |width: f32, height: f32| {\n            let columns = (width / TILE).ceil() as usize;\n            let rows = (height / TILE).ceil() as usize;\n            div()\n                .absolute()\n                .top(px(0.0))\n                .left(px(0.0))\n                .w(px(width))\n                .h(px(height))\n                .column()\n                .overflow_hidden()\n                .children((0..rows).map(|row| {\n                    div()\n                        .flex()\n                        .flex_none()\n                        .h(px(TILE))\n                        .children((0..columns).map(move |column| {\n                            div().flex_none().w(px(TILE)).h(px(TILE)).bg(\n                                if (row + column) % 2 == 0 {\n                                    checker_light\n                                } else {\n                                    checker_dark\n                                },\n                            )\n                        }))\n                }))\n                .children((0..=(width / 12.0) as usize).map(|column| {\n                    div()\n                        .absolute()\n                        .top(px(0.0))\n                        .left(px(column as f32 * 12.0))\n                        .w(px(1.0))\n                        .h(px(height))\n                        .bg(checker_rule)\n                }))\n                .children((0..=(height / 12.0) as usize).map(|row| {\n                    div()\n                        .absolute()\n                        .top(px(row as f32 * 12.0))\n                        .left(px(0.0))\n                        .w(px(width))\n                        .h(px(1.0))\n                        .bg(checker_rule)\n                }))\n        };\n\n    let plate =\n        |ident: &'static str, preset: GlassPreset, title: &'static str, body: &'static str| {\n            div()\n                .relative()\n                .h(px(PLATE_HEIGHT))\n                .w(px(PLATE_WIDTH))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    if preset == GlassPreset::Clear || ident == \"scene.glass.media\" {\n                        gpui::img(glass_media())\n                            .object_fit(gpui::ObjectFit::Cover)\n                            .w(px(PLATE_WIDTH))\n                            .h(px(PLATE_HEIGHT))\n                            .into_any_element()\n                    } else {\n                        checkerboard(PLATE_WIDTH, PLATE_HEIGHT).into_any_element()\n                    },\n                )\n                .when(ident == \"scene.glass.liquid\", |element| {\n                    element.child(div().absolute().inset_0().child(filler(\n                        &theme,\n                        \"Document text behind Regular glass\",\n                        6,\n                    )))\n                })\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(28.0))\n                        .left(px(52.0))\n                        .w(px(280.0))\n                        .child(\n                            Glass::new(ident)\n                                .preset(preset)\n                                .dimmed(preset == GlassPreset::Clear)\n                                .adaptive(true)\n                                .radius(Radius::Dialog)\n                                .child(label(title, body)),\n                        ),\n                )\n        };\n\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"Clear: dark Frosted / reduced transparency           Clear + 35% dimming / media only\",\n        ))\n        .child(\n            row(&theme)\n                .child(crate::foundation::ThemeOverlay::theme(\n                    theme.clone().with_reduce_transparency(true),\n                    plate(\n                        \"scene.glass.frosted\",\n                        GlassPreset::Clear,\n                        \"Clear: reduced transparency\",\n                        \"Dark Frosted and light content in every theme\",\n                    ),\n                ))\n                .child(plate(\n                    \"scene.glass.clear\",\n                    GlassPreset::Clear,\n                    \"Clear + dimmed\",\n                    \"A sharp media fixture, never default chrome\",\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"Regular over text and media: blur, achromatic wash, lensing and hairline\",\n        ))\n        .child(\n            row(&theme)\n                .child(plate(\n                    \"scene.glass.liquid\",\n                    GlassPreset::Liquid,\n                    \"Regular Liquid\",\n                    \"Large reading surfaces keep the window appearance\",\n                ))\n                .child(plate(\n                    \"scene.glass.media\",\n                    GlassPreset::Liquid,\n                    \"Regular on media\",\n                    \"The same material, not the Clear variant\",\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"Compact Regular controls: appearance may flip; no opaque face\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(TILE * 2.0))\n                .w(px(PLATE_WIDTH))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(div().absolute().inset_0().bg(gpui::white()))\n                .child(\n                    div()\n                        .absolute()\n                        .right_0()\n                        .top_0()\n                        .w(px(PLATE_WIDTH / 2.0))\n                        .h_full()\n                        .bg(gpui::black()),\n                )\n                .child(\n                    div()\n                        .absolute()\n                        .inset_0()\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(\n                            Glass::new(\"scene.glass.regular.one\")\n                                .preset(GlassPreset::Liquid)\n                                .surface(Surface::Raised)\n                                .radius(Radius::Pill)\n                                .adaptive(true)\n                                .child(\n                                    div()\n                                        .w(px(110.0))\n                                        .h(px(32.0))\n                                        .flex()\n                                        .items_center()\n                                        .justify_center()\n                                        .child(\"Portal\"),\n                                ),\n                        )\n                        .child(\n                            Glass::new(\"scene.glass.regular.two\")\n                                .preset(GlassPreset::Liquid)\n                                .radius(Radius::Pill)\n                                .adaptive(true)\n                                .child(\n                                    div()\n                                        .w(px(110.0))\n                                        .h(px(32.0))\n                                        .rounded(px(theme.radius(Radius::Pill)))\n                                        .bg(theme.colors.selected)\n                                        .flex()\n                                        .items_center()\n                                        .justify_center()\n                                        .child(\"Harbour\"),\n                                ),\n                        ),\n                ),\n        )\n        // The last two demonstrations sit side by side so the whole scene\n        // stays inside the window a real display can give the gallery, which\n        // is where the DirectX renderer gets looked at.\n        .child(\n            div()\n                .flex()\n                .flex_row()\n                .gap(px(theme.space(Space::Md)))\n                .child(\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(caption(&theme, \"Fused: two panes joined into one body\"))\n                        .child(\n                            div()\n                                .relative()\n                                .h(px(PLATE_HEIGHT))\n                                .w(px(JOIN_WIDTH))\n                                .surface(&theme, Surface::Panel)\n                                .radius(&theme, Radius::Card)\n                                .overflow_hidden()\n                                .child(checkerboard(JOIN_WIDTH, PLATE_HEIGHT))\n                                .child(\n                                    div().absolute().top(px(40.0)).left(px(40.0)).child(\n                                        GlassGroup::new(\"scene.glass.fused\")\n                                            .preset(GlassPreset::Liquid)\n                                            .radius(Radius::Dialog)\n                                            .gap(12.0)\n                                            .pane(\n                                                \"scene.glass.fused.left\",\n                                                label(\"Left\", \"One lobe of the body\"),\n                                            )\n                                            .pane(\n                                                \"scene.glass.fused.right\",\n                                                label(\"Right\", \"Joined across the gap\"),\n                                            ),\n                                    ),\n                                ),\n                        ),\n                )\n                .child(\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(caption(&theme, \"Large adaptive surfaces never flip\"))\n                        .child(\n                            div()\n                                .relative()\n                                .h(px(PLATE_HEIGHT))\n                                .w(px(JOIN_WIDTH))\n                                .surface(&theme, Surface::Panel)\n                                .radius(&theme, Radius::Card)\n                                .overflow_hidden()\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(0.0))\n                                        .left(px(0.0))\n                                        .w(px(JOIN_WIDTH / 2.0))\n                                        .h(px(PLATE_HEIGHT))\n                                        .bg(gpui::white()),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(0.0))\n                                        .left(px(JOIN_WIDTH / 2.0))\n                                        .w(px(JOIN_WIDTH / 2.0))\n                                        .h(px(PLATE_HEIGHT))\n                                        .bg(gpui::black()),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(28.0))\n                                        .left(px(15.0))\n                                        .w(px(160.0))\n                                        .child(\n                                            Glass::new(\"scene.glass.adaptive.bright\")\n                                                .preset(GlassPreset::Liquid)\n                                                .radius(Radius::Dialog)\n                                                .adaptive(true)\n                                                .adaptive_appearance(true)\n                                                .child(label(\n                                                    \"Bright\",\n                                                    \"The reading lands next frame\",\n                                                )),\n                                        ),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(28.0))\n                                        .left(px(JOIN_WIDTH / 2.0 + 15.0))\n                                        .w(px(160.0))\n                                        .child(\n                                            Glass::new(\"scene.glass.adaptive.dark\")\n                                                .preset(GlassPreset::Liquid)\n                                                .radius(Radius::Dialog)\n                                                .adaptive(true)\n                                                .child(label(\"Dark\", \"The same glass, other side\")),\n                                        ),\n                                ),\n                        ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Focused: one inward report edge — Regular, Clear + dimmed, Frosted, reduced\",\n        ))\n        .child(\n            row(&theme).children(\n                [\n                    (\"regular\", GlassPreset::Liquid, false, \"Regular\"),\n                    (\"clear\", GlassPreset::Clear, false, \"Clear + dimmed\"),\n                    (\"frosted\", GlassPreset::Frosted, false, \"Frosted\"),\n                    (\"reduced\", GlassPreset::Clear, true, \"Reduced\"),\n                ]\n                .into_iter()\n                .map(|(name, preset, reduced, title)| {\n                    div()\n                        .relative()\n                        .w(px(210.0))\n                        .h(px(96.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .child(\n                            gpui::img(glass_media())\n                                .size_full()\n                                .object_fit(gpui::ObjectFit::Cover),\n                        )\n                        .child(\n                            div()\n                                .absolute()\n                                .left(px(12.0))\n                                .right(px(12.0))\n                                .top(px(24.0))\n                                .child(crate::foundation::ThemeOverlay::theme(\n                                    theme.clone().with_reduce_transparency(reduced),\n                                    Glass::new(format!(\"scene.glass.focused.{name}\"))\n                                        .preset(preset)\n                                        .dimmed(preset == GlassPreset::Clear)\n                                        .focused(true)\n                                        .radius(Radius::Pill)\n                                        .child(\n                                            div()\n                                                .w_full()\n                                                .h(px(40.0))\n                                                .flex()\n                                                .items_center()\n                                                .justify_center()\n                                                .type_scale(&theme, TypeScale::Label)\n                                                .child(title),\n                                        ),\n                                )),\n                        )\n                }),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"Budget fallback: opaque cards, never holes — R keeps its focus report\",\n        ))\n        .child(div().flex().gap(px(4.0)).children(('A'..='R').map(|name| {\n            Glass::new(format!(\"scene.glass.budget.{name}\"))\n                .focused(name == 'R')\n                .child(\n                    div()\n                        .w(px(38.0))\n                        .h(px(30.0))\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .child(name.to_string()),\n                )\n        })))\n        .child(caption(\n            &theme,\n            \"Nine lobes exceed the fused budget: every pane retains an opaque face\",\n        ))\n        .child(\n            ('A'..='I').fold(GlassGroup::new(\"scene.glass.lobe-budget\"), |group, name| {\n                group.pane(\n                    format!(\"scene.glass.lobe-budget.{name}\"),\n                    div()\n                        .w(px(58.0))\n                        .h(px(30.0))\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .child(name.to_string()),\n                )\n            }),\n        )\n        .into_any_element()\n}\n\n/// Optical parameters over a deterministic ruled fixture, without a wash or\n/// decorative highlight hiding the displacement. Labels sit outside the lens.\npub(super) fn glass_optics(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let specimens = [\n        (\"identity\", \"Index 1 / unchanged\", 1., 24., 24., 0., 0.),\n        (\"water\", \"Index 1.33 / shallow bend\", 1.33, 24., 24., 0., 0.),\n        (\"glass\", \"Index 1.5 / deeper bend\", 1.5, 24., 24., 0., 0.),\n        (\n            \"thick\",\n            \"48px thickness / same index\",\n            1.5,\n            48.,\n            24.,\n            0.,\n            0.,\n        ),\n        (\"contact\", \"Source plane at base\", 1.5, 24., 0., 0., 0.),\n        (\n            \"dispersion\",\n            \"Spectral indices / no highlight\",\n            1.5,\n            24.,\n            24.,\n            0.25,\n            0.,\n        ),\n        (\n            \"reflection\",\n            \"Fresnel / same surface normal\",\n            1.5,\n            24.,\n            24.,\n            0.,\n            1.,\n        ),\n        (\n            \"scatter\",\n            \"Same optics / 8px scattering\",\n            1.5,\n            24.,\n            24.,\n            0.,\n            0.,\n        ),\n    ];\n    stack(&theme)\n        .w(px(900.))\n        .child(caption(\n            &theme,\n            \"Snell refraction — fixture grid; foreground content is not distorted\",\n        ))\n        .children(specimens.chunks(4).map(|specimens| {\n            row(&theme).children(specimens.iter().map(\n                |&(name, title, index, thickness, depth, dispersion, specular)| {\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .w(px(210.))\n                        .child(caption(&theme, title))\n                        .child(\n                            div()\n                                .relative()\n                                .w(px(210.))\n                                .h(px(180.))\n                                .overflow_hidden()\n                                .bg(theme.colors.canvas)\n                                .children((0..18).map(|line| {\n                                    div()\n                                        .absolute()\n                                        .top(px(line as f32 * 10.))\n                                        .left_0()\n                                        .w_full()\n                                        .h(px(1.))\n                                        .bg(theme.colors.text_faint)\n                                }))\n                                .children((0..21).map(|line| {\n                                    div()\n                                        .absolute()\n                                        .left(px(line as f32 * 10.))\n                                        .top_0()\n                                        .h_full()\n                                        .w(px(1.))\n                                        .bg(theme.colors.text_faint)\n                                }))\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(22.))\n                                        .left(px(25.))\n                                        .w(px(160.))\n                                        .child(\n                                            Glass::new(format!(\"scene.glass-optics.{name}\"))\n                                                .preset(GlassPreset::Lens)\n                                                .radius_px(48.)\n                                                .refraction(1.)\n                                                .thickness(thickness)\n                                                .refractive_index(index)\n                                                .backdrop_depth(depth)\n                                                .dispersion(dispersion)\n                                                .specular(specular)\n                                                .blur(if name == \"scatter\" { 8. } else { 0. })\n                                                .track_pointer(name == \"reflection\")\n                                                .pressable(true)\n                                                .child(\n                                                    div()\n                                                        .w_full()\n                                                        .h(px(136.))\n                                                        .flex()\n                                                        .items_center()\n                                                        .justify_center()\n                                                        .child(\n                                                            div()\n                                                                .px_token(&theme, Space::Sm)\n                                                                .bg(theme.colors.panel)\n                                                                .child(\"Aa 123\"),\n                                                        ),\n                                                ),\n                                        ),\n                                ),\n                        )\n                },\n            ))\n        }))\n        .child(caption(\n            &theme,\n            \"Fused Regular / zero blur — one height field; press changes thickness and its normal\",\n        ))\n        .child(\n            div()\n                .relative()\n                .w(px(864.))\n                .h(px(120.))\n                .overflow_hidden()\n                .children((0..87).map(|line| {\n                    div()\n                        .absolute()\n                        .left(px(line as f32 * 10.))\n                        .top_0()\n                        .h_full()\n                        .w(px(1.))\n                        .bg(theme.colors.text_faint)\n                }))\n                .children((0..12).map(|line| {\n                    div()\n                        .absolute()\n                        .top(px(line as f32 * 10.))\n                        .left_0()\n                        .w_full()\n                        .h(px(1.))\n                        .bg(theme.colors.text_faint)\n                }))\n                .child(\n                    div().absolute().left(px(24.)).top(px(24.)).child(\n                        GlassGroup::new(\"scene.glass-optics.fused\")\n                            .preset(GlassPreset::Liquid)\n                            .blur(0.)\n                            .thickness(48.)\n                            .refractive_index(1.5)\n                            .backdrop_depth(24.)\n                            .radius(Radius::Pill)\n                            .gap(8.)\n                            .merge(32.)\n                            .pressable(true)\n                            .pane(\n                                \"scene.glass-optics.fused.left\",\n                                div()\n                                    .w(px(380.))\n                                    .h(px(72.))\n                                    .flex()\n                                    .items_center()\n                                    .justify_center()\n                                    .child(\"Left\"),\n                            )\n                            .pane(\n                                \"scene.glass-optics.fused.right\",\n                                div()\n                                    .w(px(380.))\n                                    .h(px(72.))\n                                    .flex()\n                                    .items_center()\n                                    .justify_center()\n                                    .child(\"Right\"),\n                            ),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// Colour belongs to the optical material, including a group's bridge.\n/// Captions remain outside the specimens so tint strength is visible.\npub(super) fn glass_materials(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let specimens = [\n        (\"protected\", \"Default body protection\", true, None),\n        (\"material\", \"Caller-owned legibility\", false, None),\n        (\n            \"tint-partial\",\n            \"25% tint / visible backdrop\",\n            true,\n            Some(0.25),\n        ),\n        (\n            \"tint-solid\",\n            \"100% tint / rim above colour\",\n            true,\n            Some(1.0),\n        ),\n    ];\n    let backdrop = || {\n        div()\n            .relative()\n            .w(px(200.0))\n            .h(px(112.0))\n            .bg(gpui::rgb(0xffffff))\n            .children((0..8).map(|stripe| {\n                div()\n                    .absolute()\n                    .left(px(stripe as f32 * 25.0))\n                    .top_0()\n                    .w(px(12.0))\n                    .h_full()\n                    .bg(gpui::rgb(0x8090a0))\n            }))\n    };\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"Material policy / deterministic stripe fixture, not native reference\",\n        ))\n        .child(\n            row(&theme).children(specimens.into_iter().map(|(id, title, protect, tint)| {\n                let mut glass = Glass::new(format!(\"scene.glass-materials.{id}\"))\n                    .radius_px(24.0)\n                    .blur(2.0)\n                    .protect_text_contrast(protect);\n                if let Some(alpha) = tint {\n                    glass = glass.tint(theme.colors.accent.opacity(alpha));\n                }\n                div()\n                    .column()\n                    .gap_token(&theme, Space::Sm)\n                    .child(caption(&theme, title))\n                    .child(\n                        backdrop().child(\n                            div()\n                                .absolute()\n                                .left(px(20.0))\n                                .top(px(24.0))\n                                .child(glass.child(div().w(px(160.0)).h(px(64.0)))),\n                        ),\n                    )\n            })),\n        )\n        .child(caption(\n            &theme,\n            \"Tint across joined panes / reduced-transparency fallback\",\n        ))\n        .child(\n            row(&theme).children([false, true].into_iter().map(|reduced| {\n                let id = if reduced { \"reduced\" } else { \"joined\" };\n                let tint = theme.colors.accent.opacity(0.25);\n                let group = GlassGroup::new(format!(\"scene.glass-materials.{id}\"))\n                    .radius(Radius::Pill)\n                    .gap(8.0)\n                    .merge(32.0)\n                    .blur(2.0)\n                    .tint(tint)\n                    .pane(\n                        format!(\"scene.glass-materials.{id}.left\"),\n                        div().w(px(68.0)).h(px(56.0)),\n                    )\n                    .pane(\n                        format!(\"scene.glass-materials.{id}.right\"),\n                        div().w(px(68.0)).h(px(56.0)),\n                    );\n                backdrop().child(div().absolute().left(px(28.0)).top(px(28.0)).child(\n                    ThemeOverlay::new(move |t| t.clone().with_reduce_transparency(reduced), group),\n                ))\n            })),\n        )\n        .child(caption(\n            &theme,\n            \"Rounded foreground clips / surface shadows and joined optics stay outside\",\n        ))\n        .child(\n            row(&theme)\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(20.0)).top(px(24.0)).child(\n                            Glass::new(\"scene.glass-materials.clip-surface\")\n                                .radius_px(24.0)\n                                .child(div().w(px(160.0)).h(px(64.0)).bg(theme.colors.accent)),\n                        ),\n                    ),\n                )\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(28.0)).top(px(28.0)).child(\n                            GlassGroup::new(\"scene.glass-materials.clip-group\")\n                                .radius(Radius::Pill)\n                                .gap(8.0)\n                                .merge(32.0)\n                                .pane(\n                                    \"scene.glass-materials.clip-left\",\n                                    div().w(px(68.0)).h(px(56.0)).bg(theme.colors.accent),\n                                )\n                                .pane(\n                                    \"scene.glass-materials.clip-right\",\n                                    div().w(px(68.0)).h(px(56.0)).bg(theme.colors.accent),\n                                ),\n                        ),\n                    ),\n                )\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(20.0)).top(px(24.0)).child(\n                            crate::overlay::surface(\n                                \"scene.glass-materials.clip-frame\",\n                                &theme,\n                                crate::overlay::OverlaySurface::MODAL,\n                            )\n                            .w(px(160.0))\n                            .h(px(64.0))\n                            .children(\n                                [theme.colors.accent, theme.colors.text_faint]\n                                    .map(|color| div().w_full().h(px(32.0)).bg(color)),\n                            ),\n                        ),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// The drawer the scene shows, kept across frames and settled so the capture\n/// photographs the panel where it comes to rest rather than mid-slide.\npub(super) struct SceneDrawer {\n    filters: Entity<Drawer>,\n}\n\nimpl Global for SceneDrawer {}\n\npub(super) 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                .resizable(true)\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                    let group = |heading: &'static str, rows: gpui::Div| {\n                        div()\n                            .column()\n                            .gap(px(theme.space(Space::Sm)))\n                            .child(\n                                crate::foundation::text(&theme, TypeScale::Label, heading)\n                                    .text_tone(&theme, TextTone::Muted),\n                            )\n                            .child(rows.column().gap(px(theme.space(Space::Sm))))\n                    };\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Lg)))\n                        .child(group(\n                            \"Outcome\",\n                            div()\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.cancelled\")\n                                        .label(\"Include cancelled\")\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .child(group(\n                            \"Ownership\",\n                            div()\n                                .child(\n                                    Checkbox::new(\"scene.drawer.mine\")\n                                        .label(\"Started by me\")\n                                        .on_change(|_, _, _| {}),\n                                )\n                                .child(\n                                    Checkbox::new(\"scene.drawer.watching\")\n                                        .label(\"Repositories I watch\")\n                                        .checked(true)\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .child(group(\n                            \"Window\",\n                            div()\n                                .child(\n                                    Checkbox::new(\"scene.drawer.today\")\n                                        .label(\"Today\")\n                                        .checked(true)\n                                        .on_change(|_, _, _| {}),\n                                )\n                                .child(\n                                    Checkbox::new(\"scene.drawer.week\")\n                                        .label(\"This week\")\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .into_any_element()\n                })\n                // Two controls, sized to their labels and pinned to the\n                // reading edge: a full-width primary slab is the loudest\n                // thing on the page and says the drawer has one exit.\n                .footer(|_, cx| {\n                    let theme = cx.theme().clone();\n                    div()\n                        .row()\n                        .justify_end()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(\n                            Button::new(\"scene.drawer.cancel\")\n                                .label(\"Cancel\")\n                                .secondary()\n                                .on_click(|_, _| {}),\n                        )\n                        .child(\n                            Button::new(\"scene.drawer.apply\")\n                                .label(\"Apply\")\n                                .primary()\n                                .on_click(|_, _| {}),\n                        )\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(page_behind(&theme, \"Runs\"))\n        .child(filters)\n        .into_any_element()\n}\n\npub(super) 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(\n            row(&theme)\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Reported by\",\n                ))\n                .child(card),\n        )\n        .into_any_element()\n}\n\npub(super) 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}\n\nstruct SceneBottomSheet(Entity<crate::overlay::sheet::BottomSheet>);\nimpl Global for SceneBottomSheet {}\n\npub(super) fn bottom_sheet(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::overlay::sheet::{BottomSheet, BottomSheetEvent, SheetDetent};\n    if !cx.has_global::<SceneBottomSheet>() {\n        let sheet = cx.new(|cx| BottomSheet::new(\"scene.bottom-sheet\", window, cx));\n        sheet.update(cx, |sheet, cx| {\n            sheet.set_title(\"Choose destination · fixture\", cx);\n            sheet.set_detents(\n                vec![\n                    SheetDetent::new(\"Compact\", 290.0),\n                    SheetDetent::new(\"Half\", 430.0),\n                    SheetDetent::new(\"Full\", 640.0),\n                ],\n                \"Half\",\n                cx,\n            );\n            let scroll = gpui::ScrollHandle::new();\n            sheet.set_scroll_handle(Some(scroll.clone()), cx);\n            sheet.set_content(\n                Some(Rc::new(move |_, cx| {\n                    let _theme = cx.theme().clone();\n                    div()\n                        .id(\"scene.bottom-sheet.list\")\n                        .column()\n                        .size_full()\n                        .overflow_y_scroll()\n                        .track_scroll(&scroll)\n                        .children(\n                            [\n                                (\"home\", \"Home\"),\n                                (\"work\", \"Work\"),\n                                (\"library\", \"Library\"),\n                                (\"airport\", \"Airport\"),\n                                (\"station\", \"Station\"),\n                                (\"garden\", \"Garden\"),\n                                (\"museum\", \"Museum\"),\n                            ]\n                            .into_iter()\n                            .map(|(id, label)| {\n                                Button::new(format!(\"scene.bottom-sheet.destination.{id}\"))\n                                    .label(label)\n                                    .secondary()\n                                    .control_size(gpui_kit_theme::ControlSize::Touch)\n                                    .on_click(|_, _| {})\n                            }),\n                        )\n                        .into_any_element()\n                })),\n                cx,\n            );\n            sheet.open(window, cx);\n            sheet.settle(cx);\n        });\n        cx.subscribe(&sheet, |sheet, event, cx| {\n            if let BottomSheetEvent::DetentRequested(id) = event {\n                sheet.update(cx, |sheet, cx| {\n                    sheet.set_detent(id.clone(), cx);\n                });\n            }\n        })\n        .detach();\n        cx.set_global(SceneBottomSheet(sheet));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .h(px(640.0))\n        .child(page_behind(&theme, \"Caller-owned destinations\"))\n        .child(cx.global::<SceneBottomSheet>().0.clone())\n        .into_any_element()\n}\n\nstruct SceneActionSheet(Entity<crate::overlay::sheet::ActionSheet>);\nimpl Global for SceneActionSheet {}\n\npub(super) fn action_sheet(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::overlay::sheet::{ActionSheet, SheetAction, SheetActionState};\n    if !cx.has_global::<SceneActionSheet>() {\n        let sheet = cx.new(|cx| ActionSheet::new(\"scene.action-sheet\", window, cx));\n        sheet.update(cx, |sheet, cx| {\n            let mut remove = SheetAction::new(\"remove\", \"Remove from collection\");\n            remove.destructive = true;\n            let mut share = SheetAction::new(\"share\", \"Share unavailable\");\n            share.disabled = true;\n            sheet.set_actions(\n                vec![SheetAction::new(\"save\", \"Save a copy\"), share, remove],\n                cx,\n            );\n            sheet.set_state(\n                SheetActionState::Error(\n                    \"Fixture refusal: the last attempt failed; nothing was removed.\".into(),\n                ),\n                cx,\n            );\n            sheet.sheet().update(cx, |sheet, cx| {\n                sheet.set_title(\"Collection actions · fixture\", cx);\n            });\n            sheet.open(window, cx);\n            sheet.sheet().update(cx, |sheet, cx| sheet.settle(cx));\n        });\n        cx.set_global(SceneActionSheet(sheet));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .h(px(600.0))\n        .child(page_behind(&theme, \"Last verified collection\"))\n        .child(cx.global::<SceneActionSheet>().0.clone())\n        .into_any_element()\n}\n\n//! Validated conserved flow layouts with persistent node/link labels.\nuse super::support::*;\nuse crate::display::plot::{SankeyAlignment, SankeyOrder};\n\n#[derive(Default)]\nstruct FlowRevisions {\n    revision: usize,\n    direct: bool,\n    selected: Option<SharedString>,\n}\n\npub(super) fn sankey_motion(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<FlowRevisions>(\n        &\"scene.sankey.motion-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision % 3;\n    let flows = if revision == 0 {\n        vec![(\"ad\", \"a\", \"d\", 70.0), (\"bc\", \"b\", \"c\", 30.0)]\n    } else if revision == 1 {\n        vec![(\"ad\", \"a\", \"d\", 20.0), (\"bc\", \"b\", \"c\", 80.0)]\n    } else {\n        vec![(\"ad\", \"a\", \"d\", 45.0)]\n    };\n    let mut nodes = Vec::new();\n    let mut links = Vec::new();\n    let mut weights = Vec::new();\n    for (id, source, target, value) in flows {\n        for node in [source, target] {\n            nodes.push(SankeyNode::new(\n                node,\n                node,\n                value.to_string(),\n                Default::default(),\n            ));\n        }\n        links.push(SankeyLink::new(\n            id,\n            source,\n            target,\n            format!(\"{source} → {target}\"),\n            value.to_string(),\n            Default::default(),\n            Default::default(),\n            0.0,\n        ));\n        weights.push(value);\n    }\n    let (data, _) = SankeyData::new(nodes, links)\n        .layout_ordered(\n            &weights,\n            0.08,\n            0.1,\n            SankeyAlignment::Left,\n            SankeyOrder::Barycenter,\n        )\n        .expect(\"conserved synthetic flow\");\n    let next = state.clone();\n    let direct = state.clone();\n    let select = state.clone();\n    stack(&theme).w(px(600.0)).child(caption(&theme,\"Synthetic conserved endpoint layouts · ribbons remain attached during motion; exact current values\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.sankey.motion.advance\").label(\"Advance flows\").on_click(move |window,_|{next.borrow_mut().revision+=1;window.refresh();}))\n            .child(Button::new(\"scene.sankey.motion.direct\").label(if state.borrow().direct {\"Enable animation\"} else {\"Direct updates\"}).on_click(move |window,_|{let mut s=direct.borrow_mut();s.direct = !s.direct;window.refresh();})))\n        .child(SankeyChart::new(\"scene.sankey.motion\",\"Keyed node and ribbon updates\",PlotState::Ready(data)).animate(!state.borrow().direct).labels(true)\n            .selected(state.borrow().selected.clone()).on_current(move |id,window,_|{select.borrow_mut().selected=Some(id);window.refresh();}))\n        .into_any_element()\n}\n\npub(super) fn sankey_layout(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let graph = SankeyData::new(\n        [\n            (\"a\", \"Incoming A\", \"70\"),\n            (\"b\", \"Incoming B\", \"30\"),\n            (\"c\", \"Destination C\", \"30\"),\n            (\"d\", \"Destination D\", \"70\"),\n        ]\n        .map(|(id, label, value)| SankeyNode::new(id, label, value, Default::default())),\n        [\n            (\"ad\", \"a\", \"d\", \"A → D\", \"70\"),\n            (\"bc\", \"b\", \"c\", \"B → C\", \"30\"),\n        ]\n        .map(|(id, source, target, label, value)| {\n            SankeyLink::new(\n                id,\n                source,\n                target,\n                label,\n                value,\n                Default::default(),\n                Default::default(),\n                0.0,\n            )\n        }),\n    );\n    stack(&theme)\n        .w(px(860.0))\n        .child(caption(\n            &theme,\n            \"Synthetic conserved flows · same 70:30 scale · deterministic crossing reduction\",\n        ))\n        .child(\n            div().row().gap_token(&theme, Space::Lg).children(\n                [\n                    (SankeyOrder::Input, \"input\", \"Input order\"),\n                    (SankeyOrder::Barycenter, \"ordered\", \"Barycenter order\"),\n                ]\n                .map(|(order, id, label)| {\n                    let (data, _) = graph\n                        .clone()\n                        .layout_ordered(&[70.0, 30.0], 0.08, 0.1, SankeyAlignment::Left, order)\n                        .expect(\"valid flows\");\n                    div().w(px(380.0)).child(\n                        SankeyChart::new(\n                            Ident::new(\"scene.sankey\").child(id),\n                            label,\n                            PlotState::Ready(data),\n                        )\n                        .labels(true)\n                        .on_current(|_, _, _| {}),\n                    )\n                }),\n            ),\n        )\n        .into_any_element()\n}\n\npub(super) fn raw_candlestick(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::display::chart::{\n        cartesian::CartesianChart,\n        data::{ChartScale, ChartValue, RawPoint, RawSeries, SeriesMark, ValueAxis},\n        scale::{NumericScale, ScaleKind},\n    };\n    use crate::display::plot::RawOhlc;\n    let theme = cx.theme().clone();\n    let day = 86_400_000.0;\n    let x = ChartScale::Numeric(\n        NumericScale::new(ScaleKind::Time, [0.0, 4.0 * day]).expect(\"time domain\"),\n    );\n    let candles = RawOhlc::series(\n        \"ohlc\",\n        \"price\",\n        [\n            RawOhlc::new(\n                \"day-a\",\n                day,\n                [30.0, 60.0, 20.0, 50.0],\n                \"Day A\",\n                \"O30 H60 L20 C50\",\n            ),\n            RawOhlc::new(\n                \"day-b\",\n                day * 2.0,\n                [65.0, 75.0, 35.0, 40.0],\n                \"Day B\",\n                \"O65 H75 L35 C40\",\n            ),\n            RawOhlc::new(\n                \"day-c\",\n                day * 3.0,\n                [45.0, 55.0, 30.0, 45.0],\n                \"Day C · doji\",\n                \"O45 H55 L30 C45\",\n            ),\n        ],\n        theme.colors.success,\n        theme.colors.danger,\n    )\n    .expect(\"validated OHLC\");\n    let volume = RawSeries::new(\"volume\", \"volume\", SeriesMark::Bar)\n        .tint(theme.colors.accent.opacity(0.22))\n        .points(\n            [\n                (\"day-a\", day, 120.0),\n                (\"day-b\", 2.0 * day, 260.0),\n                (\"day-c\", 3.0 * day, 80.0),\n            ]\n            .map(|(id, x, value)| RawPoint::new(id, ChartValue::Number(x), Some(value))),\n        );\n    let overlay = RawSeries::new(\"reference\", \"price\", SeriesMark::Line)\n        .tint(theme.colors.warning)\n        .points(\n            [\n                (\"day-a\", day, 42.0),\n                (\"day-b\", 2.0 * day, 48.0),\n                (\"day-c\", 3.0 * day, 46.0),\n            ]\n            .map(|(id, x, value)| RawPoint::new(id, ChartValue::Number(x), Some(value))),\n        );\n    stack(&theme).w(px(900.0)).child(caption(&theme, \"Synthetic OHLC · shared UTC-duration x scale · independent volume axis · caller overlay\"))\n        .child(CartesianChart::new(\"scene.raw-ohlc\", \"OHLC with volume and overlay\", x, [\n            ValueAxis { id: \"price\".into(), label: \"Price\".into(), scale: NumericScale::new(ScaleKind::Linear, [0.0, 80.0]).expect(\"price domain\") },\n            ValueAxis { id: \"volume\".into(), label: \"Volume\".into(), scale: NumericScale::new(ScaleKind::Linear, [0.0, 300.0]).expect(\"volume domain\") },\n        ]).series([volume, candles, overlay]).format_ticks(move |axis, value| if axis == \"x\" { format!(\"D{:.0}\", value / day).into() } else { value.to_string().into() }).selected(Some(ChartSelection::new(\"ohlc\", \"day-b\"))).on_event(|_, _, _| {}))\n        .into_any_element()\n}\n\n//! Raw-value specialized visualization exhibits, using original synthetic data.\n\nuse super::support::*;\nuse crate::display::specialized::{\n    HierarchyNode, SpecializedChart, SpecializedData, WeightedValue,\n};\n\n#[derive(Default)]\nstruct Exploration {\n    revision: usize,\n    focus: Option<SharedString>,\n    selected: Option<SharedString>,\n    refuse: bool,\n}\n\npub(super) fn specialized_exploration(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<Exploration>(\n        &\"scene.specialized.explore-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision;\n    let selected = state.borrow().selected.clone();\n    let focus = state\n        .borrow()\n        .focus\n        .clone()\n        .unwrap_or_else(|| \"total\".into());\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All samples\",\n        vec![\n            HierarchyNode::branch(\n                \"group\",\n                \"Processing\",\n                vec![\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"parse\",\n                        \"Parsing\",\n                        if revision.is_multiple_of(2) {\n                            12.0\n                        } else {\n                            47.0\n                        },\n                    )),\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"execute\",\n                        \"Execution\",\n                        if revision.is_multiple_of(2) {\n                            68.0\n                        } else {\n                            13.0\n                        },\n                    )),\n                ],\n            ),\n            HierarchyNode::leaf(WeightedValue::new(\"deliver\", \"Delivery\", 20.0)),\n        ],\n    );\n    let next = state.clone();\n    let refusal = state.clone();\n    let charts = [\n        (\n            \"tree\",\n            \"Area · drill/back\",\n            SpecializedData::treemap_at(&root, &focus),\n        ),\n        (\n            \"sun\",\n            \"Angle · drill/back\",\n            SpecializedData::sunburst_at(&root, &focus),\n        ),\n        (\n            \"funnel\",\n            \"Width · enter/update/exit\",\n            SpecializedData::funnel(match revision % 3 {\n                0 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 120.0),\n                    WeightedValue::new(\"finish\", \"Finished\", 24.0),\n                ],\n                1 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 75.0),\n                    WeightedValue::new(\"new\", \"New sample\", 38.0),\n                ],\n                _ => vec![],\n            }),\n        ),\n    ];\n    stack(&theme).w(px(860.0))\n        .child(caption(&theme,\"Synthetic live fixtures · advance during motion to interrupt; empty exit shapes are not selectable\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.specialized.advance\").label(\"Advance samples\").on_click(move |window,_| { next.borrow_mut().revision+=1; window.refresh(); }))\n            .child(Button::new(\"scene.specialized.refuse\").label(if state.borrow().refuse { \"Accept proposals\" } else { \"Refuse proposals\" }).on_click(move |window,_| { let mut s=refusal.borrow_mut(); s.refuse = !s.refuse; window.refresh(); })))\n        .child(div().row().gap_token(&theme,Space::Lg).children(charts.into_iter().map(|(id,label,data)| {\n            let select = state.clone();\n            let navigate = state.clone();\n            div().w(px(260.0)).child(SpecializedChart::new(Ident::new(\"scene.specialized.live\").child(id),label,PlotState::Ready(data.expect(\"valid exploration fixture\")))\n                .motion(true).labels(true).selected(selected.clone())\n                .on_current(move |id,window,_| { let mut s=select.borrow_mut(); if !s.refuse { s.selected=Some(id); } window.refresh(); })\n                .on_navigate(move |id,window,_| { let mut s=navigate.borrow_mut(); if !s.refuse { s.focus=Some(id); } window.refresh(); }))\n        }))).into_any_element()\n}\n\npub(super) fn specialized(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let leaf = |id, label, value| HierarchyNode::leaf(WeightedValue::new(id, label, value));\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All work\",\n        vec![\n            leaf(\"build\", \"Build\", 60.0),\n            HierarchyNode::branch(\n                \"verify\",\n                \"Verification\",\n                vec![leaf(\"tests\", \"Tests\", 30.0), leaf(\"lint\", \"Lint\", 10.0)],\n            ),\n        ],\n    );\n    let fixtures = [\n        (\n            \"treemap\",\n            \"Treemap · area = work\",\n            SpecializedData::treemap(&root),\n        ),\n        (\n            \"sunburst\",\n            \"Sunburst · angle = work\",\n            SpecializedData::sunburst(&root),\n        ),\n        (\n            \"funnel\",\n            \"Funnel · width = count\",\n            SpecializedData::funnel(vec![\n                WeightedValue::new(\"seen\", \"Seen\", 120.0),\n                WeightedValue::new(\"started\", \"Started\", 75.0),\n                WeightedValue::new(\"done\", \"Completed\", 24.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(940.0))\n        .child(caption(\n            &theme,\n            \"Synthetic hierarchy fixtures · select marks with arrow keys or value keys\",\n        ))\n        .child(\n            div()\n                .row()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(280.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid hierarchy\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .child(\n            div().w(px(220.0)).child(SpecializedChart::new(\n                \"scene.specialized.zero\",\n                \"Zero is measured, not missing\",\n                PlotState::Stale {\n                    data: SpecializedData::funnel(vec![WeightedValue::new(\n                        \"zero\",\n                        \"Measured zero\",\n                        0.0,\n                    )])\n                    .expect(\"zero\"),\n                    reason: \"Refresh refused; verified zero retained\".into(),\n                },\n            )),\n        )\n        .into_any_element()\n}\n\npub(super) fn specialized_distribution(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let fixtures = [\n        (\n            \"histogram\",\n            \"Histogram · count per bin\",\n            SpecializedData::histogram(&[-2.0, -1.0, 0.0, 0.0, 1.0, 3.0], &[-2.0, 0.0, 1.0, 3.0]),\n        ),\n        (\n            \"box\",\n            \"Box · R-7 / Tukey · domain 0–110\",\n            SpecializedData::box_plot(\n                \"latency\",\n                \"Latency\",\n                &[1.0, 2.0, 4.0, 7.0, 8.0, 100.0],\n                [0.0, 110.0],\n            ),\n        ),\n        (\n            \"range\",\n            \"Range · domain −10–30\",\n            SpecializedData::range(\"interval\", \"Expected interval\", -4.0, 18.0, [-10.0, 30.0]),\n        ),\n        (\n            \"waterfall\",\n            \"Waterfall · signed changes\",\n            SpecializedData::waterfall(vec![\n                WeightedValue::new(\"open\", \"Opening\", 60.0),\n                WeightedValue::new(\"cost\", \"Cost\", -90.0),\n                WeightedValue::new(\"credit\", \"Credit\", 10.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(1000.0))\n        .child(caption(\n            &theme,\n            \"Synthetic distribution fixtures · explicit bin edges and R-7 / Tukey statistics\",\n        ))\n        .child(\n            div()\n                .row()\n                .flex_wrap()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(440.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid synthetic fixture\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .into_any_element()\n}\n\n//! A schema, rendered as data or as a form.\n\nuse super::support::*;\n\n/// A document with the three facts a viewer usually confuses: a key holding\n/// `null`, a key holding an empty object, and a key that is simply not here.\npub(super) fn scene_document() -> JsonValue {\n    JsonValue::object([\n        (\"id\", JsonValue::string(\"run-4812\")),\n        (\"attempts\", JsonValue::number(\"3\")),\n        (\"streaming\", JsonValue::Bool(true)),\n        // Nothing has been recorded here yet, which is not the same as the\n        // key being missing: `resumed_from` is missing, and says nothing.\n        (\"cursor\", JsonValue::Null),\n        (\"labels\", JsonValue::object(Vec::<(&str, JsonValue)>::new())),\n        (\n            \"credentials\",\n            JsonValue::object([(\"token\", JsonValue::redacted(\"51 characters\"))]),\n        ),\n        (\n            \"request\",\n            JsonValue::object([\n                (\"method\", JsonValue::string(\"POST\")),\n                (\n                    \"headers\",\n                    JsonValue::object([\n                        (\"content-type\", JsonValue::string(\"application/json\")),\n                        (\"authorization\", JsonValue::redacted(\"a value\")),\n                    ]),\n                ),\n            ]),\n        ),\n        (\n            \"steps\",\n            JsonValue::array([\n                JsonValue::string(\"plan\"),\n                JsonValue::string(\"apply\"),\n                JsonValue::object([(\"retries\", JsonValue::number(\"0\"))]),\n            ]),\n        ),\n    ])\n}\n\npub(super) 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}\n\n/// The form kept across frames.\n///\n/// Its fields own carets, open menus and a selection, so rebuilding it every\n/// frame would throw away whatever had been typed into it.\npub(super) struct SceneSchemaForm {\n    form: Entity<SchemaForm>,\n}\n\nimpl Global for SceneSchemaForm {}\n\npub(super) fn scene_schema() -> Schema {\n    Schema::new()\n        .field(\n            SchemaField::new(\n                \"path\",\n                SchemaKind::Text {\n                    placeholder: Some(\"relative to the workspace\".into()),\n                    secret: false,\n                },\n            )\n            .label(\"File\")\n            .description(\"Which file the call reads\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\n                \"max_bytes\",\n                SchemaKind::Integer(NumberBounds::new().min(1.0).max(65_536.0).step(1024.0)),\n            )\n            .label(\"Maximum bytes\"),\n        )\n        .field(\n            SchemaField::new(\"follow_symlinks\", SchemaKind::Boolean).label(\"Follow symbolic links\"),\n        )\n        .field(\n            SchemaField::new(\n                \"encoding\",\n                SchemaKind::Enum(vec![\n                    SchemaChoice::new(\"utf-8\", \"UTF-8\"),\n                    SchemaChoice::new(\"latin-1\", \"Latin-1\"),\n                ]),\n            )\n            .label(\"Encoding\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\"attachments\", SchemaKind::Files { max: Some(2) })\n                .label(\"Attachments\")\n                .description(\"Paths are acquired and accepted by the host\"),\n        )\n        .field(\n            SchemaField::new(\n                \"headers\",\n                SchemaKind::List {\n                    item: Box::new(SchemaField::new(\n                        \"header\",\n                        SchemaKind::Object(vec![\n                            SchemaField::new(\n                                \"name\",\n                                SchemaKind::Text {\n                                    placeholder: Some(\"Header name\".into()),\n                                    secret: false,\n                                },\n                            )\n                            .label(\"Name\")\n                            .required(true),\n                            SchemaField::new(\"enabled\", SchemaKind::Boolean).label(\"Enabled\"),\n                        ]),\n                    )),\n                    max: Some(3),\n                },\n            )\n            .label(\"Headers\"),\n        )\n        .field(\n            SchemaField::new(\n                \"limits\",\n                SchemaKind::Object(vec![\n                    SchemaField::new(\"timeout_ms\", SchemaKind::Integer(NumberBounds::new()))\n                        .label(\"Timeout in milliseconds\"),\n                ]),\n            )\n            .label(\"Limits\"),\n        )\n        .field(\n            SchemaField::new(\n                \"matcher\",\n                SchemaKind::Unrenderable(\n                    \"This argument is one of three shapes at once, and no single control \\\n                     stands for that.\"\n                        .into(),\n                ),\n            )\n            .label(\"Matcher\")\n            .required(true),\n        )\n}\n\npub(super) fn schema_form(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSchemaForm>() {\n        set_schema_file_policy(DefaultSchemaFilePolicy, cx);\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            let _ = form.set_field_validation(\"encoding\", ValidationState::Validating, cx);\n            form.set_files(\"attachments\", vec![\"/workspace/brief.md\".into()], cx)\n                .expect(\"the scene's permissive file policy accepts its fixture\");\n            form.add_list_item(\"headers\", window, 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}\n\n//! What more than one family of scenes needs.\n//!\n//! Everything here is used by scenes in at least two families. A fixture\n//! that only one family builds lives in that family, next to the scenes\n//! that read it, so that moving a component moves its fixture with it.\n\npub(super) use gpui::{\n    AnyElement, App, Corners, DevicePixels, Entity, Focusable, Global, IntoElement, Pixels,\n    RenderImage, SharedString, SpriteBlendMode, SpriteColorMode, SpriteInstance, SpriteTransform,\n    Window, bounds, canvas, conic_gradient_stops, div, linear_color_stop, point, prelude::*, px,\n    radial_gradient_stops, radians, size,\n};\npub(super) use gpui_kit_assets::Icon;\npub(super) use gpui_kit_semantics::{NodeSpec, Role, Semantic};\npub(super) use gpui_kit_theme::{Radius, Space, Surface, SyntaxColor, TextTone, Theme, TypeScale};\npub(super) use std::rc::Rc;\npub(super) use std::sync::{Arc, OnceLock};\npub(super) use std::time::Duration;\n\npub(super) use crate::controls::combobox::Combobox;\npub(super) use crate::controls::input::TextInput;\npub(super) use crate::controls::keybinding_recorder::KeybindingRecorder;\npub(super) use crate::controls::number_input::NumberInput;\npub(super) use crate::controls::select::{Select, SelectOption};\npub(super) use crate::controls::split_button::SplitButton;\npub(super) use crate::controls::tag_input::TagInput;\npub(super) use crate::controls::textarea::{Frame, TextArea};\npub(super) use crate::display::badge::Tone;\npub(super) use crate::display::icon::{Icon as IconView, IconTone};\npub(super) use crate::foundation::ActiveTheme;\npub(super) use crate::foundation::direction::{ActiveDirection, DirectionalExt};\npub(super) use crate::interaction::dnd;\npub(super) use crate::overlay::toast::push as toast_push;\npub(super) use crate::overlay::{Edge, Kbd, Overlay, Placement, Tooltip, Tooltipped};\npub(super) use crate::prelude::*;\npub(super) use crate::strings::{ActiveStrings, StringKey};\n\npub(super) fn stack(theme: &Theme) -> gpui::Div {\n    div()\n        .column()\n        .gap(px(theme.spacing.md))\n        .p(px(theme.spacing.lg))\n        .page(theme)\n        .font_family(theme.typography.sans.clone())\n}\n\npub(super) fn row(theme: &Theme) -> gpui::Div {\n    div()\n        .row()\n        .flex_wrap()\n        .gap(px(theme.spacing.sm))\n        .items_center()\n}\n\n/// A pane of fixture copy, for a scene that needs something on both sides of a\n/// divider or below a viewport.\npub(super) fn filler(theme: &Theme, title: &'static str, lines: usize) -> gpui::Div {\n    let mut pane = div()\n        .flex()\n        .flex_col()\n        .gap(px(theme.space(Space::Xs)))\n        .p(px(theme.space(Space::Md)))\n        .child(crate::foundation::text(\n            theme,\n            TypeScale::Label,\n            SharedString::from(title),\n        ));\n    for line in 1..=lines {\n        pane = pane.child(\n            crate::foundation::text(\n                theme,\n                TypeScale::Code,\n                SharedString::from(format!(\"Fixture line {line:02}\")),\n            )\n            .text_tone(theme, TextTone::Muted),\n        );\n    }\n    pane\n}\n\n/// A caption naming the state a drag scene was staged in.\npub(super) fn caption(theme: &Theme, text: impl Into<SharedString>) -> gpui::Div {\n    crate::foundation::text(theme, TypeScale::Caption, text.into())\n        .text_tone(theme, TextTone::Muted)\n}\n\n/// The element a host hands back for an image this crate did not fetch.\n///\n/// A flat fill rather than a picture, because the crate ships no photographs\n/// and a scene has to photograph the same pixels every run. Neutral, and\n/// quieter than the surface it sits in: a stand-in painted in the accent was\n/// the loudest thing in every scene that used one, which said the placeholder\n/// mattered more than the component being reviewed around it.\npub(super) fn scene_picture(label: &'static str, cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .size_full()\n        .flex()\n        .flex_col()\n        .items_center()\n        .justify_center()\n        .gap(px(theme.space(gpui_kit_theme::Space::Xs)))\n        .bg(theme.colors.sunken)\n        .child(\n            gpui_kit_assets::icon(gpui_kit_assets::Icon::Image)\n                .size(px(theme.typography.subtitle.line_height))\n                .text_color(theme.colors.text_faint),\n        )\n        .child(\n            crate::foundation::text(&theme, TypeScale::Caption, SharedString::new_static(label))\n                .text_tone(&theme, TextTone::Faint),\n        )\n        .into_any_element()\n}\n\n/// The ordinary-application views that own state across frames.\npub(super) struct SceneOrdinary {\n    pub(super) menubar: Entity<Menubar>,\n    pub(super) hover_card: Entity<HoverCard>,\n    pub(super) copy_idle: Entity<CopyButton>,\n    pub(super) copy: Entity<CopyButton>,\n    pub(super) copy_refused: Entity<CopyButton>,\n}\n\nimpl Global for SceneOrdinary {}\n\npub(super) fn ensure_ordinary(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneOrdinary>() {\n        return;\n    }\n    let menubar = cx.new(|cx| {\n        Menubar::new(\n            \"scene.menubar\",\n            [\n                MenubarMenu::new(\n                    \"file\",\n                    \"File\",\n                    [\n                        MenuItem::command(\"file.new\", \"New run\").shortcut(\"cmd-n\"),\n                        MenuItem::command(\"file.open\", \"Open workspace\").shortcut(\"cmd-o\"),\n                        MenuItem::separator(\"file.rule\"),\n                        MenuItem::submenu(\n                            \"file.export\",\n                            \"Export\",\n                            [\n                                MenuItem::command(\"file.export.json\", \"As JSON\"),\n                                MenuItem::command(\"file.export.text\", \"As plain text\"),\n                            ],\n                        ),\n                    ],\n                ),\n                MenubarMenu::new(\n                    \"edit\",\n                    \"Edit\",\n                    [\n                        MenuItem::command(\"edit.undo\", \"Undo\").shortcut(\"cmd-z\"),\n                        MenuItem::check(\"edit.wrap\", \"Wrap lines\", true),\n                    ],\n                ),\n                MenubarMenu::new(\"view\", \"View\", [MenuItem::command(\"view.zoom\", \"Zoom in\")]),\n                MenubarMenu::new(\"policy\", \"Policy\", []).disabled(true),\n            ],\n            window,\n            cx,\n        )\n    });\n    menubar.update(cx, |bar, cx| bar.open(\"file\", window, cx));\n\n    let hover_card = cx.new(|cx| {\n        HoverCard::new(\"scene.hover-card\", window, cx)\n            .name(\"Run 4821\")\n            .trigger(|_, cx| {\n                let theme = cx.theme().clone();\n                crate::foundation::text(&theme, TypeScale::Caption, \"run 4821\")\n                    .text_color(theme.colors.accent)\n                    .into_any_element()\n            })\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .column()\n                    // A column stretches its children across, and a badge\n                    // stretched that far stops reading as a label and starts\n                    // reading as a filled bar.\n                    .items_start()\n                    .gap(px(theme.spacing.xs))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Strong,\n                        \"Nightly regression sweep\",\n                    ))\n                    .child(\n                        crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Finished in 4 minutes, 12 checks, none failed.\",\n                        )\n                        .text_tone(&theme, TextTone::Muted),\n                    )\n                    .child(Badge::new(\"Ready\").success())\n                    .into_any_element()\n            })\n    });\n    hover_card.update(cx, |card, cx| card.open(cx));\n\n    // Nobody has pressed this one. It is the state a reader sees almost all\n    // of the time, and it was the one state of the three no image held.\n    let copy_idle = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-idle\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Ok(()))\n    });\n\n    // The confirmation outlives the capture. At its ordinary length it expires\n    // partway through a run, so which of the two states this scene showed\n    // depended on how long the run took to reach it.\n    let copy = cx.new(|cx| {\n        CopyButton::new(\"scene.copy\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .confirmation(std::time::Duration::from_secs(60 * 60))\n            .copier(|_, _| Ok(()))\n    });\n    copy.update(cx, |button, cx| button.copy(cx));\n\n    let copy_refused = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-refused\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Err(\"The clipboard did not take it.\".into()))\n    });\n    copy_refused.update(cx, |button, cx| button.copy(cx));\n\n    cx.set_global(SceneOrdinary {\n        menubar,\n        hover_card,\n        copy_idle,\n        copy,\n        copy_refused,\n    });\n}\n"
    },
    {
      "name": "motion-state",
      "capture": "cargo run -p xtask -- headless capture motion-state",
      "kind": "composition",
      "subjects": [],
      "uses": [
        "Accordion",
        "Button",
        "Checkbox",
        "ProgressBar",
        "Radio",
        "SegmentedControl",
        "Switch",
        "Tabs"
      ],
      "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(crate::foundation::text(&theme, TypeScale::Body, \"Results are kept in the workspace for 30 days.\")),\n                ),\n        )\n        .child(crate::foundation::text(&theme, TypeScale::Body, \"Every state settles within a fifth of a second; the values are published the moment they change.\").text_tone(&theme, TextTone::Muted))\n        .into_any_element()\n}"
    },
    {
      "name": "motion-primitives",
      "capture": "cargo run -p xtask -- headless capture motion-primitives",
      "kind": "composition",
      "subjects": [],
      "uses": [
        "Button",
        "Tabs"
      ],
      "example": "fn motion_primitives(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneMotionPrimitives>() {\n        cx.set_global(SceneMotionPrimitives::new(cx.theme()));\n    }\n    let now = cx.background_executor().now();\n    let theme = cx.theme().clone();\n    let selected = cx.global::<SceneMotionPrimitives>().demo;\n    let tabs = Tabs::new(\"scene.motion.tabs\")\n        .tabs([\n            TabItem::new(\"sliding-time\", \"Sliding time\"),\n            TabItem::new(\"spring\", \"Spring\"),\n            TabItem::new(\"keyframes\", \"Keyframes\"),\n            TabItem::new(\"presence\", \"Presence\"),\n            TabItem::new(\"stagger\", \"Stagger\"),\n        ])\n        .selected(selected.id())\n        .on_select(|id, _, cx| {\n            let Some(demo) = MotionDemo::from_id(id.as_ref()) else {\n                return;\n            };\n            let theme = cx.theme().clone();\n            cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| scene.select(demo, &theme));\n            cx.refresh_windows();\n        });\n\n    let body = cx.update_global::<SceneMotionPrimitives, AnyElement>(|scene, cx| {\n        scene.update_clock(now);\n        if scene.clock_playing {\n            window.request_animation_frame();\n        }\n        match scene.demo {\n            MotionDemo::SlidingTime => scene.sliding_time(&theme, window, cx),\n            MotionDemo::Spring => scene.spring(&theme, window, cx),\n            MotionDemo::Keyframes => scene.keyframes(&theme, window, cx),\n            MotionDemo::Presence => scene.presence(&theme, window, cx),\n            MotionDemo::Stagger => scene.stagger(&theme, window, cx),\n        }\n    });\n\n    stack(&theme)\n        .w(px(640.0))\n        .child(tabs)\n        .child(body)\n        .into_any_element()\n}"
    },
    {
      "name": "animated-number",
      "capture": "cargo run -p xtask -- headless capture animated-number",
      "kind": "exhibit",
      "subjects": [
        "AnimatedNumber"
      ],
      "uses": [
        "AnimatedNumber"
      ],
      "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    // A readout is a reading, so it is drawn as one: the same card, caption\n    // and hierarchy a KPI gets. A number floating on the canvas beside its\n    // label is a debug print of the value, not a report of it.\n    let readout = |label: &'static str, detail: &'static str, number: AnimatedNumber| {\n        div()\n            .column()\n            .flex_1()\n            .min_w_0()\n            .gap(px(theme.space(Space::Xs)))\n            .p(px(theme.space(Space::Md)))\n            .card_surface(&theme, CardVariant::Filled)\n            .child(\n                crate::foundation::text(&theme, TypeScale::Caption, label)\n                    .text_tone(&theme, TextTone::Muted),\n            )\n            .child(number)\n            .child(\n                crate::foundation::text(&theme, TypeScale::Caption, detail)\n                    .text_tone(&theme, TextTone::Faint),\n            )\n    };\n\n    stack(&theme)\n        .w(px(520.0))\n        .child(caption(\n            &theme,\n            \"the published value is the target, from the frame it changes\",\n        ))\n        .child(\n            div()\n                .row()\n                .items_stretch()\n                .w_full()\n                .gap(px(theme.space(Space::Md)))\n                .child(readout(\n                    \"Runs this week\",\n                    \"counted by the host\",\n                    AnimatedNumber::new(\"scene.number.runs\", runs)\n                        .format(grouped)\n                        .type_scale(TypeScale::Title),\n                ))\n                .child(readout(\n                    \"Median duration\",\n                    \"one decimal, the host's choice\",\n                    AnimatedNumber::new(\"scene.number.seconds\", seconds)\n                        .format(|value| format!(\"{value:.1}s\"))\n                        .type_scale(TypeScale::Title),\n                )),\n        )\n        .child(\n            div().row().child(\n                Button::new(\"scene.number.recount\")\n                    .label(\"Recount\")\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        .into_any_element()\n}"
    },
    {
      "name": "drag-list",
      "capture": "cargo run -p xtask -- headless capture drag-list",
      "kind": "exhibit",
      "subjects": [
        "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                .child(\n                    div()\n                        .surface(&theme, Surface::Panel)\n                        .radius(&theme, Radius::Card)\n                        .py_token(&theme, Space::Xs)\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                )\n                // The ghost is what the pointer is holding, and the pointer is\n                // beside the rows rather than on top of them: staged over a\n                // row it would cut the label it is meant to be leaving.\n                .children(\n                    dnd::staged_ghost(cx)\n                        .map(|ghost| div().absolute().left(px(248.0)).top(px(52.0)).child(ghost)),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "deferred-drop",
      "capture": "cargo run -p xtask -- headless capture deferred-drop",
      "kind": "composition",
      "subjects": [],
      "uses": [
        "List",
        "Tabs",
        "Tree",
        "Button"
      ],
      "example": "fn deferred_drop(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::interaction::dnd::{DeferredDrop, DropDecision, DropRefusal};\n    let theme = cx.theme().clone();\n    let mut content = stack(&theme).w(px(660.0)).child(caption(\n        &theme,\n        \"Fixture: request a move, then approve or refuse it. The host keeps its order.\",\n    ));\n    for (kind, surface) in [\n        (0, \"scene.deferred.list\"),\n        (1, \"scene.deferred.tabs\"),\n        (2, \"scene.deferred.tree\"),\n    ] {\n        let slot = crate::motion::keyed::slot::<Option<DeferredDrop>>(\n            &surface.into(),\n            window.window_handle().window_id(),\n            cx,\n        );\n        let controller = slot\n            .borrow_mut()\n            .get_or_insert_with(|| {\n                DeferredDrop::new(\n                    Duration::from_secs(30),\n                    |intent, _, _| intent.item.id == \"gamma\" && intent.position.anchor() == \"alpha\",\n                    |_, _, _| {},\n                )\n            })\n            .clone();\n        let request = controller.clone();\n        let approve = controller.clone();\n        let refuse = controller.clone();\n        let rows = [\"alpha\", \"beta\", \"gamma\"];\n        let element = match kind {\n            0 => List::new(surface, rows.len(), move |index, _, _| {\n                ListItem::new(rows[index], rows[index]).text(rows[index])\n            })\n            .keys(rows)\n            .reorderable(true)\n            .deferred_acceptance(controller, 1)\n            .on_reorder(|_, _, _| {})\n            .into_any_element(),\n            1 => Tabs::new(surface)\n                .tabs(rows.map(|id| TabItem::new(id, id)))\n                .reorderable(true)\n                .deferred_acceptance(controller, 1)\n                .on_reorder(|_, _, _| {})\n                .into_any_element(),\n            _ => Tree::new(surface)\n                .nodes(rows.map(|id| TreeNode::new(id, id)))\n                .reorderable(true)\n                .deferred_acceptance(controller, 1)\n                .on_move(|_, _, _| {})\n                .into_any_element(),\n        };\n        content = content\n            .child(caption(&theme, surface))\n            .child(element)\n            .child(\n                row(&theme)\n                    .child(\n                        Button::new(format!(\"{surface}.request\"))\n                            .label(\"Request move\")\n                            .on_click(move |window, cx| {\n                                request.request(\n                                    DropIntent {\n                                        item: DragItem::new(surface, \"gamma\", \"gamma\"),\n                                        position: DropPosition::Before(\"alpha\".into()),\n                                        velocity: crate::motion::Velocity::ZERO,\n                                    },\n                                    window,\n                                    cx,\n                                );\n                            }),\n                    )\n                    .child(\n                        Button::new(format!(\"{surface}.approve\"))\n                            .label(\"Approve\")\n                            .on_click(move |window, cx| {\n                                if let Some((request, _)) = approve.status() {\n                                    approve.resolve(request.id, DropDecision::Accepted, window, cx);\n                                }\n                            }),\n                    )\n                    .child(\n                        Button::new(format!(\"{surface}.refuse\"))\n                            .label(\"Refuse\")\n                            .on_click(move |window, cx| {\n                                if let Some((request, _)) = refuse.status() {\n                                    refuse.resolve(\n                                        request.id,\n                                        DropDecision::Refused(DropRefusal::Policy),\n                                        window,\n                                        cx,\n                                    );\n                                }\n                            }),\n                    ),\n            );\n    }\n    content.into_any_element()\n}"
    },
    {
      "name": "drag-tree",
      "capture": "cargo run -p xtask -- headless capture drag-tree",
      "kind": "exhibit",
      "subjects": [
        "Tree"
      ],
      "uses": [
        "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                        // Beside the row it is landing on, and level with it:\n                        // a ghost drawn over the target hides the one thing\n                        // the picture is about.\n                        .map(|ghost| div().absolute().left(px(300.0)).top(px(155.0)).child(ghost)),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "dropzone",
      "capture": "cargo run -p xtask -- headless capture dropzone",
      "kind": "exhibit",
      "subjects": [
        "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                            .hint(\"PDF, PNG, or plain text\")\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 -- headless capture wizard",
      "kind": "exhibit",
      "subjects": [
        "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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    SharedString::new_static(\"The body of the current step belongs to the caller.\"),\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": "undo-history",
      "capture": "cargo run -p xtask -- headless capture undo-history",
      "kind": "exhibit",
      "subjects": [
        "UndoHistory"
      ],
      "uses": [
        "UndoHistory"
      ],
      "example": "fn undo_history(_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            \"the caller owns every revision and whether it can be restored\",\n        ))\n        .child(\n            UndoHistory::new(\"scene.undo-history\", \"Document undo history\")\n                .entries([\n                    HistoryEntry::new(\"opened\", \"Opened the fixture\")\n                        .description(\"The initial verified document\")\n                        .source(\"Fixture host\")\n                        .time(\"10:14\"),\n                    HistoryEntry::new(\"renamed\", \"Renamed the title\")\n                        .source(\"Alex\")\n                        .time(\"10:16\"),\n                    HistoryEntry::new(\"imported\", \"Imported archived blocks\")\n                        .description(\"The archive is no longer available\")\n                        .source(\"Archive\")\n                        .time(\"10:18\")\n                        .unavailable(\"This revision cannot be restored without the archive.\"),\n                    HistoryEntry::new(\"current\", \"Reordered the summary\")\n                        .description(\"Current document\")\n                        .source(\"Alex\")\n                        .time(\"10:21\"),\n                    HistoryEntry::new(\"draft\", \"Drafted a new conclusion\")\n                        .source(\"Fixture host\")\n                        .time(\"10:23\"),\n                ])\n                .current(\"current\")\n                .on_jump(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "settings",
      "capture": "cargo run -p xtask -- headless capture settings",
      "kind": "exhibit",
      "subjects": [
        "SettingsList",
        "SettingsRow",
        "SettingsSection"
      ],
      "uses": [
        "SettingsList",
        "SettingsRow",
        "SettingsSection"
      ],
      "example": "fn settings(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSettingsInputs>() {\n        let inputs = [(\"name\", \"Fixture assistant\"), (\"model\", \"Local model\")]\n            .into_iter()\n            .map(|(id, value)| {\n                cx.new(|cx| {\n                    TextInput::new(format!(\"scene.settings.fields.{id}.input\"), window, cx)\n                        .text(value)\n                        .control_size(ControlSize::Sm)\n                })\n            })\n            .collect();\n        cx.set_global(SceneSettingsInputs(inputs));\n    }\n    let fields = cx.global::<SceneSettingsInputs>().0.clone();\n    let theme = cx.theme().clone();\n    let general = || {\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                    .search_terms([\"engine\", \"local executor\"])\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    let sync = || {\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                    .description(\"Keyboard, theme, and editor preferences\")\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                    .description(\"Runs and transcripts from the last 30 days\")\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\n    stack(&theme)\n        .w_full()\n        .child(\n            row(&theme)\n                .w_full()\n                .items_start()\n                // The filtered list opens with its own count, so the\n                // unfiltered one is given a line saying what it is. Without\n                // it the two pages start at different heights and nothing in\n                // the picture says why one column sits lower than the other.\n                .child(\n                    div()\n                        .flex_1()\n                        .min_w_0()\n                        .column()\n                        .gap_token(&theme, Space::Md)\n                        .child(caption(&theme, \"no query, so every section\"))\n                        .child(SettingsList::new(\"scene.settings.all\").section(general())),\n                )\n                .child(\n                    div().flex_1().min_w_0().child(\n                        SettingsList::new(\"scene.settings.filtered\")\n                            .query(\"sync\")\n                            .section(general())\n                            .section(sync()),\n                    ),\n                ),\n        )\n        .child(\n            SettingsSection::new(\"scene.settings.fields\", \"Aligned fields and custom blocks\")\n                .description(\"120px labels; flexible fields; annotations at the reading end\")\n                .label_width(px(120.0))\n                .row(\n                    SettingsRow::new(\"scene.settings.fields.name\", \"Name\")\n                        .control(fields[0].clone())\n                        .description(\"Visible in the workspace\"),\n                )\n                .child(\n                    crate::display::card::ListRow::new()\n                        .id(\"scene.settings.fields.device\")\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Fixture device · connected\",\n                        )),\n                )\n                .row(\n                    SettingsRow::new(\"scene.settings.fields.model\", \"Model\")\n                        .control(fields[1].clone())\n                        .description(\"Chosen by the caller\"),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "settings-page",
      "capture": "cargo run -p xtask -- headless capture settings-page",
      "kind": "exhibit",
      "subjects": [
        "SettingsList"
      ],
      "uses": [
        "SettingsList"
      ],
      "example": "fn settings_page(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let search = window.use_keyed_state(\"scene.settings-page.search\", cx, |window, cx| {\n        SearchInput::new(\"scene.settings-page.query\", window, cx).placeholder(\"Search settings\")\n    });\n    let category = window.use_keyed_state(\"scene.settings-page.category\", cx, |_, _| {\n        SharedString::from(\"all\")\n    });\n    let selected = category.read(cx).clone();\n    let query = search.read(cx).value(cx);\n    let general = SettingsSection::new(\"scene.settings-page.general\", \"General\")\n        .label_width(px(150.0))\n        .row(SettingsRow::new(\"scene.settings-page.autosave\", \"Automatic save\").value(\"On\"))\n        .row(\n            SettingsRow::new(\"scene.settings-page.telemetry\", \"Usage reporting\")\n                .value(\"Off\")\n                .managed(\"fixture administrator\"),\n        );\n    let appearance = SettingsSection::new(\"scene.settings-page.appearance\", \"Appearance\")\n        .label_width(px(150.0))\n        .row(SettingsRow::new(\"scene.settings-page.theme\", \"Theme\").value(\"Studio\"))\n        .row(SettingsRow::new(\"scene.settings-page.density\", \"Density\").value(\"Comfortable\"));\n    let sections = match selected.as_ref() {\n        \"general\" => vec![general],\n        \"appearance\" => vec![appearance],\n        _ => vec![general, appearance],\n    };\n    let header_search = search.clone();\n    stack(&theme).w(px(840.0))\n        .child(caption(&theme, \"Fixture settings page: category navigation and search remain available when there are no matches\"))\n        .child(SettingsList::new(\"scene.settings-page.list\").query(query).sections(sections)\n            .slot(\"header\", move |_, cx| {\n                let theme = cx.theme();\n                div().column().gap_token(theme, Space::Sm)\n                    .child(crate::foundation::text(theme, TypeScale::Title, \"Settings\"))\n                    .child(header_search.clone()).into_any_element()\n            })\n            .slot(\"sidebar\", move |_, _| {\n                let category = category.clone();\n                Sidebar::new(\"scene.settings-page.categories\")\n                    .fit_height()\n                    .section(SidebarSection::new(\"sections\").items([\n                        SidebarItem::new(\"all\", \"All settings\"), SidebarItem::new(\"general\", \"General\"),\n                        SidebarItem::new(\"appearance\", \"Appearance\")]))\n                    .active(selected.clone()).on_select(move |id, _, cx| category.update(cx, |value, cx| {\n                        *value = id; cx.notify();\n                    })).into_any_element()\n            })\n            .slot(\"footer\", move |_, _| {\n                let search = search.clone();\n                Button::new(\"scene.settings-page.reset\").label(\"Reset search\")\n                    .on_click(move |_, cx| search.update(cx, |search, cx| search.set_value(\"\", cx)))\n                    .into_any_element()\n            }))\n        .into_any_element()\n}"
    },
    {
      "name": "translation-packs",
      "capture": "cargo run -p xtask -- headless capture translation-packs",
      "kind": "composition",
      "subjects": [],
      "uses": [
        "Card",
        "Button"
      ],
      "example": "fn translation_packs(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::strings::TranslationPack;\n    use gpui_kit_semantics::{NodeSpec, Role, Semantic};\n    let theme = cx.theme().clone();\n    let mut columns = row(&theme).items_start();\n    for &pack in TranslationPack::ALL {\n        let strings = pack.strings();\n        let prefix = format!(\"scene.translations.{}\", pack.language_tag());\n        let mut card = Card::new()\n            .id(prefix.clone())\n            .padding(Space::Md)\n            .child(crate::foundation::text(\n                &theme,\n                TypeScale::Title,\n                pack.language_tag(),\n            ))\n            .child(\n                Button::new(format!(\"{prefix}.copy\"))\n                    .label(strings.text(StringKey::Copy))\n                    .disabled(true),\n            );\n        for (key, values) in [\n            (StringKey::SettingsManagedBy, &[\"fixture administrator\"][..]),\n            (StringKey::GridSelectionCounts, &[\"2\", \"7\", \"19\"][..]),\n            (StringKey::AttachmentReady, &[][..]),\n            (StringKey::AttachmentProcessing, &[][..]),\n            (StringKey::BrowserEmpty, &[][..]),\n            (StringKey::BrowserUnavailable, &[][..]),\n            (StringKey::CopyFailedDetail, &[][..]),\n            (StringKey::ApprovalAlwaysPath, &[\"/work\"][..]),\n            (StringKey::RangeInverted, &[\"2026-09-01\", \"2026-09-09\"][..]),\n        ] {\n            let text = strings.format(key, values);\n            card = card.child(\n                div()\n                    .py_token(&theme, Space::Xs)\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Body,\n                        text.clone(),\n                    ))\n                    .semantic_in(\n                        cx,\n                        NodeSpec::new(format!(\"{prefix}.{}\", key.name()), Role::Text).text(text),\n                    ),\n            );\n        }\n        columns = columns.child(div().w(px(390.0)).child(card));\n    }\n    stack(&theme).w(px(840.0))\n        .child(caption(&theme, \"Built-in vocabulary fixture: disabled action previews, distinct states, and reordered template arguments. Caller data is not translated.\"))\n        .child(columns).into_any_element()\n}"
    },
    {
      "name": "detail",
      "capture": "cargo run -p xtask -- headless capture detail",
      "kind": "exhibit",
      "subjects": [
        "DescriptionList",
        "Timeline"
      ],
      "uses": [
        "DescriptionList",
        "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        // The facts are a section of a detail page rather than prose loose on\n        // the canvas, and the list is drawn the way a detail page would hold\n        // it: on a surface with an edge the two columns are read against.\n        .child(\n            div()\n                .column()\n                .card_surface(&theme, CardVariant::Elevated)\n                .p_token(&theme, Space::Md)\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        )\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(crate::foundation::text(\n                                    &theme,\n                                    TypeScale::Body,\n                                    SharedString::new_static(\n                                        \"The host refused the request. The refusal is shown as it \\\n                                     arrived.\",\n                                    ),\n                                ).text_tone(&theme, TextTone::Muted)),\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 -- headless capture filter-bar",
      "kind": "exhibit",
      "subjects": [
        "FilterBar"
      ],
      "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 -- headless capture inline-edit",
      "kind": "exhibit",
      "subjects": [
        "InlineEdit"
      ],
      "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 -- headless capture progress-circle",
      "kind": "exhibit",
      "subjects": [
        "ProgressCircle"
      ],
      "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(\n            &theme,\n            \"unknown, stalled, and paused work remain different facts\",\n        ))\n        .child(\n            row(&theme)\n                .gap(px(theme.spacing.lg))\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            ProgressCircle::new(\"scene.progress-circle.stalled\")\n                                .label(\"Upload stalled\")\n                                .stalled(true),\n                        )\n                        .child(caption(&theme, \"Stalled\")),\n                )\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            ProgressCircle::new(\"scene.progress-circle.paused\")\n                                .label(\"Upload paused\")\n                                .paused(true),\n                        )\n                        .child(caption(&theme, \"Paused\")),\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 -- headless capture split-tree",
      "kind": "exhibit",
      "subjects": [
        "SplitTree"
      ],
      "uses": [
        "SplitTree"
      ],
      "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                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    SplitTree::new(\"scene.tree.workspace\")\n                        .layout(layout)\n                        // Each pane holds enough to reach the bottom of the\n                        // room the tree gave it: a pane drawn half empty says\n                        // the divider above it is in the wrong place, which is\n                        // the one thing this scene is not about.\n                        .pane(\"files\", filler(&theme, \"Files\", 13))\n                        .pane(\"editor\", filler(&theme, \"main.rs\", 7))\n                        .pane(\"terminal\", filler(&theme, \"Terminal\", 4))\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": "dock-tree",
      "capture": "cargo run -p xtask -- headless capture dock-tree",
      "kind": "exhibit",
      "subjects": [
        "DockTree"
      ],
      "uses": [
        "DockTree"
      ],
      "example": "fn dock_tree(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let topology = DockTopology::vertical(\n        \"root\",\n        0.78,\n        DockTopology::horizontal(\n            \"workspace\",\n            0.28,\n            DockTopology::Stack(DockStack::new(\"source\", [\"files\", \"search\"]).active(\"files\")),\n            DockTopology::horizontal(\n                \"editing\",\n                0.9,\n                DockTopology::stack(\"editor\", [\"main\"]),\n                DockTopology::Stack(DockStack::new(\"outline\", [\"symbols\"]).collapsed(true)),\n            ),\n        ),\n        DockTopology::stack(\"terminal\", std::iter::empty::<&str>()),\n    );\n\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"recursive caller topology; tab groups, empty destinations, rails, and split dividers share existing primitives\",\n        ))\n        .child(\n            div()\n                .h(px(600.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    DockTree::new(\"scene.dock-tree\", topology)\n                        .panels([\n                            DockPanel::new(\"files\", \"Files\")\n                                .icon(Icon::Folder)\n                                .content(filler(&theme, \"Workspace\", 12)),\n                            DockPanel::new(\"search\", \"Search\")\n                                .icon(Icon::Magnifier)\n                                .badge(\"12\"),\n                            DockPanel::new(\"main\", \"main.rs\")\n                                .icon(Icon::Document)\n                                .content(filler(&theme, \"fn main()\", 15)),\n                            DockPanel::new(\"symbols\", \"Outline\").icon(Icon::List),\n                        ])\n                        .on_event(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "dock-floating",
      "capture": "cargo run -p xtask -- headless capture dock-floating",
      "kind": "exhibit",
      "subjects": [
        "DockTree"
      ],
      "uses": [
        "DockTree"
      ],
      "example": "fn dock_floating(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{DockTreeEvent, FloatingDock};\n    if !cx.has_global::<SceneFloatingDock>() {\n        cx.set_global(SceneFloatingDock::default());\n    }\n    let theme = cx.theme().clone();\n    let bounds = cx\n        .global::<SceneFloatingDock>()\n        .bounds\n        .unwrap_or(gpui::Bounds::new(\n            gpui::point(0.36, 0.18),\n            gpui::size(0.48, 0.58),\n        ));\n    stack(&theme).w(px(850.0))\n        .child(caption(&theme, \"Fixture: drag the floating header or resize corner; arrow keys adjust either. Restore uses caller-saved completed gestures.\"))\n        .child(Button::new(\"scene.dock-floating.restore\").label(\"Restore saved layout\").on_click(|_, cx| {\n            let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = state.saved; cx.refresh_windows();\n        }))\n        .child(div().h(px(500.0)).child(\n            DockTree::new(\"scene.dock-floating\", DockTopology::stack(\"workspace\", [\"main\"]))\n                .floating([FloatingDock::new(DockStack::new(\"inspector\", [\"details\"]), bounds).expect(\"valid fixture\")]).expect(\"unique fixture identities\")\n                .panels([\n                    DockPanel::new(\"main\", \"Workspace\").content(filler(&theme, \"Caller-owned background\", 15)),\n                    DockPanel::new(\"details\", \"Details\").content(filler(&theme, \"Floating inspector\", 7)),\n                ])\n                .on_event(|event, _, cx| {\n                    match event {\n                        DockTreeEvent::FloatingChanged { bounds, finished, .. } => {\n                            let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = Some(bounds); if finished { state.saved = Some(bounds); }\n                        }\n                        DockTreeEvent::FloatingCancelled { .. } => { let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = state.saved; }\n                        _ => {}\n                    }\n                    cx.refresh_windows();\n                })\n        )).into_any_element()\n}"
    },
    {
      "name": "ide-shell",
      "capture": "cargo run -p xtask -- headless capture ide-shell",
      "kind": "exhibit",
      "subjects": [
        "Dock",
        "StatusBar"
      ],
      "uses": [
        "Dock",
        "StatusBar"
      ],
      "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(940.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                    // The bottom region holds one refused panel, and a refusal\n                    // is a sentence rather than a document: given a third of\n                    // the frame it reads as a region that lost its content\n                    // instead of as a panel the host would not open.\n                    .share(DockRegion::Bottom, 0.17)\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                        // No badge: a panel that cannot list problems cannot\n                        // count them either, and one unavailable reason is the\n                        // whole claim. Gluing \"there is nothing here\" onto it\n                        // would report Empty and Unavailable at once.\n                        DockPanel::new(\"problems\", \"Problems\")\n                            .icon(Icon::Danger)\n                            .unavailable(\n                                \"The language server is not running, so problems cannot be listed.\",\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 -- headless capture keybinding",
      "kind": "exhibit",
      "subjects": [
        "KeybindingRecorder"
      ],
      "uses": [
        "KeybindingRecorder"
      ],
      "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": "keymap-editor",
      "capture": "cargo run -p xtask -- headless capture keymap-editor",
      "kind": "exhibit",
      "subjects": [
        "KeymapEditor"
      ],
      "uses": [
        "KeymapEditor"
      ],
      "example": "fn keymap_editor(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneKeymapEditor>() {\n        let editor = cx.new(|cx| {\n            KeymapEditor::new(\"scene.keymap-editor\", window, cx).commands([\n                KeymapCommand::new(\"workspace.open\", \"Open workspace\")\n                    .context(\"Workspace\")\n                    .defaults([\"cmd-o\"])\n                    .bindings([\n                        KeymapBinding::new(\"user\", \"cmd-shift-o\")\n                            .conflict(\"Already opens recent workspaces\")\n                            .provenance(\"User keymap\"),\n                        KeymapBinding::new(\"workspace\", \"ctrl-o\").provenance(\"Workspace keymap\"),\n                    ])\n                    .searchable(\"Open a folder or project\", [\"folder\", \"project\"]),\n                KeymapCommand::new(\"terminal.toggle\", \"Toggle terminal\")\n                    .context(\"Terminal\")\n                    .defaults([\"ctrl-`\"])\n                    .bindings([KeymapBinding::new(\"default\", \"ctrl-`\")])\n                    .searchable(\"Show the integrated terminal\", [\"panel\", \"console\"]),\n                KeymapCommand::new(\"policy.locked\", \"Managed shortcut\")\n                    .context(\"Workspace\")\n                    .defaults([\"cmd-l\"])\n                    .bindings([KeymapBinding::new(\"managed\", \"cmd-l\").provenance(\"Host policy\")])\n                    .refused(\"This binding is managed by the host.\"),\n            ])\n        });\n        cx.set_global(SceneKeymapEditor(editor));\n    }\n    let editor = cx.global::<SceneKeymapEditor>().0.clone();\n    let theme = cx.theme().clone();\n\n    stack(&theme)\n        .w(px(760.0))\n        .child(editor)\n        .child(caption(\n            &theme,\n            \"Bindings remain caller-owned; add, remove, and reset are intents.\",\n        ))\n        .into_any_element()\n}"
    },
    {
      "name": "markdown",
      "capture": "cargo run -p xtask -- headless capture markdown",
      "kind": "exhibit",
      "subjects": [
        "Markdown"
      ],
      "uses": [
        "Markdown"
      ],
      "example": "fn markdown(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let document = stack(&theme)\n        .w(px(640.0))\n        .child(Markdown::new(\"scene.markdown.document\", SCENE_DOCUMENT).on_event(|_, _, _| {}))\n        .child(\n            Divider::new()\n                .id(\"scene.markdown.flat-rule\")\n                .label(\"The same fence in flat presentation\"),\n        )\n        .child(\n            Markdown::new(\n                \"scene.markdown.flat\",\n                \"```rust\\nfn main() { println!(\\\"a long line keeps its horizontal code overflow\\\"); }\\n```\",\n            )\n            .code_presentation(MarkdownCodePresentation::Flat)\n            .on_event(|_, _, _| {}),\n        )\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    div().row().child(document).child(\n        stack(&theme).w(px(272.0))\n            .child(caption(&theme, \"Unicode line breaks · CJK and Latin\"))\n            .child(Markdown::new(\n                \"scene.markdown.unicode-wrap\",\n                \"设计图通过后仍需运行、测量和批注；截图不能证明可玩。请检查「运行结果」（第12轮），然后比较 Hello world你好世界与 internationalization 2026-09。\",\n            ))\n            .child(caption(&theme, \"Frontmatter stays data\"))\n            .child(Markdown::new(\"scene.markdown.metadata\", \"---\\ntitle: Review fixture\\ntrusted: false\\n---\\n\\nMetadata is visible, never applied.\"))\n            .child(caption(&theme, \"Host block plugin · native rendering\"))\n            .child(Markdown::new(\"scene.markdown.plugin\", \"```notice\\nThis fixture uses a trusted native block renderer.\\n```\\n\\n```unknown\\nUnknown fences remain code.\\n```\")\n                .block_renderer(|ident, block, _, _, _| {\n                    if let crate::content::markdown::Block::Code { language, text } = block\n                        && language.as_deref() == Some(\"notice\") {\n                        Some(Callout::new(text.clone(), Tone::Info).id(ident.clone()).into_any_element())\n                    } else { None }\n                }))\n            // Hold worker states deterministically; the executor/coalescing\n            // tests exercise the actual transition into and out of them.\n            .child(caption(&theme, \"Background parsing · state fixtures\"))\n            .child(Markdown::new(\"scene.markdown.loading\", \"\").parsing(true))\n            .child(Markdown::new(\"scene.markdown.refreshing\", \"The **last verified text** stays visible while its replacement is parsed.\").parsing(true)),\n    )\n        .into_any_element()\n}"
    },
    {
      "name": "agent-document",
      "capture": "cargo run -p xtask -- headless capture agent-document",
      "kind": "exhibit",
      "subjects": [
        "AgentDocument"
      ],
      "uses": [
        "AgentDocument"
      ],
      "example": "fn agent_document(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(680.0))\n        .child(\n            AgentDocument::new(\"scene.agent-document\")\n                .block(\n                    AgentDocumentBlock::markdown(\n                        \"summary\",\n                        \"## Review complete\\n\\nThe run kept its **verified result** while the refresh failed.\",\n                    )\n                    .revision(3),\n                )\n                .block(\n                    AgentDocumentBlock::code(\"patch\", |_, _| {\n                        CodeView::from_text(\n                            \"scene.agent-document.patch\",\n                            \"pub fn bounded_retry(attempt: usize) -> bool {\\n    attempt < 3\\n}\",\n                        )\n                        .language(\"rust\")\n                        .into_any_element()\n                    })\n                    .label(\"Proposed code\")\n                    .revision(2),\n                )\n                .block(\n                    AgentDocumentBlock::tool_call(\"verification\", |_, _| {\n                        ToolCall::new(\n                            \"scene.agent-document.tool\",\n                            ToolFamily::Shell,\n                            \"cargo test\",\n                        )\n                            .summary(\"-p gpui-box-kit\")\n                            .state(ToolCallState::Succeeded {\n                                output: ToolOutput::Silent,\n                            })\n                            .elapsed(\"1.4 s\")\n                            .into_any_element()\n                    })\n                    .revision(1),\n                )\n                .block(AgentDocumentBlock::notice(\n                    \"refresh\",\n                    \"The last refresh failed; the result above is the last verified value.\",\n                    Tone::Warning,\n                )),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.agent-document.long\")\n                .label(\"The same document, virtualized\"),\n        )\n        // A paragraph rather than a caption. At the caption step this ran the\n        // full width of the document immediately above the body text it\n        // introduces, so the sentence explaining what to look at was set\n        // smaller and fainter than everything it was explaining.\n        .child(\n            crate::foundation::text(\n                &theme,\n                TypeScale::Body,\n                \"a conversation that has been running all day: only the blocks on \\\n                 screen are built and laid out, and the ones above are still there. \\\n                 A long answer is drawn as a row per block of its own, so a token \\\n                 arriving in its last paragraph relays out that paragraph\",\n            )\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .child(\n            AgentDocument::new(\"scene.agent-thread\")\n                .virtualized(5)\n                .block(\n                    AgentDocumentBlock::markdown(\n                        \"answer\",\n                        \"**The answer.** It kept the verified result, and the run \\\n                         below says why.\\n\\n\\\n                         - the refresh failed\\n- the last verified value stands\\n\\n\\\n                         Nothing after that point was rewritten.\",\n                    )\n                    .revision(1),\n                )\n                .blocks((0..120).map(|turn| {\n                    AgentDocumentBlock::markdown(\n                        format!(\"turn-{turn:03}\"),\n                        format!(\n                            \"**Turn {turn}.** The run kept its verified result while the \\\n                             refresh failed, and the answer below says why.\"\n                        ),\n                    )\n                    .revision(turn as u64)\n                })),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.agent-document.rule\")\n                .label(\"Document states\"),\n        )\n        .child(\n            div()\n                .row_reading(cx.layout_direction())\n                .gap_token(&theme, Space::Lg)\n                .child(\n                    div().flex_1().child(\n                        AgentDocument::new(\"scene.agent-document.empty\")\n                            .state(AgentDocumentState::Empty(\"No results were returned.\".into())),\n                    ),\n                )\n                .child(\n                    div().flex_1().child(\n                        AgentDocument::new(\"scene.agent-document.unavailable\").state(\n                            AgentDocumentState::Unavailable(\n                                \"The host refused to provide this document.\".into(),\n                            ),\n                        ),\n                    ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "agent-roster",
      "capture": "cargo run -p xtask -- headless capture agent-roster",
      "kind": "exhibit",
      "subjects": [
        "AgentCard",
        "AgentGroup",
        "AgentRoster",
        "SubagentTree"
      ],
      "uses": [
        "AgentCard",
        "AgentGroup",
        "AgentRoster",
        "SubagentTree"
      ],
      "example": "fn agent_roster(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let direction = cx.layout_direction();\n    let run = scene_agent_run();\n    let root = run\n        .agents\n        .first()\n        .cloned()\n        .expect(\"the canonical multi-agent scene has a root agent\");\n\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            div()\n                .row_reading(direction)\n                .items_center()\n                .justify_between()\n                .child(\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            div()\n                                .type_scale(&theme, TypeScale::Title)\n                                .text_tone(&theme, TextTone::Primary)\n                                .child(\"Release review\"),\n                        )\n                        .child(AgentActivityLine::new(\n                            \"scene.agent-roster.run-state\",\n                            run.execution.clone(),\n                        )),\n                )\n                .child(\n                    AgentGroup::new(\"scene.agent-roster.group\", run.agents.clone()).max_visible(3),\n                ),\n        )\n        .child(\n            AgentCard::new(\"scene.agent-roster.root\", root)\n                .task_label(\"Synthesis\")\n                .selected(true)\n                .on_action(|_, _, _| {}),\n        )\n        .child(\n            div()\n                .row_reading(direction)\n                .items_start()\n                .gap_token(&theme, Space::Lg)\n                .child(\n                    div().w(px(420.0)).child(\n                        AgentRoster::from_run(\"scene.agent-roster.list\", &run)\n                            .selected(\"researcher\")\n                            .visible_rows(4)\n                            .on_action(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    div().w(px(270.0)).child(\n                        SubagentTree::new(\"scene.agent-roster.tree\", run)\n                            .expanded([\"orchestrator\".into(), \"researcher\".into()])\n                            .selected(\"researcher\")\n                            .visible_rows(4)\n                            .on_toggle(|_, _, _, _| {})\n                            .on_action(|_, _, _| {}),\n                    ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "persona",
      "capture": "cargo run -p xtask -- headless capture persona",
      "kind": "exhibit",
      "subjects": [
        "PersonaDialogue",
        "PersonaPortrait",
        "VoiceReactive"
      ],
      "uses": [
        "PersonaDialogue",
        "PersonaPortrait",
        "VoiceReactive"
      ],
      "example": "fn persona(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let speaking =\n        AgentSnapshot::new(AgentDescriptor::new(\"guide\", \"Lyra\").role(\"Expedition guide\"))\n            .presence(AgentPresence::Online)\n            .execution(AgentExecutionState::Active(AgentActivity::Speaking));\n    let listening =\n        AgentSnapshot::new(AgentDescriptor::new(\"listener\", \"Moss\").role(\"World companion\"))\n            .presence(AgentPresence::Online)\n            .execution(AgentExecutionState::Waiting(WaitReason::UserInput));\n    let speaking_voice =\n        VoiceSample::new(VoiceState::Speaking, 0.76, 0.58).expect(\"scene voice is normalized\");\n    let listening_voice =\n        VoiceSample::new(VoiceState::Listening, 0.32, 0.48).expect(\"scene voice is normalized\");\n    let idle = AgentSnapshot::new(AgentDescriptor::new(\"idle\", \"Ori\").role(\"Archivist\"))\n        .presence(AgentPresence::Away)\n        .execution(AgentExecutionState::Idle);\n    let thinking = AgentSnapshot::new(AgentDescriptor::new(\"thinking\", \"Sable\").role(\"Tactician\"))\n        .presence(AgentPresence::Online)\n        .execution(AgentExecutionState::Active(AgentActivity::Thinking));\n    let celebrating = AgentSnapshot::new(AgentDescriptor::new(\"victor\", \"Kite\").role(\"Pathfinder\"))\n        .presence(AgentPresence::Online)\n        .execution(AgentExecutionState::Completed(AgentOutcome::Succeeded));\n    let unavailable_voice = VoiceSample::new(\n        VoiceState::Unavailable(\"Voice input was not granted.\".into()),\n        0.0,\n        0.0,\n    )\n    .expect(\"scene voice is normalized\");\n\n    let content = div()\n        .column()\n        .w(px(680.0))\n        .gap_token(&theme, Space::Md)\n        .child(\n            div()\n                .row_reading(cx.layout_direction())\n                .items_center()\n                .gap_token(&theme, Space::Xl)\n                .child(\n                    PersonaPortrait::new(\"scene.persona.portrait-speaking\", speaking.clone())\n                        .expression(PersonaExpression::Warm)\n                        .voice(speaking_voice.clone())\n                        .sample_at(Duration::from_millis(640)),\n                )\n                .child(\n                    PersonaPortrait::new(\"scene.persona.portrait-listening\", listening.clone())\n                        .expression(PersonaExpression::Focused)\n                        .voice(listening_voice.clone())\n                        .sample_at(Duration::from_millis(640)),\n                )\n                .child(\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            div()\n                                .type_scale(&theme, TypeScale::Label)\n                                .text_tone(&theme, TextTone::Primary)\n                                .child(\"Voice-reactive\"),\n                        )\n                        .child(\n                            VoiceReactive::new(\"scene.persona.voice\", speaking_voice)\n                                .sample_at(Duration::from_millis(640)),\n                        ),\n                ),\n        )\n        .child(\n            PersonaDialogue::new(\n                \"scene.persona.dialogue\",\n                DialogueTurn::markdown(\n                    \"crossroads\",\n                    speaking,\n                    \"The signal splits at the **crystal bridge.** I can scout either route without advancing the story for you.\",\n                )\n                .streaming(true)\n                .choice(DialogueChoice::new(\"bridge\", \"Cross the bridge\").selected(true))\n                .choice(DialogueChoice::new(\"cavern\", \"Enter the cavern\"))\n                .choice(\n                    DialogueChoice::new(\"gate\", \"Open the sealed gate\")\n                        .unavailable(\"The gate key has not been verified.\"),\n                ),\n            )\n            .expression(PersonaExpression::Warm)\n            .voice(listening_voice)\n            .on_event(|_, _, _| {}),\n        )\n        .child(\n            div()\n                .row_reading(cx.layout_direction())\n                .items_center()\n                .gap_token(&theme, Space::Xl)\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            PersonaPortrait::new(\"scene.persona.idle\", idle)\n                                .expression(PersonaExpression::Neutral)\n                                .size(68.0),\n                        )\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Idle · neutral\",\n                        )),\n                )\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            PersonaPortrait::new(\"scene.persona.thinking\", thinking)\n                                .expression(PersonaExpression::Focused)\n                                .size(68.0),\n                        )\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Thinking · focused\",\n                        )),\n                )\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            PersonaPortrait::new(\"scene.persona.celebrating\", celebrating)\n                                .expression(PersonaExpression::Celebrating)\n                                .size(68.0),\n                        )\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Succeeded · celebrating\",\n                        )),\n                )\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(VoiceReactive::new(\n                            \"scene.persona.voice-unavailable\",\n                            unavailable_voice,\n                        ))\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Unavailable\",\n                        )),\n                ),\n        )\n        ;\n\n    stack(&theme)\n        .size_full()\n        .items_center()\n        .justify_center()\n        .child(content)\n        .into_any_element()\n}"
    },
    {
      "name": "game-ui",
      "capture": "cargo run -p xtask -- headless capture game-ui",
      "kind": "exhibit",
      "subjects": [
        "AbilityBar",
        "ObjectiveTracker",
        "PartyRoster",
        "RewardReveal"
      ],
      "uses": [
        "AbilityBar",
        "ObjectiveTracker",
        "PartyRoster",
        "RewardReveal"
      ],
      "example": "fn game_ui(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let direction = cx.layout_direction();\n    let normalized = |value| GameFraction::new(value).expect(\"scene fraction is normalized\");\n    let lyra = AgentSnapshot::new(AgentDescriptor::new(\"lyra\", \"Lyra\").role(\"Pathfinder\"))\n        .presence(AgentPresence::Online)\n        .execution(AgentExecutionState::Active(AgentActivity::UsingTool(\n            \"prism scanner\".into(),\n        )));\n    let orin = AgentSnapshot::new(AgentDescriptor::new(\"orin\", \"Orin\").role(\"Warden\"))\n        .presence(AgentPresence::Online)\n        .execution(AgentExecutionState::Waiting(WaitReason::Dependency(\n            \"beacon\".into(),\n        )));\n    let party = PartySnapshot::new([\n        PartyMember::new(lyra)\n            .expression(PersonaExpression::Focused)\n            .gauge(PartyGauge::known(\n                \"resolve\",\n                \"Resolve\",\n                normalized(0.72),\n                \"72 / 100\",\n            )),\n        PartyMember::new(orin)\n            .expression(PersonaExpression::Neutral)\n            .gauge(PartyGauge::unknown(\"bond\", \"Bond\"))\n            .gauge(PartyGauge::unavailable(\n                \"aegis\",\n                \"Aegis\",\n                \"Telemetry was not verified\",\n            )),\n    ]);\n    let objectives = ObjectiveSnapshot::new([\n        Objective::new(\"beacon\", \"Restore the beacon\")\n            .detail(\"Bring the relay online without inventing an outcome.\")\n            .state(ObjectiveState::Active)\n            .progress(normalized(0.64)),\n        Objective::new(\"crystals\", \"Align the crystals\")\n            .parent(\"beacon\")\n            .state(ObjectiveState::Completed),\n        Objective::new(\"signal\", \"Trace the signal\")\n            .parent(\"beacon\")\n            .state(ObjectiveState::Locked),\n        Objective::new(\"archive\", \"Recover the archive\")\n            .parent(\"beacon\")\n            .state(ObjectiveState::Failed(\n                \"The archive host refused access.\".into(),\n            )),\n    ]);\n    let abilities = AbilitySet::new([\n        Ability::new(\"dash\", \"Phase dash\")\n            .icon(Icon::ArrowRight)\n            .shortcut(\"Q\")\n            .charges(AbilityCharges::new(2, 3).expect(\"scene charges are valid\")),\n        Ability::new(\"nova\", \"Nova pulse\")\n            .icon(Icon::AddCircle)\n            .shortcut(\"W\")\n            .cost(\"30 focus\")\n            .state(AbilityState::CoolingDown {\n                remaining_fraction: normalized(0.4),\n                remaining: \"2.4s\".into(),\n            }),\n        Ability::new(\"ward\", \"Signal ward\")\n            .icon(Icon::Key)\n            .shortcut(\"E\")\n            .state(AbilityState::Disabled(\"No open target\".into())),\n        Ability::new(\"gate\", \"Open gate\")\n            .icon(Icon::Global)\n            .shortcut(\"R\")\n            .state(AbilityState::Unavailable(\n                \"The route has not been verified\".into(),\n            )),\n    ]);\n    let reward = RewardSnapshot::new(\"beacon-cache\", \"Beacon cache\")\n        .detail(\"The host has confirmed this reveal; claiming remains a request.\")\n        .state(RewardState::Revealed)\n        .item(\n            RewardItem::new(\"shard\", \"Prism shard\")\n                .icon(Icon::Widget)\n                .quantity(3),\n        )\n        .item(\n            RewardItem::new(\"key\", \"Signal key\")\n                .icon(Icon::Key)\n                .detail(\"Opens one relay\"),\n        );\n    let mut planner = EffectPlanner::new(EffectPolicy::new(EffectQuality::Cinematic));\n    let reward_effect = planner.plan(\n        EffectEvent::new(\n            \"beacon-cache-revealed\",\n            \"game-ui\",\n            \"beacon-cache\",\n            VisualCue::Reward,\n        ),\n        1,\n        false,\n    );\n    let heading = |text: &'static str| {\n        div()\n            .type_scale(&theme, TypeScale::Subtitle)\n            .text_tone(&theme, TextTone::Primary)\n            .child(text)\n    };\n\n    stack(&theme)\n        .size_full()\n        .items_center()\n        .justify_center()\n        .child(\n            div()\n                .column()\n                .w(px(820.0))\n                .gap_token(&theme, Space::Lg)\n                .child(\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            div()\n                                .type_scale(&theme, TypeScale::Title)\n                                .text_tone(&theme, TextTone::Primary)\n                                .child(\"Expedition interface\"),\n                        )\n                        .child(\n                            div()\n                                .type_scale(&theme, TypeScale::Caption)\n                                .text_tone(&theme, TextTone::Muted)\n                                .child(\n                                    \"Typed facts in, typed requests out; progression stays with the host.\",\n                                ),\n                        ),\n                )\n                .child(\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .child(heading(\"Party\"))\n                        .child(\n                            PartyRoster::new(\"scene.game-ui.party\", party)\n                                .selected(\"lyra\")\n                                .on_event(|_, _, _| {}),\n                        ),\n                )\n                .child(\n                    div()\n                        .row_reading(direction)\n                        .items_start()\n                        .gap_token(&theme, Space::Lg)\n                        .child(\n                            div()\n                                .column()\n                                .w(px(400.0))\n                                .gap_token(&theme, Space::Sm)\n                                .child(heading(\"Objectives\"))\n                                .child(\n                                    ObjectiveTracker::new(\n                                        \"scene.game-ui.objectives\",\n                                        objectives,\n                                    )\n                                    .selected(\"beacon\")\n                                    .on_event(|_, _, _| {}),\n                                ),\n                        )\n                        .child(\n                            div()\n                                .column()\n                                .w(px(400.0))\n                                .gap_token(&theme, Space::Sm)\n                                .child(heading(\"Reward\"))\n                                .child(\n                                    RewardReveal::new(\"scene.game-ui.reward\", reward)\n                                        .effect(reward_effect)\n                                        .sample_at(Duration::from_millis(620))\n                                        .on_event(|_, _, _| {}),\n                                ),\n                        ),\n                )\n                .child(\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .child(heading(\"Abilities\"))\n                        .child(\n                            AbilityBar::new(\"scene.game-ui.abilities\", abilities)\n                                .selected(\"dash\")\n                                .on_event(|_, _, _| {}),\n                        ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "agent-run-canvas",
      "capture": "cargo run -p xtask -- headless capture agent-run-canvas",
      "kind": "exhibit",
      "subjects": [
        "AgentRunCanvas"
      ],
      "uses": [
        "AgentRunCanvas"
      ],
      "example": "fn agent_run_canvas(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let run = AgentRunSnapshot::new(\"release-topology\", \"orchestrator\")\n        .execution(AgentExecutionState::Active(AgentActivity::Aggregating))\n        .agents([\n            AgentSnapshot::new(\n                AgentDescriptor::new(\"orchestrator\", \"Atlas\").role(\"Run coordinator\"),\n            )\n            .execution(AgentExecutionState::Active(AgentActivity::Aggregating)),\n            AgentSnapshot::new(\n                AgentDescriptor::new(\"researcher\", \"Nova\").role(\"Repository research\"),\n            )\n            .execution(AgentExecutionState::Active(AgentActivity::UsingTool(\n                \"repository search\".into(),\n            ))),\n            AgentSnapshot::new(AgentDescriptor::new(\"reviewer\", \"Sage\").role(\"Independent review\"))\n                .execution(AgentExecutionState::Waiting(WaitReason::Approval)),\n        ])\n        .tasks([\n            AgentTaskSnapshot::new(\"evidence\", \"Evidence bundle\")\n                .execution(AgentExecutionState::Completed(AgentOutcome::Succeeded)),\n            AgentTaskSnapshot::new(\"synthesis\", \"Release synthesis\").execution(\n                AgentExecutionState::Completed(AgentOutcome::Partial(\"awaiting approval\".into())),\n            ),\n        ])\n        .links([\n            RunLink::new(\n                \"spawn-researcher\",\n                RunSubjectId::Agent(\"orchestrator\".into()),\n                RunSubjectId::Agent(\"researcher\".into()),\n                RunLinkKind::Spawn,\n            ),\n            RunLink::new(\n                \"delegate-evidence\",\n                RunSubjectId::Agent(\"orchestrator\".into()),\n                RunSubjectId::Task(\"evidence\".into()),\n                RunLinkKind::Delegation,\n            ),\n            RunLink::new(\n                \"evidence-before-synthesis\",\n                RunSubjectId::Task(\"evidence\".into()),\n                RunSubjectId::Task(\"synthesis\".into()),\n                RunLinkKind::Dependency,\n            ),\n            RunLink::new(\n                \"handoff-review\",\n                RunSubjectId::Agent(\"researcher\".into()),\n                RunSubjectId::Agent(\"reviewer\".into()),\n                RunLinkKind::Handoff,\n            ),\n            RunLink::new(\n                \"search-report\",\n                RunSubjectId::Invocation(\"search-42\".into()),\n                RunSubjectId::Agent(\"researcher\".into()),\n                RunLinkKind::Report,\n            ),\n            RunLink::new(\n                \"aggregate-review\",\n                RunSubjectId::Agent(\"reviewer\".into()),\n                RunSubjectId::Task(\"synthesis\".into()),\n                RunLinkKind::Aggregation,\n            ),\n            RunLink::new(\n                \"retry-search\",\n                RunSubjectId::Agent(\"reviewer\".into()),\n                RunSubjectId::Agent(\"researcher\".into()),\n                RunLinkKind::Retry,\n            )\n            .label(\"bounded attempt 2\"),\n        ])\n        .aggregation(AggregationSnapshot::new(3, 2).conflicts(1));\n\n    // Laid out down the frame rather than across it, and drawn at 1:1. Four\n    // node columns and the relationship wording between them are wider than\n    // any frame this is reviewed in, and the zoom that made them fit put the\n    // node bodies and the edge labels below the size at which they are text\n    // at all: the picture said the canvas was empty and its nodes unreadable,\n    // which is a claim about the component that was not true.\n    stack(&theme)\n        .w(px(920.0))\n        .child(\n            div()\n                .w_full()\n                .h(px(830.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    AgentRunCanvas::new(\"scene.agent-run-canvas\", run)\n                        .layout(AgentRunLayout::LayeredVertical)\n                        .selected([RunSubjectId::Agent(\"researcher\".into())])\n                        // Panned far enough right for the retry loop, which\n                        // routes around the outside of the column it returns\n                        // to, to bring its own wording with it.\n                        .viewport(GraphViewport::new(gpui::point(80.0, 0.0), 1.0))\n                        .on_event(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "agent-run-issues",
      "capture": "cargo run -p xtask -- headless capture agent-run-issues",
      "kind": "exhibit",
      "subjects": [
        "AgentRunIssues"
      ],
      "uses": [
        "AgentRunIssues"
      ],
      "example": "fn agent_run_issues(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // Deliberately broken: the root names an agent that is not in the list,\n    // one agent is listed twice, a task is owned by nobody, and a link ends\n    // at an agent that does not exist.\n    let malformed = AgentRunSnapshot::new(\"release-review\", \"missing-coordinator\")\n        .execution(AgentExecutionState::Active(AgentActivity::Aggregating))\n        .agents([\n            AgentSnapshot::new(AgentDescriptor::new(\"researcher\", \"Nova\"))\n                .presence(AgentPresence::Online),\n            AgentSnapshot::new(AgentDescriptor::new(\"researcher\", \"Nova\"))\n                .presence(AgentPresence::Online),\n        ])\n        .tasks([AgentTaskSnapshot::new(\"review\", \"Review\").owner(\"reviewer\")])\n        .links([RunLink::new(\n            \"spawn-verifier\",\n            RunSubjectId::Agent(\"researcher\".into()),\n            RunSubjectId::Agent(\"verifier\".into()),\n            RunLinkKind::Spawn,\n        )]);\n\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"A snapshot the host sent that does not describe a run\",\n        ))\n        .child(AgentRunIssues::from_run(\n            \"scene.agent-run-issues.notice\",\n            &malformed,\n        ))\n        .child(caption(\n            &theme,\n            \"A well-formed snapshot, where the component draws nothing at all\",\n        ))\n        .child(AgentRunIssues::from_run(\n            \"scene.agent-run-issues.silent\",\n            &scene_agent_run(),\n        ))\n        .into_any_element()\n}"
    },
    {
      "name": "agent-avatar",
      "capture": "cargo run -p xtask -- headless capture agent-avatar",
      "kind": "exhibit",
      "subjects": [
        "AgentActivityLine",
        "AgentAvatar"
      ],
      "uses": [
        "AgentActivityLine",
        "AgentAvatar"
      ],
      "example": "fn agent_avatar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let identity = |id: &'static str, name: &'static str, presence: AgentPresence| {\n        AgentSnapshot::new(AgentDescriptor::new(id, name).role(\"Repository research\"))\n            .presence(presence)\n    };\n    let executions = [\n        (\n            \"active\",\n            AgentExecutionState::Active(AgentActivity::UsingTool(\"repository search\".into())),\n        ),\n        (\n            \"waiting\",\n            AgentExecutionState::Waiting(WaitReason::Approval),\n        ),\n        (\n            \"succeeded\",\n            AgentExecutionState::Completed(AgentOutcome::Succeeded),\n        ),\n        (\n            \"failed\",\n            AgentExecutionState::Completed(AgentOutcome::Failed(\n                \"the verifier could not reach the test host\".into(),\n            )),\n        ),\n        (\n            \"refused\",\n            AgentExecutionState::Completed(AgentOutcome::Refused(\n                \"this workspace requires approval\".into(),\n            )),\n        ),\n    ];\n\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"Presence is a separate mark, so it does not compete with the identity tint\",\n        ))\n        .child(\n            row(&theme)\n                .items_center()\n                .gap_token(&theme, Space::Md)\n                .child(AgentAvatar::new(\n                    \"scene.agent-avatar.online\",\n                    identity(\"nova\", \"Nova\", AgentPresence::Online),\n                ))\n                .child(AgentAvatar::new(\n                    \"scene.agent-avatar.away\",\n                    identity(\"sage\", \"Sage\", AgentPresence::Away),\n                ))\n                .child(AgentAvatar::new(\n                    \"scene.agent-avatar.offline\",\n                    identity(\"bolt\", \"Bolt\", AgentPresence::Offline),\n                ))\n                .child(\n                    AgentAvatar::new(\n                        \"scene.agent-avatar.tinted\",\n                        identity(\"atlas\", \"Atlas\", AgentPresence::Online),\n                    )\n                    .tint(identity_tint(&theme, \"agent.external\")),\n                ),\n        )\n        .child(caption(&theme, \"Sizes\"))\n        .child(\n            row(&theme)\n                .items_center()\n                .gap_token(&theme, Space::Md)\n                .child(\n                    AgentAvatar::new(\n                        \"scene.agent-avatar.small\",\n                        identity(\"nova\", \"Nova\", AgentPresence::Online),\n                    )\n                    .size(20.0),\n                )\n                .child(AgentAvatar::new(\n                    \"scene.agent-avatar.default\",\n                    identity(\"nova\", \"Nova\", AgentPresence::Online),\n                ))\n                .child(\n                    AgentAvatar::new(\n                        \"scene.agent-avatar.large\",\n                        identity(\"nova\", \"Nova\", AgentPresence::Online),\n                    )\n                    .size(44.0),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"The execution sentence, which carries a non-colour mark because \\\n             colour alone is not a report\",\n        ))\n        .child(\n            div()\n                .column()\n                .gap_token(&theme, Space::Sm)\n                .children(executions.map(|(id, execution)| {\n                    AgentActivityLine::new(format!(\"scene.agent-avatar.line.{id}\"), execution)\n                        .into_any_element()\n                })),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "conversation",
      "capture": "cargo run -p xtask -- headless capture conversation",
      "kind": "exhibit",
      "subjects": [
        "MessageList"
      ],
      "uses": [
        "MessageList"
      ],
      "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(&theme))\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(&theme))\n                .visible_rows(2)\n                .body_lines(2)\n                .on_retry(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "outline",
      "capture": "cargo run -p xtask -- headless capture outline",
      "kind": "exhibit",
      "subjects": [
        "Outline"
      ],
      "uses": [
        "Outline"
      ],
      "example": "fn outline(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let mapped = |ident: &'static str, turns: usize| {\n        let rows = turns * 2;\n        div()\n            .flex()\n            // Stretched rather than given a height: the rail is as tall as the\n            // list it indexes, and the list is as tall as the rows it was\n            // asked for, so neither is cut through a line of text.\n            .items_stretch()\n            .gap(px(theme.space(Space::Sm)))\n            .child(\n                Outline::new(format!(\"{ident}.outline\"))\n                    .over(format!(\"{ident}.rows\"))\n                    .marks((0..turns).map(|turn| {\n                        Mark::new(format!(\"ask-{turn}\"), turn * 2, format!(\"Question {turn}\"))\n                            .detail(format!(\"The answer to question {turn} began here.\"))\n                    })),\n            )\n            .child(\n                div().w(px(440.0)).child(\n                    List::new(ident, rows, move |row, _, _| {\n                        let (who, what) = match row % 2 {\n                            0 => (\"Ada\", format!(\"Question {}\", row / 2)),\n                            _ => (\"Assistant\", format!(\"Answer {}\", row / 2)),\n                        };\n                        ListItem::new(format!(\"row-{row}\"), div().child(format!(\"{who}: {what}\")))\n                            .text(format!(\"{who}: {what}\"))\n                    })\n                    // Bounded, or the list draws every row it has and the\n                    // outline has no viewport to be an outline of. Slotted\n                    // rather than flowing, so the frame is a whole number of\n                    // rows and the last one on screen is a whole row.\n                    .visible_rows(6),\n                ),\n            )\n    };\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"five exchanges: a mark for each, and the one being read is brighter\",\n        ))\n        .child(mapped(\"scene.outline.short.rows\", 5))\n        .child(caption(\n            &theme,\n            \"eighty exchanges: the same footprint, each mark now standing for a range\",\n        ))\n        .child(mapped(\"scene.outline.long.rows\", 80))\n        .into_any_element()\n}"
    },
    {
      "name": "conversation-growing",
      "capture": "cargo run -p xtask -- headless capture conversation-growing",
      "kind": "exhibit",
      "subjects": [
        "MessageList"
      ],
      "uses": [
        "MessageList"
      ],
      "example": "fn conversation_growing(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let asking = theme.colors.sequence.get(0);\n    let answering = theme.colors.sequence.get(1);\n    let long = move || {\n        vec![\n            Message::new(\"msg-ask\", \"What did the freeze window actually cover?\")\n                .author(\"Ada\")\n                .tint(asking)\n                .time(\"09:14\")\n                .delivery(DeliveryState::Read),\n            Message::new(\n                \"msg-long\",\n                \"Everything published after the tag.\\nThe artifacts, the changelog.\\nThe signed manifest.\\nThe release notes.\\nNothing before it moved.\",\n            )\n            .author(\"Grace\")\n            .tint(answering)\n            .time(\"09:15\")\n            .delivery(DeliveryState::Delivered),\n        ]\n    };\n    stack(&theme)\n        .w(px(560.0))\n        .child(\n            Divider::new()\n                .id(\"scene.growing.slotted.rule\")\n                .label(\"A slot, two lines of body\"),\n        )\n        .child(\n            MessageList::new(\"scene.growing.slotted\", long())\n                .body_lines(2)\n                .on_retry(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.growing.grown.rule\")\n                .label(\"As tall as what it says\"),\n        )\n        .child(\n            MessageList::new(\"scene.growing.grown\", long())\n                .grows_to_fit()\n                .on_retry(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "image-viewer",
      "capture": "cargo run -p xtask -- headless capture image-viewer",
      "kind": "exhibit",
      "subjects": [
        "ImageViewer"
      ],
      "uses": [
        "ImageViewer"
      ],
      "example": "fn image_viewer(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<(FitMode, Option<SharedString>)>(\n        &\"scene.image.controlled\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let (fit, showing) = state.borrow().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(showing.unwrap_or_else(|| \"graph\".into()))\n                        .fit(fit)\n                        .control_size(gpui_kit_theme::ControlSize::Touch)\n                        .height(200.0)\n                        .image(|_, _, cx| Some(run_graph_picture(cx)))\n                        .on_event(move |event, window, _| {\n                            match event {\n                                ImageViewerEvent::FitChanged(fit) => state.borrow_mut().0 = *fit,\n                                ImageViewerEvent::Stepped { id } => state.borrow_mut().1 = Some(id.clone()),\n                                _ => return,\n                            }\n                            window.refresh();\n                        }),\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().row().items_start().gap(px(theme.spacing.lg)).child(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(pasted_workflow_picture(cx)))\n                .on_event(|_, _, _| {}),\n            )).child(div().w(px(396.0)).child(\n                ImageViewer::new(\"scene.image.zoom-refused\", [ImageFrame::new(\"graph\", \"Zoom retained by host\").natural(1600, 900)])\n                    .fit(FitMode::Zoom(0.5))\n                    .control_size(gpui_kit_theme::ControlSize::Touch)\n                    .height(200.0)\n                    .image(|_, _, cx| Some(pasted_workflow_picture(cx)))\n                    .on_event(|_, _, _| {}),\n            )),\n        )\n        .child(caption(&theme, \"Fixture: the run graph accepts zoom and stepping; Zoom retained by host refuses fit changes; the scan refuses image access.\"))\n        .into_any_element()\n}"
    },
    {
      "name": "transport",
      "capture": "cargo run -p xtask -- headless capture transport",
      "kind": "exhibit",
      "subjects": [
        "TransportBar"
      ],
      "uses": [
        "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": "audio-player",
      "capture": "cargo run -p xtask -- headless capture audio-player",
      "kind": "exhibit",
      "subjects": [
        "AudioPlayer"
      ],
      "uses": [
        "AudioPlayer"
      ],
      "example": "fn audio_player(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(392.0))\n        .child(\n            AudioPlayer::new(\"scene.audio.ready\")\n                .control_size(gpui_kit_theme::ControlSize::Touch)\n                .title(\"Release walkthrough\")\n                .subtitle(\"Recorded 12 March\")\n                .transport(\n                    FixtureTransport::ready(240.0)\n                        .position(72.0)\n                        .state(TransportState::Playing)\n                        .volume(0.7)\n                        .buffered([BufferedRange::new(0.0, 156.0)])\n                        .shared(),\n                )\n                .elapsed(\"01:12\")\n                .remaining(\"-02:48\")\n                .peaks(scene_peaks(96))\n                .speeds([1.0, 1.5, 2.0])\n                .step_seconds(10.0)\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.audio.rule.backend\")\n                .label(\"Nothing here can decode it\"),\n        )\n        .child(\n            AudioPlayer::new(\"scene.audio.absent\")\n                .title(\"interview.opus\")\n                .transport(\n                    FixtureTransport::new()\n                        .no_backend(\"There is no Opus decoder on this machine.\")\n                        .shared(),\n                )\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.audio.rule.none\")\n                .label(\"No player connected at all\"),\n        )\n        .child(\n            AudioPlayer::new(\"scene.audio.none\")\n                .title(\"Standup recording\")\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "audio-waveform",
      "capture": "cargo run -p xtask -- headless capture audio-waveform",
      "kind": "exhibit",
      "subjects": [
        "AudioWaveform"
      ],
      "uses": [
        "AudioWaveform"
      ],
      "example": "fn audio_waveform(_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            \"already-normalized peaks; a missing playhead draws no played split\",\n        ))\n        .child(\n            AudioWaveform::new(\"scene.waveform.ready\")\n                .peaks(scene_peaks(48))\n                .playhead(0.38),\n        )\n        .child(AudioWaveform::new(\"scene.waveform.loading\").state(AudioWaveformState::Loading))\n        .child(AudioWaveform::new(\"scene.waveform.empty\").state(AudioWaveformState::Empty))\n        .child(AudioWaveform::new(\"scene.waveform.unavailable\").state(\n            AudioWaveformState::Unavailable(\"The sampler host refused the request.\".into()),\n        ))\n        .child(\n            AudioWaveform::new(\"scene.waveform.error\").state(AudioWaveformState::Error(\n                \"The sampler request failed.\".into(),\n            )),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "video-player",
      "capture": "cargo run -p xtask -- headless capture video-player",
      "kind": "exhibit",
      "subjects": [
        "VideoPlayer"
      ],
      "uses": [
        "VideoPlayer"
      ],
      "example": "fn video_player(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(392.0))\n        .child(\n            VideoPlayer::new(\"scene.video.frame\")\n                .control_size(gpui_kit_theme::ControlSize::Touch)\n                .presentation(\n                    crate::content::transport::MediaPresentation::Inline,\n                    \"Present video\",\n                )\n                .presentation_refused(\"Fixture host: native video presentation is unavailable.\")\n                .on_presentation_request(|_, _, _| {})\n                .title(\"Screen capture\")\n                .transport(\n                    FixtureTransport::ready(96.0)\n                        .position(24.0)\n                        .state(TransportState::Playing)\n                        .volume(0.6)\n                        .shared(),\n                )\n                .frame(|_, cx| Some(walkthrough_frame(cx)))\n                .elapsed(\"00:24\")\n                .remaining(\"-01:12\")\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.video.rule.poster\")\n                .label(\"Poster while the first frame is still unavailable\"),\n        )\n        .child(\n            VideoPlayer::new(\"scene.video.poster\")\n                .title(\"Release walkthrough\")\n                .transport(FixtureTransport::ready(240.0).shared())\n                .poster(|_, cx| Some(walkthrough_poster(cx)))\n                .elapsed(\"00:00\")\n                .remaining(\"-04:00\")\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "model-viewer",
      "capture": "cargo run -p xtask -- headless capture model-viewer",
      "kind": "exhibit",
      "subjects": [
        "ModelViewer"
      ],
      "uses": [
        "ModelViewer"
      ],
      "example": "fn model_viewer(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let read = || ModelState::read(CUBE, ModelBounds::default());\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            div()\n                .row()\n                .items_start()\n                .gap(px(theme.spacing.lg))\n                .child(\n                    div().flex_1().min_w_0().child(\n                        ModelViewer::new(\"scene.model.flat\")\n                            .title(\"cube.gltf\")\n                            .state(read())\n                            .orbit(0.62, 0.42)\n                            .height(240.0)\n                            .on_event(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    div().flex_1().min_w_0().child(\n                        ModelViewer::new(\"scene.model.wireframe\")\n                            .title(\"cube.gltf\")\n                            .state(read())\n                            .shading(ModelShading::Wireframe)\n                            .orbit(0.62, 0.42)\n                            .height(240.0)\n                            .on_event(|_, _, _| {}),\n                    ),\n                ),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.model.rule.refused\")\n                .label(\"A document past a bound\"),\n        )\n        .child(\n            ModelViewer::new(\"scene.model.refused\")\n                .title(\"city-block.glb\")\n                .rejected(ModelError::TooLarge {\n                    limit: ModelLimit::Triangles,\n                    found: 412_930,\n                    allowed: 24_576,\n                })\n                .height(160.0)\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "approval",
      "capture": "cargo run -p xtask -- headless capture approval",
      "kind": "exhibit",
      "subjects": [
        "ApprovalPrompt"
      ],
      "uses": [
        "ApprovalPrompt"
      ],
      "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": "clarification",
      "capture": "cargo run -p xtask -- headless capture clarification",
      "kind": "exhibit",
      "subjects": [
        "ClarificationPanel"
      ],
      "uses": [
        "ClarificationPanel"
      ],
      "example": "fn clarification(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneClarifications>() {\n        let candidates = || {\n            [\n                ClarificationOption::new(\"src\", \"src/camera/follow.ts\")\n                    .detail(\"Changed in this run\"),\n                ClarificationOption::new(\"test\", \"src/camera/follow.test.ts\")\n                    .detail(\"Covers the module above\"),\n                ClarificationOption::new(\"docs\", \"docs/camera.md\")\n                    .detail(\"Describes the behaviour\"),\n            ]\n        };\n        let one = cx.new(|cx| {\n            ClarificationPanel::new(\n                \"scene.clarification.one\",\n                \"Three files match \\\"follow\\\". Which one did you mean?\",\n                window,\n                cx,\n            )\n            .options(candidates())\n        });\n        let several = cx.new(|cx| {\n            ClarificationPanel::new(\n                \"scene.clarification.several\",\n                \"Which of these should the release note cover?\",\n                window,\n                cx,\n            )\n            .multiple()\n            .skippable()\n            .option(\n                ClarificationOption::new(\"radius\", \"The node card radius fix\")\n                    .detail(\"Landed in 2e79cbea\"),\n            )\n            .option(\n                ClarificationOption::new(\"cjk\", \"The bundled Chinese face\")\n                    .detail(\"Landed in 56c400bc\"),\n            )\n            // A candidate the agent offered and can no longer take. It keeps\n            // its place and says why, rather than leaving a list that silently\n            // shrank between two frames.\n            .option(\n                ClarificationOption::new(\"glass\", \"The glass radius override\")\n                    .unavailable(\"Not released yet, so it has no note to cover.\"),\n            )\n        });\n        let answered = cx.new(|cx| {\n            ClarificationPanel::new(\n                \"scene.clarification.answered\",\n                \"Three files match \\\"follow\\\". Which one did you mean?\",\n                window,\n                cx,\n            )\n            .options(candidates())\n            .status(ClarificationStatus::Answered(vec![\"test\".into()]))\n        });\n        let skipped = cx.new(|cx| {\n            ClarificationPanel::new(\n                \"scene.clarification.skipped\",\n                \"Should the summary quote the failing output in full?\",\n                window,\n                cx,\n            )\n            .skippable()\n            .option(ClarificationOption::new(\"full\", \"Quote all of it\"))\n            .option(ClarificationOption::new(\"head\", \"Quote the first failure\"))\n            .status(ClarificationStatus::Skipped)\n        });\n        let withdrawn = cx.new(|cx| {\n            ClarificationPanel::new(\n                \"scene.clarification.withdrawn\",\n                \"Which branch should the fix land on?\",\n                window,\n                cx,\n            )\n            .option(ClarificationOption::new(\"main\", \"main\"))\n            .option(ClarificationOption::new(\"release\", \"release/0.1\"))\n            .status(ClarificationStatus::Withdrawn(\n                \"the repository has only one branch\".into(),\n            ))\n        });\n        let superseded = cx.new(|cx| {\n            ClarificationPanel::new(\n                \"scene.clarification.superseded\",\n                \"Which test suite should run first?\",\n                window,\n                cx,\n            )\n            .option(ClarificationOption::new(\"unit\", \"The unit tests\"))\n            .option(ClarificationOption::new(\"visual\", \"The visual gate\"))\n            .status(ClarificationStatus::Superseded {\n                by: \"a later question covering the whole gate\".into(),\n            })\n        });\n        let empty = cx.new(|cx| {\n            ClarificationPanel::new(\n                \"scene.clarification.empty\",\n                \"Which of the cached results should be reused?\",\n                window,\n                cx,\n            )\n        });\n        cx.set_global(SceneClarifications {\n            one,\n            several,\n            answered,\n            skipped,\n            withdrawn,\n            superseded,\n            empty,\n        });\n    }\n    let panels = cx.global::<SceneClarifications>();\n    let one = panels.one.clone();\n    let several = panels.several.clone();\n    let answered = panels.answered.clone();\n    let skipped = panels.skipped.clone();\n    let withdrawn = panels.withdrawn.clone();\n    let superseded = panels.superseded.clone();\n    let empty = panels.empty.clone();\n    let theme = cx.theme().clone();\n\n    let asking = div()\n        .column()\n        .w(px(430.0))\n        .gap(px(theme.spacing.md))\n        .child(caption(\n            &theme,\n            \"One answer, one gesture: picking is answering, so there is no confirm\",\n        ))\n        .child(one)\n        .child(caption(\n            &theme,\n            \"Several accumulate, so these get a confirming control — and one candidate the agent can no longer take\",\n        ))\n        .child(several)\n        .child(caption(\n            &theme,\n            \"A question with nothing to pick from says so, rather than drawing an empty form\",\n        ))\n        .child(empty);\n\n    let settled = div()\n        .column()\n        .w(px(430.0))\n        .gap(px(theme.spacing.md))\n        .child(caption(\n            &theme,\n            \"Answered, left to the agent, withdrawn, and replaced are four different things\",\n        ))\n        .child(answered)\n        .child(skipped)\n        .child(withdrawn)\n        .child(superseded);\n\n    stack(&theme)\n        .child(\n            div()\n                .row()\n                .items_start()\n                .gap(px(theme.spacing.md))\n                .child(asking)\n                .child(settled),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "permission-matrix",
      "capture": "cargo run -p xtask -- headless capture permission-matrix",
      "kind": "exhibit",
      "subjects": [
        "PermissionMatrix"
      ],
      "uses": [
        "PermissionMatrix"
      ],
      "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 -- headless capture cost-meter",
      "kind": "exhibit",
      "subjects": [
        "ContextGauge",
        "CostMeter"
      ],
      "uses": [
        "ContextGauge",
        "CostMeter"
      ],
      "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": "prompt-builder",
      "capture": "cargo run -p xtask -- headless capture prompt-builder",
      "kind": "exhibit",
      "subjects": [
        "PromptBuilder"
      ],
      "uses": [
        "PromptBuilder"
      ],
      "example": "fn prompt_builder(_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            \"host-owned slots; activating one reports identity, never fills the prompt\",\n        ))\n        .child(\n            PromptBuilder::new(\"scene.prompt.loading\", \"Review template\")\n                .state(PromptBuilderState::Loading),\n        )\n        .child(\n            PromptBuilder::new(\"scene.prompt.ready\", \"Review template\")\n                .body(\"Review {path} for {concern} and return a verdict.\")\n                .slots([\n                    PromptSlot::new(\"path\", \"path\").value(\"src/lib.rs\"),\n                    PromptSlot::new(\"concern\", \"concern\"),\n                ])\n                .on_slot(|_, _, _| {}),\n        )\n        .child(\n            PromptBuilder::new(\"scene.prompt.empty\", \"Review template\")\n                .state(PromptBuilderState::Empty),\n        )\n        .child(\n            PromptBuilder::new(\"scene.prompt.unavailable\", \"Review template\").state(\n                PromptBuilderState::Unavailable(\"The template host refused the request.\".into()),\n            ),\n        )\n        .child(\n            PromptBuilder::new(\"scene.prompt.error\", \"Review template\").state(\n                PromptBuilderState::Error(\"The template request failed.\".into()),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "feedback-rating",
      "capture": "cargo run -p xtask -- headless capture feedback-rating",
      "kind": "exhibit",
      "subjects": [
        "FeedbackRating"
      ],
      "uses": [
        "FeedbackRating"
      ],
      "example": "fn feedback_rating(_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            \"vote and reason tags are host-owned; a disabled control installs no handler\",\n        ))\n        .child(\n            FeedbackRating::new(\"scene.feedback.ready\")\n                .vote(Some(FeedbackVote::Up))\n                .tags([(\"accurate\", \"Accurate\"), (\"incomplete\", \"Incomplete\")])\n                .current_tag(\"accurate\")\n                .on_vote(|_, _, _| {})\n                .on_tag(|_, _, _| {}),\n        )\n        .child(FeedbackRating::new(\"scene.feedback.idle\").on_vote(|_, _, _| {}))\n        .child(FeedbackRating::new(\"scene.feedback.disabled\").disabled(true))\n        .into_any_element()\n}"
    },
    {
      "name": "artifact-preview",
      "capture": "cargo run -p xtask -- headless capture artifact-preview",
      "kind": "exhibit",
      "subjects": [
        "ArtifactPreview"
      ],
      "uses": [
        "ArtifactPreview"
      ],
      "example": "fn artifact_preview(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(\n            &theme,\n            \"a generated artifact is shown as the kind it is; a refusal stays a refusal\",\n        ))\n        .child(\n            ArtifactPreview::new(\"scene.artifact.ready\", \"patch.rs\")\n                .kind(ArtifactKind::Code)\n                .language(Language::Rust)\n                .body(\n                    \"/// Whether the run may be published.\\n\\\n                     fn ready(state: &State) -> bool {\\n    \\\n                         state.checks == 12 && !state.blocked\\n\\\n                     }\",\n                )\n                .state(ArtifactPreviewState::Ready),\n        )\n        .child(\n            ArtifactPreview::new(\"scene.artifact.loading\", \"notes.md\")\n                .state(ArtifactPreviewState::Loading),\n        )\n        .child(\n            ArtifactPreview::new(\"scene.artifact.empty\", \"notes.md\")\n                .state(ArtifactPreviewState::Empty),\n        )\n        .child(\n            ArtifactPreview::new(\"scene.artifact.unavailable\", \"notes.md\").state(\n                ArtifactPreviewState::Unavailable(\"The artifact host is offline.\".into()),\n            ),\n        )\n        .child(\n            ArtifactPreview::new(\"scene.artifact.error\", \"notes.md\").state(\n                ArtifactPreviewState::Error(\"The artifact parser rejected this result.\".into()),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "tool-call",
      "capture": "cargo run -p xtask -- headless capture tool-call",
      "kind": "exhibit",
      "subjects": [
        "ToolCall"
      ],
      "uses": [
        "ToolCall"
      ],
      "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            ToolCall::new(\"scene.tool.pending\", ToolFamily::External, \"mcp.dispatch\")\n                .summary(\"designer review\")\n                .arguments(\"{ \\\"target\\\": \\\"designer-review\\\" }\")\n                .state(ToolCallState::PendingApproval),\n        )\n        .child(\n            ToolCall::new(\"scene.tool.running\", ToolFamily::Network, \"web.fetch\")\n                .summary(\"ampcode.com/manual\")\n                .arguments(\"{ \\\"url\\\": \\\"https://ampcode.com/manual\\\" }\")\n                .state(ToolCallState::Running)\n                .elapsed(\"4.2 s\"),\n        )\n        .child(\n            ToolCall::new(\"scene.tool.succeeded\", ToolFamily::Read, \"workspace.read\")\n                .summary(\"README.md\")\n                .arguments(\"{ \\\"path\\\": \\\"README.md\\\" }\")\n                .state(ToolCallState::succeeded(\n                    ToolBody::new(\n                        \"# GPUI Box\\n\\nProduct-neutral components.\\n\\nEvery word is replaceable.\",\n                    )\n                    .max_lines(2),\n                ))\n                .expanded(true)\n                .on_toggle(|_, _, _| {})\n                .elapsed(\"0.3 s\"),\n        )\n        .child(\n            ToolCall::new(\"scene.tool.silent\", ToolFamily::Edit, \"workspace.touch\")\n                .summary(\"notes.md\")\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                    ToolCall::new(\"scene.tool.failed\", ToolFamily::Edit, \"workspace.write\")\n                        .summary(\"notes.md\")\n                        .arguments(\"{ \\\"path\\\": \\\"/read-only/notes.md\\\" }\")\n                        .state(ToolCallState::failed(\"Read only.\"))\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                    ToolCall::new(\"scene.tool.refused\", ToolFamily::Shell, \"shell.run\")\n                        .summary(\"rm -rf build\")\n                        .arguments(\"{ \\\"command\\\": \\\"rm -rf build\\\" }\")\n                        .state(ToolCallState::refused(\"Shell commands are not allowed.\")),\n                )\n                .child(\n                    ToolCall::new(\"scene.tool.flow\", ToolFamily::Read, \"workspace.read\")\n                        .summary(\"README.md · flow\")\n                        .arguments(\"{ \\\"path\\\": \\\"README.md\\\" }\")\n                        .state(ToolCallState::succeeded(\"Product-neutral components.\"))\n                        .expanded(true)\n                        .presentation(AgentDisclosurePresentation::Flow)\n                        .on_toggle(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "agent-plan",
      "capture": "cargo run -p xtask -- headless capture agent-plan",
      "kind": "exhibit",
      "subjects": [
        "AgentPlan"
      ],
      "uses": [
        "AgentPlan"
      ],
      "example": "fn agent_plan(_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            \"Behind, in flight, ahead — and the two a plan cannot be honest without\",\n        ))\n        .child(\n            AgentPlan::new(\"scene.plan.running\")\n                .item(PlanItem::new(\"brief\", \"Read the brief\").done())\n                .item(PlanItem::new(\"search\", \"Search the workspace\").done())\n                .item(PlanItem::new(\"summarise\", \"Summarise what was found\").doing())\n                .item(PlanItem::new(\"publish\", \"Publish the summary\"))\n                .item(PlanItem::new(\"notify\", \"Notify the reviewers\"))\n                .on_pick(|_, _, _| {}),\n        )\n        .child(caption(\n            &theme,\n            \"A plan that stopped, and one the agent decided against\",\n        ))\n        .child(\n            AgentPlan::new(\"scene.plan.stopped\")\n                .item(PlanItem::new(\"brief\", \"Read the brief\").done())\n                .item(\n                    PlanItem::new(\"notify\", \"Notify the reviewers\")\n                        .blocked(\"The notification service did not respond.\"),\n                )\n                .item(\n                    PlanItem::new(\"archive\", \"Archive the previous run\")\n                        .dropped(\"Nothing had been published yet.\"),\n                )\n                .item(PlanItem::new(\"close\", \"Close the run\")),\n        )\n        .child(caption(&theme, \"Nothing in flight, so nothing is said\"))\n        .child(\n            AgentPlan::new(\"scene.plan.settled\")\n                .item(PlanItem::new(\"brief\", \"Read the brief\").done())\n                .item(PlanItem::new(\"close\", \"Close the run\").done()),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "node-graph",
      "capture": "cargo run -p xtask -- headless capture node-graph",
      "kind": "exhibit",
      "subjects": [
        "GraphNode",
        "NodeGraph"
      ],
      "uses": [
        "GraphNode",
        "NodeGraph"
      ],
      "example": "fn node_graph(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let records = PortType::new(\"records\", \"teal\").glyph(Icon::List);\n    let signal = PortType::new(\"signal\", \"orange\").glyph(Icon::Graph);\n    let artifact = PortType::new(\"artifact\", \"violet\").glyph(Icon::ArchiveUp);\n    if !cx.has_global::<SceneGraph>() {\n        cx.set_global(SceneGraph {\n            viewport: GraphViewport::default(),\n            fit: 0,\n            ingest: gpui::point(24.0, 190.0),\n            validate: gpui::point(284.0, 40.0),\n            persist: gpui::point(556.0, 40.0),\n            observe: gpui::point(516.0, 300.0),\n            publish: gpui::point(748.0, 190.0),\n            selected: vec![\"scene.graph.validate\".into()],\n            deleted: Vec::new(),\n            sizes: std::collections::HashMap::new(),\n            edges: vec![\n                GraphEdge::new(\"scene.graph.ingest\", \"scene.graph.validate\")\n                    .id(\"scene.graph.edge.rows\")\n                    .ports(\"rows\", \"records\")\n                    .label(\"批量导入行 · src/ingest/rows.ts\")\n                    .active(true),\n                GraphEdge::new(\"scene.graph.validate\", \"scene.graph.persist\")\n                    .id(\"scene.graph.edge.valid\")\n                    .ports(\"valid\", \"records\")\n                    .label(\"校验通过的记录 · src/validate/ok.ts\")\n                    .active(true),\n                // A relationship label carrying a localized sentence, which\n                // is what a host writing in Chinese actually hands this: the\n                // ideographs advance about twice what a count of characters\n                // suggests, and the sentence is longer than the route it\n                // annotates. Fit has to frame the width the label really\n                // takes, and the label has to stop rather than run out over\n                // the cards either side of it.\n                GraphEdge::new(\"scene.graph.validate\", \"scene.graph.observe\")\n                    .id(\"scene.graph.edge.telemetry\")\n                    .ports(\"telemetry\", \"events\")\n                    .label(\"跟随镜头 · src/camera/follow.ts\")\n                    .lane(-1),\n                GraphEdge::new(\"scene.graph.persist\", \"scene.graph.publish\")\n                    .id(\"scene.graph.edge.commit\")\n                    .ports(\"commit\", \"artifact\")\n                    .label(\"提交产物快照 · src/publish/commit.ts\")\n                    .active(true),\n                // A second long localized label, on the route that runs back\n                // through the same band as the one above. Two annotations\n                // competing for the same air is the case a real board hits\n                // constantly and this catalogue did not cover: with one long\n                // label the seating always found somewhere to put it, so\n                // nothing here ever exercised what happens when it cannot.\n                GraphEdge::new(\"scene.graph.observe\", \"scene.graph.validate\")\n                    .id(\"scene.graph.edge.retry\")\n                    .ports(\"retry\", \"retry\")\n                    .label(\"跳跃核心循环 · src/player/jump.ts\")\n                    .lane(1)\n                    .feedback(),\n            ],\n        });\n    }\n    let scene = cx.global::<SceneGraph>();\n    let viewport = scene.viewport;\n    let fit = scene.fit;\n    let ingest = scene.ingest;\n    let validate = scene.validate;\n    let persist = scene.persist;\n    let observe = scene.observe;\n    let publish = scene.publish;\n    let selected = scene.selected.clone();\n    let deleted = scene.deleted.clone();\n    let edges = scene.edges.clone();\n    let sizes = scene.sizes.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(\n            div().w(px(860.0)).h(px(340.0)).child(\n                NodeGraph::new(\"scene.graph\")\n                    .viewport(viewport)\n                    .zoom_range(0.55, 1.8)\n                    .minimap(true)\n                    .toolbar(\n                        CanvasToolbar::new(\n                            \"scene.graph.toolbar\",\n                            cx.numbers().percent(viewport.zoom),\n                        )\n                        // The editor already owns direct wheel zoom and pan.\n                        // Fit is the one extra navigation intent this fixture\n                        // can keep without inventing arrangement or snapping\n                        // policy.\n                        .actions([CanvasToolbarAction::Fit])\n                        .glass(GlassPreset::Frosted)\n                        .on_action(|_, _, cx| {\n                            cx.update_global::<SceneGraph, ()>(|scene, _| {\n                                scene.fit = scene.fit.wrapping_add(1);\n                            });\n                            cx.refresh_windows();\n                        }),\n                    )\n                    .fit(GraphFit::Whole(fit))\n                    .when(\n                        !deleted.iter().any(|id| id == \"scene.graph.ingest\"),\n                        |graph| {\n                            graph.placed(sized(\n                                &sizes,\n                                GraphNode::new(\"scene.graph.ingest\", \"Stream ingest\")\n                                    .color(\"teal\")\n                                    .icon(Icon::SoundWave)\n                                    .kind(\"source\")\n                                    .width(200.0)\n                                    .state(NodeState::Succeeded)\n                                    .status(\"Synced\")\n                                    .thumbnail(scene_picture(\"Input preview\", cx))\n                                    .action(\"orders.v2 · partition 18\")\n                                    .metric(\"rate\", \"3.2k/s\")\n                                    .port(GraphPort::input(\"source\", \"Source\").side(PortSide::Top))\n                                    .port(GraphPort::output(\"rows\", \"Rows\").typed(records.clone()))\n                                    .port(\n                                        GraphPort::output(\"errors\", \"Errors\").typed(signal.clone()),\n                                    )\n                                    .selected(selected.iter().any(|id| id == \"scene.graph.ingest\")),\n                                ingest.x,\n                                ingest.y,\n                            ))\n                        },\n                    )\n                    .when(\n                        !deleted.iter().any(|id| id == \"scene.graph.validate\"),\n                        |graph| {\n                            graph.placed(sized(\n                                &sizes,\n                                GraphNode::new(\"scene.graph.validate\", \"Validate & enrich\")\n                                    .color(\"indigo\")\n                                    .icon(Icon::Checklist)\n                                    .kind(\"transform\")\n                                    .width(200.0)\n                                    .state(NodeState::Running)\n                                    .status(\"Running\")\n                                    .progress(Some(0.62))\n                                    .action(\"schema + fraud signals\")\n                                    .metric(\"p95\", \"18 ms\")\n                                    .port(\n                                        GraphPort::input(\"records\", \"Records\")\n                                            .typed(records.clone()),\n                                    )\n                                    .port(GraphPort::input(\"retry\", \"Retry\").side(PortSide::Bottom))\n                                    .port(\n                                        GraphPort::output(\"valid\", \"Valid\").typed(records.clone()),\n                                    )\n                                    .child(\n                                        Slider::new(\"scene.graph.validate.threshold\")\n                                            .range(0.0, 1.0)\n                                            .step(0.05)\n                                            .value(0.35)\n                                            .display(\"0.35\")\n                                            .on_change(|_, _, _| {}),\n                                    )\n                                    .port(\n                                        GraphPort::output(\"telemetry\", \"Events\")\n                                            .side(PortSide::Bottom),\n                                    )\n                                    .selected(\n                                        selected.iter().any(|id| id == \"scene.graph.validate\"),\n                                    ),\n                                validate.x,\n                                validate.y,\n                            ))\n                        },\n                    )\n                    .when(\n                        !deleted.iter().any(|id| id == \"scene.graph.persist\"),\n                        |graph| {\n                            graph.placed(sized(\n                                &sizes,\n                                GraphNode::new(\"scene.graph.persist\", \"Persist batch\")\n                                    .color(\"violet\")\n                                    .icon(Icon::ArchiveUp)\n                                    .kind(\"sink\")\n                                    .width(200.0)\n                                    .state(NodeState::Succeeded)\n                                    .status(\"Committed\")\n                                    .action(\"warehouse / orders\")\n                                    .metric(\"written\", \"12.3k\")\n                                    .port(\n                                        GraphPort::input(\"records\", \"Records\")\n                                            .typed(records.clone()),\n                                    )\n                                    .port(\n                                        GraphPort::output(\"commit\", \"Commit\")\n                                            .typed(artifact.clone()),\n                                    )\n                                    .selected(\n                                        selected.iter().any(|id| id == \"scene.graph.persist\"),\n                                    ),\n                                persist.x,\n                                persist.y,\n                            ))\n                        },\n                    )\n                    .when(\n                        !deleted.iter().any(|id| id == \"scene.graph.observe\"),\n                        |graph| {\n                            graph.placed(sized(\n                                &sizes,\n                                GraphNode::new(\"scene.graph.observe\", \"Observe quality\")\n                                    .color(\"orange\")\n                                    .icon(Icon::Danger)\n                                    .kind(\"monitor\")\n                                    .width(200.0)\n                                    .state(NodeState::Failed)\n                                    .status(\"Needs review\")\n                                    .action(\"drift threshold exceeded\")\n                                    .metric(\"rejected\", \"94\")\n                                    .port(GraphPort::input(\"events\", \"Events\").side(PortSide::Top))\n                                    .port(GraphPort::output(\"retry\", \"Retry\").side(PortSide::Top))\n                                    .selected(\n                                        selected.iter().any(|id| id == \"scene.graph.observe\"),\n                                    ),\n                                observe.x,\n                                observe.y,\n                            ))\n                        },\n                    )\n                    .when(\n                        !deleted.iter().any(|id| id == \"scene.graph.publish\"),\n                        |graph| {\n                            graph.placed(sized(\n                                &sizes,\n                                GraphNode::new(\"scene.graph.publish\", \"Publish artifact\")\n                                    .color(\"lime\")\n                                    .icon(Icon::Global)\n                                    .kind(\"release\")\n                                    .width(200.0)\n                                    .state(NodeState::Pending)\n                                    .status(\"Queued\")\n                                    .progress(None)\n                                    .action(\"waiting for commit\")\n                                    .port(\n                                        GraphPort::input(\"artifact\", \"Artifact\")\n                                            .side(PortSide::Top),\n                                    )\n                                    .port(\n                                        GraphPort::output(\"release\", \"Release\")\n                                            .side(PortSide::Bottom),\n                                    )\n                                    .selected(\n                                        selected.iter().any(|id| id == \"scene.graph.publish\"),\n                                    ),\n                                publish.x,\n                                publish.y,\n                            ))\n                        },\n                    )\n                    .edges(edges)\n                    .on_event(|event, _, cx| {\n                        cx.update_global::<SceneGraph, ()>(|scene, _| match event {\n                            NodeGraphEvent::ViewportChanged(viewport) => {\n                                scene.viewport = *viewport;\n                            }\n                            NodeGraphEvent::SelectionChanged { ids } => {\n                                scene.selected = ids.clone();\n                            }\n                            NodeGraphEvent::NodeMoved { id, position } => match id.as_ref() {\n                                \"scene.graph.ingest\" => scene.ingest = *position,\n                                \"scene.graph.validate\" => scene.validate = *position,\n                                \"scene.graph.persist\" => scene.persist = *position,\n                                \"scene.graph.observe\" => scene.observe = *position,\n                                \"scene.graph.publish\" => scene.publish = *position,\n                                _ => {}\n                            },\n                            NodeGraphEvent::NodeResized { id, size } => {\n                                scene.sizes.insert(id.clone(), *size);\n                            }\n                            NodeGraphEvent::NodeDeleted { id } => {\n                                scene.deleted.push(id.clone());\n                                scene.selected.retain(|selected| selected != id);\n                                scene\n                                    .edges\n                                    .retain(|edge| edge.from() != id && edge.to() != id);\n                            }\n                            NodeGraphEvent::ConnectionRequested { from, to } => {\n                                let id = format!(\n                                    \"scene.graph.edge.user.{}.{}.{}.{}\",\n                                    from.node, from.port, to.node, to.port\n                                );\n                                if !scene\n                                    .edges\n                                    .iter()\n                                    .any(|edge| edge.from() == &from.node && edge.to() == &to.node)\n                                {\n                                    scene.edges.push(\n                                        GraphEdge::new(from.node.clone(), to.node.clone())\n                                            .id(id)\n                                            .ports(from.port.clone(), to.port.clone())\n                                            .label(\"new connection\"),\n                                    );\n                                }\n                            }\n                            NodeGraphEvent::ConnectionDropped { .. } => {}\n                            // This scene has no way to add a step, so there is\n                            // nothing truthful to do with a place on it.\n                            NodeGraphEvent::SurfacePressed { .. } => {}\n                            NodeGraphEvent::DisconnectRequested { id } => {\n                                scene.edges.retain(|edge| edge.edge_id() != *id);\n                            }\n                        });\n                        cx.refresh_windows();\n                    }),\n            ),\n        )\n        .child(\n            div()\n                .row()\n                .w(px(860.0))\n                .gap_token(&theme, Space::Sm)\n                .children([\n                    div()\n                        .flex_1()\n                        .h(px(132.0))\n                        .child(NodeGraph::new(\"scene.graph.loading\").state(GraphState::Loading)),\n                    div().flex_1().h(px(132.0)).child(\n                        NodeGraph::new(\"scene.graph.refused\")\n                            .state(GraphState::Refused(\"Graph access was refused\".into())),\n                    ),\n                    div().flex_1().h(px(132.0)).child(\n                        NodeGraph::new(\"scene.graph.failed\")\n                            .state(GraphState::Failed(\"Graph data could not be loaded\".into())),\n                    ),\n                ]),\n        )\n        .child(caption(\n            &theme,\n            \"the same canvas routed as curves, for a board sparse enough not to need lanes\",\n        ))\n        .child(\n            div().w(px(860.0)).h(px(212.0)).child(\n                NodeGraph::new(\"scene.graph.curves\")\n                    .routing(GraphRouting::Curves)\n                    .grid(false)\n                    .node(\n                        GraphNode::new(\"scene.graph.curves.brief\", \"Brief\")\n                            .color(\"indigo\")\n                            .kind(\"prompt\")\n                            .width(176.0)\n                            .action(\"a lit interior, dusk\")\n                            .port(GraphPort::output(\"out\", \"Out\")),\n                        24.0,\n                        44.0,\n                    )\n                    .node(\n                        GraphNode::new(\"scene.graph.curves.render\", \"Render\")\n                            .color(\"teal\")\n                            .kind(\"image\")\n                            .width(176.0)\n                            .state(NodeState::Succeeded)\n                            .port(GraphPort::input(\"in\", \"In\"))\n                            .port(GraphPort::output(\"out\", \"Out\")),\n                        330.0,\n                        20.0,\n                    )\n                    .node(\n                        GraphNode::new(\"scene.graph.curves.grade\", \"Grade\")\n                            .color(\"orange\")\n                            .kind(\"adjust\")\n                            .width(176.0)\n                            .action(\"warm, +8 contrast\")\n                            .port(GraphPort::input(\"in\", \"In\")),\n                        636.0,\n                        84.0,\n                    )\n                    .edges(vec![\n                        GraphEdge::new(\"scene.graph.curves.brief\", \"scene.graph.curves.render\")\n                            .id(\"scene.graph.curves.edge.render\")\n                            .ports(\"out\", \"in\")\n                            .marker(EdgeMarker::Arrow),\n                        GraphEdge::new(\"scene.graph.curves.render\", \"scene.graph.curves.grade\")\n                            .id(\"scene.graph.curves.edge.grade\")\n                            .ports(\"out\", \"in\")\n                            .marker(EdgeMarker::Dot),\n                    ]),\n            ),\n        )\n        .child(caption(&theme, \"node typography · 1× and 0.5× · four-line bilingual notes\"))\n        .child(div().row().gap(px(theme.spacing.lg)).children(\n            [(\"full\", 1.0), (\"half\", 0.5)].map(|(name, zoom)| {\n                GraphNode::new(format!(\"scene.graph.typography.{name}\"), \"Prompt · 提示词\")\n                    .width(280.0)\n                    .display_at(zoom, None)\n                    .color(\"teal\")\n                    .kind(\"text\")\n                    .port(GraphPort::input(\"context\", \"Context · 上下文\"))\n                    .note(\"A quiet room at dusk.\\n黄昏时分，安静的房间。\\nKeep the window light soft.\\n让窗边光线保持柔和。\\nThis fifth line is clipped.\\n第六行仍保留在语义描述中。\")\n                    .metrics([\n                        NodeMetric::new(\"Model\", \"Studio\").labelled(),\n                        NodeMetric::new(\"比例\", \"16:9\").labelled(),\n                        NodeMetric::new(\"Seed\", \"118\"),\n                    ])\n            }),\n        ))\n        .into_any_element()\n}"
    },
    {
      "name": "node-graph-layout",
      "capture": "cargo run -p xtask -- headless capture node-graph-layout",
      "kind": "exhibit",
      "subjects": [
        "GraphNode",
        "NodeGraph"
      ],
      "uses": [
        "GraphNode",
        "NodeGraph"
      ],
      "example": "fn node_graph_layout(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::canvas::{GraphCyclePolicy, layered_layout_sized};\n    let theme = cx.theme().clone();\n    if !cx.has_global::<SceneLayoutSource>() {\n        let nodes = [\n            (\"source-a\", 180., 100.),\n            (\"source-b\", 220., 150.),\n            (\"join\", 260., 120.),\n            (\"detached\", 170., 90.),\n            (\"upstream\", 160., 110.),\n        ];\n        let edges = [\n            GraphEdge::new(\"upstream\", \"source-a\"),\n            GraphEdge::new(\"source-a\", \"source-b\"),\n            GraphEdge::new(\"source-b\", \"source-a\"),\n            GraphEdge::new(\"source-a\", \"join\"),\n            GraphEdge::new(\"source-b\", \"join\"),\n        ];\n        let bounds = layered_layout_sized(\n            nodes.map(|(id, w, h)| (id.into(), gpui::size(w, h))),\n            &edges,\n            45.,\n            35.,\n            60.,\n            GraphCyclePolicy::Condense,\n        )\n        .expect(\"valid asymmetric SCC fixture\");\n        let source = GraphSource::new(\n            bounds.iter().cloned().map(|(id, bounds)| {\n                Placed::new(\n                    GraphNode::new(id.clone(), id)\n                        .width(bounds.size.width)\n                        .state(NodeState::Succeeded),\n                    bounds.origin.x,\n                    bounds.origin.y,\n                )\n                .height(bounds.size.height)\n            }),\n            edges,\n        )\n        .expect(\"canonical explicit-size source\");\n        source\n            .set_content(\"source-b\", layout_payload)\n            .expect(\"source payload\");\n        cx.set_global(SceneLayoutSource {\n            source,\n            bounds,\n            retargeted: false,\n            removed: false,\n            inspections: 0,\n            glass: false,\n            viewport: GraphViewport::new(point(32., 24.), 1.),\n        });\n    }\n    let source = cx.global::<SceneLayoutSource>().source.clone();\n    let removed = cx.global::<SceneLayoutSource>().removed;\n    let inspections = cx.global::<SceneLayoutSource>().inspections;\n    let glass = cx.global::<SceneLayoutSource>().glass;\n    let graph = NodeGraph::new(\"scene.layout.graph\")\n        .source(source)\n        .viewport(cx.global::<SceneLayoutSource>().viewport)\n        .axes(false)\n        .on_event(|event, _, cx| {\n            if let NodeGraphEvent::ViewportChanged(viewport) = event {\n                cx.update_global::<SceneLayoutSource, ()>(|scene, _| scene.viewport = *viewport);\n            }\n        });\n    stack(&theme)\n        .w(px(860.))\n        .child(caption(\n            &theme,\n            \"Fixture SCC layers · external edges forward · dimension-aware component bands\",\n        ))\n        .child(\n            div()\n                .flex()\n                .gap(px(8.))\n                .child(\n                    Button::new(\"scene.layout.retarget\")\n                        .label(\"Retarget join\")\n                        .on_click(|_, cx| {\n                            cx.update_global::<SceneLayoutSource, ()>(|scene, _| {\n                                scene.retargeted = !scene.retargeted;\n                                let bounds = scene\n                                    .bounds\n                                    .iter()\n                                    .find(|(id, _)| id.as_ref() == \"join\")\n                                    .expect(\"join fixture bounds\")\n                                    .1;\n                                let (x, y, width, height, state) = if scene.retargeted {\n                                    (\n                                        bounds.origin.x - 30.,\n                                        bounds.origin.y + 100.,\n                                        225.,\n                                        167.,\n                                        NodeState::Failed,\n                                    )\n                                } else {\n                                    (\n                                        bounds.origin.x,\n                                        bounds.origin.y,\n                                        bounds.size.width,\n                                        bounds.size.height,\n                                        NodeState::Succeeded,\n                                    )\n                                };\n                                scene\n                                    .source\n                                    .upsert(\n                                        Placed::new(\n                                            GraphNode::new(\"join\", \"join\")\n                                                .width(width)\n                                                .state(state),\n                                            x,\n                                            y,\n                                        )\n                                        .height(height),\n                                    )\n                                    .expect(\"valid source retarget\");\n                            });\n                        }),\n                )\n                .child(\n                    Button::new(\"scene.layout.remove\")\n                        .label(if removed {\n                            \"Reinsert source-b\"\n                        } else {\n                            \"Remove source-b\"\n                        })\n                        .on_click(|_, cx| {\n                            cx.update_global::<SceneLayoutSource, ()>(|scene, _| {\n                                scene.removed = !scene.removed;\n                                if scene.removed {\n                                    scene.source.remove(\"source-b\");\n                                } else {\n                                    let bounds = scene\n                                        .bounds\n                                        .iter()\n                                        .find(|(id, _)| id.as_ref() == \"source-b\")\n                                        .expect(\"source-b fixture bounds\")\n                                        .1;\n                                    scene\n                                        .source\n                                        .upsert(\n                                            Placed::new(\n                                                GraphNode::new(\"source-b\", \"source-b\")\n                                                    .width(bounds.size.width)\n                                                    .state(NodeState::Succeeded),\n                                                bounds.origin.x,\n                                                bounds.origin.y,\n                                            )\n                                            .height(bounds.size.height),\n                                        )\n                                        .expect(\"valid source reinsertion\");\n                                    scene\n                                        .source\n                                        .set_content(\"source-b\", layout_payload)\n                                        .expect(\"new payload incarnation\");\n                                }\n                            });\n                        }),\n                )\n                .child(\n                    Button::new(\"scene.layout.glass\")\n                        .label(if glass {\n                            \"Use button payload\"\n                        } else {\n                            \"Use optical payload\"\n                        })\n                        .disabled(removed)\n                        .on_click(|_, cx| {\n                            cx.update_global::<SceneLayoutSource, ()>(|scene, _| {\n                                scene.glass = !scene.glass;\n                                scene\n                                    .source\n                                    .set_content(\"source-b\", layout_payload)\n                                    .expect(\"publish payload revision\");\n                            });\n                        }),\n                ),\n        )\n        .child(\n            caption(&theme, format!(\"Payload inspections: {inspections}\")).semantic_in(\n                cx,\n                NodeSpec::new(\"scene.layout.inspections\", Role::Group)\n                    .value(inspections.to_string()),\n            ),\n        )\n        .child(div().w_full().h(px(510.)).child(graph))\n        .into_any_element()\n}"
    },
    {
      "name": "node-graph-routing",
      "capture": "cargo run -p xtask -- headless capture node-graph-routing",
      "kind": "exhibit",
      "subjects": [
        "GraphNode",
        "NodeGraph"
      ],
      "uses": [
        "GraphNode",
        "NodeGraph"
      ],
      "example": "fn node_graph_routing(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    if !cx.has_global::<SceneRouting>() {\n        cx.set_global(SceneRouting {\n            source: routing_source(false),\n            buried: false,\n            limited: false,\n            connected: true,\n        });\n    }\n    let state = cx.global::<SceneRouting>();\n    let source = state.source.clone();\n    let buried = state.buried;\n    let limited = state.limited;\n    let connected = state.connected;\n    stack(&theme).w(px(860.))\n        .child(caption(&theme, if limited {\n            \"Fixture · 1,000 increasingly tall walls · bounded search with a warned connection fallback\"\n        } else {\n            \"Fixture · all-node obstacles · current caller edge state is independent of routing status\"\n        }))\n        .child(div().flex().gap(px(theme.spacing.xs))\n            .child(Button::new(\"scene.routing.move\")\n                .label(if buried { \"Restore obstacle\" } else { \"Cover source port\" })\n                .disabled(limited)\n                .on_click(|_, cx| {\n                    cx.update_global::<SceneRouting, ()>(|scene, _| {\n                        scene.buried = !scene.buried;\n                        let (x, y, height) = if scene.buried { (105., 155., 80.) } else { (280., 80., 220.) };\n                        scene.source.upsert(Placed::new(GraphNode::new(\"routing.wall\", \"Obstacle\").width(100.), x, y).height(height))\n                            .expect(\"caller-accepted obstacle move\");\n                    });\n                }))\n            .child(Button::new(\"scene.routing.budget\")\n                .label(if limited { \"Simple fixture\" } else { \"Adversarial fixture\" })\n                .on_click(|_, cx| {\n                    cx.update_global::<SceneRouting, ()>(|scene, _| {\n                        scene.limited = !scene.limited;\n                        scene.buried = false;\n                        scene.connected = true;\n                        scene.source = routing_source(scene.limited);\n                    });\n                }))\n            .child(Button::new(\"scene.routing.connection\")\n                .label(if connected { \"Remove connection\" } else { \"Restore connection\" })\n                .on_click(|_, cx| {\n                    cx.update_global::<SceneRouting, ()>(|scene, _| {\n                        scene.connected = !scene.connected;\n                        scene.source.replace_edges(scene.connected.then(|| GraphEdge::new(\"routing.from\", \"routing.to\")\n                            .id(\"routing.connection\").state(EdgeState::Succeeded).label(\"Caller-owned connection\")))\n                            .expect(\"caller-accepted connection change\");\n                    });\n                })))\n        .child(div().w_full().h(px(440.)).child(NodeGraph::new(\"scene.routing.graph\")\n            .source(source).axes(false).minimap(false)\n            .animate_layout(!limited).viewport(GraphViewport::new(point(32., 24.), 1.))))\n        .into_any_element()\n}"
    },
    {
      "name": "node-graph-motion",
      "capture": "cargo run -p xtask -- headless capture node-graph-motion",
      "kind": "exhibit",
      "subjects": [
        "GraphNode",
        "NodeGraph"
      ],
      "uses": [
        "GraphNode",
        "NodeGraph"
      ],
      "example": "fn node_graph_motion(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneGraphMotion>() {\n        cx.set_global(SceneGraphMotion {\n            state: 4,\n            viewport: GraphViewport::new(gpui::point(20.0, 12.0), 1.0),\n            fit: 0,\n            lane: 1,\n        });\n    }\n    let theme = cx.theme().clone();\n    let motion_scene = cx.global::<SceneGraphMotion>();\n    let state_index = motion_scene.state;\n    let viewport = motion_scene.viewport;\n    let fit = motion_scene.fit;\n    let lane = motion_scene.lane;\n    let (state, state_label, _) = NODE_STATES[state_index];\n    let state_cards = NODE_STATES.into_iter().map(|(state, label, slug)| {\n        div().w(px(164.0)).child(\n            GraphNode::new(format!(\"scene.graph-motion.state.{slug}\"), label)\n                .width(164.0)\n                .state(state)\n                .action(slug),\n        )\n    });\n\n    stack(&theme)\n        .w(px(920.0))\n        .child(caption(\n            &theme,\n            \"state owns every aura; only Running breathes, and a successful handoff flashes once\",\n        ))\n        .child(\n            div()\n                .row()\n                .items_center()\n                .gap_token(&theme, Space::Md)\n                .child(\n                    GraphNode::new(\"scene.graph-motion.transition\", \"Observed transition\")\n                        .width(210.0)\n                        .state(state)\n                        .action(state_label),\n                )\n                .child(\n                    Button::new(\"scene.graph-motion.next-state\")\n                        .label(\"Next state\")\n                        .secondary()\n                        .on_click(|_, cx| {\n                            cx.update_global::<SceneGraphMotion, ()>(|scene, _| {\n                                scene.state = (scene.state + 1) % NODE_STATES.len();\n                            });\n                            cx.refresh_windows();\n                        }),\n                )\n                .child(\n                    Button::new(\"scene.graph-motion.succeed\")\n                        .label(\"Complete successfully\")\n                        .on_click(|_, cx| {\n                            cx.update_global::<SceneGraphMotion, ()>(|scene, _| {\n                                scene.state = 7;\n                            });\n                            cx.refresh_windows();\n                        }),\n                )\n                .child(Button::new(\"scene.graph-motion.lane\")\n                    .label(\"Shift successful route\")\n                    .on_click(|_, cx| {\n                        cx.update_global::<SceneGraphMotion, ()>(|scene, _| {\n                            scene.lane = if scene.lane == 1 { 5 } else { 1 };\n                        });\n                        cx.refresh_windows();\n                    })),\n        )\n        .child(\n            div()\n                .row()\n                .flex_wrap()\n                .items_start()\n                .gap_token(&theme, Space::Sm)\n                .children(state_cards),\n        )\n        .child(caption(\n            &theme,\n            \"every route grades source to destination; hover a route, and compare the selected succeeded route with the active flow\",\n        ))\n        .child(\n            div()\n                .w(px(880.0))\n                .h(px(420.0))\n                .child(\n                    NodeGraph::new(\"scene.graph-motion.edges\")\n                    .interaction(GraphInteraction::Inspect)\n                    .viewport(viewport)\n                    .toolbar(\n                        CanvasToolbar::new(\n                            \"scene.graph-motion.toolbar\",\n                            cx.numbers().percent(viewport.zoom),\n                        )\n                        .actions([CanvasToolbarAction::Fit])\n                        .glass(GlassPreset::Frosted)\n                        .on_action(|_, _, cx| {\n                            cx.update_global::<SceneGraphMotion, ()>(|scene, _| {\n                                scene.fit = scene.fit.wrapping_add(1);\n                            });\n                            cx.refresh_windows();\n                        }),\n                    )\n                    .fit(GraphFit::Whole(fit))\n                    .node(\n                        GraphNode::new(\"scene.graph-motion.source\", \"Source\")\n                            .width(164.0)\n                            .state(NodeState::Running)\n                            .port(GraphPort::output(\"idle\", \"Idle\"))\n                            .port(GraphPort::output(\"active\", \"Active\"))\n                            .port(GraphPort::output(\"succeeded\", \"Succeeded\"))\n                            .port(GraphPort::output(\"failed\", \"Failed\")),\n                        12.0,\n                        132.0,\n                    )\n                    .node(\n                        GraphNode::new(\"scene.graph-motion.idle\", \"Idle route\")\n                            .width(164.0)\n                            .state(NodeState::Idle)\n                            .port(GraphPort::input(\"in\", \"In\")),\n                        648.0,\n                        8.0,\n                    )\n                    .node(\n                        GraphNode::new(\"scene.graph-motion.active\", \"Traffic crossing\")\n                            .width(164.0)\n                            .state(NodeState::Running)\n                            .port(GraphPort::input(\"in\", \"In\")),\n                        648.0,\n                        104.0,\n                    )\n                    .node(\n                        GraphNode::new(\"scene.graph-motion.succeeded\", \"Delivered\")\n                            .width(164.0)\n                            .state(NodeState::Succeeded)\n                            .port(GraphPort::input(\"in\", \"In\")),\n                        648.0,\n                        200.0,\n                    )\n                    .node(\n                        GraphNode::new(\"scene.graph-motion.failed\", \"Delivery failed\")\n                            .width(164.0)\n                            .state(NodeState::Failed)\n                            .port(GraphPort::input(\"in\", \"In\")),\n                        648.0,\n                        296.0,\n                    )\n                    .edges([\n                        GraphEdge::new(\"scene.graph-motion.source\", \"scene.graph-motion.idle\")\n                            .id(\"scene.graph-motion.edge.idle\")\n                            .ports(\"idle\", \"in\")\n                            .label(\"idle\")\n                            .lane(-3)\n                            .state(EdgeState::Idle),\n                        GraphEdge::new(\"scene.graph-motion.source\", \"scene.graph-motion.active\")\n                            .id(\"scene.graph-motion.edge.active\")\n                            .ports(\"active\", \"in\")\n                            .label(\"active · flowing\")\n                            .lane(-1)\n                            .state(EdgeState::Active),\n                        GraphEdge::new(\n                            \"scene.graph-motion.source\",\n                            \"scene.graph-motion.succeeded\",\n                        )\n                        .id(\"scene.graph-motion.edge.succeeded\")\n                        .ports(\"succeeded\", \"in\")\n                        .label(\"succeeded · selected\")\n                        .lane(lane)\n                        .state(EdgeState::Succeeded)\n                        .selected(true),\n                        GraphEdge::new(\"scene.graph-motion.source\", \"scene.graph-motion.failed\")\n                            .id(\"scene.graph-motion.edge.failed\")\n                            .ports(\"failed\", \"in\")\n                            .label(\"failed\")\n                            .lane(3)\n                            .state(EdgeState::Failed),\n                    ])\n                    .on_event(|event, _, cx| {\n                        if let NodeGraphEvent::ViewportChanged(viewport) = event {\n                            cx.update_global::<SceneGraphMotion, ()>(|scene, _| {\n                                scene.viewport = *viewport;\n                            });\n                            cx.refresh_windows();\n                        }\n                    }),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "canvas-tools",
      "capture": "cargo run -p xtask -- headless capture canvas-tools",
      "kind": "exhibit",
      "subjects": [
        "CanvasToolbar",
        "Minimap",
        "NodeGroup"
      ],
      "uses": [
        "CanvasToolbar",
        "Minimap",
        "NodeGroup"
      ],
      "example": "fn canvas_tools(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneCanvasTools>() {\n        cx.set_global(SceneCanvasTools {\n            viewport: GraphViewport::default(),\n            fit: 0,\n            snap: true,\n            selected: vec![\"scene.canvas.graph.validate\".into()],\n            nodes: arranged_canvas_tools_nodes(),\n        });\n    }\n    let scene = cx.global::<SceneCanvasTools>();\n    let viewport = scene.viewport;\n    let fit = scene.fit;\n    let snap = scene.snap;\n    let selected = scene.selected.clone();\n    let [ingest, validate, observe, publish] = scene.nodes;\n    let theme = cx.theme().clone();\n    let graph_node =\n        |id: &'static str, title: &'static str, color: &'static str, state: NodeState| {\n            GraphNode::new(id, title)\n                .color(color)\n                .width(180.0)\n                .state(state)\n                .port(GraphPort::input(\"in\", \"In\"))\n                .port(GraphPort::output(\"out\", \"Out\"))\n                .selected(selected.iter().any(|selected| selected == id))\n        };\n    let minimap_mark = |id: &'static str, position: gpui::Point<f32>, color: &'static str| {\n        MinimapMark::new(\n            id,\n            position.x / CANVAS_TOOLS_WORLD_WIDTH,\n            position.y / CANVAS_TOOLS_WORLD_HEIGHT,\n            180.0 / CANVAS_TOOLS_WORLD_WIDTH,\n            120.0 / CANVAS_TOOLS_WORLD_HEIGHT,\n        )\n        .color(color)\n    };\n    let member = |id: &'static str,\n                  title: &'static str,\n                  color: &'static str,\n                  state: NodeState,\n                  action: &'static str,\n                  metric: (&'static str, &'static str)| {\n        GraphNode::new(id, title)\n            .color(color)\n            .width(236.0)\n            .state(state)\n            .action(action)\n            .metric(metric.0, metric.1)\n    };\n\n    stack(&theme)\n        .w(px(840.0))\n        .child(caption(\n            &theme,\n            \"the overview, glass chrome, snap, arrange, and fit all act on this controlled canvas\",\n        ))\n        .child(\n            div()\n                .row()\n                .items_start()\n                .gap_token(&theme, Space::Md)\n                .child(\n                    div()\n                        .w(px(CANVAS_TOOLS_FRAME_WIDTH))\n                        .h(px(CANVAS_TOOLS_FRAME_HEIGHT))\n                        .child(\n                            NodeGraph::new(\"scene.canvas.graph\")\n                                .viewport(viewport)\n                                .toolbar(\n                                    CanvasToolbar::new(\n                                        \"scene.canvas.toolbar\",\n                                        cx.numbers().percent(viewport.zoom),\n                                    )\n                                    .snap(snap)\n                                    .glass(GlassPreset::Frosted)\n                                    .on_action(|action, _, cx| {\n                                        cx.update_global::<SceneCanvasTools, ()>(\n                                            |scene, _| match action {\n                                                CanvasToolbarAction::Fit => {\n                                                    scene.fit = scene.fit.wrapping_add(1);\n                                                }\n                                                CanvasToolbarAction::Snap => {\n                                                    scene.snap = !scene.snap;\n                                                }\n                                                CanvasToolbarAction::Arrange => {\n                                                    scene.nodes = arranged_canvas_tools_nodes();\n                                                    scene.fit = scene.fit.wrapping_add(1);\n                                                }\n                                            },\n                                        );\n                                        cx.refresh_windows();\n                                    }),\n                                )\n                                .fit(GraphFit::Whole(fit))\n                                .interaction(GraphInteraction::Arrange)\n                                .node(\n                                    graph_node(\n                                        \"scene.canvas.graph.ingest\",\n                                        \"Stream ingest\",\n                                        \"teal\",\n                                        NodeState::Succeeded,\n                                    ),\n                                    ingest.x,\n                                    ingest.y,\n                                )\n                                .node(\n                                    graph_node(\n                                        \"scene.canvas.graph.validate\",\n                                        \"Validate & enrich\",\n                                        \"indigo\",\n                                        NodeState::Running,\n                                    ),\n                                    validate.x,\n                                    validate.y,\n                                )\n                                .node(\n                                    graph_node(\n                                        \"scene.canvas.graph.observe\",\n                                        \"Observe quality\",\n                                        \"orange\",\n                                        NodeState::Failed,\n                                    ),\n                                    observe.x,\n                                    observe.y,\n                                )\n                                .node(\n                                    graph_node(\n                                        \"scene.canvas.graph.publish\",\n                                        \"Publish artifact\",\n                                        \"lime\",\n                                        NodeState::Pending,\n                                    ),\n                                    publish.x,\n                                    publish.y,\n                                )\n                                .edges([\n                                    GraphEdge::new(\n                                        \"scene.canvas.graph.ingest\",\n                                        \"scene.canvas.graph.validate\",\n                                    )\n                                    .ports(\"out\", \"in\")\n                                    .active(true),\n                                    GraphEdge::new(\n                                        \"scene.canvas.graph.validate\",\n                                        \"scene.canvas.graph.observe\",\n                                    )\n                                    .ports(\"out\", \"in\"),\n                                    GraphEdge::new(\n                                        \"scene.canvas.graph.observe\",\n                                        \"scene.canvas.graph.publish\",\n                                    )\n                                    .ports(\"out\", \"in\"),\n                                ])\n                                .on_event(|event, _, cx| {\n                                    cx.update_global::<SceneCanvasTools, ()>(\n                                        |scene, _| match event {\n                                            NodeGraphEvent::ViewportChanged(viewport) => {\n                                                scene.viewport = *viewport;\n                                            }\n                                            NodeGraphEvent::SelectionChanged { ids } => {\n                                                scene.selected = ids.clone();\n                                            }\n                                            NodeGraphEvent::NodeMoved { id, position } => {\n                                                let position = if scene.snap {\n                                                    canvas_tools_snap(*position)\n                                                } else {\n                                                    *position\n                                                };\n                                                match id.as_ref() {\n                                                    \"scene.canvas.graph.ingest\" => {\n                                                        scene.nodes[0] = position;\n                                                    }\n                                                    \"scene.canvas.graph.validate\" => {\n                                                        scene.nodes[1] = position;\n                                                    }\n                                                    \"scene.canvas.graph.observe\" => {\n                                                        scene.nodes[2] = position;\n                                                    }\n                                                    \"scene.canvas.graph.publish\" => {\n                                                        scene.nodes[3] = position;\n                                                    }\n                                                    _ => {}\n                                                }\n                                            }\n                                            NodeGraphEvent::NodeDeleted { .. }\n                                            | NodeGraphEvent::NodeResized { .. }\n                                            | NodeGraphEvent::SurfacePressed { .. }\n                                            | NodeGraphEvent::ConnectionRequested { .. }\n                                            | NodeGraphEvent::ConnectionDropped { .. }\n                                            | NodeGraphEvent::DisconnectRequested { .. } => {}\n                                        },\n                                    );\n                                    cx.refresh_windows();\n                                }),\n                            )\n                )\n                .child(\n                    div()\n                        .w(px(160.0))\n                        .flex_none()\n                        .child(\n                            Minimap::new(\"scene.canvas.minimap\")\n                                .marks([\n                                    minimap_mark(\"ingest\", ingest, \"teal\"),\n                                    minimap_mark(\"validate\", validate, \"indigo\"),\n                                    minimap_mark(\"observe\", observe, \"orange\"),\n                                    minimap_mark(\"publish\", publish, \"lime\"),\n                                ])\n                                .view(canvas_tools_minimap_view(viewport))\n                                .on_pan(|x, y, _, cx| {\n                                    cx.update_global::<SceneCanvasTools, ()>(|scene, _| {\n                                        scene.viewport =\n                                            canvas_tools_viewport_at(scene.viewport, x, y);\n                                    });\n                                    cx.refresh_windows();\n                                }),\n                        ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"a NodeGroup remains host layout: it names these related cards, not a world-space region\",\n        ))\n        .child(\n            div().relative().w(px(540.0)).child(\n                NodeGroup::new(\"scene.canvas.group\", \"Ingest\")\n                    .selected(true)\n                    .child(\n                        div()\n                            .row()\n                            .items_start()\n                            .gap_token(&theme, Space::Md)\n                            .child(\n                                member(\n                                    \"scene.canvas.node.ingest\",\n                                    \"Stream ingest\",\n                                    \"teal\",\n                                    NodeState::Succeeded,\n                                    \"orders.v2 · partition 18\",\n                                    (\"rate\", \"3.2k/s\"),\n                                )\n                                .into_any_element(),\n                            )\n                            .child(\n                                member(\n                                    \"scene.canvas.node.validate\",\n                                    \"Validate & enrich\",\n                                    \"indigo\",\n                                    NodeState::Running,\n                                    \"schema + fraud signals\",\n                                    (\"p95\", \"18 ms\"),\n                                )\n                                .into_any_element(),\n                            ),\n                    ),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "canvas-regions",
      "capture": "cargo run -p xtask -- headless capture canvas-regions",
      "kind": "exhibit",
      "subjects": [
        "NodeGraph"
      ],
      "uses": [
        "NodeGraph"
      ],
      "example": "fn canvas_regions(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneCanvasRegions>() {\n        cx.set_global(SceneCanvasRegions {\n            viewport: GraphViewport::new(gpui::point(28.0, 18.0), 1.0),\n            fit: 0,\n        });\n    }\n    let scene = cx.global::<SceneCanvasRegions>();\n    let viewport = scene.viewport;\n    let fit = scene.fit;\n    let theme = cx.theme().clone();\n    let card = |id: &'static str,\n                title: &'static str,\n                color: &'static str,\n                state: NodeState,\n                action: &'static str| {\n        GraphNode::new(id, title)\n            .color(color)\n            .width(168.0)\n            .state(state)\n            .action(action)\n            .port(GraphPort::input(\"in\", \"In\"))\n            .port(GraphPort::output(\"out\", \"Out\"))\n    };\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"regions live in canvas coordinates; the chrome offers only what this host can do\",\n        ))\n        .child(\n            div().w(px(660.0)).h(px(360.0)).child(\n                NodeGraph::new(\"scene.regions\")\n                    .viewport(viewport)\n                    .interaction(GraphInteraction::Inspect)\n                    .toolbar(\n                        CanvasToolbar::new(\n                            \"scene.regions.toolbar\",\n                            cx.numbers().percent(viewport.zoom),\n                        )\n                        // Inspect-only: this host frames the canvas\n                        // and rearranges nothing, so it names the one\n                        // intent it can carry out.\n                        .actions([CanvasToolbarAction::Fit])\n                        .glass(GlassPreset::Frosted)\n                        .on_action(|_, _, cx| {\n                            cx.update_global::<SceneCanvasRegions, ()>(|scene, _| {\n                                scene.fit = scene.fit.wrapping_add(1);\n                            });\n                            cx.refresh_windows();\n                        }),\n                    )\n                    .fit(GraphFit::Whole(fit))\n                    .band(\n                        GraphBand::new(\n                            \"scene.regions.baseline\",\n                            \"Baseline\",\n                            0.0,\n                            0.0,\n                            560.0,\n                            132.0,\n                        )\n                        .color(\"teal\"),\n                    )\n                    .band(\n                        GraphBand::new(\"scene.regions.scope\", \"Scope\", 0.0, 168.0, 560.0, 132.0)\n                            .color(\"violet\")\n                            .selected(true),\n                    )\n                    .node(\n                        card(\n                            \"scene.regions.sample\",\n                            \"Sample\",\n                            \"teal\",\n                            NodeState::Succeeded,\n                            \"1,204 cases\",\n                        ),\n                        28.0,\n                        34.0,\n                    )\n                    .node(\n                        card(\n                            \"scene.regions.score\",\n                            \"Score\",\n                            \"teal\",\n                            NodeState::Succeeded,\n                            \"reference model\",\n                        ),\n                        340.0,\n                        34.0,\n                    )\n                    .node(\n                        card(\n                            \"scene.regions.candidate\",\n                            \"Candidate\",\n                            \"violet\",\n                            NodeState::Running,\n                            \"checkpoint 41\",\n                        ),\n                        28.0,\n                        202.0,\n                    )\n                    .node(\n                        card(\n                            \"scene.regions.compare\",\n                            \"Compare\",\n                            \"violet\",\n                            NodeState::Partial,\n                            \"3 of 8 rubrics\",\n                        ),\n                        340.0,\n                        202.0,\n                    )\n                    .edge(\n                        GraphEdge::new(\"scene.regions.sample\", \"scene.regions.score\")\n                            .ports(\"out\", \"in\")\n                            .active(true),\n                    )\n                    .edge(\n                        GraphEdge::new(\"scene.regions.candidate\", \"scene.regions.compare\")\n                            .ports(\"out\", \"in\")\n                            .label(\"8 rubrics\")\n                            .active(true),\n                    )\n                    // A return path: the comparison sent work back to\n                    // be scored again. It is a fact about the run's\n                    // control flow, so it is not drawn as a failure.\n                    .edge(\n                        GraphEdge::new(\"scene.regions.compare\", \"scene.regions.score\")\n                            .ports(\"out\", \"in\")\n                            .label(\"re-score\")\n                            .lane(1)\n                            .feedback()\n                            .active(true),\n                    )\n                    .on_event(|event, _, cx| {\n                        if let NodeGraphEvent::ViewportChanged(viewport) = event {\n                            cx.update_global::<SceneCanvasRegions, ()>(|scene, _| {\n                                scene.viewport = *viewport;\n                            });\n                            cx.refresh_windows();\n                        }\n                    }),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "browser-panel",
      "capture": "cargo run -p xtask -- headless capture browser-panel",
      "kind": "exhibit",
      "subjects": [
        "BrowserPanel"
      ],
      "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            // One size class for every panel: a difference between two tiles\n            // here is a difference in what the panel shows, never in the frame\n            // it was handed.\n            row(&theme)\n                .items_start()\n                .child(\n                    div().w(px(272.0)).h(px(200.0)).child(\n                        BrowserPanel::new(\"scene.browser.loading\")\n                            .url(\"https://docs.example.com/a/long/path/that-must-stay-inside-the-address-well\")\n                            .state(ViewportState::Loading)\n                            .on_reload(|_, _| {}),\n                    ),\n                )\n                .child(\n                    div().w(px(272.0)).h(px(200.0)).child(\n                        BrowserPanel::new(\"scene.browser.empty\")\n                            .url(\"https://docs.example.com/empty\")\n                            .state(ViewportState::Empty)\n                            .on_back(|_, _| {})\n                            .on_reload(|_, _| {}),\n                    ),\n                )\n                .child(\n                    div().w(px(272.0)).h(px(200.0)).child(\n                        BrowserPanel::new(\"scene.browser.unavailable\")\n                            .url(\"https://internal.example.com/admin\")\n                            .state(ViewportState::Unavailable(\n                                \"The workspace policy does not allow this host.\".into(),\n                            ))\n                            .on_reload(|_, _| {}),\n                    ),\n                ),\n        )\n        .child(\n            row(&theme)\n                .items_start()\n                .child(\n                    div().w(px(272.0)).h(px(200.0)).child(\n                        BrowserPanel::new(\"scene.browser.error\")\n                            .url(\"https://status.example.com/incidents/current\")\n                            .state(ViewportState::Error(\n                                \"The host could not resolve this address.\".into(),\n                            ))\n                            .on_back(|_, _| {})\n                            .on_reload(|_, _| {}),\n                    ),\n                )\n                .child(\n                    div().w(px(272.0)).h(px(200.0)).child(\n                        BrowserPanel::new(\"scene.browser.ready\")\n                            .url(\"https://docs.example.com/ready\")\n                            .state(ViewportState::Ready)\n                            .viewport(\n                                div()\n                                    .size_full()\n                                    .p_token(&theme, Space::Md)\n                                    .child(crate::foundation::text(\n                                        &theme,\n                                        TypeScale::Subtitle,\n                                        \"Host-owned page surface\",\n                                    ))\n                                    .child(\n                                        div()\n                                            .mt_token(&theme, Space::Sm)\n                                            .child(crate::foundation::text(&theme, TypeScale::Body, \"Long page content remains clipped by the BrowserPanel viewport even when it cannot wrap naturally.\").text_tone(&theme, TextTone::Muted)),\n                                    ),\n                            )\n                            .on_back(|_, _| {})\n                            .on_forward(|_, _| {})\n                            .on_reload(|_, _| {}),\n                    ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "thinking",
      "capture": "cargo run -p xtask -- headless capture thinking",
      "kind": "exhibit",
      "subjects": [
        "ThinkingBlock"
      ],
      "uses": [
        "ThinkingBlock"
      ],
      "example": "fn thinking(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(640.0))\n        .child(\n            ThinkingBlock::new(\n                \"scene.thinking.collapsed\",\n                Reasoning::present(\"The brief asks for two files, so read both before answering.\"),\n            )\n            .elapsed(\"2.1 s\"),\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            .elapsed(\"8.4 s\")\n            .on_toggle(|_, _, _| {}),\n        )\n        .child(\n            ThinkingBlock::new(\n                \"scene.thinking.flow\",\n                Reasoning::present(\"The same evidence stays indented.\\nIt has no body plane.\"),\n            )\n            .expanded(true)\n            .presentation(AgentDisclosurePresentation::Flow)\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 -- headless capture json-view",
      "kind": "exhibit",
      "subjects": [
        "JsonView"
      ],
      "uses": [
        "JsonView"
      ],
      "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 -- headless capture schema-form",
      "kind": "exhibit",
      "subjects": [
        "SchemaForm"
      ],
      "uses": [
        "SchemaForm"
      ],
      "example": "fn schema_form(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSchemaForm>() {\n        set_schema_file_policy(DefaultSchemaFilePolicy, cx);\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            let _ = form.set_field_validation(\"encoding\", ValidationState::Validating, cx);\n            form.set_files(\"attachments\", vec![\"/workspace/brief.md\".into()], cx)\n                .expect(\"the scene's permissive file policy accepts its fixture\");\n            form.add_list_item(\"headers\", window, 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 -- headless capture server-list",
      "kind": "exhibit",
      "subjects": [
        "ServerList"
      ],
      "uses": [
        "ServerList"
      ],
      "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": "offering-catalog",
      "capture": "cargo run -p xtask -- headless capture offering-catalog",
      "kind": "exhibit",
      "subjects": [
        "OfferingCatalog"
      ],
      "uses": [
        "OfferingCatalog"
      ],
      "example": "fn offering_catalog(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let workspace = OfferingSource::new(\n        \"workspace\",\n        \"Workspace tools\",\n        OfferingSourceState::Ready(vec![\n            SearchableOffering::new(\n                Offering::tool(\"read\", \"Read a file\")\n                    .summary(\"Returns the contents of one file\")\n                    .qualifier(\"path, max_bytes\"),\n                \"read file contents path workspace\",\n            ),\n            SearchableOffering::new(\n                Offering::skill(\"review\", \"Review a change\")\n                    .summary(\"Reads a diff and reports what it finds\"),\n                \"review change diff findings\",\n            ),\n        ]),\n    );\n    let archive = OfferingSource::new(\n        \"archive\",\n        \"Archive tools\",\n        OfferingSourceState::Stale {\n            offerings: vec![\n                SearchableOffering::new(\n                    Offering::tool(\"read\", \"Read a file\").summary(\"Reads one archived file\"),\n                    \"read archived file contents\",\n                ),\n                SearchableOffering::new(\n                    Offering::resource(\"changelog\", \"Changelog\").qualifier(\"archive:/CHANGELOG.md\"),\n                    \"changelog changes release history\",\n                ),\n            ],\n            reason: \"Archive refresh failed; showing the last verified results.\".into(),\n        },\n    );\n    stack(&theme)\n        .w(px(560.0))\n        .child(\n            OfferingCatalog::new(\"scene.offering-catalog\")\n                .sources([workspace, archive])\n                .selected(OfferingIdentity::new(\"workspace\", \"read\"))\n                .on_activate(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "reading-direction",
      "capture": "cargo run -p xtask -- headless capture reading-direction",
      "kind": "composition",
      "subjects": [],
      "uses": [
        "Accordion",
        "Breadcrumb",
        "Button",
        "Card",
        "Icon",
        "JsonView",
        "Tabs",
        "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            Card::new()\n                .id(\"scene.rtl.mixed\")\n                // A card holding prose rather than rows has to ask for its\n                // interior padding; without it the lines sit on the card's own\n                // edge. Reading right to left is what made that visible here —\n                // the run ends where the card ends, so the last letter of\n                // \"الإصدار\" stood outside the rounded corner — but the card was\n                // unpadded in both directions and a left-to-right line would\n                // have been against the other edge just as hard.\n                .padded(true)\n                .child(\n                    crate::foundation::text(\n                        &theme,\n                        TypeScale::Body,\n                        \"الإصدار v2.4 — build 17 — גרסה יציבה\",\n                    )\n                    .text_start(direction),\n                )\n                .child(\n                    crate::foundation::text(\n                        &theme,\n                        TypeScale::Caption,\n                        \"المسار /workspace/run-4821، 64% مكتمل\",\n                    )\n                    .text_start(direction)\n                    .text_tone(&theme, TextTone::Muted),\n                ),\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(crate::foundation::text(\n                                        &theme,\n                                        TypeScale::Body,\n                                        \"Requests go out over the system proxy.\",\n                                    )),\n                            )\n                            .section(\n                                AccordionSection::new(\"storage\", \"Storage\")\n                                    .description(\"Where verified results are kept\"),\n                            ),\n                    ),\n                ),\n        )\n        .child(\n            JsonView::new(\n                \"scene.rtl.json\",\n                JsonValue::object([\n                    (\"الحالة\", JsonValue::string(\"جاهز build-17\")),\n                    (\"גרסה\", JsonValue::string(\"v2.4 مستقرة\")),\n                ]),\n            )\n            .root_label(\"تفاصيل التشغيل\")\n            .selected(\"الحالة\")\n            .on_select(|_, _, _| {}),\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 -- headless capture toggle",
      "kind": "exhibit",
      "subjects": [
        "Toggle",
        "ToggleGroup"
      ],
      "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 -- headless capture collapsible",
      "kind": "exhibit",
      "subjects": [
        "Collapsible"
      ],
      "uses": [
        "Collapsible"
      ],
      "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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"Requests go out over the system proxy.\",\n                ))\n                .on_toggle(|_, _, _| {}),\n        )\n        .child(\n            Collapsible::new(\"scene.collapsible.shut\", \"Diagnostics\")\n                .description(\"Nothing is collected until this is opened\")\n                .body(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"This body is absent from the tree while it is shut.\",\n                ))\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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"Set by the administrator.\",\n                )),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "hover-card",
      "capture": "cargo run -p xtask -- headless capture hover-card",
      "kind": "exhibit",
      "subjects": [
        "HoverCard"
      ],
      "uses": [
        "HoverCard"
      ],
      "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(\n            row(&theme)\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Reported by\",\n                ))\n                .child(card),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "menubar",
      "capture": "cargo run -p xtask -- headless capture menubar",
      "kind": "exhibit",
      "subjects": [
        "Menubar"
      ],
      "uses": [
        "Menubar"
      ],
      "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 -- headless capture copy-button",
      "kind": "exhibit",
      "subjects": [
        "CopyButton"
      ],
      "uses": [
        "CopyButton"
      ],
      "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 -- headless capture aspect-ratio",
      "kind": "exhibit",
      "subjects": [
        "AspectRatio"
      ],
      "uses": [
        "AspectRatio"
      ],
      "example": "fn aspect_ratio(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // The ratio is the subject, so the block it drives is drawn the way every\n    // other bounded region in the library is: a surface step, the card radius,\n    // and its label inside it.\n    let filled = |label: &'static str| {\n        div()\n            .size_full()\n            .flex()\n            .items_center()\n            .justify_center()\n            .surface(&theme, Surface::Sunken)\n            .radius(&theme, Radius::Card)\n            .overflow_hidden()\n            .child(\n                crate::foundation::text(&theme, TypeScale::Label, label)\n                    .text_tone(&theme, TextTone::Muted),\n            )\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": "responsive",
      "capture": "cargo run -p xtask -- headless capture responsive",
      "kind": "exhibit",
      "subjects": [
        "Responsive"
      ],
      "uses": [
        "Responsive"
      ],
      "example": "fn responsive(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let arrangement = move |id: &'static str| {\n        let theme = theme.clone();\n        move |size: ContainerSize, _: &mut Window, cx: &mut App| {\n            let wide = size.width().is_some_and(|measured| measured >= 480.0);\n            // The unmeasured frame is a real state and it is named rather than\n            // guessed, which is the whole argument the component makes.\n            let heading = match size.width() {\n                None => \"Not laid out yet, so neither arrangement is chosen\".to_string(),\n                Some(measured) if wide => format!(\"{measured:.0}px wide, so two columns\"),\n                Some(measured) => format!(\"{measured:.0}px wide, so one column\"),\n            };\n            // A card rather than a tinted rectangle, and with enough in it to\n            // be a column: two panels holding one word each say nothing about\n            // an arrangement, which is what the component is for.\n            let block = |label: &'static str, lines: &'static [&'static str], cx: &mut App| {\n                div()\n                    .flex_1()\n                    .min_w_0()\n                    .column()\n                    .gap_token(&theme, Space::Xs)\n                    .p_token(&theme, Space::Md)\n                    .card_surface(&theme, CardVariant::Elevated)\n                    .child(crate::foundation::text(&theme, TypeScale::Label, label))\n                    .children(lines.iter().map(|line| {\n                        crate::foundation::text(&theme, TypeScale::Caption, *line)\n                            .text_tone(&theme, TextTone::Muted)\n                    }))\n                    .semantic_in(\n                        cx,\n                        NodeSpec::new(format!(\"{id}.{}\", label.to_lowercase()), Role::Group)\n                            .text(label),\n                    )\n            };\n            let panes = div()\n                .gap_token(&theme, Space::Sm)\n                .child(block(\n                    \"Settings\",\n                    &[\"Theme\", \"Density\", \"Reading direction\"],\n                    cx,\n                ))\n                .child(block(\n                    \"Detail\",\n                    &[\"Studio Dark\", \"Comfortable\", \"Left to right\"],\n                    cx,\n                ));\n            div()\n                .column()\n                .gap_token(&theme, Space::Sm)\n                .child(\n                    crate::foundation::text(&theme, TypeScale::Caption, heading.clone())\n                        .text_tone(&theme, TextTone::Faint),\n                )\n                .child(if wide { panes.row() } else { panes.column() })\n                .semantic_in(cx, NodeSpec::new(id, Role::Group).value(heading))\n                .into_any_element()\n        }\n    };\n\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Wide enough for two columns\"))\n        .child(div().w(px(620.0)).child(Responsive::new(\n            \"scene.responsive.wide\",\n            arrangement(\"scene.responsive.wide.body\"),\n        )))\n        .child(caption(&theme, \"The same content, narrow\"))\n        .child(div().w(px(320.0)).child(Responsive::new(\n            \"scene.responsive.narrow\",\n            arrangement(\"scene.responsive.narrow.body\"),\n        )))\n        .into_any_element()\n}"
    },
    {
      "name": "icon",
      "capture": "cargo run -p xtask -- headless capture icon",
      "kind": "exhibit",
      "subjects": [
        "Icon"
      ],
      "uses": [
        "Icon"
      ],
      "example": "fn icon(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let tones = [\n        (\"primary\", IconTone::Primary),\n        (\"muted\", IconTone::Muted),\n        (\"faint\", IconTone::Faint),\n        (\"accent\", IconTone::Accent),\n        (\"accent strong\", IconTone::AccentStrong),\n        (\"success\", IconTone::Success),\n        (\"warning\", IconTone::Warning),\n        (\"danger\", IconTone::Danger),\n        (\"info\", IconTone::Info),\n    ];\n\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"Phosphor Regular is the resting catalog; every glyph is rendered at a real control size\",\n        ))\n        .child(\n            row(&theme)\n                .gap(px(theme.space(Space::Xs)))\n                .children(Icon::ALL.iter().map(|glyph| {\n                    let name = glyph.name().source_name();\n                    div()\n                        .row()\n                        .items_center()\n                        .gap(px(theme.space(Space::Xs)))\n                        .w(px(160.0))\n                        .h(px(32.0))\n                        .px(px(theme.space(Space::Xs)))\n                        .radius(&theme, Radius::Control)\n                        .well(&theme)\n                        .child(IconView::named(\n                            format!(\"scene.icon.glyph.{name}\"),\n                            *glyph,\n                            name,\n                        ))\n                        .child(\n                            crate::foundation::text(&theme, TypeScale::Caption, name)\n                                .text_tone(&theme, TextTone::Muted)\n                                .text_ellipsis(),\n                        )\n                        .into_any_element()\n                })),\n        )\n        .child(caption(\n            &theme,\n            \"Fill is the selected or committed state of the same symbol, never an ornamental weight\",\n        ))\n        .child(\n            row(&theme).gap(px(theme.space(Space::Md))).children(\n                [\n                    (Icon::Star, \"star\"),\n                    (Icon::CheckCircle, \"check-circle\"),\n                    (Icon::Home, \"home\"),\n                    (Icon::Browser, \"browser\"),\n                ]\n                .map(|(glyph, label)| {\n                    div()\n                        .row()\n                        .items_center()\n                        .gap(px(theme.space(Space::Sm)))\n                        .p(px(theme.space(Space::Sm)))\n                        .radius(&theme, Radius::Card)\n                        .surface(&theme, Surface::Panel)\n                        .child(IconView::new(glyph).large().muted())\n                        .child(IconView::new(glyph.filled()).large().accent())\n                        .child(\n                            crate::foundation::text(&theme, TypeScale::Caption, label)\n                                .text_tone(&theme, TextTone::Muted),\n                        )\n                        .into_any_element()\n                }),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"The token size ramp keeps icon and control geometry on the same scale\",\n        ))\n        .child(\n            row(&theme)\n                .gap(px(theme.space(Space::Md)))\n                .child(IconView::new(Icon::Sparkle).xs().faint())\n                .child(IconView::new(Icon::Sparkle).small().muted())\n                .child(IconView::new(Icon::Sparkle).medium())\n                .child(IconView::new(Icon::Sparkle).large().accent()),\n        )\n        .child(caption(\n            &theme,\n            \"Every tone. These are facts about what a glyph reports, not decoration\",\n        ))\n        // At the size a glyph is actually drawn, a stroke two steps apart on\n        // the text ramp is a few pixels of difference nobody can hold side by\n        // side. Each tone is shown once large enough to be compared and once\n        // at the size it is used, on a panel so the comparison is against one\n        // ground rather than against the canvas at three different insets.\n        .child(\n            row(&theme)\n                .gap(px(theme.space(Space::Md)))\n                .children(tones.map(|(label, tone)| {\n                    div()\n                        .column()\n                        .items_center()\n                        .gap(px(theme.space(Space::Xs)))\n                        .w(px(88.0))\n                        .p(px(theme.space(Space::Sm)))\n                        .radius(&theme, Radius::Card)\n                        .surface(&theme, Surface::Panel)\n                        .child(\n                            IconView::named(format!(\"scene.icon.tone.{label}\"), Icon::Info, label)\n                                .tone(tone)\n                                .large(),\n                        )\n                        .child(\n                            div()\n                                .row()\n                                .gap(px(theme.space(Space::Xs)))\n                                .child(IconView::new(Icon::Check).tone(tone))\n                                .child(IconView::new(Icon::Danger).tone(tone))\n                                .child(IconView::new(Icon::Refresh).tone(tone)),\n                        )\n                        .child(\n                            crate::foundation::text(&theme, TypeScale::Caption, label)\n                                .text_tone(&theme, TextTone::Muted),\n                        )\n                        .into_any_element()\n                })),\n        )\n        .child(caption(\n            &theme,\n            \"A glyph that means a direction turns with the reading order; one that \\\n             means a thing does not\",\n        ))\n        .child(\n            row(&theme).gap(px(theme.space(Space::Md))).children(\n                [\n                    (Icon::ArrowRight, \"arrow-right\"),\n                    (Icon::Return, \"return\"),\n                    (Icon::Copy, \"copy\"),\n                    (Icon::Check, \"check\"),\n                    (Icon::Settings, \"settings\"),\n                ]\n                .map(|(glyph, name)| {\n                    IconView::named(format!(\"scene.icon.direction.{name}\"), glyph, name)\n                        .follow_direction(true)\n                        .into_any_element()\n                }),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"Semantic motion recipes: ongoing work spins, deliberation breathes, and settled feedback reacts once\",\n        ))\n        .child(\n            row(&theme)\n                .gap(px(theme.space(Space::Lg)))\n                .child(\n                    IconView::named(\"scene.icon.motion.working\", Icon::Spinner, \"Working\")\n                        .large()\n                        .accent()\n                        .spinning(\"scene.icon.motion.working.spin\"),\n                )\n                .child(\n                    IconView::named(\n                        \"scene.icon.motion.deliberating\",\n                        Icon::Sparkle,\n                        \"Deliberating\",\n                    )\n                    .large()\n                    .breathing(\"scene.icon.motion.deliberating.breathe\"),\n                )\n                .child(\n                    IconView::named(\n                        \"scene.icon.motion.success\",\n                        Icon::CheckCircle.filled(),\n                        \"Succeeded\",\n                    )\n                    .large()\n                    .success()\n                    .reacting(\"scene.icon.motion.success.pop\", crate::motion::Micro::Pop),\n                )\n                .child(\n                    IconView::named(\"scene.icon.motion.error\", Icon::Danger, \"Failed\")\n                        .large()\n                        .danger()\n                        .reacting(\"scene.icon.motion.error.wobble\", crate::motion::Micro::Wobble),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "document-tabs",
      "capture": "cargo run -p xtask -- headless capture document-tabs",
      "kind": "exhibit",
      "subjects": [
        "Tabs"
      ],
      "uses": [
        "Tabs"
      ],
      "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-input",
      "capture": "cargo run -p xtask -- headless capture search-input",
      "kind": "exhibit",
      "subjects": [
        "SearchInput"
      ],
      "uses": [
        "SearchInput"
      ],
      "example": "fn search_input(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_search(window, cx);\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(\n            &theme,\n            \"Queries: Xs empty, Sm and Md populated, disabled\",\n        ))\n        .children(cx.global::<SceneSearch>().queries.clone())\n        .child(caption(\n            &theme,\n            \"Last query: name ‘Search projects’, hint ‘Search…’\",\n        ))\n        .into_any_element()\n}"
    },
    {
      "name": "search-field",
      "capture": "cargo run -p xtask -- headless capture search-field",
      "kind": "exhibit",
      "subjects": [
        "HighlightedText",
        "SearchField"
      ],
      "uses": [
        "HighlightedText",
        "SearchField"
      ],
      "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    let counting = cx.global::<SceneSearch>().counting.clone();\n    let none = cx.global::<SceneSearch>().none.clone();\n    let too_many = cx.global::<SceneSearch>().too_many.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(counting)\n        .child(none)\n        .child(too_many)\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 -- headless capture find-replace",
      "kind": "exhibit",
      "subjects": [
        "FindReplace"
      ],
      "uses": [
        "FindReplace"
      ],
      "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 -- headless capture notification-center",
      "kind": "exhibit",
      "subjects": [
        "NotificationCenter"
      ],
      "uses": [
        "NotificationCenter"
      ],
      "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 -- headless capture failure-panel",
      "kind": "exhibit",
      "subjects": [
        "FailurePanel"
      ],
      "uses": [
        "FailurePanel"
      ],
      "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 ToolCall 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": "log-stream",
      "capture": "cargo run -p xtask -- headless capture log-stream",
      "kind": "exhibit",
      "subjects": [
        "LogStream"
      ],
      "uses": [
        "LogStream"
      ],
      "example": "fn log_stream(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let entries = [\n        LogEntry::new(\"boot\", \"Fixture worker entered the queue\")\n            .timestamp(\"09:41:02\")\n            .level(\"INFO\", Tone::Info)\n            .source(\"scheduler\"),\n        LogEntry::new(\"claim\", \"Fixture worker claimed run demo-42\")\n            .timestamp(\"09:41:03\")\n            .level(\"INFO\", Tone::Info)\n            .source(\"worker\")\n            .search_hits(std::iter::once(23..26))\n            .current_hit(0),\n        LogEntry::new(\"cache\", \"Fixture cache was not warm\")\n            .timestamp(\"09:41:04\")\n            .level(\"WARN\", Tone::Warning)\n            .source(\"cache\"),\n        LogEntry::new(\"ansi\", \"\\u{1b}[31mfailed\\u{1b}[0m after retry\")\n            .timestamp(\"09:41:04\")\n            .level(\"ERR\", Tone::Danger)\n            .source(\"worker\"),\n        LogEntry::new(\"retry\", \"Fixture request completed after one retry\")\n            .timestamp(\"09:41:05\")\n            .level(\"INFO\", Tone::Info)\n            .source(\"worker\"),\n        LogEntry::new(\"finish\", \"Fixture run demo-42 completed\")\n            .timestamp(\"09:41:06\")\n            .level(\"DONE\", Tone::Success)\n            .source(\"scheduler\")\n            .search_hits(std::iter::once(12..19)),\n    ];\n    stack(&theme)\n        .w(px(780.0))\n        .child(caption(\n            &theme,\n            \"fixed virtual rows; metadata and search ranges are caller inputs\",\n        ))\n        .child(\n            LogStream::new(\"scene.log\", entries)\n                .ansi(true)\n                .state(LogStreamState::Stale(\n                    \"The latest refresh did not complete; verified entries remain.\".into(),\n                ))\n                .visible_rows(5)\n                .selected(\"retry\")\n                .on_select(|_, _, _| {})\n                .on_copy(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "diff-view",
      "capture": "cargo run -p xtask -- headless capture diff-view",
      "kind": "exhibit",
      "subjects": [
        "DiffView"
      ],
      "uses": [
        "DiffView"
      ],
      "example": "fn diff_view(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(840.0))\n        .child(caption(\n            &theme,\n            \"the same caller-owned rows arranged as unified and split\",\n        ))\n        .child(\n            div()\n                .column()\n                .items_start()\n                .gap_token(&theme, Space::Md)\n                .child(\n                    div().w(px(840.0)).child(\n                        DiffView::new(\"scene.diff.unified\", scene_diff())\n                            .visible_rows(7)\n                            .on_event(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    div().w(px(840.0)).child(\n                        DiffView::new(\"scene.diff.split\", scene_diff())\n                            .presentation(DiffPresentation::Split)\n                            .visible_rows(6)\n                            .on_event(|_, _, _| {}),\n                    ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"a review of several files: what happened to each file said above \\\n             its lines, two folded behind headers that say what they hold, and \\\n             the hunk the reader stepped to marked and put on screen — as tall \\\n             as the frame it was given rather than a number of rows\",\n        ))\n        .child(\n            // Given a height rather than a row count, the way a pane gives one.\n            // Kept short enough that the wrapping example below still finishes\n            // inside the frame, but tall enough to show the next file header:\n            // a scene whose last words are cut off is the defect its own\n            // caption is about.\n            div().w(px(840.0)).h(px(232.0)).child(\n                DiffView::shared(\"scene.diff.review\", std::sync::Arc::new(scene_review()))\n                    .language(\"rust\")\n                    .fills()\n                    .cursor(DiffCursor::Hunk {\n                        file_id: \"report\".into(),\n                        hunk_id: \"summary\".into(),\n                    })\n                    .on_event(|_, _, _| {}),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"the same rows measured rather than slotted, so a line longer than \\\n             the frame wraps instead of being cut off\",\n        ))\n        .child(\n            // Every example in this scene is the same width, so a difference\n            // between two of them is about the diff and not about the frame.\n            div().w(px(840.0)).child(\n                DiffView::new(\"scene.diff.wrapping\", scene_long_line())\n                    .wrapping(true)\n                    // Room for both lines *after* they wrap. A budget counted\n                    // in unwrapped rows cuts the last line in half, which is\n                    // the one thing this example exists to show does not happen.\n                    .visible_rows(6)\n                    .on_event(|_, _, _| {}),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "sparkline",
      "capture": "cargo run -p xtask -- headless capture sparkline",
      "kind": "exhibit",
      "subjects": [
        "Sparkline"
      ],
      "uses": [
        "Sparkline"
      ],
      "example": "fn sparkline(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let points = [\n        SparklinePoint::new(0.0, 0.20),\n        SparklinePoint::new(0.14, 0.34),\n        SparklinePoint::new(0.28, 0.29),\n        SparklinePoint::new(0.42, 0.56),\n        SparklinePoint::new(0.57, 0.48),\n        SparklinePoint::new(0.71, 0.74),\n        SparklinePoint::new(0.85, 0.66),\n        SparklinePoint::new(1.0, 0.82),\n    ];\n    // A second metric is a second shape. Two readings that draw the same\n    // curve prove only that both were handed the same fixture.\n    let queue = [\n        SparklinePoint::new(0.0, 0.72),\n        SparklinePoint::new(0.14, 0.64),\n        SparklinePoint::new(0.28, 0.80),\n        SparklinePoint::new(0.42, 0.45),\n        SparklinePoint::new(0.57, 0.38),\n        SparklinePoint::new(0.71, 0.52),\n        SparklinePoint::new(0.85, 0.30),\n        SparklinePoint::new(1.0, 0.34),\n    ];\n    stack(&theme)\n        .w(px(520.0))\n        .child(caption(\n            &theme,\n            \"normalized geometry with caller-formatted current, minimum and maximum\",\n        ))\n        .child(Sparkline::new(\n            \"scene.sparkline.rate\",\n            \"Fixture throughput\",\n            SparklineState::Ready(SparklineReading::new(\n                points, \"82 req/s\", \"20 req/s\", \"82 req/s\",\n            )),\n        ))\n        .child(caption(\n            &theme,\n            \"a reading that is no longer verified draws quieter, and its latest \\\n             sample is a ring rather than a mark\",\n        ))\n        .child(Sparkline::new(\n            \"scene.sparkline.stale\",\n            \"Fixture queue depth\",\n            SparklineState::Stale {\n                reading: SparklineReading::new(queue, \"34 jobs\", \"8 jobs\", \"41 jobs\"),\n                reason: \"The latest sample is unavailable; the verified reading remains.\".into(),\n            },\n        ))\n        .child(caption(\n            &theme,\n            \"a series the caller has already spent a colour on\",\n        ))\n        .child(\n            Sparkline::new(\n                \"scene.sparkline.tinted\",\n                \"Fixture tokens\",\n                SparklineState::Ready(SparklineReading::new(points, \"1.2k\", \"0.4k\", \"1.4k\")),\n            )\n            .tint(identity_tint(&theme, \"agent.read\")),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "performance-hud",
      "capture": "cargo run -p xtask -- headless capture performance-hud",
      "kind": "exhibit",
      "subjects": [
        "PerformanceHud"
      ],
      "uses": [
        "PerformanceHud"
      ],
      "example": "fn performance_hud(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let summary = gpui::FrameTimingSummary {\n        sample_count: 8,\n        frames_per_second: 58.7,\n        frame_budget: Duration::from_micros(16_667),\n        mean_draw_duration: Duration::from_micros(8_425),\n        p95_draw_duration: Duration::from_micros(18_900),\n        over_budget_fraction: 0.125,\n        mean_invalidations: 1.4,\n        mean_dirty_to_draw_duration: Some(Duration::from_micros(10_600)),\n        mean_submission_duration: Duration::from_micros(1_200),\n        mean_dirty_to_submission_duration: Some(Duration::from_micros(11_800)),\n        mean_input_to_submission_duration: Some(Duration::from_micros(13_400)),\n        mean_input_events: 1.6,\n        draw_durations: [7_200, 7_800, 8_100, 7_600, 9_300, 18_900, 8_000, 8_500]\n            .map(Duration::from_micros)\n            .into(),\n        submission_durations: [900, 1_100, 1_000, 1_200, 1_300, 1_800, 1_100, 1_200]\n            .map(Duration::from_micros)\n            .into(),\n    };\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"The framework observes existing draws; the controlled HUD only presents the caller's latest summary\",\n        ))\n        .child(\n            PerformanceHud::new(\n                \"scene.performance.ready\",\n                PerformanceHudState::Ready(summary),\n            )\n            .expanded(true)\n            .on_expanded(|_, _, _| {}),\n        )\n        .child(\n            div()\n                .row()\n                .items_stretch()\n                .gap_token(&theme, Space::Md)\n                .child(\n                    div().flex_1().min_w_0().child(PerformanceHud::new(\n                        \"scene.performance.waiting\",\n                        PerformanceHudState::Waiting,\n                    )),\n                )\n                .child(\n                    div().flex_1().min_w_0().child(PerformanceHud::new(\n                        \"scene.performance.unavailable\",\n                        PerformanceHudState::Unavailable(\n                            \"Frame tracing is disabled by this host.\".into(),\n                        ),\n                    )),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "chart",
      "capture": "cargo run -p xtask -- headless capture chart",
      "kind": "exhibit",
      "subjects": [
        "AreaChart",
        "BarChart",
        "ChartLegend",
        "GaugeChart",
        "LineChart",
        "PieChart",
        "RadarChart",
        "ScatterChart",
        "StackedBarChart"
      ],
      "uses": [
        "AreaChart",
        "BarChart",
        "ChartLegend",
        "GaugeChart",
        "LineChart",
        "PieChart",
        "RadarChart",
        "ScatterChart",
        "StackedBarChart"
      ],
      "example": "fn chart(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let cpu = [\n        ChartPoint::new(\"00:00\", 0.0, 0.20, \"00:00\", \"20%\"),\n        ChartPoint::new(\"00:15\", 0.25, 0.45, \"00:15\", \"45%\"),\n        ChartPoint::new(\"00:30\", 0.5, 0.38, \"00:30\", \"38%\"),\n        ChartPoint::new(\"00:45\", 0.75, 0.70, \"00:45\", \"70%\"),\n        ChartPoint::new(\"01:00\", 1.0, 0.62, \"01:00\", \"62%\"),\n    ];\n    let memory = [\n        ChartPoint::new(\"00:00\", 0.0, 0.40, \"00:00\", \"40%\"),\n        ChartPoint::new(\"00:15\", 0.25, 0.42, \"00:15\", \"42%\"),\n        ChartPoint::new(\"00:30\", 0.5, 0.55, \"00:30\", \"55%\"),\n        ChartPoint::new(\"00:45\", 0.75, 0.58, \"00:45\", \"58%\"),\n        ChartPoint::new(\"01:00\", 1.0, 0.61, \"01:00\", \"61%\"),\n    ];\n    // Three columns rather than one tall stack. The family is eleven surfaces\n    // once truthful empty/stale states are included, and even two columns run\n    // the final plots below the fixed review frame.\n    let column = || {\n        div()\n            .column()\n            .flex_1()\n            .min_w_0()\n            .gap(px(theme.space(Space::Md)))\n    };\n    // The frame this is reviewed in is 920 wide. Every column flexes inside\n    // that width so the third one earns vertical room without escaping at the\n    // right edge.\n    stack(&theme)\n        .w(px(920.0))\n        .child(caption(\n            &theme,\n            \"host-owned series, host-owned axis wording, no invented scale\",\n        ))\n        .child(\n            div()\n                .row()\n                .items_start()\n                .w_full()\n                .gap(px(theme.space(Space::Lg)))\n                .child(\n                    column()\n                        .child(\n                            LineChart::new(\n                                \"scene.chart.ready\",\n                                \"Fixture load\",\n                                ChartState::Stale {\n                                    series: vec![\n                                        ChartSeries::new(\"cpu\", \"CPU\")\n                                            .points(cpu)\n                                            .tint(identity_tint(&theme, \"agent.read\")),\n                                        ChartSeries::new(\"memory\", \"Memory\")\n                                            .points(memory)\n                                            .tint(identity_tint(&theme, \"agent.shell\")),\n                                    ],\n                                    reason: \"Refresh failed; showing last verified sample\".into(),\n                                },\n                            )\n                            .area()\n                            .crosshair()\n                            .current(\"cpu\", \"00:45\")\n                            .on_current(|_, _, _| {})\n                            .axes(\n                                ChartAxes::default()\n                                    .x_label(\"Time\")\n                                    .y_label(\"Utilization\")\n                                    .x_ends(\"00:00\", \"01:00\")\n                                    .y_ends(\"0%\", \"100%\"),\n                            ),\n                        )\n                        .child(LineChart::new(\n                            \"scene.chart.empty\",\n                            \"Fixture load\",\n                            ChartState::Empty,\n                        ))\n                        .child(\n                            BarChart::new(\n                                \"scene.chart.bars\",\n                                \"Fixture share\",\n                                ChartState::Ready(vec![ChartSeries::new(\"share\", \"Share\").points(\n                                    [\n                                        ChartPoint::new(\"alpha\", 0.0, 0.35, \"Alpha\", \"35 jobs\"),\n                                        ChartPoint::new(\"beta\", 0.33, 0.70, \"Beta\", \"70 jobs\"),\n                                        ChartPoint::new(\"gamma\", 0.66, 0.45, \"Gamma\", \"45 jobs\"),\n                                        ChartPoint::new(\"delta\", 1.0, 0.90, \"Delta\", \"90 jobs\"),\n                                    ],\n                                )]),\n                            )\n                            .axes(ChartAxes::default().y_ends(\"0\", \"max\")),\n                        )\n                        .child(\n                            PieChart::new(\n                                \"scene.chart.pie\",\n                                \"Fixture share\",\n                                ChartState::Ready(vec![ChartSeries::new(\"share\", \"Share\").points(\n                                    [\n                                        ChartPoint::new(\"alpha\", 0.0, 0.25, \"Alpha\", \"25%\"),\n                                        ChartPoint::new(\"beta\", 0.25, 0.35, \"Beta\", \"35%\"),\n                                        ChartPoint::new(\"gamma\", 0.60, 0.20, \"Gamma\", \"20%\"),\n                                        ChartPoint::new(\"delta\", 0.80, 0.20, \"Delta\", \"20%\"),\n                                    ],\n                                )]),\n                            )\n                            .donut(),\n                        ),\n                )\n                .child(\n                    column()\n                        .child(\n                            ChartLegend::new(\n                                \"scene.chart.legend\",\n                                [\n                                    ChartSeries::new(\"cpu\", \"CPU\")\n                                        .tint(identity_tint(&theme, \"agent.read\")),\n                                    ChartSeries::new(\"memory\", \"Memory\")\n                                        .tint(identity_tint(&theme, \"agent.shell\")),\n                                ],\n                            )\n                            .on_toggle(|_, _, _, _| {}),\n                        )\n                        .child(\n                            AreaChart::new(\n                                \"scene.chart.area\",\n                                \"Fixture tokens\",\n                                ChartState::Ready(vec![\n                                    ChartSeries::new(\"tokens\", \"Tokens\")\n                                        .points([\n                                            ChartPoint::new(\"00:00\", 0.0, 0.20, \"00:00\", \"20%\"),\n                                            ChartPoint::new(\"00:15\", 0.25, 0.45, \"00:15\", \"45%\"),\n                                            ChartPoint::new(\"00:30\", 0.5, 0.38, \"00:30\", \"38%\"),\n                                            ChartPoint::new(\"00:45\", 0.75, 0.70, \"00:45\", \"70%\"),\n                                            ChartPoint::new(\"01:00\", 1.0, 0.62, \"01:00\", \"62%\"),\n                                        ])\n                                        .tint(identity_tint(&theme, \"agent.read\")),\n                                ]),\n                            )\n                            .axes(ChartAxes::default().y_ends(\"0\", \"max\"))\n                            .crosshair(),\n                        )\n                        .child(\n                            ScatterChart::new(\n                                \"scene.chart.scatter\",\n                                \"Fixture samples\",\n                                ChartState::Ready(vec![\n                                    ChartSeries::new(\"samples\", \"Samples\").points([\n                                        ChartPoint::new(\"a\", 0.15, 0.30, \"A\", \"30\").weight(0.2),\n                                        ChartPoint::new(\"b\", 0.40, 0.62, \"B\", \"62\").weight(0.6),\n                                        ChartPoint::new(\"c\", 0.72, 0.48, \"C\", \"48\").weight(0.35),\n                                        ChartPoint::new(\"d\", 0.88, 0.80, \"D\", \"80\").weight(0.9),\n                                    ]),\n                                ]),\n                            )\n                            .crosshair()\n                            .current(\"samples\", \"b\")\n                            .on_current(|_, _, _| {})\n                            .axes(ChartAxes::default().y_ends(\"0\", \"max\")),\n                        ),\n                )\n                .child(\n                    column()\n                        .child(\n                            StackedBarChart::new(\n                                \"scene.chart.stacked\",\n                                \"Fixture mix\",\n                                ChartState::Ready(vec![\n                                    ChartSeries::new(\"cpu\", \"CPU\")\n                                        .points([\n                                            ChartPoint::new(\"alpha\", 0.0, 0.30, \"Alpha\", \"30%\"),\n                                            ChartPoint::new(\"beta\", 0.5, 0.20, \"Beta\", \"20%\"),\n                                        ])\n                                        .tint(identity_tint(&theme, \"agent.read\")),\n                                    ChartSeries::new(\"memory\", \"Memory\")\n                                        .points([\n                                            ChartPoint::new(\"alpha\", 0.0, 0.25, \"Alpha\", \"25%\"),\n                                            ChartPoint::new(\"beta\", 0.5, 0.40, \"Beta\", \"40%\"),\n                                        ])\n                                        .tint(identity_tint(&theme, \"agent.shell\")),\n                                ]),\n                            )\n                            .axes(ChartAxes::default().y_ends(\"0\", \"max\")),\n                        )\n                        .child(RadarChart::new(\n                            \"scene.chart.radar\",\n                            \"Fixture profile\",\n                            ChartState::Ready(vec![ChartSeries::new(\"profile\", \"Profile\").points(\n                                [\n                                    ChartPoint::new(\"clarity\", 0.0, 0.80, \"Clarity\", \"80\"),\n                                    ChartPoint::new(\"speed\", 0.0, 0.55, \"Speed\", \"55\"),\n                                    ChartPoint::new(\"coverage\", 0.0, 0.70, \"Coverage\", \"70\"),\n                                    ChartPoint::new(\"cost\", 0.0, 0.40, \"Cost\", \"40\"),\n                                ],\n                            )]),\n                        ))\n                        .child(RadarChart::new(\n                            \"scene.chart.radar-empty\",\n                            \"Fixture profile\",\n                            ChartState::Empty,\n                        ))\n                        .child(GaugeChart::new(\n                            \"scene.chart.gauge\",\n                            \"Fixture occupancy\",\n                            ChartState::Ready(vec![\n                                ChartSeries::new(\"occupancy\", \"Occupancy\")\n                                    .points([ChartPoint::new(\"now\", 0.0, 0.72, \"Now\", \"72%\")]),\n                            ]),\n                        )),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "cartesian",
      "capture": "cargo run -p xtask -- headless capture cartesian",
      "kind": "exhibit",
      "subjects": [
        "CartesianChart"
      ],
      "uses": [
        "CartesianChart"
      ],
      "example": "fn cartesian(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let scale =\n        |domain| NumericScale::new(ScaleKind::Linear, domain).expect(\"finite fixture domain\");\n    let axis = |id: &str, label: &str, domain| ValueAxis {\n        id: id.to_string().into(),\n        label: label.to_string().into(),\n        scale: scale(domain),\n    };\n    let points = |values: &[Option<f64>]| {\n        [\n            (\"intake\", 0.),\n            (\"validation\", 1.),\n            (\"routing\", 2.),\n            (\"processing\", 3.),\n            (\"delivery\", 4.),\n        ]\n        .into_iter()\n        .zip(values)\n        .map(|((id, x), y)| RawPoint::new(id, ChartValue::Number(x), *y))\n        .collect::<Vec<_>>()\n    };\n    let mixed = CartesianChart::new(\n        \"scene.cartesian.mixed\",\n        \"Mixed units · error intervals\",\n        ChartScale::Numeric(scale([-0.5, 4.5])),\n        [\n            axis(\"count\", \"Requests\", [-20., 80.]),\n            axis(\"latency\", \"Latency (ms)\", [0., 400.]),\n        ],\n    )\n    .x_ticks(\n        [\n            (0., \"Intake\"),\n            (1., \"Validate\"),\n            (2., \"Route\"),\n            (3., \"Process\"),\n            (4., \"Deliver\"),\n        ]\n        .into_iter()\n        .map(|(value, label)| ChartTick {\n            value: ChartValue::Number(value),\n            label: label.into(),\n        }),\n    )\n    .expect(\"caller process ticks in domain\")\n    .series([\n        RawSeries::new(\"requests\", \"count\", SeriesMark::Bar).points(points(&[\n            Some(31.),\n            Some(-12.),\n            Some(64.),\n            Some(48.),\n            Some(23.),\n        ])),\n        RawSeries::new(\"latency\", \"latency\", SeriesMark::Line)\n            .curve(Curve::Monotone)\n            .points(points(&[\n                Some(80.),\n                Some(230.),\n                Some(160.),\n                Some(310.),\n                Some(280.),\n            ])),\n        RawSeries::new(\"observed\", \"count\", SeriesMark::Scatter).points([RawPoint::new(\n            \"audit\",\n            ChartValue::Number(2.2),\n            Some(55.),\n        )\n        .error([44., 69.])\n        .text(\"Audit\", \"55 verified\")]),\n    ])\n    .references([ChartReference {\n        id: \"capacity\".into(),\n        axis: \"count\".into(),\n        range: [60., 70.],\n        label: \"Capacity band\".into(),\n        color: None,\n    }])\n    .height(180.)\n    .selected(Some(ChartSelection::new(\"observed\", \"audit\")))\n    .tooltip(TooltipMode::Point);\n    let categories = CategoryScale::new([\"West district\", \"East district\", \"North district\"])\n        .expect(\"distinct fixture categories\");\n    let categorical =\n        |id: &str, values: [f64; 3], percent| {\n            RawSeries::new(id, \"amount\", SeriesMark::Bar)\n                .stack(if percent {\n                    Stack::Percent(\"group\".into())\n                } else {\n                    Stack::Absolute(\"group\".into())\n                })\n                .points(categories.categories().iter().zip(values).map(|(x, y)| {\n                    RawPoint::new(x.clone(), ChartValue::Category(x.clone()), Some(y))\n                }))\n        };\n    let stacks = CartesianChart::new(\n        \"scene.cartesian.stacks\",\n        \"Diverging stacks · independent sign totals\",\n        ChartScale::Category(categories.clone()),\n        [axis(\"amount\", \"Amount\", [-50., 100.])],\n    )\n    .series([\n        categorical(\"First\", [37., -23., 52.], false),\n        categorical(\"Second\", [21., -17., 33.], false),\n    ])\n    .height(180.);\n    let gaps = CartesianChart::new(\n        \"scene.cartesian.gaps\",\n        \"Missing is not zero · retained stale data\",\n        ChartScale::Numeric(scale([0., 4.])),\n        [axis(\"value\", \"Reading\", [-10., 50.])],\n    )\n    .series([\n        RawSeries::new(\"area\", \"value\", SeriesMark::Area)\n            .curve(Curve::StepAfter)\n            .points(points(&[Some(12.), Some(36.), None, Some(-6.), Some(21.)])),\n        RawSeries::new(\"line\", \"value\", SeriesMark::Line)\n            .curve(Curve::StepBefore)\n            .points(points(&[Some(5.), Some(20.), None, Some(13.), Some(30.)])),\n    ])\n    .stale(\"Fixture refresh refused\")\n    .height(150.);\n    let percent = CartesianChart::new(\n        \"scene.cartesian.percent\",\n        \"Percent stacks · exact raw readout\",\n        ChartScale::Category(categories.clone()),\n        [axis(\"amount\", \"Share (%)\", [-100., 100.])],\n    )\n    .series([\n        categorical(\"First\", [37., -23., 52.], true),\n        categorical(\"Second\", [21., -17., 33.], true),\n    ])\n    .height(180.)\n    .selected(Some(ChartSelection::new(\"First\", \"East district\")))\n    .tooltip(TooltipMode::SharedAxis);\n    stack(&theme).w(px(920.)).child(caption(&theme,\"Original fixtures · raw f64 data; shared coordinates, category identity and exact readouts\"))\n        .child(div().row().items_start().gap_token(&theme,Space::Lg).child(div().flex_1().min_w_0().child(mixed)).child(div().flex_1().min_w_0().child(stacks)))\n        .child(div().row().items_start().gap_token(&theme,Space::Lg).child(div().flex_1().min_w_0().child(gaps)).child(div().flex_1().min_w_0().child(percent)))\n        .into_any_element()\n}"
    },
    {
      "name": "cartesian-linked",
      "capture": "cargo run -p xtask -- headless capture cartesian-linked",
      "kind": "exhibit",
      "subjects": [
        "CartesianChart"
      ],
      "uses": [
        "CartesianChart"
      ],
      "example": "fn cartesian_linked(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::display::chart::cartesian::{CartesianEvent, CartesianRange};\n    use crate::interaction::range::RangeEvent;\n    #[derive(Default)]\n    struct Linked {\n        scale: Option<NumericScale>,\n        selected: Option<ChartSelection>,\n        hovered: Option<ChartSelection>,\n        hidden: Vec<SharedString>,\n        range: Option<[f64; 2]>,\n        refuse: bool,\n    }\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<Linked>(\n        &\"scene.cartesian.linked.host\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let initial = NumericScale::new(ScaleKind::Time, [1_700_000_000_000., 1_700_000_600_000.])\n        .expect(\"finite fixture time domain\");\n    let current = state.borrow();\n    let x = current.scale.unwrap_or(initial);\n    let mut charts = Vec::new();\n    for (id, width, mark) in [\n        (\"overview\", 600., SeriesMark::Line),\n        (\"detail\", 280., SeriesMark::Range),\n    ] {\n        let report = state.clone();\n        let samples = [\n            (1_700_000_060_000_u64, 12.),\n            (1_700_000_180_000, 43.),\n            (1_700_000_300_000, 29.),\n            (1_700_000_420_000, 67.),\n            (1_700_000_540_000, 51.),\n        ]\n        .into_iter()\n        .map(|(timestamp, y)| {\n            let p = RawPoint::new(\n                format!(\"reading-{timestamp}\"),\n                ChartValue::Number(timestamp as f64),\n                Some(y),\n            );\n            if mark == SeriesMark::Range {\n                p.baseline(y - 17.).error([y - 23., y + 9.])\n            } else {\n                p\n            }\n        });\n        charts.push(\n            div().w(px(width)).child(\n                CartesianChart::new(\n                    format!(\"scene.linked.{id}\"),\n                    id,\n                    ChartScale::Numeric(x),\n                    [ValueAxis {\n                        id: \"y\".into(),\n                        label: \"Reading units\".into(),\n                        scale: NumericScale::new(ScaleKind::Linear, [-20., 100.])\n                            .expect(\"finite fixture domain\"),\n                    }],\n                )\n                .series([RawSeries::new(\"readings\", \"y\", mark)\n                    .points(samples)\n                    .curve(Curve::Monotone)])\n                .selected(current.selected.clone())\n                .hovered(current.hovered.clone())\n                .hidden(current.hidden.clone())\n                .range(CartesianRange::new(\n                    initial,\n                    current.range,\n                    \"Selected interval\",\n                ))\n                .height(210.)\n                .format_ticks(|axis, v| {\n                    if axis == \"x\" {\n                        format!(\"{:.0} s\", (v - 1_700_000_000_000.) / 1000.).into()\n                    } else {\n                        v.to_string().into()\n                    }\n                })\n                .on_event(move |event, window, _| {\n                    let mut state = report.borrow_mut();\n                    match event {\n                        CartesianEvent::Hover(value) => state.hovered = value,\n                        CartesianEvent::Select(value) => state.selected = value,\n                        CartesianEvent::Viewport(scale) => state.scale = Some(scale),\n                        CartesianEvent::Visibility { series, visible } => {\n                            state.hidden.retain(|id| id != &series);\n                            if !visible {\n                                state.hidden.push(series);\n                            }\n                        }\n                        CartesianEvent::Brush([ChartValue::Number(a), ChartValue::Number(b)]) => {\n                            state.scale =\n                                NumericScale::new(ScaleKind::Time, [a.min(b), a.max(b)]).ok();\n                        }\n                        CartesianEvent::Range(\n                            RangeEvent::Update { value, .. } | RangeEvent::Commit { value, .. },\n                        ) if !state.refuse => {\n                            state.range = Some(value);\n                            if value[0] < value[1] {\n                                state.scale = NumericScale::new(ScaleKind::Time, value).ok();\n                            }\n                        }\n                        CartesianEvent::Reset => {\n                            state.scale = None;\n                            state.range = None;\n                        }\n                        _ => {}\n                    }\n                    window.refresh();\n                }),\n            ),\n        );\n    }\n    let refused = current.refuse;\n    drop(current);\n    let acceptance = state.clone();\n    stack(&theme).w(px(920.)).child(caption(&theme,\"Linked caller-owned time viewport · drag to pan, Shift-drag brush, wheel zoom; arrows select, Home resets\"))\n        .child(Button::new(\"scene.linked.acceptance\").label(if refused { \"Host refuses range proposals\" } else { \"Host accepts range proposals\" }).secondary().on_click(move |window, _| {let mut state = acceptance.borrow_mut(); state.refuse = !state.refuse; window.refresh();}))\n        .child(div().row().items_start().gap_token(&theme,Space::Lg).children(charts)).into_any_element()\n}\n\npub(super) fn cartesian_dense(window: &mut Window, cx: &mut App) -> AnyElement {\n    #[derive(Default)]\n    struct Readings {\n        series: Option<Rc<Vec<RawSeries>>>,\n        selected: Option<ChartSelection>,\n    }\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<Readings>(\n        &\"scene.cartesian.dense-input\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let mut state_value = state.borrow_mut();\n    if state_value.series.is_none() {\n        state_value.selected = Some(ChartSelection::new(\"signal\", \"time-620000ms\"));\n    }\n    let series = state_value\n        .series\n        .get_or_insert_with(|| {\n            Rc::new(vec![\n                RawSeries::new(\"signal\", \"value\", SeriesMark::Area).points((0..6000).map(\n                    |sample| {\n                        let time = sample as f64 * 0.5;\n                        let value = if (450.0..550.0).contains(&time) {\n                            None\n                        } else {\n                            Some(if time == 620. {\n                                73.125\n                            } else if time == 1800. {\n                                -29.\n                            } else {\n                                5. + (time / 90.).sin() * 9.\n                            })\n                        };\n                        RawPoint::new(\n                            format!(\"time-{}ms\", (time * 1000.) as u64),\n                            ChartValue::Number(time),\n                            value,\n                        )\n                        .text(\n                            format!(\"t={time}\"),\n                            value.map(|v| format!(\"{v:.3} units\")).unwrap_or_default(),\n                        )\n                    },\n                )),\n            ])\n        })\n        .clone();\n    let selected = state_value.selected.clone();\n    drop(state_value);\n    let scale =\n        |domain| NumericScale::new(ScaleKind::Linear, domain).expect(\"finite dense fixture domain\");\n    let mut charts = Vec::new();\n    for (name, label, width, sampling) in [\n        (\n            \"exact\",\n            \"Exact path · 6,000 raw observations\",\n            550.,\n            PathSampling::Exact,\n        ),\n        (\n            \"sampled\",\n            \"Pixel extrema · same raw identities\",\n            290.,\n            PathSampling::MinMax,\n        ),\n    ] {\n        let report = state.clone();\n        charts.push(\n            div().w(px(width)).min_w_0().child(\n                CartesianChart::new(\n                    format!(\"scene.cartesian.dense.{name}\"),\n                    label,\n                    ChartScale::Numeric(scale([0., 2999.5])),\n                    [ValueAxis {\n                        id: \"value\".into(),\n                        label: \"Units\".into(),\n                        scale: scale([-40., 85.]),\n                    }],\n                )\n                .shared_series(series.clone())\n                .animate(false)\n                .sampling(sampling)\n                .height(220.)\n                .selected(selected.clone())\n                .on_event(move |event, window, _| {\n                    if let CartesianEvent::Select(value) = event {\n                        report.borrow_mut().selected = value;\n                        window.refresh();\n                    }\n                }),\n            ),\n        );\n    }\n    stack(&theme).w(px(920.))\n        .child(caption(&theme, \"Original fixture · path reduction preserves positive/negative spikes and missing runs; selection and exact values remain caller-owned\"))\n        .child(div().row().items_start().gap_token(&theme, Space::Lg).children(charts))\n        .into_any_element()\n}\n\n//! Arrangements, not exhibits.\n//!\n//! Each of these is built the way a product would build it, and is kept\n//! because components interact in ways none of them shows alone. None of\n//! them is anybody's coverage: every component they draw is reviewed in\n//! its own family.\n\nuse super::support::*;\n\n/// The same vocabulary an interface uses everywhere, rendered right to left.\n///\n/// The point of capturing this is that support for another reading direction\n/// is a claim about pixels, and a claim about pixels is only checkable in a\n/// picture. Everything here is a component that already existed; nothing was\n/// drawn specially for the scene. What should have moved: the trail runs from\n/// the right, the tree indents from the right and its shut chevrons point\n/// left, the accordion header reads from the right, and the magnifier's\n/// handle changed corners. What should not have moved: the checkmark, the\n/// gear, and the downward chevron, because none of them mean \"forward\".\npub(super) 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            Card::new()\n                .id(\"scene.rtl.mixed\")\n                // A card holding prose rather than rows has to ask for its\n                // interior padding; without it the lines sit on the card's own\n                // edge. Reading right to left is what made that visible here —\n                // the run ends where the card ends, so the last letter of\n                // \"الإصدار\" stood outside the rounded corner — but the card was\n                // unpadded in both directions and a left-to-right line would\n                // have been against the other edge just as hard.\n                .padded(true)\n                .child(\n                    crate::foundation::text(\n                        &theme,\n                        TypeScale::Body,\n                        \"الإصدار v2.4 — build 17 — גרסה יציבה\",\n                    )\n                    .text_start(direction),\n                )\n                .child(\n                    crate::foundation::text(\n                        &theme,\n                        TypeScale::Caption,\n                        \"المسار /workspace/run-4821، 64% مكتمل\",\n                    )\n                    .text_start(direction)\n                    .text_tone(&theme, TextTone::Muted),\n                ),\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(crate::foundation::text(\n                                        &theme,\n                                        TypeScale::Body,\n                                        \"Requests go out over the system proxy.\",\n                                    )),\n                            )\n                            .section(\n                                AccordionSection::new(\"storage\", \"Storage\")\n                                    .description(\"Where verified results are kept\"),\n                            ),\n                    ),\n                ),\n        )\n        .child(\n            JsonView::new(\n                \"scene.rtl.json\",\n                JsonValue::object([\n                    (\"الحالة\", JsonValue::string(\"جاهز build-17\")),\n                    (\"גרסה\", JsonValue::string(\"v2.4 مستقرة\")),\n                ]),\n            )\n            .root_label(\"تفاصيل التشغيل\")\n            .selected(\"الحالة\")\n            .on_select(|_, _, _| {}),\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}\n\n/// The order the reorder scene is currently showing.\n///\n/// A still frame cannot show a slide, so the capture is the settled list and\n/// the button is what a reviewer presses to watch a row travel.\n#[derive(Debug)]\npub(super) struct SceneQueue {\n    steps: Vec<(&'static str, &'static str)>,\n}\n\nimpl Global for SceneQueue {}\n\npub(super) 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(), window, cx);\n        // The position is what this scene is about, so it leads the row in a\n        // column of its own rather than trailing as a badge: a number that\n        // moves is only readable against the numbers above and below it.\n        let position = div()\n            .flex_none()\n            .size(px(theme\n                .control\n                .get(gpui_kit_theme::ControlSize::Xs)\n                .height))\n            .flex()\n            .items_center()\n            .justify_center()\n            .radius(&theme, Radius::Small)\n            .well(&theme)\n            .mono(&theme)\n            .type_scale(&theme, TypeScale::Caption)\n            .text_color(theme.colors.text)\n            .child(format!(\"{}\", index + 1));\n        queue = queue.child(\n            ListRow::new()\n                .id(ident)\n                .leading(position)\n                .child(div().flex_1().child(*label))\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            crate::foundation::text(\n                &theme,\n                TypeScale::Body,\n                \"Rows land in their new slot at once and slide into it.\",\n            )\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}\n\n/// Which way every state in the state-transition scene is currently pointing.\n///\n/// One flag drives all of them, so a reviewer flips the whole row at once and\n/// watches a check draw, a knob slide, an indicator travel and a section open\n/// on the same frame.\n#[derive(Debug)]\npub(super) struct SceneStates {\n    forward: bool,\n}\n\nimpl Global for SceneStates {}\n\npub(super) 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(crate::foundation::text(&theme, TypeScale::Body, \"Results are kept in the workspace for 30 days.\")),\n                ),\n        )\n        .child(crate::foundation::text(&theme, TypeScale::Body, \"Every state settles within a fifth of a second; the values are published the moment they change.\").text_tone(&theme, TextTone::Muted))\n        .into_any_element()\n}\n\n//! Documents, code, and streams a reader reads.\n\nuse super::support::*;\n#[cfg(all(feature = \"terminal\", not(target_family = \"wasm\")))]\nuse crate::content::{CellSide, Emulator, GridSnapshot, SelectionKind, Terminal, TerminalState};\n\n/// The complete shell contract: every state remains visibly distinct, and\n/// the narrow panels prove long addresses and page content stay clipped to\n/// the caller-owned viewport.\npub(super) fn browser_panel(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(\n            // One size class for every panel: a difference between two tiles\n            // here is a difference in what the panel shows, never in the frame\n            // it was handed.\n            row(&theme)\n                .items_start()\n                .child(\n                    div().w(px(272.0)).h(px(200.0)).child(\n                        BrowserPanel::new(\"scene.browser.loading\")\n                            .url(\"https://docs.example.com/a/long/path/that-must-stay-inside-the-address-well\")\n                            .state(ViewportState::Loading)\n                            .on_reload(|_, _| {}),\n                    ),\n                )\n                .child(\n                    div().w(px(272.0)).h(px(200.0)).child(\n                        BrowserPanel::new(\"scene.browser.empty\")\n                            .url(\"https://docs.example.com/empty\")\n                            .state(ViewportState::Empty)\n                            .on_back(|_, _| {})\n                            .on_reload(|_, _| {}),\n                    ),\n                )\n                .child(\n                    div().w(px(272.0)).h(px(200.0)).child(\n                        BrowserPanel::new(\"scene.browser.unavailable\")\n                            .url(\"https://internal.example.com/admin\")\n                            .state(ViewportState::Unavailable(\n                                \"The workspace policy does not allow this host.\".into(),\n                            ))\n                            .on_reload(|_, _| {}),\n                    ),\n                ),\n        )\n        .child(\n            row(&theme)\n                .items_start()\n                .child(\n                    div().w(px(272.0)).h(px(200.0)).child(\n                        BrowserPanel::new(\"scene.browser.error\")\n                            .url(\"https://status.example.com/incidents/current\")\n                            .state(ViewportState::Error(\n                                \"The host could not resolve this address.\".into(),\n                            ))\n                            .on_back(|_, _| {})\n                            .on_reload(|_, _| {}),\n                    ),\n                )\n                .child(\n                    div().w(px(272.0)).h(px(200.0)).child(\n                        BrowserPanel::new(\"scene.browser.ready\")\n                            .url(\"https://docs.example.com/ready\")\n                            .state(ViewportState::Ready)\n                            .viewport(\n                                div()\n                                    .size_full()\n                                    .p_token(&theme, Space::Md)\n                                    .child(crate::foundation::text(\n                                        &theme,\n                                        TypeScale::Subtitle,\n                                        \"Host-owned page surface\",\n                                    ))\n                                    .child(\n                                        div()\n                                            .mt_token(&theme, Space::Sm)\n                                            .child(crate::foundation::text(&theme, TypeScale::Body, \"Long page content remains clipped by the BrowserPanel viewport even when it cannot wrap naturally.\").text_tone(&theme, TextTone::Muted)),\n                                    ),\n                            )\n                            .on_back(|_, _| {})\n                            .on_forward(|_, _| {})\n                            .on_reload(|_, _| {}),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) fn log_stream(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let entries = [\n        LogEntry::new(\"boot\", \"Fixture worker entered the queue\")\n            .timestamp(\"09:41:02\")\n            .level(\"INFO\", Tone::Info)\n            .source(\"scheduler\"),\n        LogEntry::new(\"claim\", \"Fixture worker claimed run demo-42\")\n            .timestamp(\"09:41:03\")\n            .level(\"INFO\", Tone::Info)\n            .source(\"worker\")\n            .search_hits(std::iter::once(23..26))\n            .current_hit(0),\n        LogEntry::new(\"cache\", \"Fixture cache was not warm\")\n            .timestamp(\"09:41:04\")\n            .level(\"WARN\", Tone::Warning)\n            .source(\"cache\"),\n        LogEntry::new(\"ansi\", \"\\u{1b}[31mfailed\\u{1b}[0m after retry\")\n            .timestamp(\"09:41:04\")\n            .level(\"ERR\", Tone::Danger)\n            .source(\"worker\"),\n        LogEntry::new(\"retry\", \"Fixture request completed after one retry\")\n            .timestamp(\"09:41:05\")\n            .level(\"INFO\", Tone::Info)\n            .source(\"worker\"),\n        LogEntry::new(\"finish\", \"Fixture run demo-42 completed\")\n            .timestamp(\"09:41:06\")\n            .level(\"DONE\", Tone::Success)\n            .source(\"scheduler\")\n            .search_hits(std::iter::once(12..19)),\n    ];\n    stack(&theme)\n        .w(px(780.0))\n        .child(caption(\n            &theme,\n            \"fixed virtual rows; metadata and search ranges are caller inputs\",\n        ))\n        .child(\n            LogStream::new(\"scene.log\", entries)\n                .ansi(true)\n                .state(LogStreamState::Stale(\n                    \"The latest refresh did not complete; verified entries remain.\".into(),\n                ))\n                .visible_rows(5)\n                .selected(\"retry\")\n                .on_select(|_, _, _| {})\n                .on_copy(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) fn scene_diff() -> Vec<DiffFile> {\n    vec![DiffFile::new(\n        \"report\",\n        \"src/report.rs\",\n        [DiffHunk::new(\n            \"summary\",\n            \"@@ -40,3 +40,4 @@ fn report\",\n            [\n                DiffLine::new(\"signature\", \"fn report() -> Outcome {\")\n                    .old_number(40)\n                    .new_number(40)\n                    .spans([CodeSpan {\n                        range: 0..2,\n                        role: SyntaxColor::Keyword,\n                    }]),\n                DiffLine::paired(\"cache\", \"    old_cache.read()\", \"    verified_cache.read()\")\n                    .old_number(41)\n                    .new_number(41)\n                    .old_spans({\n                        let (old, _) =\n                            word_spans(\"    old_cache.read()\", \"    verified_cache.read()\");\n                        old\n                    })\n                    .new_spans({\n                        let (_, new) =\n                            word_spans(\"    old_cache.read()\", \"    verified_cache.read()\");\n                        new\n                    }),\n                DiffLine::added(\"audit\", \"    audit.record()\").new_number(42),\n                DiffLine::new(\"close\", \"}\").old_number(42).new_number(43),\n            ],\n        )],\n    )]\n}\n\npub(super) fn diff_view(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(840.0))\n        .child(caption(\n            &theme,\n            \"the same caller-owned rows arranged as unified and split\",\n        ))\n        .child(\n            div()\n                .column()\n                .items_start()\n                .gap_token(&theme, Space::Md)\n                .child(\n                    div().w(px(840.0)).child(\n                        DiffView::new(\"scene.diff.unified\", scene_diff())\n                            .visible_rows(7)\n                            .on_event(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    div().w(px(840.0)).child(\n                        DiffView::new(\"scene.diff.split\", scene_diff())\n                            .presentation(DiffPresentation::Split)\n                            .visible_rows(6)\n                            .on_event(|_, _, _| {}),\n                    ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"a review of several files: what happened to each file said above \\\n             its lines, two folded behind headers that say what they hold, and \\\n             the hunk the reader stepped to marked and put on screen — as tall \\\n             as the frame it was given rather than a number of rows\",\n        ))\n        .child(\n            // Given a height rather than a row count, the way a pane gives one.\n            // Kept short enough that the wrapping example below still finishes\n            // inside the frame, but tall enough to show the next file header:\n            // a scene whose last words are cut off is the defect its own\n            // caption is about.\n            div().w(px(840.0)).h(px(232.0)).child(\n                DiffView::shared(\"scene.diff.review\", std::sync::Arc::new(scene_review()))\n                    .language(\"rust\")\n                    .fills()\n                    .cursor(DiffCursor::Hunk {\n                        file_id: \"report\".into(),\n                        hunk_id: \"summary\".into(),\n                    })\n                    .on_event(|_, _, _| {}),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"the same rows measured rather than slotted, so a line longer than \\\n             the frame wraps instead of being cut off\",\n        ))\n        .child(\n            // Every example in this scene is the same width, so a difference\n            // between two of them is about the diff and not about the frame.\n            div().w(px(840.0)).child(\n                DiffView::new(\"scene.diff.wrapping\", scene_long_line())\n                    .wrapping(true)\n                    // Room for both lines *after* they wrap. A budget counted\n                    // in unwrapped rows cuts the last line in half, which is\n                    // the one thing this example exists to show does not happen.\n                    .visible_rows(6)\n                    .on_event(|_, _, _| {}),\n            ),\n        )\n        .into_any_element()\n}\n\n/// Three files, two of them folded: the shape the top of a real review has.\nfn scene_review() -> Vec<DiffFile> {\n    let mut files = scene_diff();\n    files[0] = files[0].clone().notes([DiffNote::Mode {\n        to: \"100755\".into(),\n    }]);\n    files.push(\n        DiffFile::new(\"logo\", \"assets/logo.png\", []).notes([DiffNote::Added, DiffNote::Binary]),\n    );\n    files.push(\n        DiffFile::new(\n            \"adapter\",\n            \"src/adapter.rs\",\n            [DiffHunk::new(\n                \"open\",\n                \"@@ -12,2 +12,3 @@ fn open\",\n                [\n                    DiffLine::added(\"guard\", \"    let held = registry.lock();\").new_number(12),\n                    DiffLine::removed(\"stale\", \"    let held = registry.take();\").old_number(12),\n                ],\n            )],\n        )\n        .folded(true),\n    );\n    files.push(\n        DiffFile::new(\n            \"notes\",\n            \"docs/notes.md\",\n            [DiffHunk::new(\n                \"intro\",\n                \"@@ -1,1 +1,1 @@\",\n                [DiffLine::added(\"line\", \"The cache is verified now.\").new_number(1)],\n            )],\n        )\n        .language(\"markdown\")\n        .folded(true),\n    );\n    files\n}\n\n/// One line far wider than the frame it is drawn in, which is the case fixed\n/// rows cannot show at all.\nfn scene_long_line() -> Vec<DiffFile> {\n    vec![DiffFile::new(\n        \"config\",\n        \"config/build.json\",\n        [DiffHunk::new(\n            \"one\",\n            \"@@ -1,1 +1,1 @@\",\n            [\n                DiffLine::added(\n                    \"profile\",\n                    \"{\\\"profile\\\":\\\"release\\\",\\\"debug\\\":false,\\\"incremental\\\":false,\\\"lto\\\":\\\"thin\\\",\\\"codegen-units\\\":1,\\\"panic\\\":\\\"abort\\\"}\",\n                )\n                .new_number(1),\n                DiffLine::paired(\n                    \"targets\",\n                    \"{\\\"targets\\\":[\\\"macos-arm64\\\",\\\"macos-x86\\\",\\\"windows-x86\\\",\\\"windows-arm64\\\"],\\\"strip\\\":false,\\\"sign\\\":\\\"developer-id\\\"}\",\n                    \"{\\\"targets\\\":[\\\"macos-arm64\\\",\\\"macos-x86\\\",\\\"windows-x86\\\",\\\"windows-arm64\\\",\\\"linux-arm64\\\"],\\\"strip\\\":true,\\\"sign\\\":\\\"developer-id\\\"}\",\n                )\n                .old_number(1)\n                .new_number(2),\n            ],\n        )],\n    )\n    .language(\"json\")]\n}\n\npub(super) 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, and they\n    // outrank what the scanner would have found for the same line.\n    let lines = [\n        CodeLine::new(40, \"fn report(&self) -> Outcome {\").spans([CodeSpan {\n            range: 0..2,\n            role: SyntaxColor::Keyword,\n        }]),\n        CodeLine::new(41, \"    let verified = self.check();\")\n            .spans([CodeSpan {\n                range: 4..7,\n                role: SyntaxColor::Keyword,\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        .child(caption(\n            &theme,\n            \"and where the caller says only what the language is, the four classes it can find\",\n        ))\n        .child(\n            CodeView::new(\n                \"scene.code.scanned\",\n                [\n                    CodeLine::new(1, \"def summarize(runs):  # every class in one line\"),\n                    CodeLine::new(2, \"    total = 0\"),\n                    CodeLine::new(3, \"    for run in runs:\"),\n                    CodeLine::new(4, \"        if run.status == \\\"passed\\\":\"),\n                    CodeLine::new(5, \"            total += 1\"),\n                    CodeLine::new(6, \"    return total\"),\n                ],\n            )\n            .language(\"python\"),\n        )\n        .child(caption(\n            &theme,\n            \"a language with no table is shown and left plain, never guessed at\",\n        ))\n        .child(\n            CodeView::new(\n                \"scene.code.unknown\",\n                [\n                    CodeLine::new(1, \"REPORT SECTION.\"),\n                    CodeLine::new(2, \"    MOVE 0 TO TOTAL.\"),\n                ],\n            )\n            .language(\"cobol\"),\n        )\n        .into_any_element()\n}\n\n/// A document with one of every block kind in it, including a tag nobody ran.\npub(super) const SCENE_DOCUMENT: &str = r#\"# Release notes\n\nThe build is **green** again, with *one* caveat and a ~~withdrawn~~ fix.\nDetails are in [the run log](https://example.test/runs/4821 \"the failing run\").\n\n## What changed\n\n- Retries are bounded\n  - and the bound is stated\n- Refusals keep their reason\n\n1. Verify the workspace\n2. Publish the artifacts\n\n- [x] Bounded retries\n- [ ] Bounded backoff\n\n> A refused request is displayed as a refusal.\n\n```rust\nfn main() {\n    println!(\"still green\");\n}\n```\n\n```yaml\nrelease:\n  state: ready\n  retries: 3\n```\n\n| Stage | Result |\n|:------|-------:|\n| Build | passed |\n| Test  | passed |\n\n<div onclick=\"steal()\">This was written as HTML.</div>\n\n![The run graph](runs/graph.png \"yesterday's run\")\n\n---\n\nEverything below this line is what truncation leaves out.\"#;\n\npub(super) fn markdown(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let document = stack(&theme)\n        .w(px(640.0))\n        .child(Markdown::new(\"scene.markdown.document\", SCENE_DOCUMENT).on_event(|_, _, _| {}))\n        .child(\n            Divider::new()\n                .id(\"scene.markdown.flat-rule\")\n                .label(\"The same fence in flat presentation\"),\n        )\n        .child(\n            Markdown::new(\n                \"scene.markdown.flat\",\n                \"```rust\\nfn main() { println!(\\\"a long line keeps its horizontal code overflow\\\"); }\\n```\",\n            )\n            .code_presentation(MarkdownCodePresentation::Flat)\n            .on_event(|_, _, _| {}),\n        )\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    div().row().child(document).child(\n        stack(&theme).w(px(272.0))\n            .child(caption(&theme, \"Unicode line breaks · CJK and Latin\"))\n            .child(Markdown::new(\n                \"scene.markdown.unicode-wrap\",\n                \"设计图通过后仍需运行、测量和批注；截图不能证明可玩。请检查「运行结果」（第12轮），然后比较 Hello world你好世界与 internationalization 2026-09。\",\n            ))\n            .child(caption(&theme, \"Frontmatter stays data\"))\n            .child(Markdown::new(\"scene.markdown.metadata\", \"---\\ntitle: Review fixture\\ntrusted: false\\n---\\n\\nMetadata is visible, never applied.\"))\n            .child(caption(&theme, \"Host block plugin · native rendering\"))\n            .child(Markdown::new(\"scene.markdown.plugin\", \"```notice\\nThis fixture uses a trusted native block renderer.\\n```\\n\\n```unknown\\nUnknown fences remain code.\\n```\")\n                .block_renderer(|ident, block, _, _, _| {\n                    if let crate::content::markdown::Block::Code { language, text } = block\n                        && language.as_deref() == Some(\"notice\") {\n                        Some(Callout::new(text.clone(), Tone::Info).id(ident.clone()).into_any_element())\n                    } else { None }\n                }))\n            // Hold worker states deterministically; the executor/coalescing\n            // tests exercise the actual transition into and out of them.\n            .child(caption(&theme, \"Background parsing · state fixtures\"))\n            .child(Markdown::new(\"scene.markdown.loading\", \"\").parsing(true))\n            .child(Markdown::new(\"scene.markdown.refreshing\", \"The **last verified text** stays visible while its replacement is parsed.\").parsing(true)),\n    )\n        .into_any_element()\n}\n\npub(super) fn agent_document(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(680.0))\n        .child(\n            AgentDocument::new(\"scene.agent-document\")\n                .block(\n                    AgentDocumentBlock::markdown(\n                        \"summary\",\n                        \"## Review complete\\n\\nThe run kept its **verified result** while the refresh failed.\",\n                    )\n                    .revision(3),\n                )\n                .block(\n                    AgentDocumentBlock::code(\"patch\", |_, _| {\n                        CodeView::from_text(\n                            \"scene.agent-document.patch\",\n                            \"pub fn bounded_retry(attempt: usize) -> bool {\\n    attempt < 3\\n}\",\n                        )\n                        .language(\"rust\")\n                        .into_any_element()\n                    })\n                    .label(\"Proposed code\")\n                    .revision(2),\n                )\n                .block(\n                    AgentDocumentBlock::tool_call(\"verification\", |_, _| {\n                        ToolCall::new(\n                            \"scene.agent-document.tool\",\n                            ToolFamily::Shell,\n                            \"cargo test\",\n                        )\n                            .summary(\"-p gpui-box-kit\")\n                            .state(ToolCallState::Succeeded {\n                                output: ToolOutput::Silent,\n                            })\n                            .elapsed(\"1.4 s\")\n                            .into_any_element()\n                    })\n                    .revision(1),\n                )\n                .block(AgentDocumentBlock::notice(\n                    \"refresh\",\n                    \"The last refresh failed; the result above is the last verified value.\",\n                    Tone::Warning,\n                )),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.agent-document.long\")\n                .label(\"The same document, virtualized\"),\n        )\n        // A paragraph rather than a caption. At the caption step this ran the\n        // full width of the document immediately above the body text it\n        // introduces, so the sentence explaining what to look at was set\n        // smaller and fainter than everything it was explaining.\n        .child(\n            crate::foundation::text(\n                &theme,\n                TypeScale::Body,\n                \"a conversation that has been running all day: only the blocks on \\\n                 screen are built and laid out, and the ones above are still there. \\\n                 A long answer is drawn as a row per block of its own, so a token \\\n                 arriving in its last paragraph relays out that paragraph\",\n            )\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .child(\n            AgentDocument::new(\"scene.agent-thread\")\n                .virtualized(5)\n                .block(\n                    AgentDocumentBlock::markdown(\n                        \"answer\",\n                        \"**The answer.** It kept the verified result, and the run \\\n                         below says why.\\n\\n\\\n                         - the refresh failed\\n- the last verified value stands\\n\\n\\\n                         Nothing after that point was rewritten.\",\n                    )\n                    .revision(1),\n                )\n                .blocks((0..120).map(|turn| {\n                    AgentDocumentBlock::markdown(\n                        format!(\"turn-{turn:03}\"),\n                        format!(\n                            \"**Turn {turn}.** The run kept its verified result while the \\\n                             refresh failed, and the answer below says why.\"\n                        ),\n                    )\n                    .revision(turn as u64)\n                })),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.agent-document.rule\")\n                .label(\"Document states\"),\n        )\n        .child(\n            div()\n                .row_reading(cx.layout_direction())\n                .gap_token(&theme, Space::Lg)\n                .child(\n                    div().flex_1().child(\n                        AgentDocument::new(\"scene.agent-document.empty\")\n                            .state(AgentDocumentState::Empty(\"No results were returned.\".into())),\n                    ),\n                )\n                .child(\n                    div().flex_1().child(\n                        AgentDocument::new(\"scene.agent-document.unavailable\").state(\n                            AgentDocumentState::Unavailable(\n                                \"The host refused to provide this document.\".into(),\n                            ),\n                        ),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// The thread the conversation scene shows, one message per delivery state.\n///\n/// The colour each speaker is known by is the caller's: a host that has\n/// already spent a colour on a person passes that one, and this scene spends\n/// two steps of the categorical sequence the way a product would.\npub(super) fn scene_thread(theme: &Theme) -> Vec<Message> {\n    let asking = theme.colors.sequence.get(0);\n    let answering = theme.colors.sequence.get(1);\n    vec![\n        Message::new(\"msg-open\", \"Is the release still blocked?\")\n            .author(\"Ada\")\n            .tint(asking)\n            .time(\"09:14\")\n            .delivery(DeliveryState::Read),\n        Message::markdown(\n            \"msg-answer\",\n            \"It is not. The **retry bound** landed, so the last failure is gone.\",\n        )\n        .author(\"Grace\")\n        .tint(answering)\n        .time(\"09:15\")\n        .delivery(DeliveryState::Delivered)\n        // A reaction's label is the caller's, and this one is written in the\n        // bundled faces: the headless text system shapes from those alone, so\n        // an emoji would be recorded as the font's missing-glyph box and the\n        // baseline would hold a picture of a gap in a font rather than of a\n        // chip.\n        .reaction(Reaction::new(\"thumbs\", \"+1\", 2)),\n        Message::new(\"msg-log\", \"Attaching the run log.\")\n            .author(\"Grace\")\n            .tint(answering)\n            .time(\"09:15\")\n            .delivery(DeliveryState::Sent)\n            .attachment(Attachment::new(\"run-4821\", \"run-4821.log\").detail(\"12 KB\")),\n        Message::new(\"msg-queued\", \"Then I will publish the artifacts.\")\n            .author(\"Ada\")\n            .tint(asking)\n            .delivery(DeliveryState::Sending),\n        Message::new(\"msg-refused\", \"Publishing the artifacts now.\")\n            .author(\"Ada\")\n            .tint(asking)\n            .time(\"09:16\")\n            .failed(\"The workspace is frozen for the release.\"),\n        Message::markdown(\"msg-stream\", \"Checking the freeze window\")\n            .author(\"Assistant\")\n            .tint(answering)\n            .time(\"09:16\")\n            .streaming(true)\n            .delivery(DeliveryState::Sending),\n    ]\n}\n\npub(super) 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(&theme))\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(&theme))\n                .visible_rows(2)\n                .body_lines(2)\n                .on_retry(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\n/// An outline beside the surface it maps, at both lengths that matter: short\n/// enough for a mark per place, and long enough that the marks have to\n/// condense into even ranges.\n///\n/// Both are drawn because the whole design claim is that the footprint does\n/// not change between them.\npub(super) fn outline(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let mapped = |ident: &'static str, turns: usize| {\n        let rows = turns * 2;\n        div()\n            .flex()\n            // Stretched rather than given a height: the rail is as tall as the\n            // list it indexes, and the list is as tall as the rows it was\n            // asked for, so neither is cut through a line of text.\n            .items_stretch()\n            .gap(px(theme.space(Space::Sm)))\n            .child(\n                Outline::new(format!(\"{ident}.outline\"))\n                    .over(format!(\"{ident}.rows\"))\n                    .marks((0..turns).map(|turn| {\n                        Mark::new(format!(\"ask-{turn}\"), turn * 2, format!(\"Question {turn}\"))\n                            .detail(format!(\"The answer to question {turn} began here.\"))\n                    })),\n            )\n            .child(\n                div().w(px(440.0)).child(\n                    List::new(ident, rows, move |row, _, _| {\n                        let (who, what) = match row % 2 {\n                            0 => (\"Ada\", format!(\"Question {}\", row / 2)),\n                            _ => (\"Assistant\", format!(\"Answer {}\", row / 2)),\n                        };\n                        ListItem::new(format!(\"row-{row}\"), div().child(format!(\"{who}: {what}\")))\n                            .text(format!(\"{who}: {what}\"))\n                    })\n                    // Bounded, or the list draws every row it has and the\n                    // outline has no viewport to be an outline of. Slotted\n                    // rather than flowing, so the frame is a whole number of\n                    // rows and the last one on screen is a whole row.\n                    .visible_rows(6),\n                ),\n            )\n    };\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"five exchanges: a mark for each, and the one being read is brighter\",\n        ))\n        .child(mapped(\"scene.outline.short.rows\", 5))\n        .child(caption(\n            &theme,\n            \"eighty exchanges: the same footprint, each mark now standing for a range\",\n        ))\n        .child(mapped(\"scene.outline.long.rows\", 80))\n        .into_any_element()\n}\n\n/// The same thread drawn both ways, so the trade is visible rather than\n/// described: a slot leaves the long message's last lines out and says how\n/// many, and a message that grows to fit is whole.\npub(super) fn conversation_growing(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let asking = theme.colors.sequence.get(0);\n    let answering = theme.colors.sequence.get(1);\n    let long = move || {\n        vec![\n            Message::new(\"msg-ask\", \"What did the freeze window actually cover?\")\n                .author(\"Ada\")\n                .tint(asking)\n                .time(\"09:14\")\n                .delivery(DeliveryState::Read),\n            Message::new(\n                \"msg-long\",\n                \"Everything published after the tag.\\nThe artifacts, the changelog.\\nThe signed manifest.\\nThe release notes.\\nNothing before it moved.\",\n            )\n            .author(\"Grace\")\n            .tint(answering)\n            .time(\"09:15\")\n            .delivery(DeliveryState::Delivered),\n        ]\n    };\n    stack(&theme)\n        .w(px(560.0))\n        .child(\n            Divider::new()\n                .id(\"scene.growing.slotted.rule\")\n                .label(\"A slot, two lines of body\"),\n        )\n        .child(\n            MessageList::new(\"scene.growing.slotted\", long())\n                .body_lines(2)\n                .on_retry(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.growing.grown.rule\")\n                .label(\"As tall as what it says\"),\n        )\n        .child(\n            MessageList::new(\"scene.growing.grown\", long())\n                .grows_to_fit()\n                .on_retry(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\n/// A deterministic analytics image supplied through `ImageViewer`'s host slot.\n/// It is deliberately composed from theme roles instead of shipping a branded\n/// screenshot, but it carries enough information to review contain/cover as a\n/// media experience rather than as a placeholder experience.\nfn run_graph_picture(cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let bars = [42.0, 58.0, 51.0, 76.0, 68.0, 91.0, 82.0, 104.0];\n    div()\n        .size_full()\n        .column()\n        .bg(theme.colors.panel)\n        .child(\n            div()\n                .row()\n                .items_center()\n                .justify_between()\n                .px_token(&theme, Space::Md)\n                .py_token(&theme, Space::Sm)\n                .surface(&theme, Surface::Raised)\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Release throughput\",\n                ))\n                .child(\n                    crate::foundation::text(&theme, TypeScale::Caption, \"4.8k events / min\")\n                        .text_tone(&theme, TextTone::Muted),\n                ),\n        )\n        .child(\n            div()\n                .flex_1()\n                .min_h_0()\n                .column()\n                .px_token(&theme, Space::Md)\n                .pt(px(theme.space(Space::Sm)))\n                .child(\n                    div()\n                        .flex_1()\n                        .min_h_0()\n                        .row()\n                        .items_end()\n                        .gap_token(&theme, Space::Xs)\n                        .border_b(px(theme.borders.hairline))\n                        .border_color(theme.colors.divider.opacity(theme.opacity.muted))\n                        .children(bars.into_iter().enumerate().map(|(index, height)| {\n                            div()\n                                .flex_1()\n                                .h(px(height))\n                                .radius(&theme, Radius::Small)\n                                .bg(theme.colors.sequence.get(index))\n                        })),\n                )\n                .child(\n                    div()\n                        .row()\n                        .justify_between()\n                        .py_token(&theme, Space::Xs)\n                        .children([\"10:00\", \"10:15\", \"10:30\", \"10:45\"].map(|label| {\n                            crate::foundation::text(&theme, TypeScale::Caption, label)\n                                .text_tone(&theme, TextTone::Faint)\n                        })),\n                ),\n        )\n        .into_any_element()\n}\n\n/// A second host-owned image with no declared natural size. The viewer still\n/// has real content to frame; only its zoom percentage is unknowable.\nfn pasted_workflow_picture(cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let step = |icon: Icon, title: &'static str, detail: &'static str| {\n        div()\n            .column()\n            .items_center()\n            .gap_token(&theme, Space::Xs)\n            .w(px(104.0))\n            .p_token(&theme, Space::Sm)\n            .radius(&theme, Radius::Card)\n            .frame(&theme, Surface::Raised, Elevation::Raised)\n            .child(\n                gpui_kit_assets::icon(icon)\n                    .size(px(theme.control.md.icon_size))\n                    .text_color(theme.colors.text_muted),\n            )\n            .child(crate::foundation::text(&theme, TypeScale::Label, title))\n            .child(\n                crate::foundation::text(&theme, TypeScale::Caption, detail)\n                    .text_tone(&theme, TextTone::Faint),\n            )\n    };\n    div()\n        .size_full()\n        .flex()\n        .items_center()\n        .justify_center()\n        .gap_token(&theme, Space::Sm)\n        .bg(theme.colors.sunken)\n        .child(step(Icon::Document, \"Collect\", \"3 sources\"))\n        .child(\n            gpui_kit_assets::icon(Icon::ArrowRight)\n                .size(px(theme.control.sm.icon_size))\n                .text_color(theme.colors.text_faint),\n        )\n        .child(step(Icon::Tuning, \"Review\", \"2 checks\"))\n        .child(\n            gpui_kit_assets::icon(Icon::ArrowRight)\n                .size(px(theme.control.sm.icon_size))\n                .text_color(theme.colors.text_faint),\n        )\n        .child(step(Icon::Archive, \"Publish\", \"ready\"))\n        .into_any_element()\n}\n\npub(super) fn image_viewer(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<(FitMode, Option<SharedString>)>(\n        &\"scene.image.controlled\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let (fit, showing) = state.borrow().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(showing.unwrap_or_else(|| \"graph\".into()))\n                        .fit(fit)\n                        .control_size(gpui_kit_theme::ControlSize::Touch)\n                        .height(200.0)\n                        .image(|_, _, cx| Some(run_graph_picture(cx)))\n                        .on_event(move |event, window, _| {\n                            match event {\n                                ImageViewerEvent::FitChanged(fit) => state.borrow_mut().0 = *fit,\n                                ImageViewerEvent::Stepped { id } => state.borrow_mut().1 = Some(id.clone()),\n                                _ => return,\n                            }\n                            window.refresh();\n                        }),\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().row().items_start().gap(px(theme.spacing.lg)).child(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(pasted_workflow_picture(cx)))\n                .on_event(|_, _, _| {}),\n            )).child(div().w(px(396.0)).child(\n                ImageViewer::new(\"scene.image.zoom-refused\", [ImageFrame::new(\"graph\", \"Zoom retained by host\").natural(1600, 900)])\n                    .fit(FitMode::Zoom(0.5))\n                    .control_size(gpui_kit_theme::ControlSize::Touch)\n                    .height(200.0)\n                    .image(|_, _, cx| Some(pasted_workflow_picture(cx)))\n                    .on_event(|_, _, _| {}),\n            )),\n        )\n        .child(caption(&theme, \"Fixture: the run graph accepts zoom and stepping; Zoom retained by host refuses fit changes; the scan refuses image access.\"))\n        .into_any_element()\n}\n\npub(super) 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}\n\n/// Every state a session can be in, and a grid drawing the output a screenshot\n/// can actually check: the sixteen ANSI slots against their own background, an\n/// explicit cell background, bold and dim and underline and inverse, a\n/// selection wash over sixteen hues at once, and both colours a program picks\n/// by number.\n///\n/// The script is ASCII throughout, which is a property of the harness rather\n/// than of the component: the headless text system shapes from one bundled\n/// font with no fallback, so a box-drawing character or a CJK glyph captures\n/// as a missing-glyph box and the baseline would record the font's gap as the\n/// terminal's. Wide characters and the column pinning that carries them are\n/// held by the emulator's own tests, where the assertion is on cells rather\n/// than on pixels.\n///\n/// The emulator is rebuilt from a fixed byte script each frame, so the picture\n/// is a function of the bytes and the measured grid and of nothing else.\n#[cfg(all(feature = \"terminal\", not(target_family = \"wasm\")))]\npub(super) fn terminal(_window: &mut Window, cx: &mut App) -> AnyElement {\n    /// A session's worth of output, chosen so every branch of the painter has\n    /// something to paint.\n    const SESSION: &[u8] = concat!(\n        \"\\x1b[32m>\\x1b[0m cargo run -p xtask -- gate\\r\\n\",\n        \"\\x1b[1mCompiling\\x1b[0m gpui-box-kit v0.1.2\\r\\n\",\n        \"\\x1b[2m    dim text stays legible and stays dim\\x1b[0m\\r\\n\",\n        \"\\x1b[4munderlined\\x1b[0m \\x1b[7minverse\\x1b[0m \\x1b[44;97m on a background \\x1b[0m\\r\\n\",\n        \"\\x1b[30m0\\x1b[31m1\\x1b[32m2\\x1b[33m3\\x1b[34m4\\x1b[35m5\\x1b[36m6\\x1b[37m7\",\n        \"\\x1b[90m8\\x1b[91m9\\x1b[92ma\\x1b[93mb\\x1b[94mc\\x1b[95md\\x1b[96me\\x1b[97mf\\x1b[0m\\r\\n\",\n        \"\\x1b[38;5;208m256-colour cube\\x1b[0m and \\x1b[38;2;120;200;255mtruecolour\\x1b[0m\\r\\n\",\n        \"\\x1b[32m>\\x1b[0m \",\n    )\n    .as_bytes();\n\n    let theme = cx.theme().clone();\n    let panel = |ident: &'static str, state: TerminalState| {\n        div()\n            .w(px(400.0))\n            .h(px(180.0))\n            .child(Terminal::new(ident).state(state))\n    };\n\n    stack(&theme)\n        .child(\n            div().w(px(400.0)).h(px(180.0)).child(\n                Terminal::new(\"scene.terminal.ready\")\n                    .focused(true)\n                    .grid(|geometry, _| {\n                        let mut emulator = Emulator::new(geometry.cols, geometry.rows);\n                        emulator.feed(SESSION);\n                        // A selection over the middle of a coloured row, so the\n                        // achromatic wash is reviewable against sixteen hues at\n                        // once rather than against one.\n                        emulator.start_selection(\n                            SelectionKind::Drag,\n                            emulator.grid_point(4, 0),\n                            CellSide::Left,\n                        );\n                        emulator.update_selection(emulator.grid_point(4, 15), CellSide::Right);\n                        Some(GridSnapshot {\n                            lines: emulator.lines(),\n                            cursor: emulator.cursor(),\n                        })\n                    })\n                    .on_event(|_, _, _| {}),\n            ),\n        )\n        .child(\n            row(&theme)\n                .items_start()\n                .child(panel(\"scene.terminal.starting\", TerminalState::Loading))\n                .child(panel(\n                    \"scene.terminal.unavailable\",\n                    TerminalState::Unavailable(\"No shell is configured for this workspace.\".into()),\n                )),\n        )\n        .child(\n            div().w(px(400.0)).h(px(180.0)).child(\n                Terminal::new(\"scene.terminal.ended\")\n                    .state(TerminalState::Error(\"The process exited with status 130.\".into()))\n                    .grid(|geometry, _| {\n                        let mut emulator = Emulator::new(geometry.cols, geometry.rows);\n                        emulator.feed(b\"\\x1b[32m>\\x1b[0m tail -f build.log\\r\\n\\x1b[31merror\\x1b[0m: interrupted\\r\\n\");\n                        Some(GridSnapshot {\n                            lines: emulator.lines(),\n                            // Nothing is reading this grid any more, so there\n                            // is no insertion point in it: a caret drawn under\n                            // an exited process invites a keystroke that has\n                            // nowhere to go.\n                            cursor: None,\n                        })\n                    }),\n            ),\n        )\n        .into_any_element()\n}\n\n//! Things a pointer or a keyboard acts on directly.\n\nuse super::support::*;\n\nstruct TouchInputs {\n    fields: Vec<(&'static str, &'static str, gpui::AnyView)>,\n    _next: gpui::Subscription,\n}\nimpl Global for TouchInputs {}\n\nstruct TouchPickers {\n    select: Entity<Select>,\n    search: Entity<Combobox>,\n    multi: Entity<MultiSelect>,\n}\nimpl Global for TouchPickers {}\n\npub(super) fn touch_pickers(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::overlay::popover::PickerPresentation;\n    if !cx.has_global::<TouchPickers>() {\n        let options: Vec<_> = (1..=12)\n            .map(|id| {\n                SelectOption::new(format!(\"item-{id}\"), format!(\"Fixture choice {id}\"))\n                    .disabled(id == 3)\n            })\n            .collect();\n        let select = cx.new(|cx| {\n            Select::new(\"scene.touch.select\", window, cx)\n                .name(\"Choose one\")\n                .options(options.clone())\n                .selected(\"item-2\")\n                .clearable(true)\n                .control_size(ControlSize::Touch)\n                .presentation(PickerPresentation::Bottom)\n        });\n        let search = cx.new(|cx| {\n            Combobox::new(\"scene.touch.search\", window, cx)\n                .name(\"Search choices\")\n                .options(options.clone())\n                .control_size(ControlSize::Touch)\n                .presentation(PickerPresentation::Bottom)\n        });\n        let multi = cx.new(|cx| {\n            MultiSelect::new(\"scene.touch.multi\", window, cx)\n                .name(\"Choose several\")\n                .options(options)\n                .selected([\"item-2\", \"item-5\"])\n                .control_size(ControlSize::Touch)\n                .presentation(PickerPresentation::Bottom)\n        });\n        cx.set_global(TouchPickers {\n            select,\n            search,\n            multi,\n        });\n    }\n    let theme = cx.theme().clone();\n    let pickers = cx.global::<TouchPickers>();\n    stack(&theme)\n        .w(px(390.0))\n        .max_w_full()\n        .child(caption(\n            &theme,\n            \"Bottom picker fixtures · choices remain caller-owned\",\n        ))\n        .child(pickers.select.clone())\n        .child(pickers.search.clone())\n        .child(pickers.multi.clone())\n        .into_any_element()\n}\n\nstruct TouchPickerOpened;\nimpl Global for TouchPickerOpened {}\n\npub(super) fn touch_pickers_open(window: &mut Window, cx: &mut App) -> AnyElement {\n    let body = touch_pickers(window, cx);\n    if !cx.has_global::<TouchPickerOpened>() {\n        cx.global::<TouchPickers>()\n            .search\n            .clone()\n            .update(cx, |picker, cx| picker.open(cx));\n        cx.set_global(TouchPickerOpened);\n    }\n    body\n}\n\n#[cfg(test)]\nmod touch_tests {\n    use super::*;\n    use gpui_kit_testkit::harness::Harness;\n\n    #[gpui::test]\n    fn bottom_picker_last_option_survives_residual_ime_fixture(cx: &mut gpui::TestAppContext) {\n        let mut harness = Harness::new(cx, crate::install, touch_pickers_open);\n        harness\n            .context()\n            .simulate_resize(gpui::size(px(390.0), px(844.0)));\n        harness.context().simulate_insets(gpui::WindowInsets {\n            safe_area: gpui::Edges {\n                top: px(17.0),\n                right: px(11.0),\n                bottom: px(34.0),\n                left: px(7.0),\n            },\n            ime: gpui::Edges {\n                bottom: px(540.0),\n                ..Default::default()\n            },\n        });\n        harness.frame();\n        harness.advance(Duration::from_secs(1));\n        let events = std::rc::Rc::new(std::cell::RefCell::new(Vec::new()));\n        let reported = events.clone();\n        let _subscription = harness.update(|_, cx| {\n            let search = cx.global::<TouchPickers>().search.clone();\n            cx.subscribe(\n                &search,\n                move |_, event: &crate::controls::combobox::ComboboxEvent, _| {\n                    if let crate::controls::combobox::ComboboxEvent::Selected(id) = event {\n                        reported.borrow_mut().push(id.clone());\n                    }\n                },\n            )\n        });\n        harness.scroll(\"scene.touch.search.item-1\", 1200.0);\n        let last = harness\n            .node(\"scene.touch.search.item-12\")\n            .expect(\"last option\")\n            .bounds;\n        assert!(last.x >= 7.0 && last.x + last.width <= 379.0);\n        assert!(\n            last.y >= 17.0 && last.y + last.height <= 304.0,\n            \"last option must fit above residual IME: {last:?}\"\n        );\n        assert!(last.height >= 48.0);\n        harness.click(\"scene.touch.search.item-12\");\n        assert_eq!(\n            events.borrow().as_slice(),\n            &[gpui::SharedString::from(\"item-12\")]\n        );\n        assert_eq!(\n            harness\n                .node(\"scene.touch.search\")\n                .expect(\"search picker\")\n                .expanded,\n            Some(false)\n        );\n    }\n\n    #[gpui::test]\n    fn touch_form_next_and_disabled_semantics(cx: &mut gpui::TestAppContext) {\n        let mut harness = Harness::new(cx, crate::install, touch_inputs);\n        harness.click(\"scene.touch.email\");\n        harness.keystrokes(\"a enter\");\n        assert!(\n            harness\n                .node(\"scene.touch.password\")\n                .expect(\"password\")\n                .focused\n        );\n        assert!(\n            harness\n                .node(\"scene.touch.disabled\")\n                .expect(\"disabled field\")\n                .disabled\n        );\n        assert!(\n            harness\n                .node(\"scene.touch.invalid\")\n                .expect(\"invalid field\")\n                .invalid\n        );\n        let bounds = harness.node(\"scene.touch.email\").expect(\"email\").bounds;\n        assert!(bounds.height >= 48.0);\n        let reveal = harness\n            .node(\"scene.touch.password.reveal\")\n            .expect(\"reveal action\")\n            .bounds;\n        assert!(reveal.height >= 48.0 && reveal.width >= 48.0);\n    }\n\n    #[gpui::test]\n    fn bottom_picker_keeps_caller_selection_and_closes_on_escape(cx: &mut gpui::TestAppContext) {\n        let mut harness = Harness::new(cx, crate::install, touch_pickers);\n        harness.click(\"scene.touch.select\");\n        assert_eq!(\n            harness\n                .node(\"scene.touch.select.sheet\")\n                .expect(\"select sheet\")\n                .expanded,\n            Some(true)\n        );\n        harness.advance(Duration::from_secs(1));\n        let option = harness\n            .node(\"scene.touch.select.item-3\")\n            .expect(\"disabled option\");\n        assert!(option.disabled);\n        assert!(option.bounds.height >= 48.0);\n        harness.click(\"scene.touch.select.item-1\");\n        assert_eq!(\n            harness\n                .node(\"scene.touch.select\")\n                .expect(\"select trigger\")\n                .value\n                .as_deref(),\n            Some(\"Fixture choice 2\")\n        );\n        assert_eq!(\n            harness\n                .node(\"scene.touch.select.sheet\")\n                .expect(\"outgoing sheet\")\n                .expanded,\n            Some(false),\n            \"selection starts the outgoing modal exit\"\n        );\n        harness.advance(Duration::from_secs(1));\n        assert!(\n            harness.node(\"scene.touch.select.sheet\").is_none(),\n            \"outgoing drawer must finish exit\"\n        );\n        harness.click(\"scene.touch.search.query\");\n        harness.keystrokes(\"f\");\n        assert!(\n            harness\n                .node(\"scene.touch.search.query\")\n                .expect(\"search query\")\n                .focused,\n            \"next field must receive the click\"\n        );\n        assert_eq!(\n            harness\n                .node(\"scene.touch.search.sheet\")\n                .expect(\"search sheet\")\n                .expanded,\n            Some(true)\n        );\n        harness.keystrokes(\"escape\");\n        assert_eq!(\n            harness\n                .node(\"scene.touch.search\")\n                .expect(\"closed search\")\n                .expanded,\n            Some(false)\n        );\n    }\n\n    #[gpui::test]\n    fn bottom_picker_exit_blocks_clicks_without_stealing_replacement_focus(\n        cx: &mut gpui::TestAppContext,\n    ) {\n        let mut harness = Harness::new(cx, crate::install, touch_pickers);\n        harness.click(\"scene.touch.select\");\n        assert_eq!(\n            harness\n                .node(\"scene.touch.select.sheet\")\n                .expect(\"select sheet\")\n                .expanded,\n            Some(true)\n        );\n        harness.advance(Duration::from_secs(1));\n        harness.click(\"scene.touch.select.item-1\");\n        assert_eq!(\n            harness\n                .node(\"scene.touch.select.sheet\")\n                .expect(\"outgoing sheet\")\n                .expanded,\n            Some(false)\n        );\n        // The outgoing surface still occludes its background during exit.\n        harness.click(\"scene.touch.search.query\");\n        assert_eq!(\n            harness\n                .node(\"scene.touch.search\")\n                .expect(\"search trigger\")\n                .expanded,\n            Some(false)\n        );\n        // A host may intentionally replace it before the animation completes.\n        harness.update(|_, cx| {\n            cx.global::<TouchPickers>()\n                .search\n                .clone()\n                .update(cx, |picker, cx| picker.open(cx))\n        });\n        assert!(\n            harness\n                .node(\"scene.touch.search.query\")\n                .expect(\"new query\")\n                .focused\n        );\n        harness.advance(Duration::from_secs(1));\n        assert!(\n            harness\n                .node(\"scene.touch.search.query\")\n                .expect(\"retained query\")\n                .focused\n        );\n        assert_eq!(\n            harness\n                .node(\"scene.touch.search.sheet\")\n                .expect(\"new sheet\")\n                .expanded,\n            Some(true)\n        );\n        harness.keystrokes(\"escape\");\n        harness.advance(Duration::from_secs(1));\n        assert_eq!(\n            harness\n                .node(\"scene.touch.search\")\n                .expect(\"closed search\")\n                .expanded,\n            Some(false)\n        );\n    }\n}\n\n/// Narrow fixture with real editing, caller-routed next, disabled and error states.\npub(super) fn touch_inputs(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<TouchInputs>() {\n        let email = cx.new(|cx| {\n            TextInput::new(\"scene.touch.email\", window, cx)\n                .name(\"Email\")\n                .placeholder(\"you@example.com\")\n                .control_size(ControlSize::Touch)\n                .input_options(gpui::TextInputOptions {\n                    purpose: gpui::KeyboardPurpose::Email,\n                    action: gpui::TextInputAction::Next,\n                    autofill: Some(gpui::AutofillPurpose::Email),\n                    ..Default::default()\n                })\n        });\n        let password = cx.new(|cx| {\n            PasswordInput::new(\"scene.touch.password\", window, cx)\n                .name(\"Password\")\n                .placeholder(\"Password\")\n                .control_size(ControlSize::Touch)\n                .input_options(gpui::TextInputOptions {\n                    action: gpui::TextInputAction::Done,\n                    autofill: Some(gpui::AutofillPurpose::CurrentPassword),\n                    ..Default::default()\n                })\n        });\n        let password_focus = password.clone();\n        let host_window = window.window_handle();\n        let next = cx.subscribe(&email, move |_, action: &gpui::TextInputAction, cx| {\n            if *action == gpui::TextInputAction::Next {\n                let focus = password_focus.read(cx).focus_handle(cx);\n                cx.update_window(host_window, |_, window, cx| focus.focus(window, cx))\n                    .ok();\n            }\n        });\n        let code = cx.new(|cx| {\n            OneTimeCodeInput::new(\"scene.touch.code\", window, cx)\n                .name(\"Code\")\n                .slots(6)\n                .control_size(ControlSize::Touch)\n                .input_options(gpui::TextInputOptions {\n                    purpose: gpui::KeyboardPurpose::Number,\n                    autofill: Some(gpui::AutofillPurpose::OneTimeCode),\n                    ..Default::default()\n                })\n        });\n        let notes = cx.new(|cx| {\n            TextArea::new(\"scene.touch.notes\", window, cx)\n                .placeholder(\"Notes · wraps at this width\")\n                .rows(2)\n                .control_size(ControlSize::Touch)\n        });\n        let disabled = cx.new(|cx| {\n            TextInput::new(\"scene.touch.disabled\", window, cx)\n                .name(\"Disabled fixture\")\n                .text(\"Managed by the host\")\n                .disabled(true)\n                .control_size(ControlSize::Touch)\n        });\n        let invalid = cx.new(|cx| {\n            TextInput::new(\"scene.touch.invalid\", window, cx)\n                .name(\"Invalid email fixture\")\n                .text(\"not an address\")\n                .invalid(true)\n                .control_size(ControlSize::Touch)\n        });\n        cx.set_global(TouchInputs {\n            fields: vec![\n                (\"scene.touch.email\", \"Email\", email.into()),\n                (\"scene.touch.password\", \"Password\", password.into()),\n                (\n                    \"scene.touch.code\",\n                    \"Verification code · 6 characters\",\n                    code.into(),\n                ),\n                (\"scene.touch.notes\", \"Notes\", notes.into()),\n                (\"scene.touch.disabled\", \"Managed field\", disabled.into()),\n                (\"scene.touch.invalid\", \"Invalid email\", invalid.into()),\n            ],\n            _next: next,\n        });\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(390.0))\n        .max_w_full()\n        .child(caption(\n            &theme,\n            \"Touch editing fixtures · keyboard hints are platform-dependent\",\n        ))\n        .children(\n            cx.global::<TouchInputs>()\n                .fields\n                .iter()\n                .map(|(id, label, view)| {\n                    FormField::new(format!(\"{id}.field\"), *label)\n                        .control(*id)\n                        .child(view.clone())\n                }),\n        )\n        .child(caption(\n            &theme,\n            \"Code paste is not SMS autofill. Error and disabled values remain visible.\",\n        ))\n        .into_any_element()\n}\n\npub(super) fn translation_packs(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::strings::TranslationPack;\n    use gpui_kit_semantics::{NodeSpec, Role, Semantic};\n    let theme = cx.theme().clone();\n    let mut columns = row(&theme).items_start();\n    for &pack in TranslationPack::ALL {\n        let strings = pack.strings();\n        let prefix = format!(\"scene.translations.{}\", pack.language_tag());\n        let mut card = Card::new()\n            .id(prefix.clone())\n            .padding(Space::Md)\n            .child(crate::foundation::text(\n                &theme,\n                TypeScale::Title,\n                pack.language_tag(),\n            ))\n            .child(\n                Button::new(format!(\"{prefix}.copy\"))\n                    .label(strings.text(StringKey::Copy))\n                    .disabled(true),\n            );\n        for (key, values) in [\n            (StringKey::SettingsManagedBy, &[\"fixture administrator\"][..]),\n            (StringKey::GridSelectionCounts, &[\"2\", \"7\", \"19\"][..]),\n            (StringKey::AttachmentReady, &[][..]),\n            (StringKey::AttachmentProcessing, &[][..]),\n            (StringKey::BrowserEmpty, &[][..]),\n            (StringKey::BrowserUnavailable, &[][..]),\n            (StringKey::CopyFailedDetail, &[][..]),\n            (StringKey::ApprovalAlwaysPath, &[\"/work\"][..]),\n            (StringKey::RangeInverted, &[\"2026-09-01\", \"2026-09-09\"][..]),\n        ] {\n            let text = strings.format(key, values);\n            card = card.child(\n                div()\n                    .py_token(&theme, Space::Xs)\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Body,\n                        text.clone(),\n                    ))\n                    .semantic_in(\n                        cx,\n                        NodeSpec::new(format!(\"{prefix}.{}\", key.name()), Role::Text).text(text),\n                    ),\n            );\n        }\n        columns = columns.child(div().w(px(390.0)).child(card));\n    }\n    stack(&theme).w(px(840.0))\n        .child(caption(&theme, \"Built-in vocabulary fixture: disabled action previews, distinct states, and reordered template arguments. Caller data is not translated.\"))\n        .child(columns).into_any_element()\n}\n\npub(super) fn button(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"how much weight the action carries\"))\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(caption(\n            &theme,\n            \"refused is not in flight, and neither is the current answer\",\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(caption(&theme, \"the control scale, smallest to largest\"))\n        .child(\n            row(&theme)\n                .child(\n                    Button::new(\"scene.button.xs\")\n                        .label(\"Extra small\")\n                        .secondary()\n                        .xs(),\n                )\n                .child(\n                    Button::new(\"scene.button.sm\")\n                        .label(\"Small\")\n                        .secondary()\n                        .small(),\n                )\n                .child(\n                    Button::new(\"scene.button.md\")\n                        .label(\"Medium\")\n                        .secondary()\n                        .medium(),\n                )\n                .child(\n                    Button::new(\"scene.button.lg\")\n                        .label(\"Large\")\n                        .secondary()\n                        .large(),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"White is on-media: a bright-background fixture\",\n        ))\n        .child(\n            row(&theme)\n                .p(px(theme.spacing.md))\n                .radius(&theme, Radius::Card)\n                .bg(theme.colors.on_media_foreground)\n                .child(\n                    Button::new(\"scene.button.media\")\n                        .label(\"Play\")\n                        .icon(Icon::Play)\n                        .variant(Variant::White)\n                        .on_click(|_, _| {}),\n                )\n                .child(\n                    Button::new(\"scene.button.media-busy\")\n                        .label(\"Loading\")\n                        .variant(Variant::White)\n                        .loading(true),\n                )\n                .child(\n                    Button::new(\"scene.button.media-disabled\")\n                        .label(\"Unavailable\")\n                        .variant(Variant::White)\n                        .disabled(true),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"the shared tiers, resolved against a palette colour\",\n        ))\n        .children([\"indigo\", \"teal\", \"red\"].map(|group| {\n            row(&theme).children(\n                [\n                    Variant::Filled,\n                    Variant::Light,\n                    Variant::Subtle,\n                    Variant::Default,\n                    Variant::Transparent,\n                ]\n                .map(|tier| {\n                    Button::new(format!(\"scene.button.{group}.{}\", tier.name()))\n                        .label(tier.name())\n                        .variant(tier)\n                        .color(SharedString::from(group))\n                        .on_click(|_, _| {})\n                }),\n            )\n        }))\n        .child(caption(\n            &theme,\n            \"the same tiers, chosen: selection is a stronger step of the ladder the \\\n             caller picked, so the colour survives being the current answer\",\n        ))\n        .child(\n            row(&theme).children(\n                [\n                    Variant::Filled,\n                    Variant::Light,\n                    Variant::Subtle,\n                    Variant::Default,\n                    Variant::Transparent,\n                ]\n                .map(|tier| {\n                    Button::new(format!(\"scene.button.chosen.{}\", tier.name()))\n                        .label(tier.name())\n                        .variant(tier)\n                        .color(SharedString::from(\"indigo\"))\n                        .selected(true)\n                        .on_click(|_, _| {})\n                }),\n            ),\n        )\n        .into_any_element()\n}\n\n/// The search surfaces the scene shows, kept across frames.\n///\n/// Both hold a [`TextInput`], which owns a caret and a selection that outlive\n/// a frame, so they are built once and driven once.\npub(super) struct SceneSearch {\n    queries: Vec<Entity<SearchInput>>,\n    field: Entity<SearchField>,\n    counting: Entity<SearchField>,\n    none: Entity<SearchField>,\n    too_many: Entity<SearchField>,\n    replace: Entity<FindReplace>,\n}\n\nimpl Global for SceneSearch {}\n\npub(super) fn ensure_search(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneSearch>() {\n        return;\n    }\n    let queries = [\n        (\"xs\", ControlSize::Xs, \"\", false),\n        (\"sm\", ControlSize::Sm, \"Local projects\", false),\n        (\"md\", ControlSize::Md, \"设计 review\", false),\n        (\"disabled\", ControlSize::Md, \"Unavailable query\", true),\n        (\"named\", ControlSize::Md, \"\", false),\n    ]\n    .into_iter()\n    .map(|(id, size, value, disabled)| {\n        cx.new(|cx| {\n            let mut input = SearchInput::new(format!(\"scene.search-input.{id}\"), window, cx)\n                .placeholder(\"Search projects\")\n                .control_size(size)\n                .disabled(disabled);\n            if id == \"named\" {\n                input = input.name(\"Search projects\").placeholder(\"Search…\");\n            }\n            input.set_value(value, cx);\n            input\n        })\n    })\n    .collect();\n    let field = cx.new(|cx| SearchField::new(\"scene.search.field\", window, cx));\n    field.update(cx, |field, cx| {\n        field.set_query(\"transport\", cx);\n        field.set_count(\n            HitCount::Known {\n                total: 12,\n                current: Some(2),\n            },\n            cx,\n        );\n    });\n\n    // The three counts a field must keep apart are shown by three fields.\n    // Rendering their published names as chips said what the tree calls them,\n    // which is not what a reader of the field would ever see.\n    let mut sample = |id: &'static str, query: &'static str, count: HitCount, cx: &mut App| {\n        let field = cx.new(|cx| SearchField::new(id, window, cx));\n        field.update(cx, |field, cx| {\n            field.set_query(query, cx);\n            field.set_count(count, cx);\n        });\n        field\n    };\n    let counting = sample(\"scene.search.counting\", \"transport\", HitCount::Counting, cx);\n    let none = sample(\"scene.search.none\", \"teleport\", HitCount::None, cx);\n    let too_many = sample(\n        \"scene.search.too-many\",\n        \"e\",\n        HitCount::TooMany { counted: 500 },\n        cx,\n    );\n\n    let replace = cx.new(|cx| FindReplace::new(\"scene.search.replace\", window, cx));\n    replace.update(cx, |replace, cx| {\n        replace.search_field().update(cx, |field, cx| {\n            field.set_query(\"transport\", cx);\n            // Case and whole-word are the host's state, and a find surface\n            // that cannot show them is not the one a product ships.\n            field.set_match_case(Some(true), cx);\n            field.set_whole_word(Some(false), cx);\n        });\n        replace.replacement_input().update(cx, |input, cx| {\n            input.set_value(\"delivery\", cx);\n        });\n        replace.set_count(\n            HitCount::Known {\n                total: 12,\n                current: Some(2),\n            },\n            cx,\n        );\n    });\n\n    cx.set_global(SceneSearch {\n        queries,\n        field,\n        counting,\n        none,\n        too_many,\n        replace,\n    });\n}\n\npub(super) fn search_input(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_search(window, cx);\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(\n            &theme,\n            \"Queries: Xs empty, Sm and Md populated, disabled\",\n        ))\n        .children(cx.global::<SceneSearch>().queries.clone())\n        .child(caption(\n            &theme,\n            \"Last query: name ‘Search projects’, hint ‘Search…’\",\n        ))\n        .into_any_element()\n}\n\npub(super) 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    let counting = cx.global::<SceneSearch>().counting.clone();\n    let none = cx.global::<SceneSearch>().none.clone();\n    let too_many = cx.global::<SceneSearch>().too_many.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(counting)\n        .child(none)\n        .child(too_many)\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}\n\npub(super) 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}\n\npub(super) 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}\n\n/// The cascader owns only the open surface and path, so its scene keeps one\n/// view alive across capture frames.\npub(super) struct SceneCascader {\n    cascader: Entity<Cascader>,\n}\n\nimpl Global for SceneCascader {}\n\npub(super) fn cascader(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneCascader>() {\n        let cascader = cx.new(|cx| {\n            Cascader::new(\"scene.cascader\", window, cx)\n                .name(\"Fixture destination\")\n                .selected(\"release-notes\")\n                .options([\n                    CascaderOption::new(\"guides\", \"Guides\").children([\n                        CascaderOption::new(\"getting-started\", \"Getting started\"),\n                        CascaderOption::new(\"configuration\", \"Configuration\"),\n                    ]),\n                    CascaderOption::new(\"reference\", \"Reference\").loading_children(),\n                    CascaderOption::new(\"archive\", \"Archive\").unavailable_children(\n                        \"The fixture host does not provide archived sections.\",\n                    ),\n                    CascaderOption::new(\"release-notes\", \"Release notes\"),\n                    CascaderOption::new(\"managed\", \"Managed section\").disabled(true),\n                ])\n        });\n        cascader.update(cx, |cascader, cx| cascader.open(window, cx));\n        cx.set_global(SceneCascader { cascader });\n    }\n    let theme = cx.theme().clone();\n    let cascader = cx.global::<SceneCascader>().cascader.clone();\n    stack(&theme)\n        .w(px(680.0))\n        .child(caption(\n            &theme,\n            \"caller-owned hierarchy and value; the open path belongs only to the view\",\n        ))\n        // The trigger is given the width its own popup has, so the scene does\n        // not show a control that disagrees with the surface it opens.\n        .child(div().w(px(380.0)).child(cascader))\n        .into_any_element()\n}\n\npub(super) 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            Switch::new(\"scene.choice.background-updates\")\n                .label(\"Background updates\")\n                .on(false)\n                .on_change(|_, _, _| {}),\n        )\n        .child(\n            Switch::new(\"scene.choice.managed-updates\")\n                .label(\"Managed updates\")\n                .on(true)\n                .disabled(true),\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        .child(\n            Slider::new(\"scene.choice.window\")\n                .label(\"Window\")\n                .range(0.0, 1.0)\n                .values(0.2, 0.8)\n                .marks([0.0, 0.25, 0.5, 0.75, 1.0])\n                .display(\"0.2 – 0.8\")\n                .on_range_change(|_, _, _, _| {}),\n        )\n        .child(caption(\n            &theme,\n            \"Vertical range uses the same value, marks, and keyboard contract\",\n        ))\n        .child(\n            div().h(px(220.0)).child(\n                Slider::new(\"scene.choice.vertical\")\n                    .label(\"Vertical\")\n                    .orientation(SliderOrientation::Vertical)\n                    .range(0.0, 100.0)\n                    .step(10.0)\n                    .value(60.0)\n                    .marks([0.0, 25.0, 50.0, 75.0, 100.0])\n                    .display(\"60\")\n                    .on_change(|_, _, _| {}),\n            ),\n        )\n        .into_any_element()\n}\n\n/// The searchable multi-value control is kept alive so its query and open\n/// state survive gallery rebuilds.\npub(super) struct SceneMultiSelect {\n    control: Entity<MultiSelect>,\n    disabled: Entity<MultiSelect>,\n}\n\nimpl Global for SceneMultiSelect {}\n\npub(super) fn multi_select(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneMultiSelect>() {\n        let control = cx.new(|cx| {\n            MultiSelect::new(\"scene.multi-select\", window, cx)\n                .name(\"Enabled providers\")\n                .placeholder(\"Choose providers\")\n                .selected([\"native\", \"remote\"])\n                .options([\n                    SelectOption::new(\"native\", \"Native runtime\")\n                        .description(\"Runs on this machine\"),\n                    SelectOption::new(\"remote\", \"Remote gateway\")\n                        .description(\"Uses the workspace gateway\"),\n                    SelectOption::new(\"preview\", \"Preview models\").disabled(true),\n                    SelectOption::new(\"archive\", \"Archive models\"),\n                ])\n                .clearable(true)\n        });\n        control.update(cx, |control, cx| control.open(window, cx));\n        let disabled = cx.new(|cx| {\n            MultiSelect::new(\"scene.multi-select-disabled\", window, cx)\n                .name(\"Disabled providers\")\n                .selected([\"native\", \"remote\"])\n                .options([\n                    SelectOption::new(\"native\", \"Native runtime\"),\n                    SelectOption::new(\"remote\", \"Remote gateway\"),\n                ])\n                .disabled(true)\n        });\n        cx.set_global(SceneMultiSelect { control, disabled });\n    }\n    let theme = cx.theme().clone();\n    let control = cx.global::<SceneMultiSelect>().control.clone();\n    let disabled = cx.global::<SceneMultiSelect>().disabled.clone();\n    stack(&theme)\n        .w(px(520.0))\n        .child(caption(\n            &theme,\n            \"Selected ids stay with the host; search, chips, and option focus stay with the view\",\n        ))\n        .child(caption(\n            &theme,\n            \"Disabled: selected values remain visible, without remove actions\",\n        ))\n        .child(disabled)\n        .child(control)\n        .into_any_element()\n}\n\n/// The two-pane assignment control demonstrates source/target selection\n/// without allowing the component to mutate either collection.\npub(super) struct SceneTransferList {\n    control: Entity<TransferList>,\n}\n\nimpl Global for SceneTransferList {}\n\npub(super) fn transfer_list(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneTransferList>() {\n        let control = cx.new(|cx| {\n            TransferList::new(\"scene.transfer-list\", window, cx)\n                .source([\n                    TransferItem::new(\"runtime\", \"Native runtime\"),\n                    TransferItem::new(\"gateway\", \"Remote gateway\"),\n                    TransferItem::new(\"preview\", \"Preview models\").disabled(true),\n                ])\n                .target([TransferItem::new(\"logs\", \"Run logs\")])\n                .source_selected([\"gateway\"])\n                .target_selected([\"logs\"])\n                .source_label(\"Available capabilities\")\n                .target_label(\"Assigned capabilities\")\n        });\n        cx.set_global(SceneTransferList { control });\n    }\n    let theme = cx.theme().clone();\n    let control = cx.global::<SceneTransferList>().control.clone();\n    stack(&theme)\n        .w(px(720.0))\n        .child(caption(\n            &theme,\n            \"Each pane reports stable item intents; the host performs the assignment\",\n        ))\n        .child(control)\n        .into_any_element()\n}\n\n/// The form scene's controls, kept across frames.\n///\n/// Every one of these owns editing state — a caret, a query, an open list —\n/// so they are built once. Building them once is also what makes the capture\n/// static.\npub(super) struct SceneForm {\n    name: Entity<TextInput>,\n    retention: Entity<NumberInput>,\n    region: Entity<Combobox>,\n    labels: Entity<TagInput>,\n}\n\nimpl Global for SceneForm {}\n\npub(super) fn ensure_form(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneForm>() {\n        return;\n    }\n    let name = cx.new(|cx| {\n        TextInput::new(\"scene.form.name\", window, cx)\n            .text(\"Runs 2024\")\n            .required(true)\n            .invalid(true)\n    });\n    let retention = cx.new(|cx| {\n        // The host holds ninety days while its own limit is sixty. The field\n        // shows the number that is actually set and says it is out of range,\n        // rather than quietly drawing a number nobody chose.\n        NumberInput::new(\"scene.form.retention\", window, cx)\n            .value(90.0)\n            .range(1.0, 60.0)\n            .step(5.0)\n            .prefix(\"~\")\n            .unit(\"days\")\n            .required(true)\n    });\n    let region = cx.new(|cx| {\n        let mut options = (0..14)\n            .map(|index| {\n                SelectOption::new(\n                    format!(\"model-{index:02}\"),\n                    format!(\"Agent model {index:02}\"),\n                )\n            })\n            .collect::<Vec<_>>();\n        options.push(SelectOption::new(\"unknown\", \"Unknown model\").description(\n            \"This model may not support chat in direct mode.\\nChoose a chat-capable model.\",\n        ));\n        options.push(SelectOption::new(\"managed\", \"Managed model\").disabled(true));\n        Combobox::new(\"scene.form.region\", window, cx)\n            .name(\"All Agent models\")\n            .options(options)\n            .selected(\"unknown\")\n            .placeholder(\"Choose an Agent model\")\n    });\n    let labels = cx.new(|cx| {\n        TagInput::new(\"scene.form.labels\", window, cx)\n            .tags([\"indexing\", \"nightly\", \"verified\"])\n            .placeholder(\"Add a label\")\n            .max(5)\n            .reorderable(true)\n            .collapse_at(5)\n    });\n    region.update(cx, |combobox, cx| {\n        combobox.set_query(\"Unknown model\", cx);\n    });\n    cx.set_global(SceneForm {\n        name,\n        retention,\n        region,\n        labels,\n    });\n}\n\npub(super) 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    // No fixed height and nothing pushed to the bottom: a form is a stack of\n    // fields one gap apart, and the 250px of nothing that a pinned last field\n    // opened up is not a rhythm anything else in the library keeps.\n    stack(&theme)\n        .w(px(420.0))\n        .child(\n            FormField::new(\"scene.form.name.form-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.form-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.form-field\", \"Visibility\")\n                .control(\"scene.form.visibility\")\n                .description(\"Who can open the runs in this workspace.\")\n                .validation(ValidationState::Validating)\n                .child(\n                    SegmentedControl::new(\"scene.form.visibility\")\n                        .label(\"Visibility\")\n                        .segments([\n                            Segment::new(\"private\", \"Only me\"),\n                            Segment::new(\"team\", \"Workspace team\"),\n                            Segment::new(\"public\", \"Public\").disabled(true),\n                        ])\n                        .selected(\"team\")\n                        .on_select(|_, _, _| {}),\n                ),\n        )\n        .child(\n            // The neutral strip above uses a raised knob alone. This large\n            // capsule opts into identity tint; selection does not invent it.\n            FormField::new(\"scene.form.lane.form-field\", \"Lane\")\n                .control(\"scene.form.lane\")\n                .description(\"Each lane keeps the colour it is known by.\")\n                .child(\n                    SegmentedControl::new(\"scene.form.lane\")\n                        .label(\"Lane\")\n                        .control_size(ControlSize::Lg)\n                        .segments([\n                            Segment::new(\"read\", \"Read\")\n                                .tint(super::display::identity_tint(&theme, \"agent.read\")),\n                            Segment::new(\"shell\", \"Shell\")\n                                .tint(super::display::identity_tint(&theme, \"agent.shell\")),\n                            Segment::new(\"network\", \"Network\")\n                                .tint(super::display::identity_tint(&theme, \"agent.network\")),\n                        ])\n                        .selected(\"shell\")\n                        .on_select(|_, _, _| {}),\n                ),\n        )\n        .child(\n            FormField::new(\"scene.form.labels.form-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.form-field\", \"All Agent models\")\n                .control(\"scene.form.region\")\n                .description(\"Choose a chat-capable model for direct runs.\")\n                .child(region),\n        )\n        .into_any_element()\n}\n\n/// The password in the canonical sign-in composition, kept across frames.\npub(super) struct SceneAuthSignIn {\n    identity: Entity<TextInput>,\n    password: Entity<PasswordInput>,\n}\n\nimpl Global for SceneAuthSignIn {}\n\npub(super) fn ensure_auth_sign_in(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneAuthSignIn>() {\n        return;\n    }\n    // Nobody signs in with a password alone, and a password field reviewed\n    // without the field above it is reviewed in a shape no product ships.\n    let identity = cx.new(|cx| {\n        TextInput::new(\"scene.auth.sign-in.identity\", window, cx)\n            .placeholder(\"you@example.com\")\n            .text(\"ada@origingame.dev\")\n    });\n    let password = cx.new(|cx| {\n        PasswordInput::new(\"scene.auth.sign-in.password\", window, cx)\n            .name(\"Password\")\n            .placeholder(\"Enter password\")\n            .required(true)\n    });\n    cx.set_global(SceneAuthSignIn { identity, password });\n}\n\npub(super) fn auth_sign_in(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_auth_sign_in(window, cx);\n    let identity = cx.global::<SceneAuthSignIn>().identity.clone();\n    let password = cx.global::<SceneAuthSignIn>().password.clone();\n    let theme = cx.theme().clone();\n    let card_id = \"scene.auth.sign-in.card\";\n    let heading = div()\n        .column()\n        .gap_token(&theme, Space::Xs)\n        .child(\n            crate::foundation::text(&theme, TypeScale::Title, \"Sign in\").semantic_in(\n                cx,\n                NodeSpec::new(\"scene.auth.sign-in.title\", Role::Text)\n                    .parent(card_id)\n                    .text(\"Sign in\"),\n            ),\n        )\n        .child(\n            crate::foundation::text(\n                &theme,\n                TypeScale::Body,\n                \"Continue to the workspace you were invited to.\",\n            )\n            .text_color(theme.colors.text_muted)\n            .semantic_in(\n                cx,\n                NodeSpec::new(\"scene.auth.sign-in.subtitle\", Role::Text)\n                    .parent(card_id)\n                    .text(\"Continue to the workspace you were invited to.\"),\n            ),\n        );\n\n    stack(&theme)\n        .w(px(440.0))\n        .child(\n            Card::new().id(card_id).padded(true).child(\n                div()\n                    .column()\n                    .gap_token(&theme, Space::Md)\n                    .child(heading)\n                    .child(\n                        Callout::new(\"Credentials are verified by the caller.\", Tone::Info)\n                            .id(\"scene.auth.sign-in.boundary\"),\n                    )\n                    .child(\n                        FormField::new(\"scene.auth.sign-in.identity.field\", \"Email\")\n                            .control(\"scene.auth.sign-in.identity\")\n                            .required(true)\n                            .child(identity),\n                    )\n                    .child(\n                        FormField::new(\"scene.auth.sign-in.password.field\", \"Password\")\n                            .control(\"scene.auth.sign-in.password\")\n                            .required(true)\n                            .child(password),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.sign-in.submit\")\n                            .label(\"Sign in\")\n                            .full_width(true)\n                            .on_click(|_, _| {}),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.sign-in.passkey\")\n                            .label(\"Continue with passkey\")\n                            .icon(Icon::Key)\n                            .secondary()\n                            .full_width(true)\n                            .on_click(|_, _| {}),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.sign-in.organization\")\n                            .label(\"Continue with organization sign-on\")\n                            .icon(Icon::Global)\n                            .secondary()\n                            .full_width(true)\n                            .on_click(|_, _| {}),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.sign-in.recovery\")\n                            .label(\"Use a recovery option\")\n                            .link()\n                            .on_click(|_, _| {}),\n                    ),\n            ),\n        )\n        .into_any_element()\n}\n\n/// The one logical code input in the canonical verification composition.\npub(super) struct SceneAuthVerification {\n    code: Entity<OneTimeCodeInput>,\n}\n\nimpl Global for SceneAuthVerification {}\n\npub(super) fn ensure_auth_verification(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneAuthVerification>() {\n        return;\n    }\n    let code = cx.new(|cx| {\n        OneTimeCodeInput::new(\"scene.auth.verification.code\", window, cx)\n            .name(\"Verification code\")\n            .slots(6)\n            .required(true)\n    });\n    cx.set_global(SceneAuthVerification { code });\n}\n\npub(super) fn auth_verification(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_auth_verification(window, cx);\n    let code = cx.global::<SceneAuthVerification>().code.clone();\n    let theme = cx.theme().clone();\n    let card_id = \"scene.auth.verification.card\";\n    let title = crate::foundation::text(&theme, TypeScale::Title, \"Verify sign-in\").semantic_in(\n        cx,\n        NodeSpec::new(\"scene.auth.verification.title\", Role::Text)\n            .parent(card_id)\n            .text(\"Verify sign-in\"),\n    );\n\n    stack(&theme)\n        .w(px(440.0))\n        .child(\n            Card::new().id(card_id).padded(true).child(\n                div()\n                    .column()\n                    .gap_token(&theme, Space::Md)\n                    .child(title)\n                    .child(\n                        Callout::new(\n                            \"Enter the code from your authenticator or recovery method.\",\n                            Tone::Info,\n                        )\n                        .id(\"scene.auth.verification.guidance\"),\n                    )\n                    .child(\n                        FormField::new(\"scene.auth.verification.code.field\", \"Verification code\")\n                            .control(\"scene.auth.verification.code\")\n                            .required(true)\n                            .child(code),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.verification.submit\")\n                            .label(\"Verify\")\n                            .full_width(true)\n                            .on_click(|_, _| {}),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.verification.alternative\")\n                            .label(\"Use another method\")\n                            .secondary()\n                            .full_width(true)\n                            .on_click(|_, _| {}),\n                    )\n                    .child(\n                        Button::new(\"scene.auth.verification.recovery\")\n                            .label(\"Use a recovery option\")\n                            .link()\n                            .on_click(|_, _| {}),\n                    ),\n            ),\n        )\n        .into_any_element()\n}\n\n/// The split button the actions scene shows, kept across frames.\npub(super) struct SceneActions {\n    split: Entity<SplitButton>,\n}\n\nimpl Global for SceneActions {}\n\npub(super) fn ensure_actions(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneActions>() {\n        return;\n    }\n    let split = cx.new(|cx| {\n        SplitButton::new(\"scene.actions.publish\", window, cx)\n            .label(\"Publish\")\n            .primary()\n            .on_click(|_, _| {})\n            .items(\n                [\n                    MenuItem::command(\"publish.draft\", \"Save as draft\")\n                        .icon(Icon::Document)\n                        .shortcut(\"cmd-s\"),\n                    MenuItem::command(\"publish.schedule\", \"Schedule…\")\n                        .icon(Icon::Calendar)\n                        .shortcut(\"cmd-shift-s\"),\n                    MenuItem::command(\"publish.export\", \"Export without publishing\")\n                        .icon(Icon::ArchiveUp)\n                        .shortcut(\"cmd-e\"),\n                    MenuItem::separator(\"publish.rule\"),\n                    MenuItem::command(\"publish.discard\", \"Discard this draft\")\n                        .icon(Icon::Trash)\n                        .destructive(true),\n                ],\n                cx,\n            )\n    });\n    split.update(cx, |split, cx| split.open_menu(window, cx));\n    cx.set_global(SceneActions { split });\n}\n\npub(super) 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                    // One row, one weight: a chipless button beside four\n                    // chipped ones reads as the one that is unavailable.\n                    IconButton::new(\"scene.actions.copy\", Icon::Copy, \"Copy run id\")\n                        .secondary()\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                // A range picker built the way a host would build one: the\n                // track is the group's, the answers that are not current stay\n                // bare on it, and the one that is holds a chip in the colour\n                // the library reserves for the current answer.\n                ButtonGroup::new(\"scene.actions.range\")\n                    .children([\n                        Button::new(\"scene.actions.range.day\")\n                            .label(\"Day\")\n                            .ghost()\n                            .on_click(|_, _| {}),\n                        Button::new(\"scene.actions.range.week\")\n                            .label(\"Week\")\n                            .variant(gpui_kit_theme::Variant::Light)\n                            .selected(true)\n                            .on_click(|_, _| {}),\n                        Button::new(\"scene.actions.range.month\")\n                            .label(\"Month\")\n                            .ghost()\n                            .on_click(|_, _| {}),\n                    ])\n                    .small(),\n            ),\n        )\n        .child(row(&theme).child(split))\n        .into_any_element()\n}\n\n/// The inputs the scene shows, kept across frames.\n///\n/// An editable control carries state, so the scene builds its entities once\n/// rather than on every frame, which would discard whatever was typed.\npub(super) struct SceneInputs {\n    token: Entity<TextInput>,\n    disabled: Entity<TextInput>,\n    invalid: Entity<TextInput>,\n    provider: Entity<Select>,\n    notes: Entity<TextArea>,\n    review: Entity<TextArea>,\n    frozen: Entity<TextArea>,\n    message: Entity<TextArea>,\n    asked: Entity<Pill>,\n    told: Entity<Pill>,\n}\n\n/// A frame that changes shape around its text.\n///\n/// The area grows itself between `rows` and `max_rows`, which is all a field\n/// standing in a column needs. This is the other case: a one-line pill that\n/// becomes a panel once the message outgrows it. The decision belongs to the\n/// frame, is taken before the area is laid out, and is about a width the area\n/// is not currently in — so it is taken from [`Measured`] rather than from the\n/// rows the area settled on.\npub(super) struct Pill {\n    ident: Ident,\n    area: Entity<TextArea>,\n    /// How wide the text may be and still be a pill. Measured while it was\n    /// one, because a panel is wider than the pill it replaced and cannot ask\n    /// what would fit back there.\n    room: Pixels,\n    panel: bool,\n    /// The pass the shape was last decided on. Changing shape changes the\n    /// width, so the measurement that caused a change describes a frame that\n    /// no longer exists.\n    decided: u64,\n}\n\nimpl Pill {\n    fn new(\n        ident: impl Into<Ident>,\n        text: &str,\n        window: &mut Window,\n        cx: &mut Context<Self>,\n    ) -> Self {\n        let ident = ident.into();\n        let area = cx.new(|cx| {\n            TextArea::new(ident.child(\"text\"), window, cx)\n                .text(text.to_string())\n                .frame(Frame::Host)\n                .enter(Enter::Submits)\n                .autosize(1, 6)\n        });\n        Self {\n            ident,\n            area,\n            room: px(0.0),\n            panel: false,\n            decided: 0,\n        }\n    }\n}\n\nimpl Render for Pill {\n    fn render(&mut self, _window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {\n        let theme = cx.theme().clone();\n        if let Some(measured) = self.area.read(cx).measured()\n            && measured.pass > self.decided\n        {\n            if !self.panel {\n                self.room = measured.wrapped;\n            }\n            let panel = measured.text > self.room;\n            if panel != self.panel {\n                self.panel = panel;\n                self.decided = measured.pass;\n            }\n        }\n        div()\n            .id(self.ident.element_id())\n            .w_full()\n            .p(px(theme.space(Space::Xs)))\n            .surface(&theme, Surface::Raised)\n            .radius(\n                &theme,\n                match self.panel {\n                    true => Radius::Card,\n                    false => Radius::Pill,\n                },\n            )\n            .child(self.area.clone())\n    }\n}\n\nimpl Global for SceneInputs {}\n\npub(super) fn ensure_inputs(window: &mut Window, cx: &mut App) {\n    if !cx.has_global::<SceneInputs>() {\n        let inputs = SceneInputs {\n            token: cx.new(|cx| {\n                TextInput::new(\"scene.input.token\", window, cx)\n                    .name(\"API token\")\n                    .placeholder(\"sk-...\")\n                    .secret(true)\n            }),\n            disabled: cx.new(|cx| {\n                TextInput::new(\"scene.input.disabled\", window, cx)\n                    .name(\"Disabled\")\n                    .text(\"read only\")\n                    .disabled(true)\n            }),\n            invalid: cx.new(|cx| {\n                TextInput::new(\"scene.input.invalid\", window, cx)\n                    .name(\"Email\")\n                    .text(\"not an email\")\n                    .invalid(true)\n                    .required(true)\n            }),\n            provider: cx.new(|cx| {\n                Select::new(\"scene.input.provider\", window, cx)\n                    .name(\"Provider\")\n                    .options([\n                        SelectOption::new(\"anthropic\", \"Anthropic\").group(\"Hosted\"),\n                        SelectOption::new(\"openai\", \"OpenAI\")\n                            .description(\"Requires a key\")\n                            .group(\"Hosted\"),\n                        SelectOption::new(\"local\", \"Local runtime\")\n                            .disabled(true)\n                            .group(\"On this machine\"),\n                    ])\n                    .selected(\"anthropic\")\n                    .clearable(true)\n                    .placeholder(\"Choose a provider\")\n            }),\n            notes: cx.new(|cx| {\n                TextArea::new(\"scene.textarea.notes\", window, cx)\n                    .text(\n                        \"The refusal is shown exactly as the host worded it, and the last \\\n                         verified value stays on screen.\",\n                    )\n                    .autosize(3, 6)\n                    .max_length(240)\n            }),\n            review: cx.new(|cx| {\n                TextArea::new(\"scene.textarea.review\", window, cx)\n                    .placeholder(\"What changed, and why\")\n                    .autosize(3, 6)\n            }),\n            frozen: cx.new(|cx| {\n                TextArea::new(\"scene.textarea.frozen\", window, cx)\n                    .text(\"Set by the administrator.\\nThis machine cannot change it.\")\n                    .rows(2)\n                    .disabled(true)\n            }),\n            message: cx.new(|cx| {\n                TextArea::new(\"scene.textarea.message\", window, cx)\n                    .placeholder(\"Ask anything. Enter sends, shift-enter opens a line.\")\n                    .enter(Enter::Submits)\n                    .autosize(2, 8)\n            }),\n            asked: cx\n                .new(|cx| Pill::new(\"scene.textarea.asked\", \"Rerun the failing test\", window, cx)),\n            told: cx.new(|cx| {\n                Pill::new(\n                    \"scene.textarea.told\",\n                    \"Rerun the failing test, and if it fails the same way again, \\\n                     bisect back to the commit that changed the fixture.\",\n                    window,\n                    cx,\n                )\n            }),\n        };\n        cx.set_global(inputs);\n    }\n}\n\npub(super) 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    // A field with no label is a box. Each one is put where a product would\n    // put it: under the words that say what it is for, and above the sentence\n    // that says what is wrong with it.\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            FormField::new(\"scene.input.token.field\", \"API token\")\n                .control(\"scene.input.token\")\n                .description(\"Kept on this machine, never published.\")\n                .child(token),\n        )\n        .child(\n            FormField::new(\"scene.input.disabled.field\", \"Workspace id\")\n                .control(\"scene.input.disabled\")\n                .description(\"Set when the workspace was created.\")\n                .child(disabled),\n        )\n        .child(\n            FormField::new(\"scene.input.invalid.field\", \"Email\")\n                .control(\"scene.input.invalid\")\n                .required(true)\n                .error(\"This is not an address anyone can be reached at.\")\n                .child(invalid),\n        )\n        .child(\n            FormField::new(\"scene.input.provider.field\", \"Provider\")\n                .control(\"scene.input.provider\")\n                .description(\"Where a run is sent.\")\n                .child(provider),\n        )\n        .child(caption(&theme, \"Focused chrome fixture · not an editor\"))\n        .child(\n            crate::controls::field::field_shell(\n                &theme,\n                ControlSize::Md,\n                crate::controls::field::FieldState::default().focused(true),\n            )\n            .child(\"Halo retains the inner highlight\")\n            .semantic_in(cx, NodeSpec::new(\"scene.input.focused-chrome\", Role::Group)),\n        )\n        .into_any_element()\n}\n\npub(super) 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, message, asked, told) = (\n        inputs.notes.clone(),\n        inputs.review.clone(),\n        inputs.frozen.clone(),\n        inputs.message.clone(),\n        inputs.asked.clone(),\n        inputs.told.clone(),\n    );\n    // Focus belongs to this scene's mounted lifetime, not the first scene that\n    // happens to initialize the shared input fixtures. Do not steal it back\n    // from another field on later renders.\n    window.use_keyed_state(\"scene.textarea.initial-focus\", cx, |window, cx| {\n        window.focus(&review.read(cx).focus_handle(cx), cx);\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(\n            FormField::new(\"scene.textarea.notes.field\", \"Release notes\")\n                .control(\"scene.textarea.notes\")\n                .description(\"Shown to everyone who opens this run.\")\n                .child(notes),\n        )\n        .child(\n            FormField::new(\"scene.textarea.review.field\", \"Review\")\n                .control(\"scene.textarea.review\")\n                .child(review),\n        )\n        .child(\n            FormField::new(\"scene.textarea.frozen.field\", \"Policy\")\n                .control(\"scene.textarea.frozen\")\n                .child(frozen),\n        )\n        // The other enter policy, for text that is a message rather than a\n        // value. Nothing about it looks different, which is the point: what\n        // changes is which key is the common act.\n        .child(message)\n        .child(caption(\n            &theme,\n            \"a frame that measures its text rather than its rows: the same pill \\\n             holds one line, and becomes a panel for a message that outgrew it\",\n        ))\n        .child(asked)\n        .child(told)\n        .into_any_element()\n}\n\nconst EDITOR_SOURCE: &str = r#\"use gpui::App;\n\npub fn summarize(values: &[u32]) -> Option<u32> {\n    let total = values.iter().copied().sum();\n    let message = \"language policy stays with the caller\";\n    (total > 0).then_some(total)\n}\n\nconst LONG_SOURCE_LINE: &str = \"one source row stays whole without wrapping\";\n\"#;\n\npub(super) struct SceneEditor {\n    editor: Entity<Editor>,\n    #[cfg(feature = \"syntax\")]\n    syntax: Entity<Editor>,\n}\n\nimpl Global for SceneEditor {}\n\npub(super) fn ensure_editor(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneEditor>() {\n        return;\n    }\n    let theme = cx.theme().clone();\n    let span = |needle: &str, color| {\n        let start = EDITOR_SOURCE\n            .find(needle)\n            .expect(\"scene source contains span\");\n        EditorHighlight::new(\n            start..start + needle.len(),\n            gpui::HighlightStyle {\n                color: Some(color),\n                ..Default::default()\n            },\n        )\n    };\n    let highlights = EditorHighlights::new(\n        0,\n        [\n            span(\"use\", theme.colors.syntax.get(SyntaxColor::Keyword)),\n            span(\"pub fn\", theme.colors.syntax.get(SyntaxColor::Keyword)),\n            span(\"let total\", theme.colors.syntax.get(SyntaxColor::Keyword)),\n            span(\n                \"\\\"language policy stays with the caller\\\"\",\n                theme.colors.syntax.get(SyntaxColor::StringLiteral),\n            ),\n            span(\"0\", theme.colors.syntax.get(SyntaxColor::Number)),\n            span(\"const\", theme.colors.syntax.get(SyntaxColor::Keyword)),\n        ],\n    );\n    let editor = cx.new(|cx| {\n        Editor::new(\n            \"scene.editor\",\n            \"Rust source editor\",\n            EDITOR_SOURCE,\n            window,\n            cx,\n        )\n        .rows(12)\n        .highlights(highlights)\n        .indent_with(|request| {\n            let caret = request.selection.end;\n            match request.direction {\n                EditorIndentDirection::Indent => Some(\n                    EditorIndentation::new(caret..caret, \"    \").selection(caret + 4..caret + 4),\n                ),\n                EditorIndentDirection::Outdent => None,\n            }\n        })\n    });\n    let area = editor.read(cx).text_area().clone();\n    let caret = EDITOR_SOURCE\n        .find(\"let message\")\n        .expect(\"scene source contains the focused line\");\n    area.update(cx, |area, cx| area.set_selected_range(caret..caret, cx));\n    window.focus(&area.read(cx).focus_handle(cx), cx);\n    #[cfg(feature = \"syntax\")]\n    let syntax = cx.new(|cx| {\n        Editor::new(\n            \"scene.editor.json\",\n            \"Incremental JSON syntax fixture\",\n            \"{\\n  \\\"name\\\": \\\"éclair 😀\\\",\\n  \\\"budget\\\": 65536,\\n  \\\"incremental\\\": true\\n}\",\n            window,\n            cx,\n        )\n        .rows(5)\n        .syntax(crate::controls::editor::EditorSyntax::json())\n    });\n    cx.set_global(SceneEditor {\n        editor,\n        #[cfg(feature = \"syntax\")]\n        syntax,\n    });\n}\n\npub(super) fn editor(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_editor(window, cx);\n    let editor = cx.global::<SceneEditor>().editor.clone();\n    let theme = cx.theme().clone();\n    let scene = stack(&theme)\n        .w(px(760.0))\n        .child(caption(\n            &theme,\n            \"one text/IME/history geometry; caller-owned revision highlights and indentation\",\n        ))\n        .child(editor);\n    #[cfg(feature = \"syntax\")]\n    let scene = scene\n        .child(caption(\n            &theme,\n            \"JSON fixture · in-process incremental syntax, no language server\",\n        ))\n        .child(cx.global::<SceneEditor>().syntax.clone());\n    scene.into_any_element()\n}\n\nstruct SceneMulticursorEditor(Entity<Editor>);\n\nimpl Global for SceneMulticursorEditor {}\n\npub(super) fn editor_multicursor(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneMulticursorEditor>() {\n        let source = \"let alpha = 1;\\nlet beta  = 2;\\nlet gamma = 3;\";\n        let editor = cx.new(|cx| {\n            Editor::new(\n                \"scene.editor.multiple\",\n                \"Multicursor source fixture\",\n                source,\n                window,\n                cx,\n            )\n            .rows(4)\n        });\n        editor.update(cx, |editor, cx| {\n            let selections = [\"gamma\", \"alpha\", \"beta\"].map(|name| {\n                let start = source.find(name).expect(\"fixture variable\");\n                (start..start + name.len(), false)\n            });\n            editor.set_selections(selections, cx);\n        });\n        window.focus(&editor.read(cx).text_area().read(cx).focus_handle(cx), cx);\n        cx.set_global(SceneMulticursorEditor(editor));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme).w(px(760.0))\n        .child(caption(&theme, \"fixture · type in three selections; undo restores all · Alt-click adds a caret · Alt-Shift-drag selects columns\"))\n        .child(cx.global::<SceneMulticursorEditor>().0.clone())\n        .into_any_element()\n}\n\nstruct SceneEditorOptions(Entity<TextArea>, Entity<Editor>, Entity<RichTextEditor>);\n\nimpl Global for SceneEditorOptions {}\n\npub(super) fn editor_options(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneEditorOptions>() {\n        let area = cx.new(|cx| {\n            TextArea::new(\"scene.options.area\", window, cx)\n                .text(\"Caller text survives layout changes. 界 😀\\nA retained second line.\")\n        });\n        area.update(cx, |area, cx| {\n            area.set_control_size(ControlSize::Lg, cx);\n            area.set_autosize(Some((2, 4)), cx);\n            area.set_required(true, cx);\n        });\n        let editor = cx.new(|cx| {\n            Editor::new(\n                \"scene.options.editor\",\n                \"Retained source fixture\",\n                \"let unchanged = 13;\\n// same entity, new options\",\n                window,\n                cx,\n            )\n        });\n        editor.update(cx, |editor, cx| {\n            editor.set_rows(3, cx);\n            editor.set_line_numbers(false, cx);\n            editor.set_read_only(true, cx);\n        });\n        let document = RichTextDocument::new([RichTextBlock::new(\n            \"options-body\",\n            \"Caller-owned rich text remains attached to the same session.\",\n        )])\n        .expect(\"fixture document is valid\");\n        let session = cx.new(|_| RichTextEditSession::new(document));\n        let next_id = Rc::new(std::cell::Cell::new(0_u64));\n        let rich = cx.new(|cx| {\n            RichTextEditor::new(\n                \"scene.options.rich\",\n                session,\n                move || {\n                    let id = next_id.get() + 1;\n                    next_id.set(id);\n                    RichTextBlockId::new(format!(\"options-{id}\"))\n                },\n                window,\n                cx,\n            )\n        });\n        rich.update(cx, |editor, cx| {\n            editor.set_rows(2, cx);\n            editor.set_max_rows(None, cx);\n            editor.set_toolbar(false, cx);\n        });\n        cx.set_global(SceneEditorOptions(area, editor, rich));\n    }\n    let theme = cx.theme().clone();\n    let editors = cx.global::<SceneEditorOptions>();\n    stack(&theme).w(px(720.0))\n        .child(caption(&theme, \"fixture · retained options: large autosizing text / read-only source without gutter / fixed rich text without toolbar\"))\n        .child(editors.0.clone()).child(editors.1.clone()).child(editors.2.clone())\n        .into_any_element()\n}\n\nstruct SceneFoldedEditor(Entity<Editor>);\n\nimpl Global for SceneFoldedEditor {}\n\npub(super) fn editor_folding(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneFoldedEditor>() {\n        let editor = cx.new(|cx| Editor::new(\"scene.editor.folding\", \"Folded Unicode source fixture\", \"fn outer() {\\n    let 界 = 13;\\n    if ready {\\n        process();\\n    }\\n}\\nfn tail() {}\\n\", window, cx).rows(6));\n        editor.update(cx, |editor, cx| {\n            use crate::controls::editor::EditorFold;\n            editor.set_folds(\n                0,\n                vec![\n                    EditorFold {\n                        id: \"outer\".into(),\n                        lines: 0..6,\n                    },\n                    EditorFold {\n                        id: \"ready\".into(),\n                        lines: 2..5,\n                    },\n                ],\n                cx,\n            );\n            editor.set_fold_collapsed(\"ready\", true, cx);\n        });\n        cx.set_global(SceneFoldedEditor(editor));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme).w(px(760.0))\n        .child(caption(&theme, \"fixture · nested source folds · gutter toggles or Ctrl-Alt-F · hidden text remains in the document\"))\n        .child(cx.global::<SceneFoldedEditor>().0.clone())\n        .into_any_element()\n}\n\nstruct SceneEditorServices(Vec<Entity<Editor>>);\n\nimpl Global for SceneEditorServices {}\n\npub(super) fn editor_services(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::controls::editor::*;\n    if !cx.has_global::<SceneEditorServices>() {\n        let editors = [\"ready\", \"loading\", \"refused\", \"hover\"].map(|state| {\n            let editor = cx.new(|cx| {\n                Editor::new(\n                    format!(\"scene.editor.services.{state}\"),\n                    format!(\"Language service {state} fixture\"),\n                    \"let count = val;\\n// caller-owned fixture\",\n                    window,\n                    cx,\n                )\n                .rows(3)\n                .language_services(true)\n            });\n            editor.update(cx, |editor, cx| {\n                let kind = if state == \"hover\" {\n                    EditorServiceKind::Hover\n                } else {\n                    EditorServiceKind::Completion\n                };\n                let request = editor\n                    .request_service(kind, 14, cx)\n                    .expect(\"fixture request\");\n                editor.set_diagnostics(\n                    0,\n                    vec![EditorDiagnostic {\n                        id: \"unresolved-value\".into(),\n                        range: 12..15,\n                        message: \"Fixture: unresolved name\".into(),\n                        severity: EditorDiagnosticSeverity::Warning,\n                    }],\n                    cx,\n                );\n                editor.set_semantic_tokens(\n                    0,\n                    vec![EditorSemanticToken {\n                        range: 0..3,\n                        class: gpui_kit_theme::SyntaxColor::Keyword,\n                    }],\n                    cx,\n                );\n                let result = match state {\n                    \"loading\" => AsyncValue::loading(),\n                    \"refused\" => AsyncValue::refused(\"Fixture host denied this request\"),\n                    \"hover\" => AsyncValue::ready(EditorServiceResult::Hover(EditorHover {\n                        range: 12..15,\n                        contents: \"Fixture: value → integer\\nDocumentation is caller text.\".into(),\n                    })),\n                    _ => AsyncValue::ready(EditorServiceResult::Items(vec![EditorServiceItem {\n                        id: \"value\".into(),\n                        label: \"value\".into(),\n                        detail: Some(\" · integer (fixture)\".into()),\n                        effect: EditorServiceEffect::Edits(vec![EditorReplacement {\n                            range: 12..15,\n                            text: \"value\".into(),\n                        }]),\n                    }])),\n                };\n                editor.set_service_result(request.id, result, cx);\n            });\n            editor\n        });\n        cx.set_global(SceneEditorServices(editors.into()));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme).w(px(900.0))\n        .child(caption(&theme, \"caller fixtures · completion / loading / host refusal / hover + diagnostic · no server process\"))\n        .children(cx.global::<SceneEditorServices>().0.chunks(2).map(|pair| {\n            row(&theme).items_start().children(pair.iter().map(|editor| div().w(px(430.0)).h(px(225.0)).child(editor.clone())))\n        }))\n        .into_any_element()\n}\n\npub(super) struct SceneMentionInput {\n    input: Entity<MentionInput>,\n}\n\nimpl Global for SceneMentionInput {}\n\npub(super) fn ensure_mention_input(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneMentionInput>() {\n        return;\n    }\n    let editor = cx.new(|cx| {\n        TextArea::new(\"scene.mention.editor\", window, cx)\n            .text(\"Please ask @ad\")\n            .placeholder(\"Message the team\")\n            .enter(Enter::Submits)\n            .rows(2)\n    });\n    let input = cx.new(|cx| {\n        MentionInput::new(\"scene.mention\", editor.clone(), cx).candidates([\n            MentionCandidate::new(\"ada\", \"Ada Lovelace\")\n                .description(\"Compiler group\")\n                .replacement(\"@Ada\"),\n            MentionCandidate::new(\"adam\", \"Adam Stokes\")\n                .description(\"Release engineering\")\n                .replacement(\"@Adam\"),\n            MentionCandidate::new(\"admin\", \"Workspace administrators\")\n                .description(\"Group mention\")\n                .replacement(\"@admins\")\n                .unavailable(\"Group mentions are disabled here\"),\n        ])\n    });\n    window.focus(&editor.read(cx).focus_handle(cx), cx);\n    cx.set_global(SceneMentionInput { input });\n}\n\npub(super) fn mention_input(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_mention_input(window, cx);\n    let input = cx.global::<SceneMentionInput>().input.clone();\n    let theme = cx.theme().clone();\n    div()\n        .column()\n        .gap_token(&theme, Space::Sm)\n        .p_token(&theme, Space::Lg)\n        .w(px(420.0))\n        .child(caption(\n            &theme,\n            \"the editor owns text; the anchored menu owns only @query completion\",\n        ))\n        .child(input)\n        .into_any_element()\n}\n\npub(super) struct SceneRichTextEditor {\n    editor: Entity<RichTextEditor>,\n}\n\nimpl Global for SceneRichTextEditor {}\n\npub(super) fn ensure_rich_text_editor(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneRichTextEditor>() {\n        return;\n    }\n    let title_text = \"A structured editing surface\";\n    let body_text = \"Inline code stays quiet, links remain caller-owned, and diagnostics keep their actual severity.\";\n    let code_start = body_text\n        .find(\"Inline code\")\n        .expect(\"fixture phrase exists\");\n    let code_end = code_start + \"Inline code\".len();\n    let link_start = body_text.find(\"links\").expect(\"fixture phrase exists\");\n    let link_end = link_start + \"links\".len();\n    let document = RichTextDocument::new([\n        RichTextBlock::new(\"rich-title\", title_text).with_style(\n            0..title_text.len(),\n            RichTextInlineStyle::default().with_format(RichTextFormat::Bold, true),\n        ),\n        RichTextBlock::new(\"rich-body\", body_text)\n            .with_style(\n                code_start..code_end,\n                RichTextInlineStyle::default().with_format(RichTextFormat::Code, true),\n            )\n            .with_style(\n                link_start..link_end,\n                RichTextInlineStyle::default()\n                    .with_link(Some(\"https://example.invalid/policy\".into())),\n            ),\n        RichTextBlock::new(\"rich-list-one\", \"Host owns persistence and collaboration.\")\n            .with_paragraph(\n                RichTextParagraphStyle::default()\n                    .with_list(Some(RichTextListItem::new(RichTextListKind::Unordered))),\n            ),\n        RichTextBlock::new(\n            \"rich-list-two\",\n            \"Kit owns selection, IME, layout, and formatting.\",\n        )\n        .with_paragraph(\n            RichTextParagraphStyle::default()\n                .with_list(Some(RichTextListItem::new(RichTextListKind::Unordered))),\n        ),\n        RichTextBlock::new(\"rich-centered\", \"Alignment shares caret geometry.\").with_paragraph(\n            RichTextParagraphStyle::default().with_alignment(RichTextAlignment::Center),\n        ),\n    ])\n    .expect(\"fixture document is valid\");\n    let session = cx.new(|_| RichTextEditSession::new(document));\n    let next_id = Rc::new(std::cell::Cell::new(0_u64));\n    let editor = cx.new(|cx| {\n        let next_id = Rc::clone(&next_id);\n        RichTextEditor::new(\n            \"scene.rich-text-editor\",\n            session,\n            move || {\n                let value = next_id.get().wrapping_add(1);\n                next_id.set(value);\n                RichTextBlockId::new(format!(\"scene-rich-{value}\"))\n            },\n            window,\n            cx,\n        )\n        .name(\"Structured document\")\n        .rows(8)\n        .max_rows(8)\n        .diagnostics([RichTextDiagnostic::new(\n            RichTextRange {\n                start: RichTextPosition::new(\"rich-body\", link_start),\n                end: RichTextPosition::new(\"rich-body\", link_end),\n            },\n            RichTextDiagnosticSeverity::Warning,\n        )])\n    });\n    cx.set_global(SceneRichTextEditor { editor });\n}\n\npub(super) fn rich_text_editor(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_rich_text_editor(window, cx);\n    let editor = cx.global::<SceneRichTextEditor>().editor.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(720.0))\n        .child(caption(\n            &theme,\n            \"one caller-owned document; styled blocks, lists, diagnostics, IME, and semantics share one projection\",\n        ))\n        .child(editor)\n        .into_any_element()\n}\n\npub(super) 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                            .hint(\"PDF, PNG, or plain text\")\n                            .refusal(\"A folder cannot be attached.\")\n                            .state(DropzoneState::Refusing)\n                            .on_files(|_, _, _| {}),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\nstruct SceneSettingsInputs(Vec<Entity<TextInput>>);\nimpl Global for SceneSettingsInputs {}\n\npub(super) fn settings_page(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let search = window.use_keyed_state(\"scene.settings-page.search\", cx, |window, cx| {\n        SearchInput::new(\"scene.settings-page.query\", window, cx).placeholder(\"Search settings\")\n    });\n    let category = window.use_keyed_state(\"scene.settings-page.category\", cx, |_, _| {\n        SharedString::from(\"all\")\n    });\n    let selected = category.read(cx).clone();\n    let query = search.read(cx).value(cx);\n    let general = SettingsSection::new(\"scene.settings-page.general\", \"General\")\n        .label_width(px(150.0))\n        .row(SettingsRow::new(\"scene.settings-page.autosave\", \"Automatic save\").value(\"On\"))\n        .row(\n            SettingsRow::new(\"scene.settings-page.telemetry\", \"Usage reporting\")\n                .value(\"Off\")\n                .managed(\"fixture administrator\"),\n        );\n    let appearance = SettingsSection::new(\"scene.settings-page.appearance\", \"Appearance\")\n        .label_width(px(150.0))\n        .row(SettingsRow::new(\"scene.settings-page.theme\", \"Theme\").value(\"Studio\"))\n        .row(SettingsRow::new(\"scene.settings-page.density\", \"Density\").value(\"Comfortable\"));\n    let sections = match selected.as_ref() {\n        \"general\" => vec![general],\n        \"appearance\" => vec![appearance],\n        _ => vec![general, appearance],\n    };\n    let header_search = search.clone();\n    stack(&theme).w(px(840.0))\n        .child(caption(&theme, \"Fixture settings page: category navigation and search remain available when there are no matches\"))\n        .child(SettingsList::new(\"scene.settings-page.list\").query(query).sections(sections)\n            .slot(\"header\", move |_, cx| {\n                let theme = cx.theme();\n                div().column().gap_token(theme, Space::Sm)\n                    .child(crate::foundation::text(theme, TypeScale::Title, \"Settings\"))\n                    .child(header_search.clone()).into_any_element()\n            })\n            .slot(\"sidebar\", move |_, _| {\n                let category = category.clone();\n                Sidebar::new(\"scene.settings-page.categories\")\n                    .fit_height()\n                    .section(SidebarSection::new(\"sections\").items([\n                        SidebarItem::new(\"all\", \"All settings\"), SidebarItem::new(\"general\", \"General\"),\n                        SidebarItem::new(\"appearance\", \"Appearance\")]))\n                    .active(selected.clone()).on_select(move |id, _, cx| category.update(cx, |value, cx| {\n                        *value = id; cx.notify();\n                    })).into_any_element()\n            })\n            .slot(\"footer\", move |_, _| {\n                let search = search.clone();\n                Button::new(\"scene.settings-page.reset\").label(\"Reset search\")\n                    .on_click(move |_, cx| search.update(cx, |search, cx| search.set_value(\"\", cx)))\n                    .into_any_element()\n            }))\n        .into_any_element()\n}\n\npub(super) fn settings(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSettingsInputs>() {\n        let inputs = [(\"name\", \"Fixture assistant\"), (\"model\", \"Local model\")]\n            .into_iter()\n            .map(|(id, value)| {\n                cx.new(|cx| {\n                    TextInput::new(format!(\"scene.settings.fields.{id}.input\"), window, cx)\n                        .text(value)\n                        .control_size(ControlSize::Sm)\n                })\n            })\n            .collect();\n        cx.set_global(SceneSettingsInputs(inputs));\n    }\n    let fields = cx.global::<SceneSettingsInputs>().0.clone();\n    let theme = cx.theme().clone();\n    let general = || {\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                    .search_terms([\"engine\", \"local executor\"])\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    let sync = || {\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                    .description(\"Keyboard, theme, and editor preferences\")\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                    .description(\"Runs and transcripts from the last 30 days\")\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\n    stack(&theme)\n        .w_full()\n        .child(\n            row(&theme)\n                .w_full()\n                .items_start()\n                // The filtered list opens with its own count, so the\n                // unfiltered one is given a line saying what it is. Without\n                // it the two pages start at different heights and nothing in\n                // the picture says why one column sits lower than the other.\n                .child(\n                    div()\n                        .flex_1()\n                        .min_w_0()\n                        .column()\n                        .gap_token(&theme, Space::Md)\n                        .child(caption(&theme, \"no query, so every section\"))\n                        .child(SettingsList::new(\"scene.settings.all\").section(general())),\n                )\n                .child(\n                    div().flex_1().min_w_0().child(\n                        SettingsList::new(\"scene.settings.filtered\")\n                            .query(\"sync\")\n                            .section(general())\n                            .section(sync()),\n                    ),\n                ),\n        )\n        .child(\n            SettingsSection::new(\"scene.settings.fields\", \"Aligned fields and custom blocks\")\n                .description(\"120px labels; flexible fields; annotations at the reading end\")\n                .label_width(px(120.0))\n                .row(\n                    SettingsRow::new(\"scene.settings.fields.name\", \"Name\")\n                        .control(fields[0].clone())\n                        .description(\"Visible in the workspace\"),\n                )\n                .child(\n                    crate::display::card::ListRow::new()\n                        .id(\"scene.settings.fields.device\")\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Fixture device · connected\",\n                        )),\n                )\n                .row(\n                    SettingsRow::new(\"scene.settings.fields.model\", \"Model\")\n                        .control(fields[1].clone())\n                        .description(\"Chosen by the caller\"),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) 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}\n\npub(super) 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}\n\n#[derive(Clone)]\npub(super) struct SceneRecorders {\n    idle: Entity<KeybindingRecorder>,\n    recording: Entity<KeybindingRecorder>,\n    captured: Entity<KeybindingRecorder>,\n    conflicting: Entity<KeybindingRecorder>,\n}\n\nimpl Global for SceneRecorders {}\n\npub(super) 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}\n\n#[derive(Clone)]\npub(super) struct SceneKeymapEditor(Entity<KeymapEditor>);\n\nimpl Global for SceneKeymapEditor {}\n\npub(super) fn keymap_editor(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneKeymapEditor>() {\n        let editor = cx.new(|cx| {\n            KeymapEditor::new(\"scene.keymap-editor\", window, cx).commands([\n                KeymapCommand::new(\"workspace.open\", \"Open workspace\")\n                    .context(\"Workspace\")\n                    .defaults([\"cmd-o\"])\n                    .bindings([\n                        KeymapBinding::new(\"user\", \"cmd-shift-o\")\n                            .conflict(\"Already opens recent workspaces\")\n                            .provenance(\"User keymap\"),\n                        KeymapBinding::new(\"workspace\", \"ctrl-o\").provenance(\"Workspace keymap\"),\n                    ])\n                    .searchable(\"Open a folder or project\", [\"folder\", \"project\"]),\n                KeymapCommand::new(\"terminal.toggle\", \"Toggle terminal\")\n                    .context(\"Terminal\")\n                    .defaults([\"ctrl-`\"])\n                    .bindings([KeymapBinding::new(\"default\", \"ctrl-`\")])\n                    .searchable(\"Show the integrated terminal\", [\"panel\", \"console\"]),\n                KeymapCommand::new(\"policy.locked\", \"Managed shortcut\")\n                    .context(\"Workspace\")\n                    .defaults([\"cmd-l\"])\n                    .bindings([KeymapBinding::new(\"managed\", \"cmd-l\").provenance(\"Host policy\")])\n                    .refused(\"This binding is managed by the host.\"),\n            ])\n        });\n        cx.set_global(SceneKeymapEditor(editor));\n    }\n    let editor = cx.global::<SceneKeymapEditor>().0.clone();\n    let theme = cx.theme().clone();\n\n    stack(&theme)\n        .w(px(760.0))\n        .child(editor)\n        .child(caption(\n            &theme,\n            \"Bindings remain caller-owned; add, remove, and reset are intents.\",\n        ))\n        .into_any_element()\n}\n\npub(super) 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}\n\npub(super) 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}\n\npub(super) fn color_picker(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let current = theme.colors.info;\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"the value is caller-owned; presets and recents are host lists\",\n        ))\n        .child(\n            ColorPicker::new(\"scene.color.picker\", current)\n                .alpha(true)\n                .presets([\n                    theme.colors.danger,\n                    theme.colors.warning,\n                    theme.colors.info,\n                    theme.colors.success,\n                    theme.colors.accent,\n                ])\n                .recent([theme.colors.accent, theme.colors.success])\n                .on_change(|_, _, _| {}),\n        )\n        .child(caption(&theme, \"a swatch reports the colour it was given\"))\n        .child(\n            row(&theme)\n                .items_start()\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(ColorSwatch::new(\n                            \"scene.color.swatch.accent\",\n                            theme.colors.accent,\n                        ))\n                        .child(caption(&theme, \"Default\")),\n                )\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            ColorSwatch::new(\"scene.color.swatch.selected\", current)\n                                .selected(true)\n                                .on_click(|_, _, _| {}),\n                        )\n                        .child(caption(&theme, \"Selected\")),\n                )\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            ColorSwatch::new(\"scene.color.swatch.disabled\", theme.colors.danger)\n                                .disabled(true),\n                        )\n                        .child(caption(&theme, \"Disabled\")),\n                ),\n        )\n        .into_any_element()\n}\n\n//! Rows, columns, and hierarchies of caller-owned records.\n\nuse super::support::*;\n\n/// An interactive fixture: candidate moves do not alter the declared order.\npub(super) fn deferred_drop(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::interaction::dnd::{DeferredDrop, DropDecision, DropRefusal};\n    let theme = cx.theme().clone();\n    let mut content = stack(&theme).w(px(660.0)).child(caption(\n        &theme,\n        \"Fixture: request a move, then approve or refuse it. The host keeps its order.\",\n    ));\n    for (kind, surface) in [\n        (0, \"scene.deferred.list\"),\n        (1, \"scene.deferred.tabs\"),\n        (2, \"scene.deferred.tree\"),\n    ] {\n        let slot = crate::motion::keyed::slot::<Option<DeferredDrop>>(\n            &surface.into(),\n            window.window_handle().window_id(),\n            cx,\n        );\n        let controller = slot\n            .borrow_mut()\n            .get_or_insert_with(|| {\n                DeferredDrop::new(\n                    Duration::from_secs(30),\n                    |intent, _, _| intent.item.id == \"gamma\" && intent.position.anchor() == \"alpha\",\n                    |_, _, _| {},\n                )\n            })\n            .clone();\n        let request = controller.clone();\n        let approve = controller.clone();\n        let refuse = controller.clone();\n        let rows = [\"alpha\", \"beta\", \"gamma\"];\n        let element = match kind {\n            0 => List::new(surface, rows.len(), move |index, _, _| {\n                ListItem::new(rows[index], rows[index]).text(rows[index])\n            })\n            .keys(rows)\n            .reorderable(true)\n            .deferred_acceptance(controller, 1)\n            .on_reorder(|_, _, _| {})\n            .into_any_element(),\n            1 => Tabs::new(surface)\n                .tabs(rows.map(|id| TabItem::new(id, id)))\n                .reorderable(true)\n                .deferred_acceptance(controller, 1)\n                .on_reorder(|_, _, _| {})\n                .into_any_element(),\n            _ => Tree::new(surface)\n                .nodes(rows.map(|id| TreeNode::new(id, id)))\n                .reorderable(true)\n                .deferred_acceptance(controller, 1)\n                .on_move(|_, _, _| {})\n                .into_any_element(),\n        };\n        content = content\n            .child(caption(&theme, surface))\n            .child(element)\n            .child(\n                row(&theme)\n                    .child(\n                        Button::new(format!(\"{surface}.request\"))\n                            .label(\"Request move\")\n                            .on_click(move |window, cx| {\n                                request.request(\n                                    DropIntent {\n                                        item: DragItem::new(surface, \"gamma\", \"gamma\"),\n                                        position: DropPosition::Before(\"alpha\".into()),\n                                        velocity: crate::motion::Velocity::ZERO,\n                                    },\n                                    window,\n                                    cx,\n                                );\n                            }),\n                    )\n                    .child(\n                        Button::new(format!(\"{surface}.approve\"))\n                            .label(\"Approve\")\n                            .on_click(move |window, cx| {\n                                if let Some((request, _)) = approve.status() {\n                                    approve.resolve(request.id, DropDecision::Accepted, window, cx);\n                                }\n                            }),\n                    )\n                    .child(\n                        Button::new(format!(\"{surface}.refuse\"))\n                            .label(\"Refuse\")\n                            .on_click(move |window, cx| {\n                                if let Some((request, _)) = refuse.status() {\n                                    refuse.resolve(\n                                        request.id,\n                                        DropDecision::Refused(DropRefusal::Policy),\n                                        window,\n                                        cx,\n                                    );\n                                }\n                            }),\n                    ),\n            );\n    }\n    content.into_any_element()\n}\n\npub(super) fn image_list(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let items = [\n        (\"native\", \"Native runtime\", \"Runtime\"),\n        (\"gateway\", \"Remote gateway\", \"Gateway\"),\n        (\"archive\", \"Archive models\", \"Archive\"),\n        (\"preview\", \"Preview models\", \"Preview\"),\n        (\"disabled\", \"Managed image\", \"Policy\"),\n    ];\n    stack(&theme)\n        .w(px(840.0))\n        .child(caption(\n            &theme,\n            \"Caller-owned media tiles reflow from two to four measured columns\",\n        ))\n        .child(\n            ImageList::new(\"scene.image-list\")\n                .columns(2)\n                .columns_at(Breakpoint::Medium, 4)\n                .selected(\"gateway\")\n                .items(items.into_iter().map(|(id, label, image)| {\n                    ImageListItem::new(id, label, scene_picture(image, cx))\n                        .disabled(id == \"disabled\")\n                }))\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) fn masonry(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let cards = [\n        (\"short\", \"Short result\", 72.0),\n        (\"medium\", \"A result with a little more detail\", 124.0),\n        (\n            \"tall\",\n            \"A result whose caller-measured content is taller\",\n            184.0,\n        ),\n        (\"another\", \"Another result\", 96.0),\n        (\"last\", \"The final result\", 140.0),\n    ];\n    stack(&theme)\n        .w(px(640.0))\n        .child(caption(\n            &theme,\n            \"Column placement uses caller-measured heights and reflows at measured container breakpoints\",\n        ))\n        .child(\n            Masonry::new(\"scene.masonry\")\n                .columns(2)\n                .columns_at(Breakpoint::Medium, 3)\n                .gap(Space::Sm)\n                .items(cards.into_iter().map(|(id, label, height)| {\n                    MasonryItem::new(\n                        id,\n                        Card::new()\n                            .id(format!(\"scene.masonry.card.{id}\"))\n                            .padding(Space::Md)\n                            .child(crate::foundation::text(&theme, TypeScale::Label, label)),\n                        height,\n                    )\n                })),\n        )\n        .into_any_element()\n}\n\npub(super) fn diagnostics_list(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let diagnostics = [\n        Diagnostic::new(\n            \"fixture-error\",\n            DiagnosticSeverity::Error,\n            DiagnosticLocation::new(\"fixture.rs:18\"),\n            \"Fixture diagnostic: incompatible value\",\n        )\n        .action(DiagnosticAction::new(\"inspect\", \"Inspect fixture\")),\n        Diagnostic::new(\n            \"fixture-warning\",\n            DiagnosticSeverity::Warning,\n            DiagnosticLocation::new(\"fixture.rs:31\"),\n            \"Fixture diagnostic: unused declaration\",\n        ),\n        Diagnostic::new(\n            \"fixture-information\",\n            DiagnosticSeverity::Information,\n            DiagnosticLocation::new(\"fixture.rs:47\"),\n            \"Fixture diagnostic: a simpler form is available\",\n        ),\n        Diagnostic::new(\n            \"fixture-hint\",\n            DiagnosticSeverity::Hint,\n            DiagnosticLocation::new(\"fixture.rs:64\"),\n            \"Fixture diagnostic: consider a descriptive name\",\n        ),\n    ];\n    stack(&theme)\n        .w(px(760.0))\n        .child(caption(\n            &theme,\n            \"synthetic diagnostics; filters, selection, and actions are caller-owned intents\",\n        ))\n        .child(\n            DiagnosticsList::new(\"scene.diagnostics\", Loadable::Ready(diagnostics.to_vec()))\n                .selected(\"fixture-warning\")\n                .visible_rows(5)\n                .on_filter(|_, _, _| {})\n                .on_select(|_, _, _| {})\n                .on_action(|_, _, _, _| {}),\n        )\n        .into_any_element()\n}\n\n/// How many records the list fixture claims to hold.\n///\n/// The count exists to make the difference visible: the list publishes all of\n/// it, and renders only the handful the viewport can show.\npub(super) const FIXTURE_RECORDS: usize = 240;\n\n/// One synthetic record. Nothing here stands for a product: the identity is a\n/// fixture key and the label says so.\npub(super) fn fixture_record(index: usize) -> (SharedString, SharedString) {\n    (\n        SharedString::from(format!(\"record-{index:04}\")),\n        SharedString::from(format!(\"Fixture record {index:04}\")),\n    )\n}\n\npub(super) 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            crate::foundation::text(\n                &theme,\n                TypeScale::Caption,\n                SharedString::from(format!(\n                    \"{FIXTURE_RECORDS} fixture records; only the rendered ones publish\"\n                )),\n            )\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .py_token(&theme, Space::Sm)\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}\n\n/// What one flow row holds: a label, and prose whose length decides how tall\n/// the row turns out to be.\nfn fixture_entry(index: usize) -> (SharedString, SharedString) {\n    let body = match index % 3 {\n        0 => \"A short entry.\".to_string(),\n        1 => \"An entry long enough to wrap onto a second line, which is what \\\n              makes this row taller than the one above it.\"\n            .to_string(),\n        _ => \"An entry longer still. Nothing here is a slot: the row is as \\\n              tall as the prose it holds, and the flow measures it once, when \\\n              it first comes into view, then keeps that measurement while the \\\n              rows around it change.\"\n            .to_string(),\n    };\n    (\n        SharedString::from(format!(\"entry-{index:04}\")),\n        SharedString::from(body),\n    )\n}\n\nconst FLOW_VISIBLE_ROWS: usize = 5;\n\npub(super) fn flow(_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            \"rows drawn by the caller, laid out only where the viewport reaches; \\\n             a row is as tall as what it holds\",\n        ))\n        .child(\n            div()\n                .column()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    // A row is as tall as its prose, so the viewport's edge\n                    // falls wherever it falls — through a line of text as\n                    // often as between two. The fade is what turns that from\n                    // a glyph sliced in half into a statement that the entries\n                    // carry on past the edge.\n                    ScrollFade::new(\"scene.flow.edge\")\n                        .bottom(true)\n                        .fit_height()\n                        .child({\n                            let theme = theme.clone();\n                            div()\n                                .w_full()\n                                .child(\n                                    Flow::new(\n                                        \"scene.flow.entries\",\n                                        FIXTURE_RECORDS,\n                                        move |index, _, cx| {\n                                            let (id, body) = fixture_entry(index);\n                                            // A flow publishes nothing of its own, so the rows say\n                                            // what they are — which is the arrangement any caller\n                                            // drawing its own rows ends up with.\n                                            div()\n                                                .w_full()\n                                                .column()\n                                                .gap_token(&theme, Space::Xs)\n                                                .px_token(&theme, Space::Md)\n                                                .py_token(&theme, Space::Sm)\n                                                .child(\n                                                    crate::foundation::text(\n                                                        &theme,\n                                                        TypeScale::Caption,\n                                                        id.clone(),\n                                                    )\n                                                    .text_tone(&theme, TextTone::Muted),\n                                                )\n                                                .child(crate::foundation::text(\n                                                    &theme,\n                                                    TypeScale::Body,\n                                                    body.clone(),\n                                                ))\n                                                .semantic_in(\n                                                    cx,\n                                                    NodeSpec::new(\n                                                        format!(\"scene.flow.entries.{id}\"),\n                                                        Role::Row,\n                                                    )\n                                                    .parent(\"scene.flow.entries\")\n                                                    .text(body),\n                                                )\n                                                .into_any_element()\n                                        },\n                                    )\n                                    .estimate(72.0)\n                                    .visible_rows(FLOW_VISIBLE_ROWS),\n                                )\n                                .semantic_in(\n                                    cx,\n                                    NodeSpec::new(\"scene.flow.entries\", Role::List)\n                                        .value(FIXTURE_RECORDS.to_string()),\n                                )\n                        }),\n                )\n                .child(rule(&theme))\n                // How much is past the edge, and something to do about it. A\n                // count on its own states the overflow and leaves the reader\n                // to find the rest by dragging.\n                .child(\n                    div()\n                        .row()\n                        .w_full()\n                        .gap_token(&theme, Space::Sm)\n                        .px_token(&theme, Space::Md)\n                        .py_token(&theme, Space::Xs)\n                        .child(caption(\n                            &theme,\n                            SharedString::from(format!(\n                                \"{} more below\",\n                                FIXTURE_RECORDS - FLOW_VISIBLE_ROWS\n                            )),\n                        ))\n                        .child(div().flex_1())\n                        .child(\n                            Button::new(\"scene.flow.end\")\n                                .label(\"Go to the end\")\n                                .ghost()\n                                .small()\n                                .on_click(|window, cx| {\n                                    crate::data::glide_to_row(\n                                        &Ident::from(\"scene.flow.entries\"),\n                                        FIXTURE_RECORDS - 1,\n                                        window,\n                                        cx,\n                                    );\n                                }),\n                        ),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) 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    let 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    stack(&theme)\n        .w(px(600.0))\n        .child(\n            Table::new(\"scene.table.runs\")\n                .columns(columns.clone())\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        .child(\n            Table::new(\"scene.table.stale\")\n                .columns(columns.clone())\n                .rows([Row::new(\"run-a04\")\n                    .text(\"Indexing\")\n                    .cell(\"name\", \"Indexing\")\n                    .cell(\"state\", state(\"Ready\", Tone::Success))\n                    .cell(\"duration\", \"4m 12s\")])\n                .failure(\"The host refused the refresh\")\n                .on_select(|_, _, _| {}),\n        )\n        .child(\n            Table::new(\"scene.table.empty\")\n                .columns(columns)\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\n/// How many rows the fixture host has handed over, and how many exist behind\n/// it. The two numbers differ on purpose: that gap is what the select-all box\n/// and the bulk bar have to be honest about.\npub(super) const FIXTURE_JOBS_LOADED: usize = 240;\n\npub(super) const FIXTURE_JOBS_TOTAL: usize = 12_000;\n\n/// One synthetic job. Nothing here stands for a product: the identity is a\n/// fixture key and the label says so.\npub(super) fn fixture_job(\n    index: usize,\n) -> (SharedString, SharedString, SharedString, SharedString) {\n    const PHASES: [&str; 4] = [\"Indexing\", \"Verifying\", \"Publishing\", \"Archiving\"];\n    const OWNERS: [&str; 3] = [\"fixture-a\", \"fixture-b\", \"fixture-c\"];\n    (\n        SharedString::from(format!(\"job-{index:04}\")),\n        SharedString::from(format!(\"{} {index:04}\", PHASES[index % PHASES.len()])),\n        SharedString::from(OWNERS[index % OWNERS.len()]),\n        SharedString::from(format!(\"{}m {:02}s\", index % 9 + 1, index * 7 % 60)),\n    )\n}\n\npub(super) fn fixture_job_tone(index: usize) -> (&'static str, Tone) {\n    match index % 4 {\n        0 => (\"Ready\", Tone::Success),\n        1 => (\"Stale\", Tone::Warning),\n        2 => (\"Refused\", Tone::Danger),\n        _ => (\"Managed\", Tone::Neutral),\n    }\n}\n\npub(super) fn grid_columns() -> [GridColumn; 4] {\n    [\n        // Declared second, drawn first: a pinned column holds the leading\n        // reading edge whatever order the caller puts the columns in.\n        GridColumn::new(\"owner\", \"Owner\")\n            .fixed(240.0)\n            .reorderable(true)\n            .editable(true),\n        GridColumn::new(\"name\", \"Job\")\n            .fixed(260.0)\n            .pinned(true)\n            .sortable(true)\n            .resizable(true),\n        GridColumn::new(\"state\", \"State\")\n            .fixed(180.0)\n            .reorderable(true),\n        GridColumn::new(\"duration\", \"Duration\")\n            .fixed(180.0)\n            .align(Align::End)\n            .sortable(true)\n            .resizable(true)\n            .reorderable(true),\n    ]\n}\n\npub(super) fn grid_row(index: usize) -> GridRow {\n    let (id, name, owner, duration) = fixture_job(index);\n    let (label, tone) = fixture_job_tone(index);\n    GridRow::new(id)\n        .text(name.clone())\n        .cell(\"name\", Cell::new(name.clone()).text(name).published(true))\n        .cell(\"owner\", Cell::new(owner.clone()).text(owner))\n        .cell(\n            \"state\",\n            Cell::new(Badge::new(label).tone(tone))\n                .text(label)\n                .published(true),\n        )\n        .cell(\"duration\", duration)\n}\n\npub(super) fn grid_detail(theme: &Theme, id: SharedString) -> AnyElement {\n    div()\n        .column()\n        .gap(px(theme.spacing.xs))\n        .child(\n            crate::foundation::text(\n                theme,\n                TypeScale::Caption,\n                SharedString::from(format!(\"Fixture detail for {id}\")),\n            )\n            .text_tone(theme, TextTone::Muted),\n        )\n        .child(\n            crate::foundation::text(\n                theme,\n                TypeScale::Body,\n                SharedString::from(\n                    \"Only an opened row builds this region; the rest never ask for it.\",\n                ),\n            )\n            .text_tone(theme, TextTone::Muted),\n        )\n        .into_any_element()\n}\n\npub(super) 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            // Groups stay within one scrolling section, so each bracket has\n            // one visual address while the Job section remains frozen.\n            .group(ColumnGroup::new(\"identity\", \"Identity\").columns([\"name\"]))\n            .group(\n                ColumnGroup::new(\"execution\", \"Execution\").columns([\"owner\", \"state\", \"duration\"]),\n            )\n            .footer_cell(\"duration\", \"4.2s\")\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            .range(Some(CellRange::new(\n                \"job-0001\", \"name\", \"job-0003\", \"state\",\n            )))\n            .on_range_change(|_, _, _| {})\n            .on_copy(|_, _, _| {}),\n        )\n        .child(\n            crate::foundation::text(\n                &theme,\n                TypeScale::Caption,\n                SharedString::from(format!(\n                    \"{FIXTURE_JOBS_LOADED} of {FIXTURE_JOBS_TOTAL} loaded · scroll right for \\\n                     Duration · Job stays pinned\"\n                )),\n            )\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}\n\npub(super) fn data_grid_editing(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        // The four columns are 860 wide between them. At 760 the grid was\n        // correct — a wide grid scrolls — but the exhibit was not: it sorts by\n        // duration and hid the duration column, so the one end-aligned column\n        // in the catalogue and the sort mark on it were both off the edge of\n        // the picture a reviewer is sent to.\n        .w(px(880.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            crate::foundation::text(\n                &theme,\n                TypeScale::Caption,\n                SharedString::from(\n                    \"Escape reverts, enter commits, tab commits and moves on. The grid never \\\n                     writes the value.\",\n                ),\n            )\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}\n\npub(super) fn tree_grid(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // Whether a branch is open is structure, and the disclosure already says\n    // it. What belongs in a state column is what is true of the record — the\n    // same vocabulary, in the same pills, that `table` and `data-grid` use.\n    let rows = [\n        (\n            \"workspace\",\n            \"Workspace\",\n            1,\n            true,\n            true,\n            None,\n            \"Ready\",\n            Tone::Success,\n        ),\n        (\n            \"src\",\n            \"src\",\n            2,\n            true,\n            true,\n            Some(\"workspace\"),\n            \"Ready\",\n            Tone::Success,\n        ),\n        (\n            \"components\",\n            \"components\",\n            3,\n            false,\n            false,\n            Some(\"src\"),\n            \"Stale\",\n            Tone::Warning,\n        ),\n        (\n            \"lib\",\n            \"lib.rs\",\n            3,\n            false,\n            false,\n            Some(\"src\"),\n            \"Ready\",\n            Tone::Success,\n        ),\n        (\n            \"docs\",\n            \"docs\",\n            2,\n            true,\n            false,\n            Some(\"workspace\"),\n            \"Refused\",\n            Tone::Danger,\n        ),\n    ];\n    let owners = [\"Platform\", \"Runtime\", \"UI systems\", \"Runtime\", \"Docs\"];\n    let modified = [\"12:42\", \"12:31\", \"11:58\", \"11:44\", \"Yesterday\"];\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            TreeGrid::new(\"scene.tree-grid.files\", rows.len(), move |index, _, _| {\n                let (id, name, level, branch, expanded, parent, state, tone) = rows[index];\n                let mut row = TreeGridRow::new(id, level)\n                    .text(name)\n                    .cell(\"name\", Cell::new(name).text(name).published(true))\n                    .cell(\"kind\", if branch { \"Folder\" } else { \"File\" })\n                    .cell(\n                        \"state\",\n                        Cell::new(Badge::new(state).tone(tone))\n                            .text(state)\n                            .published(true),\n                    )\n                    .cell(\"owner\", owners[index])\n                    .cell(\"modified\", modified[index]);\n                if branch {\n                    row = row.branch(expanded);\n                }\n                if let Some(parent) = parent {\n                    row = row.parent(parent);\n                }\n                row\n            })\n            .columns([\n                GridColumn::new(\"name\", \"Name\").fixed(300.0).pinned(true),\n                GridColumn::new(\"kind\", \"Kind\").fixed(160.0),\n                GridColumn::new(\"state\", \"State\").fixed(180.0),\n                GridColumn::new(\"owner\", \"Owner\").fixed(200.0),\n                GridColumn::new(\"modified\", \"Modified\").fixed(180.0),\n            ])\n            .selected(\"components\")\n            .visible_rows(5)\n            .on_select(|_, _, _| {})\n            .on_expand(|_, _, _, _| {}),\n        )\n        .child(\n            crate::foundation::text(\n                &theme,\n                TypeScale::Caption,\n                SharedString::from(\n                    \"Scroll right for Owner and Modified; the hierarchy remains pinned.\",\n                ),\n            )\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}\n\npub(super) 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                .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                    TreeNode::new(\"remote\", \"remote\")\n                        .icon(Icon::Folder)\n                        .branch(BranchState::Loading),\n                    // A branch the host declined to list and one whose listing\n                    // failed are two different facts, and a reader deciding\n                    // whether to retry needs to know which one they are\n                    // looking at.\n                    TreeNode::new(\"vault\", \"vault\").icon(Icon::Folder).branch(\n                        BranchState::Unavailable(\n                            \"This workspace is not permitted to read it.\".into(),\n                        ),\n                    ),\n                    TreeNode::new(\"archive\", \"archive\")\n                        .icon(Icon::Folder)\n                        .branch(BranchState::Failed(\"The listing timed out.\".into())),\n                ])\n                .expanded_ids(&[\"workspace\", \"crates\", \"remote\", \"vault\", \"archive\"])\n                .on_toggle(|_, _, _, _| {})\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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                .child(\n                    div()\n                        .surface(&theme, Surface::Panel)\n                        .radius(&theme, Radius::Card)\n                        .py_token(&theme, Space::Xs)\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                )\n                // The ghost is what the pointer is holding, and the pointer is\n                // beside the rows rather than on top of them: staged over a\n                // row it would cut the label it is meant to be leaving.\n                .children(\n                    dnd::staged_ghost(cx)\n                        .map(|ghost| div().absolute().left(px(248.0)).top(px(52.0)).child(ghost)),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) 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                        // Beside the row it is landing on, and level with it:\n                        // a ghost drawn over the target hides the one thing\n                        // the picture is about.\n                        .map(|ghost| div().absolute().left(px(300.0)).top(px(155.0)).child(ghost)),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) fn kanban(_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            \"columns and cards are host-owned; a held card can report a move\",\n        ))\n        .child(\n            KanbanBoard::new(\"scene.kanban.ready\")\n                .columns([\n                    KanbanColumn::new(\"inbox\", \"Inbox\"),\n                    KanbanColumn::new(\"doing\", \"Doing\").limit(2),\n                    KanbanColumn::new(\"done\", \"Done\"),\n                ])\n                .cards([\n                    KanbanCard::new(\"triage\", \"Triage fixture\", \"inbox\")\n                        .detail(\"Waiting on review\"),\n                    KanbanCard::new(\"draw\", \"Draw scene\", \"doing\"),\n                    KanbanCard::new(\"caption\", \"Write captions\", \"doing\"),\n                    KanbanCard::new(\"audit\", \"Audit tokens\", \"doing\"),\n                    KanbanCard::new(\"ship\", \"Ship notes\", \"done\"),\n                ])\n                .held(\"triage\")\n                .on_card(|_, _, _| {})\n                .on_move(|_, _, _, _| {})\n                .on_add(|_, _, _| {}),\n        )\n        .child(KanbanBoard::new(\"scene.kanban.loading\").state(KanbanState::Loading))\n        .child(KanbanBoard::new(\"scene.kanban.empty\").state(KanbanState::Empty))\n        .child(\n            KanbanBoard::new(\"scene.kanban.unavailable\").state(KanbanState::Unavailable(\n                \"The board host refused the request.\".into(),\n            )),\n        )\n        .child(\n            KanbanBoard::new(\"scene.kanban.error\")\n                .state(KanbanState::Error(\"The board request failed.\".into())),\n        )\n        .into_any_element()\n}\n\n//! Dates and times, on a fixed fixture clock.\n\nuse std::rc::Rc;\n\nuse gpui::{AnyElement, App, Entity, Global, IntoElement, Window, div, prelude::*, px};\nuse gpui_kit_theme::{Space, TextTone, TypeScale};\n\nuse crate::datetime::fixture::FixtureDateAdapter;\nuse crate::datetime::{\n    Calendar, DateInput, DayMark, DayRange, RangePicker, SharedDateAdapter, TimeInput, TimeOfDay,\n};\nuse crate::display::badge::Tone;\nuse crate::foundation::{ActiveTheme, StyledExt};\n\nuse super::support::{row, stack};\n\nstruct TouchDates(Vec<gpui::AnyView>);\nimpl Global for TouchDates {}\n\npub(super) fn touch_dates(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::foundation::{Disableable, Sizable};\n    use gpui_kit_theme::ControlSize;\n    if !cx.has_global::<TouchDates>() {\n        let adapter = adapter();\n        let field = cx.new(|cx| {\n            DateInput::new(\"scene.touch.date\", adapter.clone(), window, cx)\n                .name(\"Appointment date\")\n                .control_size(ControlSize::Touch)\n                .presentation(crate::overlay::popover::PickerPresentation::Bottom)\n        });\n        let disabled = cx.new(|cx| {\n            DateInput::new(\"scene.touch.date-disabled\", adapter.clone(), window, cx)\n                .name(\"Managed appointment date\")\n                .value(adapter.today().expect(\"fixture today\"))\n                .control_size(ControlSize::Touch)\n                .disabled(true)\n        });\n        let invalid = cx.new(|cx| {\n            DateInput::new(\"scene.touch.date-invalid\", adapter.clone(), window, cx)\n                .name(\"Invalid appointment date\")\n                .value(adapter.today().expect(\"fixture today\"))\n                .control_size(ControlSize::Touch)\n                .invalid(true)\n        });\n        let time = cx.new(|cx| {\n            TimeInput::new(\"scene.touch.time\", adapter.clone(), window, cx)\n                .value(TimeOfDay::new(9, 37))\n                .control_size(ControlSize::Touch)\n        });\n        let range = cx.new(|cx| {\n            let mut picker = RangePicker::new(\"scene.touch.range\", adapter.clone(), window, cx);\n            picker.set_control_size(ControlSize::Touch, cx);\n            picker\n        });\n        cx.set_global(TouchDates(vec![\n            field.into(),\n            disabled.into(),\n            invalid.into(),\n            time.into(),\n            range.into(),\n        ]));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(390.0))\n        .max_w_full()\n        // Seven 48px day targets plus card padding require at least352px.\n        // This exhibit deliberately grants the calendar the full narrow width.\n        .px_0()\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Caption,\n            \"Touch dates · empty, disabled, invalid · full-width calendar (minimum352px)\",\n        ))\n        .children(cx.global::<TouchDates>().0.clone())\n        .into_any_element()\n}\n\n/// The pinned calendar every date scene runs on, so two captures of the\n/// same scene are the same picture.\nfn adapter() -> SharedDateAdapter {\n    Rc::new(\n        FixtureDateAdapter::pinned(2024, 3, 14)\n            .blocking(2024, 3, 8, \"The workspace is frozen for the release.\")\n            .blocking(2024, 3, 20, \"Nobody is on call that day.\"),\n    )\n}\n\nfn marks(day: crate::datetime::Day) -> Option<DayMark> {\n    match day.0.rem_euclid(7) {\n        0 => Some(DayMark::new(\"Two runs finished here\").tone(Tone::Success)),\n        3 => Some(DayMark::new(\"One run failed here\").tone(Tone::Danger)),\n        _ => None,\n    }\n}\n\nstruct SceneDates {\n    month: Entity<Calendar>,\n    unknown: Entity<Calendar>,\n    incomplete: Entity<RangePicker>,\n    preview: Entity<RangePicker>,\n    blocked: Entity<RangePicker>,\n    field: Entity<DateInput>,\n    refused: Entity<DateInput>,\n    clock: Entity<TimeInput>,\n    twelve: Entity<TimeInput>,\n}\n\nimpl Global for SceneDates {}\n\npub(super) fn ensure(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneDates>() {\n        return;\n    }\n    let pinned = adapter();\n    let unknown_adapter: SharedDateAdapter = Rc::new(FixtureDateAdapter::without_today());\n    let march = FixtureDateAdapter::pinned(2024, 3, 14);\n\n    let month = cx.new(|cx| {\n        Calendar::new(\"scene.calendar\", pinned.clone(), window, cx)\n            .selected([march.day(2024, 3, 14)])\n            .overlay(marks)\n    });\n    let unknown = cx.new(|cx| {\n        Calendar::new(\n            \"scene.calendar.unknown\",\n            unknown_adapter.clone(),\n            window,\n            cx,\n        )\n    });\n    let incomplete = cx.new(|cx| {\n        RangePicker::new(\"scene.range.incomplete\", pinned.clone(), window, cx)\n            .range(DayRange::starting(march.day(2024, 3, 11)))\n    });\n    let preview = cx.new(|cx| {\n        RangePicker::new(\"scene.range.preview\", pinned.clone(), window, cx)\n            .range(DayRange::starting(march.day(2024, 3, 11)))\n    });\n    let blocked = cx.new(|cx| {\n        RangePicker::new(\"scene.range.blocked\", pinned.clone(), window, cx)\n            .range(DayRange::new(march.day(2024, 3, 6), march.day(2024, 3, 9)))\n    });\n    let field = cx.new(|cx| {\n        DateInput::new(\"scene.date.field\", pinned.clone(), window, cx).value(march.day(2024, 3, 14))\n    });\n    let refused = cx.new(|cx| DateInput::new(\"scene.date.refused\", pinned.clone(), window, cx));\n    let clock = cx.new(|cx| {\n        TimeInput::new(\"scene.time.clock\", pinned.clone(), window, cx)\n            .value(TimeOfDay::new(9, 30).with_second(0))\n            .seconds(true)\n    });\n    let twelve_adapter: SharedDateAdapter =\n        Rc::new(FixtureDateAdapter::pinned(2024, 3, 14).twelve_hour(true));\n    let twelve = cx.new(|cx| {\n        TimeInput::new(\"scene.time.twelve\", twelve_adapter, window, cx)\n            .value(TimeOfDay::new(9, 30).with_meridiem(1))\n    });\n\n    let hovered = march.day(2024, 3, 15);\n    preview.update(cx, |picker, cx| {\n        picker.calendar().update(cx, |calendar, cx| {\n            calendar.set_hovered_day(Some(hovered), cx);\n        });\n    });\n    let refused_field = refused.read(cx).field().clone();\n    refused_field.update(cx, |input, cx| input.set_value(\"the fifth\", cx));\n\n    cx.set_global(SceneDates {\n        month,\n        unknown,\n        incomplete,\n        preview,\n        blocked,\n        field,\n        refused,\n        clock,\n        twelve,\n    });\n}\n\npub(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            crate::foundation::text(\n                &theme,\n                TypeScale::Body,\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            .max_w(px(560.0))\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}\n\npub(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    // The first two ranges report the same thing, because they are the same\n    // range; what differs is that the pointer is over a day in the second, so\n    // the caption has to say which picture is which.\n    let column = |caption: &'static str, picker: AnyElement| {\n        div()\n            .column()\n            .w(px(320.0))\n            .gap(px(theme.space(Space::Xs)))\n            .child(\n                crate::foundation::text(&theme, TypeScale::Caption, caption)\n                    .text_tone(&theme, TextTone::Muted),\n            )\n            .child(picker)\n    };\n    stack(&theme)\n        .child(\n            div()\n                .row()\n                .items_start()\n                .gap(px(theme.space(Space::Lg)))\n                .child(column(\n                    \"a start with no end yet\",\n                    incomplete.into_any_element(),\n                ))\n                .child(column(\n                    \"the same start, previewing the end under the pointer\",\n                    preview.into_any_element(),\n                )),\n        )\n        // The third picker used to overhang the fixed review frame and looked\n        // narrower only because its right edge was clipped. Give every state\n        // the same full-width review column instead of squeezing three across.\n        .child(column(\n            \"a finished range with a blocked day inside it\",\n            blocked.into_any_element(),\n        ))\n        .into_any_element()\n}\n\npub(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            crate::foundation::text(\n                &theme,\n                TypeScale::Body,\n                \"What the field could not read is still in it, and the refusal is the \\\n                     adapter's own sentence.\",\n            )\n            .max_w(px(560.0))\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}\n\n#[cfg(test)]\nmod touch_tests {\n    use super::*;\n\n    #[gpui::test]\n    fn touch_calendar_days_fit_full_bleed_narrow_card(cx: &mut gpui::TestAppContext) {\n        let mut harness = gpui_kit_testkit::harness::Harness::new(cx, crate::install, touch_dates);\n        harness\n            .context()\n            .simulate_resize(gpui::size(px(361.0), px(701.0)));\n        let snapshot = harness.snapshot();\n        let card = snapshot\n            .find(\"scene.touch.range.calendar\")\n            .expect(\"calendar card\")\n            .bounds;\n        for (id, name) in [\n            (\"scene.touch.date\", \"Appointment date\"),\n            (\"scene.touch.date-disabled\", \"Managed appointment date\"),\n            (\"scene.touch.date-invalid\", \"Invalid appointment date\"),\n        ] {\n            assert_eq!(\n                snapshot.find(id).expect(\"date field\").text.as_deref(),\n                Some(name)\n            );\n            assert_eq!(\n                snapshot\n                    .find(&format!(\"{id}.field\"))\n                    .expect(\"date editor\")\n                    .text\n                    .as_deref(),\n                Some(name)\n            );\n        }\n        assert!(card.x >= 0.0 && card.x + card.width <= 361.0);\n        let days: Vec<_> = snapshot\n            .nodes\n            .iter()\n            .filter(|node| node.id.starts_with(\"scene.touch.range.calendar.day-\"))\n            .collect();\n        assert!(days.len() >= 28);\n        for day in days {\n            assert!(day.bounds.width >= 48.0 && day.bounds.height >= 48.0);\n            assert!(\n                day.bounds.x >= card.x && day.bounds.x + day.bounds.width <= card.x + card.width,\n                \"{} lies outside card: {:?} vs {:?}\",\n                day.id,\n                day.bounds,\n                card\n            );\n        }\n    }\n}\n\n//! Surfaces that report a value without taking one.\n\nuse super::support::*;\n\npub(super) fn attachment(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::display::attachment::{AttachmentState, AttachmentTile};\n    let theme = cx.theme().clone();\n    let states = [\n        (\"ready\", \"Verified preview\", AttachmentState::Ready),\n        (\"queued\", \"Waiting for a worker\", AttachmentState::Queued),\n        (\n            \"transfer\",\n            \"Known transfer total\",\n            AttachmentState::Transferring {\n                completed: 3,\n                total: Some(8),\n            },\n        ),\n        (\n            \"unknown\",\n            \"Unknown transfer total\",\n            AttachmentState::Transferring {\n                completed: 3,\n                total: None,\n            },\n        ),\n        (\n            \"paused\",\n            \"Paused transfer\",\n            AttachmentState::Paused {\n                completed: 3,\n                total: Some(8),\n            },\n        ),\n        (\n            \"processing\",\n            \"Transfer complete, processing pending\",\n            AttachmentState::Processing,\n        ),\n        (\n            \"failed\",\n            \"Last verified preview retained\",\n            AttachmentState::Failed(\"The host refused this upload\".into()),\n        ),\n        (\n            \"unavailable\",\n            \"Unavailable media\",\n            AttachmentState::Unavailable(\"Media is not available on this host\".into()),\n        ),\n        (\n            \"cancelled\",\n            \"Cancelled by caller\",\n            AttachmentState::Cancelled,\n        ),\n    ];\n    stack(&theme).w(px(860.0))\n        .child(caption(&theme, \"Fixture attachments: composed media, title, description, actions; transfer completion does not imply readiness\"))\n        .child(div().row().flex_wrap().gap_token(&theme, Space::Md)\n            .children(states.into_iter().map(|(id, title, state)| {\n                let preview = matches!(state, AttachmentState::Ready | AttachmentState::Failed(_));\n                let tile = AttachmentTile::new(format!(\"scene.attachment.{id}\"), title)\n                    .description(\"Fixture asset · caller-owned state\")\n                    .state(state)\n                    .when(preview, |tile| tile.slot(\"media\", |_, cx| {\n                        let theme = cx.theme();\n                        div().w_full().h(px(52.0)).bg(theme.colors.control_hover)\n                            .child(crate::foundation::text(theme, TypeScale::Label, \"Local preview\"))\n                            .into_any_element()\n                    }))\n                    .slot(\"actions\", move |_, _| Button::new(format!(\"scene.attachment.{id}.open\"))\n                        .label(\"Inspect fixture\").on_click(|_, _| {}).into_any_element());\n                div().w(px(250.0)).child(tile)\n            })))\n        .into_any_element()\n}\n\npub(super) fn performance_hud(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let summary = gpui::FrameTimingSummary {\n        sample_count: 8,\n        frames_per_second: 58.7,\n        frame_budget: Duration::from_micros(16_667),\n        mean_draw_duration: Duration::from_micros(8_425),\n        p95_draw_duration: Duration::from_micros(18_900),\n        over_budget_fraction: 0.125,\n        mean_invalidations: 1.4,\n        mean_dirty_to_draw_duration: Some(Duration::from_micros(10_600)),\n        mean_submission_duration: Duration::from_micros(1_200),\n        mean_dirty_to_submission_duration: Some(Duration::from_micros(11_800)),\n        mean_input_to_submission_duration: Some(Duration::from_micros(13_400)),\n        mean_input_events: 1.6,\n        draw_durations: [7_200, 7_800, 8_100, 7_600, 9_300, 18_900, 8_000, 8_500]\n            .map(Duration::from_micros)\n            .into(),\n        submission_durations: [900, 1_100, 1_000, 1_200, 1_300, 1_800, 1_100, 1_200]\n            .map(Duration::from_micros)\n            .into(),\n    };\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"The framework observes existing draws; the controlled HUD only presents the caller's latest summary\",\n        ))\n        .child(\n            PerformanceHud::new(\n                \"scene.performance.ready\",\n                PerformanceHudState::Ready(summary),\n            )\n            .expanded(true)\n            .on_expanded(|_, _, _| {}),\n        )\n        .child(\n            div()\n                .row()\n                .items_stretch()\n                .gap_token(&theme, Space::Md)\n                .child(\n                    div().flex_1().min_w_0().child(PerformanceHud::new(\n                        \"scene.performance.waiting\",\n                        PerformanceHudState::Waiting,\n                    )),\n                )\n                .child(\n                    div().flex_1().min_w_0().child(PerformanceHud::new(\n                        \"scene.performance.unavailable\",\n                        PerformanceHudState::Unavailable(\n                            \"Frame tracing is disabled by this host.\".into(),\n                        ),\n                    )),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) fn rating(_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 numeric rating is distinct from helpful or unhelpful feedback\",\n        ))\n        .child(\n            Rating::new(\"scene.rating.precise\")\n                .label(\"Quality\")\n                .value(Some(3.5))\n                .precision(RatingPrecision::Half)\n                .clearable(true)\n                .on_change(|_, _, _| {}),\n        )\n        .child(\n            Rating::new(\"scene.rating.unrated\")\n                .label(\"Not reviewed\")\n                .maximum(10)\n                .value(None)\n                .on_change(|_, _, _| {}),\n        )\n        .child(\n            Rating::new(\"scene.rating.disabled\")\n                .label(\"Managed score\")\n                .value(Some(4.0))\n                .disabled(true)\n                .on_change(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) fn bubble(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let message = |id: &'static str, label: &'static str, body: &'static str, placement| {\n        Bubble::new(id, label)\n            .placement(placement)\n            .content(crate::foundation::text(&theme, TypeScale::Body, body))\n            .actions([Button::new(format!(\"{id}.action\")).label(\"Reply\").ghost()])\n    };\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"Placement and grouping are visual policy; the message and actions belong to the caller\",\n        ))\n        .child(message(\n            \"scene.bubble.start\",\n            \"Incoming message\",\n            \"The gateway is ready for the next run.\",\n            BubblePlacement::Start,\n        ))\n        .child(message(\n            \"scene.bubble.end\",\n            \"Outgoing message\",\n            \"Start the run when the inputs are verified.\",\n            BubblePlacement::End,\n        ))\n        .child(\n            Bubble::new(\"scene.bubble.grouped\", \"Grouped message\")\n                .grouped(true)\n                .content(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"A grouped follow-up shares the control radius.\",\n                )),\n        )\n        .into_any_element()\n}\n\npub(super) fn badge(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(&theme, \"Tones, which report rather than decorate\"))\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        .child(caption(\n            &theme,\n            \"A glyph or a mark, for a badge whose claim has a picture\",\n        ))\n        .child(\n            row(&theme)\n                .child(\n                    Badge::new(\"Passed\")\n                        .success()\n                        .icon(Icon::Check)\n                        .id(\"scene.badge.icon\"),\n                )\n                .child(Badge::new(\"Live\").success().dot(true).id(\"scene.badge.dot\"))\n                .child(\n                    Badge::new(\"Refused\")\n                        .danger()\n                        .icon(Icon::CloseCircle)\n                        .id(\"scene.badge.refused\"),\n                ),\n        )\n        .child(caption(&theme, \"The size ramp\"))\n        .child(\n            row(&theme)\n                .child(Badge::new(\"Extra small\").xs().id(\"scene.badge.xs\"))\n                .child(Badge::new(\"Small\").small().id(\"scene.badge.sm\"))\n                .child(Badge::new(\"Medium\").medium().id(\"scene.badge.md\"))\n                .child(Badge::new(\"Large\").large().id(\"scene.badge.lg\")),\n        )\n        .child(caption(\n            &theme,\n            \"Counts: tabular figures without a status wash\",\n        ))\n        .child(\n            row(&theme)\n                .child(Badge::new(\"3\").count().id(\"scene.badge.count-single\"))\n                .child(Badge::new(\"111\").count().id(\"scene.badge.count-narrow\"))\n                .child(Badge::new(\"888\").count().id(\"scene.badge.count-wide\")),\n        )\n        // A tint says whose the badge is. The colours come from the theme's\n        // own palette rather than from literals, so a retinted document\n        // retints these too, and the tone underneath still reports itself.\n        .child(caption(\n            &theme,\n            \"An identity tint, which says whose and not how it is going\",\n        ))\n        .child(\n            row(&theme)\n                .child(\n                    Badge::new(\"Ada\")\n                        .tint(identity_tint(&theme, \"agent.external\"))\n                        .id(\"scene.badge.tinted-neutral\"),\n                )\n                .child(\n                    Badge::new(\"Grace\")\n                        .tint(identity_tint(&theme, \"agent.shell\"))\n                        .warning()\n                        .id(\"scene.badge.tinted-warning\"),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"The shared tiers, resolved against a palette colour\",\n        ))\n        .children([\"grape\", \"cyan\"].map(|group| {\n            row(&theme).children(\n                [Variant::Filled, Variant::Light, Variant::Subtle].map(|tier| {\n                    Badge::new(tier.name())\n                        .variant(tier)\n                        .color(SharedString::from(group))\n                        .id(format!(\"scene.badge.{group}.{}\", tier.name()))\n                }),\n            )\n        }))\n        .into_any_element()\n}\n\n/// A palette entry as an identity colour, falling back to the accent when a\n/// theme has not named that scale.\npub(super) fn identity_tint(theme: &Theme, path: &str) -> gpui::Hsla {\n    theme.palette_color(path).unwrap_or(theme.colors.accent)\n}\n\n/// Every region, variant and state a card can hold, at the sizes a caller\n/// actually builds them: a titled list, the three variants side by side, a\n/// card that is one action, and a card holding prose.\npub(super) fn card(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let label = |content: &'static str| {\n        div()\n            .flex_1()\n            .min_w_0()\n            .child(crate::foundation::text(&theme, TypeScale::Label, content))\n    };\n    let caption = |content: &'static str| {\n        crate::foundation::text(&theme, TypeScale::Caption, content)\n            .text_tone(&theme, TextTone::Muted)\n    };\n    let column = |card: Card| div().flex_1().min_w_0().child(card);\n\n    stack(&theme)\n        .child(\n            Card::new()\n                .id(\"scene.card\")\n                .header(\n                    CardHeader::new(\"Workspace services\")\n                        .subtitle(\"Four checked a moment ago\")\n                        .action(|_window, _cx| {\n                            Button::new(\"scene.card.refresh\")\n                                .label(\"Refresh\")\n                                .secondary()\n                                .small()\n                                .into_any_element()\n                        }),\n                )\n                .child(\n                    ListRow::new()\n                        .id(\"scene.card.runtime\")\n                        .leading(StatusDot::new(Tone::Success))\n                        .child(label(\"Native runtime\"))\n                        .trailing(Badge::new(\"Ready\").success()),\n                )\n                .child(\n                    ListRow::new()\n                        .id(\"scene.card.catalog\")\n                        .leading(StatusDot::new(Tone::Warning))\n                        .child(label(\"Model catalog\"))\n                        .trailing(Badge::new(\"Stale\").warning()),\n                )\n                .child(\n                    ListRow::new()\n                        .id(\"scene.card.index\")\n                        .selected(true)\n                        .leading(StatusDot::new(Tone::Success))\n                        .child(label(\"Search index\"))\n                        .trailing(Badge::new(\"Ready\").success()),\n                )\n                .child(\n                    ListRow::new()\n                        .id(\"scene.card.telemetry\")\n                        .disabled(true)\n                        .leading(StatusDot::new(Tone::Neutral))\n                        .child(label(\"Telemetry export\"))\n                        .trailing(Badge::new(\"Off\")),\n                )\n                .footer(|_window, cx| {\n                    let theme = cx.theme().clone();\n                    div()\n                        .row()\n                        .w_full()\n                        .gap(px(theme.spacing.sm))\n                        .child(\n                            Button::new(\"scene.card.restart\")\n                                .label(\"Restart all\")\n                                .secondary()\n                                .small(),\n                        )\n                        .child(div().flex_1())\n                        .child(\n                            crate::foundation::text(&theme, TypeScale::Caption, \"4 services\")\n                                .text_tone(&theme, TextTone::Faint),\n                        )\n                        .into_any_element()\n                }),\n        )\n        .child(\n            row(&theme)\n                .items_start()\n                .child(column(\n                    Card::new()\n                        .id(\"scene.card.elevated\")\n                        .variant(CardVariant::Elevated)\n                        .padding(Space::Lg)\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Strong,\n                            \"Elevated\",\n                        ))\n                        .child(caption(\"A shadow. One card on a page.\")),\n                ))\n                .child(column(\n                    Card::new()\n                        .id(\"scene.card.filled\")\n                        .variant(CardVariant::Filled)\n                        .padding(Space::Lg)\n                        .child(crate::foundation::text(&theme, TypeScale::Strong, \"Filled\"))\n                        .child(caption(\"A tonal plane for a dense grid.\")),\n                ))\n                .child(column(\n                    Card::new()\n                        .id(\"scene.card.ghost\")\n                        .variant(CardVariant::Ghost)\n                        .padding(Space::Lg)\n                        .child(crate::foundation::text(&theme, TypeScale::Strong, \"Ghost\"))\n                        .child(caption(\"Neither. Structure without a plane.\")),\n                )),\n        )\n        .child(\n            row(&theme)\n                .items_start()\n                .child(column(\n                    Card::new()\n                        .id(\"scene.card.actionable\")\n                        .padding(Space::Lg)\n                        .on_click(|_window, _cx| {})\n                        .header(CardHeader::new(\"Open the run\").subtitle(\"The whole card acts\"))\n                        .child(caption(\"Enter and space reach it from the keyboard.\")),\n                ))\n                .child(column(\n                    // The pairing the rows above never put together, which is\n                    // how a card with no plane came to be lifted off one.\n                    Card::new()\n                        .id(\"scene.card.actionable-ghost\")\n                        .variant(CardVariant::Ghost)\n                        .padding(Space::Lg)\n                        .on_click(|_window, _cx| {})\n                        .header(CardHeader::new(\"Open the line\").subtitle(\"A ghost card acts too\"))\n                        .child(caption(\"No plane to rise off, so the pointer gets a wash.\")),\n                ))\n                .child(column(\n                    Card::new()\n                        .id(\"scene.card.chosen\")\n                        .padding(Space::Lg)\n                        .selected(true)\n                        .header(CardHeader::new(\"Selected\").subtitle(\"A stronger material wash\"))\n                        .child(caption(\n                            \"Fill carries selection without moving the content.\",\n                        )),\n                ))\n                .child(column(\n                    Card::new()\n                        .id(\"scene.card.unavailable\")\n                        .padding(Space::Lg)\n                        .disabled(true)\n                        .on_click(|_window, _cx| {})\n                        .header(CardHeader::new(\"Unavailable\").subtitle(\"Says so, and stays read\"))\n                        .child(caption(\"A disabled card installs no handler at all.\")),\n                )),\n        )\n        .into_any_element()\n}\n\npub(super) fn status(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // A dot on its own says a thing has a state without saying which; the\n    // name beside it is what the row is for.\n    let named = |label: &'static str, dot: StatusDot| {\n        div()\n            .row()\n            .items_center()\n            .gap(px(theme.space(Space::Xs)))\n            .child(dot)\n            .child(caption(&theme, label))\n    };\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(&theme, \"The smallest mark, and what each one claims\"))\n        .child(\n            row(&theme)\n                .gap(px(theme.space(Space::Lg)))\n                .child(named(\"ready\", StatusDot::new(Tone::Success)))\n                .child(named(\"stale\", StatusDot::new(Tone::Warning)))\n                .child(named(\"refused\", StatusDot::new(Tone::Danger)))\n                .child(named(\"off\", StatusDot::new(Tone::Neutral)))\n                // The same dot wearing an identity colour: a state the six\n                // severities cannot name, still reporting the severity it\n                // claims through the surface around it.\n                .child(named(\n                    \"Ada\",\n                    StatusDot::new(Tone::Neutral).tint(identity_tint(&theme, \"agent.external\")),\n                )),\n        )\n        .child(caption(&theme, \"Work that is still going\"))\n        .child(\n            row(&theme)\n                .child(\n                    StatusDot::new(Tone::Accent)\n                        .busy(\"scene.status.deliberating\")\n                        .activity(crate::motion::Activity::Deliberating),\n                )\n                .child(\n                    StatusDot::new(Tone::Info)\n                        .busy(\"scene.status.working\")\n                        .activity(crate::motion::Activity::Working),\n                )\n                .child(\n                    StatusDot::new(Tone::Success)\n                        .busy(\"scene.status.advancing\")\n                        .activity(crate::motion::Activity::Advancing),\n                ),\n        )\n        .child(caption(&theme, \"The same claim, named\"))\n        .child(\n            StatusLine::new(\"Connected\", Tone::Success).id(\"scene.status.line\"),\n        )\n        .child(\n            StatusLine::new(\"Ada · reviewing\", Tone::Neutral)\n                .tint(identity_tint(&theme, \"agent.external\"))\n                .busy(\"scene.status.tinted\")\n                .id(\"scene.status.tinted\"),\n        )\n        .child(caption(\n            &theme,\n            \"A report: a wash and a glyph carry the severity, so two of them differ \\\n             by meaning and never by weight\",\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}\n\npub(super) fn loading(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let indicator = |title: &'static str, loader: AnyElement| {\n        div()\n            .column()\n            .items_center()\n            .justify_center()\n            .gap_token(&theme, Space::Md)\n            .w(px(220.0))\n            .h(px(112.0))\n            .p_token(&theme, Space::Md)\n            .radius(&theme, Radius::Card)\n            .surface(&theme, gpui_kit_theme::Surface::Panel)\n            .child(crate::foundation::text(&theme, TypeScale::Label, title))\n            .child(loader)\n    };\n    stack(&theme)\n        .w_full()\n        .max_w(px(520.0))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Md)\n                .child(indicator(\n                    \"Loading providers\",\n                    PulseLoader::new(\"scene.loading.pulse\")\n                        .label(\"Loading providers\")\n                        .into_any_element(),\n                ))\n                .child(indicator(\n                    \"Inline wait\",\n                    Spinner::new(\"scene.loading.inline\")\n                        .label(\"Inline wait\")\n                        .into_any_element(),\n                )),\n        )\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Md)\n                .child(indicator(\n                    \"Region filling in\",\n                    BarLoader::new(\"scene.loading.bar\")\n                        .label(\"Region filling in\")\n                        .into_any_element(),\n                ))\n                .child(indicator(\n                    \"Refreshing in place\",\n                    RefreshVeil::new(\n                        \"scene.loading.veil\",\n                        crate::foundation::text(&theme, TypeScale::Body, \"Last verified list\"),\n                    )\n                    .label(\"Refreshing\")\n                    .into_any_element(),\n                )),\n        )\n        .child(\n            div()\n                .column()\n                .gap_token(&theme, Space::Sm)\n                .w_full()\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"List tails\",\n                ))\n                .child(LoadMore::new(\"scene.loading.more-idle\").on_more(|_, _| {}))\n                .child(LoadMore::new(\"scene.loading.more-loading\").state(LoadMoreState::Loading))\n                .child(LoadMore::new(\"scene.loading.more-end\").state(LoadMoreState::Exhausted)),\n        )\n        .child(\n            div()\n                .column()\n                .gap_token(&theme, Space::Sm)\n                .w_full()\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Loading list\",\n                ))\n                .child(\n                    Skeleton::new(\"scene.loading.skeleton\")\n                        .rows(3)\n                        .label(\"Loading list\"),\n                ),\n        )\n        .child(\n            div()\n                .column()\n                .gap_token(&theme, Space::Sm)\n                .w_full()\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Card and paragraph placeholders\",\n                ))\n                .child(\n                    Skeleton::new(\"scene.loading.shapes\")\n                        .shapes([\n                            SkeletonShape::Card,\n                            SkeletonShape::Paragraph { lines: 3 },\n                            SkeletonShape::Circle { size: 28.0 },\n                        ])\n                        .label(\"Loading card\"),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) 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 ToolCall 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}\n\npub(super) fn plot(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let accent = theme.colors.accent;\n    let custom_marks = vec![\n        PlotMark::new(\n            \"first\",\n            \"First stage\",\n            \"18 jobs\",\n            bounds(point(0.08, 0.58), size(0.18, 0.28)),\n        ),\n        PlotMark::new(\n            \"middle\",\n            \"Middle stage\",\n            \"34 jobs\",\n            bounds(point(0.40, 0.30), size(0.18, 0.56)),\n        ),\n        PlotMark::new(\n            \"last\",\n            \"Last stage\",\n            \"26 jobs\",\n            bounds(point(0.72, 0.44), size(0.18, 0.42)),\n        ),\n    ];\n    let painted_marks = custom_marks.clone();\n    let candles = [\n        Candlestick::new(\"monday\", 0.10, 0.32, 0.58, 0.20, 0.50, \"Monday\", \"32–50\"),\n        Candlestick::new(\"tuesday\", 0.30, 0.52, 0.66, 0.38, 0.44, \"Tuesday\", \"52–44\"),\n        Candlestick::new(\n            \"wednesday\",\n            0.50,\n            0.45,\n            0.80,\n            0.40,\n            0.72,\n            \"Wednesday\",\n            \"45–72\",\n        ),\n        Candlestick::new(\n            \"thursday\", 0.70, 0.70, 0.76, 0.34, 0.42, \"Thursday\", \"70–42\",\n        ),\n        Candlestick::new(\"friday\", 0.90, 0.44, 0.88, 0.36, 0.82, \"Friday\", \"44–82\"),\n    ];\n    let source_tint = identity_tint(&theme, \"agent.read\");\n    let target_tint = identity_tint(&theme, \"agent.write\");\n    let sankey = SankeyData::new(\n        [\n            SankeyNode::new(\n                \"queued\",\n                \"Queued\",\n                \"48 jobs\",\n                bounds(point(0.03, 0.20), size(0.08, 0.58)),\n            )\n            .tint(source_tint),\n            SankeyNode::new(\n                \"running\",\n                \"Running\",\n                \"34 jobs\",\n                bounds(point(0.46, 0.28), size(0.08, 0.42)),\n            ),\n            SankeyNode::new(\n                \"completed\",\n                \"Completed\",\n                \"26 jobs\",\n                bounds(point(0.89, 0.12), size(0.08, 0.32)),\n            )\n            .tint(target_tint),\n            SankeyNode::new(\n                \"deferred\",\n                \"Deferred\",\n                \"8 jobs\",\n                bounds(point(0.89, 0.62), size(0.08, 0.18)),\n            )\n            .tint(theme.colors.warning),\n        ],\n        [\n            SankeyLink::new(\n                \"queue-running\",\n                \"queued\",\n                \"running\",\n                \"Queued to running\",\n                \"34 jobs\",\n                point(0.11, 0.48),\n                point(0.46, 0.49),\n                0.30,\n            )\n            .tint(source_tint),\n            SankeyLink::new(\n                \"running-completed\",\n                \"running\",\n                \"completed\",\n                \"Running to completed\",\n                \"26 jobs\",\n                point(0.54, 0.44),\n                point(0.89, 0.28),\n                0.24,\n            )\n            .tint(target_tint),\n            SankeyLink::new(\n                \"running-deferred\",\n                \"running\",\n                \"deferred\",\n                \"Running to deferred\",\n                \"8 jobs\",\n                point(0.54, 0.62),\n                point(0.89, 0.71),\n                0.10,\n            )\n            .tint(theme.colors.warning),\n        ],\n    )\n    .layout(\n        &[34.0, 26.0, 8.0],\n        0.08,\n        0.16,\n        crate::display::plot::SankeyAlignment::Justify,\n    )\n    .expect(\"acyclic fixture with valid flow weights\")\n    .0;\n\n    let column = || div().column().flex_1().min_w_0();\n    stack(&theme)\n        .w(px(920.0))\n        .child(caption(\n            &theme,\n            \"normalized geometry and exact wording remain caller-owned\",\n        ))\n        .child(\n            div()\n                .row()\n                .items_start()\n                .w_full()\n                .gap(px(theme.space(Space::Lg)))\n                .child(\n                    column().child(\n                        Plot::new(\n                            \"scene.plot.custom\",\n                            \"Pipeline\",\n                            PlotState::Ready(custom_marks),\n                        )\n                        .current(\"middle\")\n                        .on_current(|_, _, _| {})\n                        .paint(move |frame, window, _| {\n                            for mark in &painted_marks {\n                                window\n                                    .paint_quad(gpui::fill(frame.mark_bounds(mark.bounds), accent));\n                            }\n                        }),\n                    ),\n                )\n                .child(\n                    column().child(\n                        CandlestickChart::new(\n                            \"scene.plot.candles\",\n                            \"Daily range\",\n                            PlotState::Ready(candles.into()),\n                        )\n                        .current(\"wednesday\")\n                        .on_current(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    column().child(\n                        SankeyChart::new(\"scene.plot.sankey\", \"Run flow\", PlotState::Ready(sankey))\n                            .current(\"node.running\")\n                            .on_current(|_, _, _| {}),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) fn chart(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let cpu = [\n        ChartPoint::new(\"00:00\", 0.0, 0.20, \"00:00\", \"20%\"),\n        ChartPoint::new(\"00:15\", 0.25, 0.45, \"00:15\", \"45%\"),\n        ChartPoint::new(\"00:30\", 0.5, 0.38, \"00:30\", \"38%\"),\n        ChartPoint::new(\"00:45\", 0.75, 0.70, \"00:45\", \"70%\"),\n        ChartPoint::new(\"01:00\", 1.0, 0.62, \"01:00\", \"62%\"),\n    ];\n    let memory = [\n        ChartPoint::new(\"00:00\", 0.0, 0.40, \"00:00\", \"40%\"),\n        ChartPoint::new(\"00:15\", 0.25, 0.42, \"00:15\", \"42%\"),\n        ChartPoint::new(\"00:30\", 0.5, 0.55, \"00:30\", \"55%\"),\n        ChartPoint::new(\"00:45\", 0.75, 0.58, \"00:45\", \"58%\"),\n        ChartPoint::new(\"01:00\", 1.0, 0.61, \"01:00\", \"61%\"),\n    ];\n    // Three columns rather than one tall stack. The family is eleven surfaces\n    // once truthful empty/stale states are included, and even two columns run\n    // the final plots below the fixed review frame.\n    let column = || {\n        div()\n            .column()\n            .flex_1()\n            .min_w_0()\n            .gap(px(theme.space(Space::Md)))\n    };\n    // The frame this is reviewed in is 920 wide. Every column flexes inside\n    // that width so the third one earns vertical room without escaping at the\n    // right edge.\n    stack(&theme)\n        .w(px(920.0))\n        .child(caption(\n            &theme,\n            \"host-owned series, host-owned axis wording, no invented scale\",\n        ))\n        .child(\n            div()\n                .row()\n                .items_start()\n                .w_full()\n                .gap(px(theme.space(Space::Lg)))\n                .child(\n                    column()\n                        .child(\n                            LineChart::new(\n                                \"scene.chart.ready\",\n                                \"Fixture load\",\n                                ChartState::Stale {\n                                    series: vec![\n                                        ChartSeries::new(\"cpu\", \"CPU\")\n                                            .points(cpu)\n                                            .tint(identity_tint(&theme, \"agent.read\")),\n                                        ChartSeries::new(\"memory\", \"Memory\")\n                                            .points(memory)\n                                            .tint(identity_tint(&theme, \"agent.shell\")),\n                                    ],\n                                    reason: \"Refresh failed; showing last verified sample\".into(),\n                                },\n                            )\n                            .area()\n                            .crosshair()\n                            .current(\"cpu\", \"00:45\")\n                            .on_current(|_, _, _| {})\n                            .axes(\n                                ChartAxes::default()\n                                    .x_label(\"Time\")\n                                    .y_label(\"Utilization\")\n                                    .x_ends(\"00:00\", \"01:00\")\n                                    .y_ends(\"0%\", \"100%\"),\n                            ),\n                        )\n                        .child(LineChart::new(\n                            \"scene.chart.empty\",\n                            \"Fixture load\",\n                            ChartState::Empty,\n                        ))\n                        .child(\n                            BarChart::new(\n                                \"scene.chart.bars\",\n                                \"Fixture share\",\n                                ChartState::Ready(vec![ChartSeries::new(\"share\", \"Share\").points(\n                                    [\n                                        ChartPoint::new(\"alpha\", 0.0, 0.35, \"Alpha\", \"35 jobs\"),\n                                        ChartPoint::new(\"beta\", 0.33, 0.70, \"Beta\", \"70 jobs\"),\n                                        ChartPoint::new(\"gamma\", 0.66, 0.45, \"Gamma\", \"45 jobs\"),\n                                        ChartPoint::new(\"delta\", 1.0, 0.90, \"Delta\", \"90 jobs\"),\n                                    ],\n                                )]),\n                            )\n                            .axes(ChartAxes::default().y_ends(\"0\", \"max\")),\n                        )\n                        .child(\n                            PieChart::new(\n                                \"scene.chart.pie\",\n                                \"Fixture share\",\n                                ChartState::Ready(vec![ChartSeries::new(\"share\", \"Share\").points(\n                                    [\n                                        ChartPoint::new(\"alpha\", 0.0, 0.25, \"Alpha\", \"25%\"),\n                                        ChartPoint::new(\"beta\", 0.25, 0.35, \"Beta\", \"35%\"),\n                                        ChartPoint::new(\"gamma\", 0.60, 0.20, \"Gamma\", \"20%\"),\n                                        ChartPoint::new(\"delta\", 0.80, 0.20, \"Delta\", \"20%\"),\n                                    ],\n                                )]),\n                            )\n                            .donut(),\n                        ),\n                )\n                .child(\n                    column()\n                        .child(\n                            ChartLegend::new(\n                                \"scene.chart.legend\",\n                                [\n                                    ChartSeries::new(\"cpu\", \"CPU\")\n                                        .tint(identity_tint(&theme, \"agent.read\")),\n                                    ChartSeries::new(\"memory\", \"Memory\")\n                                        .tint(identity_tint(&theme, \"agent.shell\")),\n                                ],\n                            )\n                            .on_toggle(|_, _, _, _| {}),\n                        )\n                        .child(\n                            AreaChart::new(\n                                \"scene.chart.area\",\n                                \"Fixture tokens\",\n                                ChartState::Ready(vec![\n                                    ChartSeries::new(\"tokens\", \"Tokens\")\n                                        .points([\n                                            ChartPoint::new(\"00:00\", 0.0, 0.20, \"00:00\", \"20%\"),\n                                            ChartPoint::new(\"00:15\", 0.25, 0.45, \"00:15\", \"45%\"),\n                                            ChartPoint::new(\"00:30\", 0.5, 0.38, \"00:30\", \"38%\"),\n                                            ChartPoint::new(\"00:45\", 0.75, 0.70, \"00:45\", \"70%\"),\n                                            ChartPoint::new(\"01:00\", 1.0, 0.62, \"01:00\", \"62%\"),\n                                        ])\n                                        .tint(identity_tint(&theme, \"agent.read\")),\n                                ]),\n                            )\n                            .axes(ChartAxes::default().y_ends(\"0\", \"max\"))\n                            .crosshair(),\n                        )\n                        .child(\n                            ScatterChart::new(\n                                \"scene.chart.scatter\",\n                                \"Fixture samples\",\n                                ChartState::Ready(vec![\n                                    ChartSeries::new(\"samples\", \"Samples\").points([\n                                        ChartPoint::new(\"a\", 0.15, 0.30, \"A\", \"30\").weight(0.2),\n                                        ChartPoint::new(\"b\", 0.40, 0.62, \"B\", \"62\").weight(0.6),\n                                        ChartPoint::new(\"c\", 0.72, 0.48, \"C\", \"48\").weight(0.35),\n                                        ChartPoint::new(\"d\", 0.88, 0.80, \"D\", \"80\").weight(0.9),\n                                    ]),\n                                ]),\n                            )\n                            .crosshair()\n                            .current(\"samples\", \"b\")\n                            .on_current(|_, _, _| {})\n                            .axes(ChartAxes::default().y_ends(\"0\", \"max\")),\n                        ),\n                )\n                .child(\n                    column()\n                        .child(\n                            StackedBarChart::new(\n                                \"scene.chart.stacked\",\n                                \"Fixture mix\",\n                                ChartState::Ready(vec![\n                                    ChartSeries::new(\"cpu\", \"CPU\")\n                                        .points([\n                                            ChartPoint::new(\"alpha\", 0.0, 0.30, \"Alpha\", \"30%\"),\n                                            ChartPoint::new(\"beta\", 0.5, 0.20, \"Beta\", \"20%\"),\n                                        ])\n                                        .tint(identity_tint(&theme, \"agent.read\")),\n                                    ChartSeries::new(\"memory\", \"Memory\")\n                                        .points([\n                                            ChartPoint::new(\"alpha\", 0.0, 0.25, \"Alpha\", \"25%\"),\n                                            ChartPoint::new(\"beta\", 0.5, 0.40, \"Beta\", \"40%\"),\n                                        ])\n                                        .tint(identity_tint(&theme, \"agent.shell\")),\n                                ]),\n                            )\n                            .axes(ChartAxes::default().y_ends(\"0\", \"max\")),\n                        )\n                        .child(RadarChart::new(\n                            \"scene.chart.radar\",\n                            \"Fixture profile\",\n                            ChartState::Ready(vec![ChartSeries::new(\"profile\", \"Profile\").points(\n                                [\n                                    ChartPoint::new(\"clarity\", 0.0, 0.80, \"Clarity\", \"80\"),\n                                    ChartPoint::new(\"speed\", 0.0, 0.55, \"Speed\", \"55\"),\n                                    ChartPoint::new(\"coverage\", 0.0, 0.70, \"Coverage\", \"70\"),\n                                    ChartPoint::new(\"cost\", 0.0, 0.40, \"Cost\", \"40\"),\n                                ],\n                            )]),\n                        ))\n                        .child(RadarChart::new(\n                            \"scene.chart.radar-empty\",\n                            \"Fixture profile\",\n                            ChartState::Empty,\n                        ))\n                        .child(GaugeChart::new(\n                            \"scene.chart.gauge\",\n                            \"Fixture occupancy\",\n                            ChartState::Ready(vec![\n                                ChartSeries::new(\"occupancy\", \"Occupancy\")\n                                    .points([ChartPoint::new(\"now\", 0.0, 0.72, \"Now\", \"72%\")]),\n                            ]),\n                        )),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) fn metric_card(_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            \"a KPI keeps the last verified reading when a refresh fails\",\n        ))\n        .child(MetricCard::new(\n            \"scene.metric.ready\",\n            \"Tokens\",\n            MetricState::Ready(\n                MetricReading::new(\"12.4k\")\n                    .delta(\"+8%\", Tone::Success)\n                    .trend([\n                        SparklinePoint::new(0.0, 0.30),\n                        SparklinePoint::new(0.35, 0.55),\n                        SparklinePoint::new(0.70, 0.48),\n                        SparklinePoint::new(1.0, 0.72),\n                    ]),\n            ),\n        ))\n        .child(MetricCard::new(\n            \"scene.metric.loading\",\n            \"Tokens\",\n            MetricState::Loading,\n        ))\n        .child(MetricCard::new(\n            \"scene.metric.empty\",\n            \"Tokens\",\n            MetricState::Empty,\n        ))\n        .child(MetricCard::new(\n            \"scene.metric.unavailable\",\n            \"Tokens\",\n            MetricState::Unavailable(\"The meter host is offline.\".into()),\n        ))\n        .child(MetricCard::new(\n            \"scene.metric.error\",\n            \"Tokens\",\n            MetricState::Error(\"The meter returned an invalid reading.\".into()),\n        ))\n        .child(MetricCard::new(\n            \"scene.metric.stale\",\n            \"Tokens\",\n            MetricState::Stale {\n                reading: MetricReading::new(\"12.4k\").delta(\"+8%\", Tone::Warning),\n                reason: \"Refresh failed; showing last verified reading\".into(),\n            },\n        ))\n        .into_any_element()\n}\n\npub(super) fn trace(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let spans = [\n        TraceSpan::new(\"plan\", \"Plan\", 0.00, 0.18)\n            .state(SpanState::Succeeded)\n            .duration(\"216 ms\")\n            .detail(\"planner.finish\"),\n        TraceSpan::new(\"generate\", \"Generate\", 0.18, 0.62)\n            .depth(1)\n            .state(SpanState::Running)\n            .duration(\"528 ms\")\n            .detail(\"model.reply\"),\n        TraceSpan::new(\"tool\", \"Search\", 0.40, 0.55)\n            .depth(2)\n            .duration(\"180 ms\")\n            .state(SpanState::Succeeded),\n        TraceSpan::new(\"wait\", \"Review\", 0.62, 0.80)\n            .depth(1)\n            .duration(\"216 ms\")\n            .state(SpanState::Pending),\n        TraceSpan::new(\"fail\", \"Publish\", 0.80, 1.00)\n            .duration(\"240 ms\")\n            .state(SpanState::Failed),\n    ];\n    // The host owns every reading on the axis; the component only places them.\n    let ticks = [(0.25, \"300 ms\"), (0.5, \"600 ms\"), (0.75, \"900 ms\")];\n    stack(&theme)\n        .w(px(640.0))\n        .child(caption(\n            &theme,\n            \"normalized intervals, host-owned labels, a refusal stays a failure\",\n        ))\n        .child(\n            TraceView::new(\"scene.trace.view\", \"Fixture run\")\n                .spans(spans.clone())\n                .axis(\"0 ms\", \"1.2 s\")\n                .ticks(ticks)\n                .current(\"generate\")\n                .on_select(|_, _, _| {}),\n        )\n        .child(\n            SpanTimeline::new(\"scene.trace.timeline\", \"Fixture waterfall\")\n                .spans(spans)\n                .axis(\"0 ms\", \"1.2 s\")\n                .ticks(ticks)\n                .current(\"generate\")\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\n#[derive(Clone)]\nstruct TemporalScene {\n    domain: [f64; 2],\n    collapsed: std::collections::HashSet<SharedString>,\n    selected: SharedString,\n    time_selection: Option<[f64; 2]>,\n    accepts_time_selection: bool,\n}\nimpl Global for TemporalScene {}\n\n/// Raw time, partial intervals, virtual rows and controlled hierarchy.\npub(super) fn trace_time(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<TemporalScene>() {\n        cx.set_global(TemporalScene {\n            domain: [1_700_000_000_200., 1_700_000_001_000.],\n            collapsed: std::collections::HashSet::from([\"request.birch\".into()]),\n            selected: \"request.atlas.decode\".into(),\n            time_selection: Some([1_700_000_000_420., 1_700_000_000_655.]),\n            accepts_time_selection: true,\n        });\n    }\n    let state = cx.global::<TemporalScene>().clone();\n    let theme = cx.theme().clone();\n    let mut spans = vec![];\n    for request in [\n        \"atlas\", \"birch\", \"cedar\", \"delta\", \"elm\", \"fjord\", \"grove\", \"harbor\", \"iris\", \"jade\",\n        \"kelp\", \"lagoon\", \"maple\", \"north\", \"oak\", \"pine\", \"quartz\", \"reed\", \"spruce\", \"tide\",\n        \"umber\", \"vale\", \"willow\", \"yarrow\",\n    ] {\n        spans.push(\n            TraceSpan::new(\n                format!(\"request.{request}\"),\n                format!(\"Request {request}\"),\n                0.,\n                1.,\n            )\n            .time(1_700_000_000_100., 1_700_000_001_200.)\n            .state(SpanState::Succeeded)\n            .duration(\"1.1 s\"),\n        );\n        for (child, stage) in [\"prepare\", \"fetch\", \"decode\", \"render\", \"commit\"]\n            .into_iter()\n            .enumerate()\n        {\n            let start = 1_700_000_000_100. + child as f64 * 160.;\n            spans.push(\n                TraceSpan::new(format!(\"request.{request}.{stage}\"), stage, 0., 1.)\n                    .time(start, start + 235.)\n                    .depth(1)\n                    .state(SpanState::Succeeded)\n                    .duration(\"235 ms\"),\n            );\n        }\n    }\n    let spans = std::rc::Rc::new(spans);\n    stack(&theme).w(px(760.)).child(caption(&theme, \"Fixture raw UTC milliseconds · Ctrl-wheel zoom · Shift-wheel pan · disclosure / arrow keys\"))\n        .child(div().row().gap_token(&theme, Space::Sm)\n            .child(Button::new(\"scene.trace-time.zoom-in\").label(\"Zoom in\").secondary().small()\n                .on_click(|_, cx| {\n                    cx.update_global::<TemporalScene, ()>(|s, _| {\n                        use crate::display::chart::scale::{NumericScale, ScaleKind};\n                        if let Ok(scale) = NumericScale::new(ScaleKind::Time, s.domain).and_then(|scale| scale.zoom(0.5, 1.5)) {\n                            s.domain = scale.domain();\n                        }\n                    }); cx.refresh_windows();\n                }))\n            .child(Button::new(\"scene.trace-time.later\").label(\"Later\").secondary().small()\n                .on_click(|_, cx| {\n                    cx.update_global::<TemporalScene, ()>(|s, _| {\n                        use crate::display::chart::scale::{NumericScale, ScaleKind};\n                        if let Ok(scale) = NumericScale::new(ScaleKind::Time, s.domain).and_then(|scale| scale.pan(0.2)) {\n                            s.domain = scale.domain();\n                        }\n                    }); cx.refresh_windows();\n                }))\n            .child(Button::new(\"scene.trace-time.reset\").label(\"Reset window\").secondary().small()\n                .on_click(|_, cx| {\n                    cx.update_global::<TemporalScene, ()>(|s, _| s.domain = [1_700_000_000_200., 1_700_000_001_000.]);\n                    cx.refresh_windows();\n                }))\n            .child(Button::new(\"scene.trace-time.clear-range\").label(\"Clear range\").secondary().small()\n                .on_click(|_,cx| {\n                    cx.update_global::<TemporalScene, ()>(|s,_| s.time_selection = None);\n                    cx.refresh_windows();\n                }))\n            .child(Button::new(\"scene.trace-time.zoom-range\").label(\"Zoom to range\").secondary().small()\n                .disabled(state.time_selection.is_none())\n                .on_click(|_,cx| {\n                    cx.update_global::<TemporalScene, ()>(|s,_| {\n                        use crate::display::chart::scale::{NumericScale,ScaleKind};\n                        if let Some(range) = s.time_selection && let Ok(scale) = NumericScale::new(ScaleKind::Time,range) {\n                            s.domain = scale.domain();\n                        }\n                    });\n                    cx.refresh_windows();\n                }))\n            .child(Button::new(\"scene.trace-time.accept-range\").label(if state.accepts_time_selection {\"Refuse edits\"} else {\"Accept edits\"}).secondary().small()\n                .on_click(|_,cx| {\n                    cx.update_global::<TemporalScene, ()>(|s,_| s.accepts_time_selection = !s.accepts_time_selection);\n                    cx.refresh_windows();\n                })))\n        .child(TraceView::new(\"scene.trace-time.tree\", \"144 spans · eight-row viewport\")\n            .shared_spans(spans.clone()).time_viewport(state.domain).expect(\"valid time window\")\n            .selected_time(state.time_selection).expect(\"valid selection\")\n            .on_time_selection(|event,_,cx| {\n                use crate::interaction::range::RangeEvent;\n                cx.update_global::<TemporalScene, ()>(|s,_| {\n                    if s.accepts_time_selection && let RangeEvent::Update {value,..} | RangeEvent::Commit {value,..} = event {\n                        s.time_selection = Some(value);\n                    }\n                });\n                cx.refresh_windows();\n            })\n            .format_time(|time| format!(\"{:.0} ms\", time - 1_700_000_000_000.).into())\n            .visible_rows(8).collapsed(state.collapsed.clone()).current(state.selected.clone())\n            .on_viewport(|scale, _, cx| { cx.update_global::<TemporalScene, ()>(|s, _| s.domain = scale.domain()); cx.refresh_windows(); })\n            .on_toggle(|id, expanded, _, cx| {\n                cx.update_global::<TemporalScene, ()>(|s, _| {\n                    if expanded {\n                        s.collapsed.remove(&id);\n                    } else {\n                        s.collapsed.insert(id);\n                    }\n                });\n                cx.refresh_windows();\n            })\n            .on_select(|id, _, cx| { cx.update_global::<TemporalScene, ()>(|s, _| s.selected = id); cx.refresh_windows(); }))\n        .child(SpanTimeline::new(\"scene.trace-time.timeline\", \"Same caller-owned time window\")\n            .shared_spans(spans).time_viewport(state.domain).expect(\"valid time window\")\n            .selected_time(state.time_selection).expect(\"valid selection\")\n            .format_time(|time| format!(\"{:.0} ms\", time - 1_700_000_000_000.).into())\n            .visible_rows(4).collapsed(state.collapsed).current(state.selected)\n            .on_viewport(|scale, _, cx| { cx.update_global::<TemporalScene, ()>(|s, _| s.domain = scale.domain()); cx.refresh_windows(); }))\n        .into_any_element()\n}\n\npub(super) fn heatmap(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // A quarter of weekdays, which is the shape this component is actually\n    // asked for. Four columns of five said nothing about how the grid reads\n    // once it carries a period somebody would look at.\n    let days = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\"];\n    // Week-starting dates. Each column is joined on by its own key and prints\n    // the day of the month, which is what fits over a cell; the month it came\n    // from is the group header over the run of columns that share it, because\n    // `3 10 17 24` three times over names nothing on its own.\n    let starts = [6, 13, 20, 27, 3, 10, 17, 24, 3, 10, 17, 24];\n    let month_of = |column: usize| [\"January\", \"February\", \"March\"][column / 4];\n    let weeks: Vec<HeatAxis> = starts\n        .iter()\n        .enumerate()\n        .map(|(column, day)| {\n            HeatAxis::new(format!(\"w{column}\"), day.to_string()).group(month_of(column))\n        })\n        .collect();\n    let mut cells = Vec::new();\n    for (row, day) in days.iter().enumerate() {\n        for (column, week) in weeks.iter().enumerate() {\n            let month = month_of(column);\n            let mut cell = HeatCell::new(format!(\"{day}-{}\", week.id), *day, week.id.clone())\n                .label(format!(\"{day}, {month} {}\", week.label));\n            // Deterministic, and holed in two places so the difference between\n            // \"nothing was measured\" and \"zero was measured\" has somewhere to\n            // show itself.\n            let sample = (row * 7 + column * 3 + (column * column) % 5) % 11;\n            if sample != 4 && sample != 9 {\n                let level = (sample % 5) as u8;\n                cell = cell.level(level).value(format!(\"{level} runs\"));\n            }\n            cells.push(cell);\n        }\n    }\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"January to March, by weekday: five intensity steps, and a missing \\\n             cell is not a measured zero\",\n        ))\n        .child(\n            Heatmap::new(\"scene.heatmap.ready\", \"Fixture activity\")\n                .rows(days)\n                // The ramp is neutral until a caller says whose quantity it\n                // is. This matrix is the run activity the rest of the frame\n                // is already reading in the accent, so it hands that over.\n                .tint(theme.colors.accent)\n                .columns(weeks.clone())\n                .cells(cells),\n        )\n        .child(\n            Heatmap::new(\"scene.heatmap.loading\", \"Fixture activity\").state(HeatmapState::Loading),\n        )\n        .child(caption(&theme, \"Nothing measured in the period at all\"))\n        .child(Heatmap::new(\"scene.heatmap.empty\", \"Fixture activity\").state(HeatmapState::Empty))\n        .child(\n            Heatmap::new(\"scene.heatmap.error\", \"Fixture activity\")\n                .state(HeatmapState::Error(\"The activity request failed.\".into())),\n        )\n        .into_any_element()\n}\n\npub(super) fn sparkline(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let points = [\n        SparklinePoint::new(0.0, 0.20),\n        SparklinePoint::new(0.14, 0.34),\n        SparklinePoint::new(0.28, 0.29),\n        SparklinePoint::new(0.42, 0.56),\n        SparklinePoint::new(0.57, 0.48),\n        SparklinePoint::new(0.71, 0.74),\n        SparklinePoint::new(0.85, 0.66),\n        SparklinePoint::new(1.0, 0.82),\n    ];\n    // A second metric is a second shape. Two readings that draw the same\n    // curve prove only that both were handed the same fixture.\n    let queue = [\n        SparklinePoint::new(0.0, 0.72),\n        SparklinePoint::new(0.14, 0.64),\n        SparklinePoint::new(0.28, 0.80),\n        SparklinePoint::new(0.42, 0.45),\n        SparklinePoint::new(0.57, 0.38),\n        SparklinePoint::new(0.71, 0.52),\n        SparklinePoint::new(0.85, 0.30),\n        SparklinePoint::new(1.0, 0.34),\n    ];\n    stack(&theme)\n        .w(px(520.0))\n        .child(caption(\n            &theme,\n            \"normalized geometry with caller-formatted current, minimum and maximum\",\n        ))\n        .child(Sparkline::new(\n            \"scene.sparkline.rate\",\n            \"Fixture throughput\",\n            SparklineState::Ready(SparklineReading::new(\n                points, \"82 req/s\", \"20 req/s\", \"82 req/s\",\n            )),\n        ))\n        .child(caption(\n            &theme,\n            \"a reading that is no longer verified draws quieter, and its latest \\\n             sample is a ring rather than a mark\",\n        ))\n        .child(Sparkline::new(\n            \"scene.sparkline.stale\",\n            \"Fixture queue depth\",\n            SparklineState::Stale {\n                reading: SparklineReading::new(queue, \"34 jobs\", \"8 jobs\", \"41 jobs\"),\n                reason: \"The latest sample is unavailable; the verified reading remains.\".into(),\n            },\n        ))\n        .child(caption(\n            &theme,\n            \"a series the caller has already spent a colour on\",\n        ))\n        .child(\n            Sparkline::new(\n                \"scene.sparkline.tinted\",\n                \"Fixture tokens\",\n                SparklineState::Ready(SparklineReading::new(points, \"1.2k\", \"0.4k\", \"1.4k\")),\n            )\n            .tint(identity_tint(&theme, \"agent.read\")),\n        )\n        .into_any_element()\n}\n\n/// Progress that is counted, and progress that is not.\npub(super) fn progress_bar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(420.0))\n        .child(caption(&theme, \"A count the host reported\"))\n        .child(\n            ProgressBar::new(\"scene.progress-bar.counted\")\n                .label(\"Indexing workspace\")\n                .count(3, 12),\n        )\n        .child(\n            ProgressBar::new(\"scene.progress-bar.nearly\")\n                .label(\"Uploading\")\n                .count(11, 12),\n        )\n        .child(caption(\n            &theme,\n            \"No count yet. The bar says it is working, and does not invent a fraction\",\n        ))\n        .child(ProgressBar::new(\"scene.progress-bar.unknown\").label(\"Contacting host\"))\n        .child(caption(&theme, \"Stopped, without inventing a fraction\"))\n        .child(\n            ProgressBar::new(\"scene.progress-bar.stalled\")\n                .label(\"Indexing workspace\")\n                .count(3, 12)\n                .stalled(true),\n        )\n        .child(\n            ProgressBar::new(\"scene.progress-bar.paused\")\n                .label(\"Uploading\")\n                .count(6, 12)\n                .paused(true)\n                .on_cancel(|_, _| {}),\n        )\n        .into_any_element()\n}\n\n/// A rule between groups, with and without a name for what it separates.\npub(super) fn divider(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(420.0))\n        .child(caption(&theme, \"Plain\"))\n        .child(Divider::new().id(\"scene.divider.plain\"))\n        .child(caption(&theme, \"Labelled, which names the group below it\"))\n        .child(Divider::new().id(\"scene.divider.labelled\").label(\"Filters\"))\n        .child(Divider::new().id(\"scene.divider.archive\").label(\"Archive\"))\n        .child(caption(\n            &theme,\n            \"Inset, for a rule inside a padded container that should not reach its \\\n             corners\",\n        ))\n        .child(\n            div()\n                .column()\n                .w_full()\n                .py(px(theme.space(Space::Sm)))\n                .radius(&theme, Radius::Card)\n                .surface(&theme, Surface::Panel)\n                .child(\n                    div()\n                        .px(px(theme.space(Space::Md)))\n                        .py(px(theme.space(Space::Xs)))\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Label,\n                            \"Workspace\",\n                        )),\n                )\n                .child(Divider::new().id(\"scene.divider.inset\").inset(Space::Md))\n                .child(\n                    div()\n                        .px(px(theme.space(Space::Md)))\n                        .py(px(theme.space(Space::Xs)))\n                        .child(caption(&theme, \"Two rows, one rule between them\")),\n                ),\n        )\n        .child(caption(&theme, \"Standing up, between two columns\"))\n        .child(\n            div()\n                .row()\n                .items_stretch()\n                .h(px(64.0))\n                .w_full()\n                .gap(px(theme.space(Space::Md)))\n                .child(div().flex_1().child(caption(&theme, \"Left column\")))\n                .child(Divider::new().id(\"scene.divider.vertical\").vertical())\n                .child(div().flex_1().child(caption(&theme, \"Right column\"))),\n        )\n        .into_any_element()\n}\n\n/// A removable token, in every tone a caller can give one.\npub(super) fn tag(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Tones, which report rather than decorate\"))\n        .child(\n            row(&theme)\n                .child(Tag::new(\"scene.tag.rust\", \"rust\").on_remove(|_, _| {}))\n                .child(\n                    Tag::new(\"scene.tag.failing\", \"failing\")\n                        .tone(Tone::Danger)\n                        .on_remove(|_, _| {}),\n                )\n                .child(\n                    Tag::new(\"scene.tag.passing\", \"passing\")\n                        .tone(Tone::Success)\n                        .on_remove(|_, _| {}),\n                )\n                .child(\n                    Tag::new(\"scene.tag.review\", \"needs review\")\n                        .tone(Tone::Warning)\n                        .on_remove(|_, _| {}),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"An identity tint, which is a fact about who and not about severity\",\n        ))\n        .child(\n            row(&theme)\n                .child(\n                    Tag::new(\"scene.tag.ada\", \"Ada\")\n                        .tint(identity_tint(&theme, \"agent.external\"))\n                        .on_remove(|_, _| {}),\n                )\n                .child(\n                    Tag::new(\"scene.tag.grace\", \"Grace\")\n                        .tint(identity_tint(&theme, \"agent.shell\"))\n                        .on_remove(|_, _| {}),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Read-only: nothing offers to remove it, because no handler was given\",\n        ))\n        .child(row(&theme).child(Tag::new(\"scene.tag.plain\", \"read-only\")))\n        .child(caption(\n            &theme,\n            \"Disabled: the host refuses to act on it at all, and it dims to say so\",\n        ))\n        .child(\n            row(&theme).child(\n                Tag::new(\"scene.tag.pinned\", \"pinned\")\n                    .disabled(true)\n                    .on_remove(|_, _| {}),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"Singled out by the keyboard, which is what the next keystroke acts on\",\n        ))\n        .child(\n            row(&theme).child(\n                Tag::new(\"scene.tag.selected\", \"selected\")\n                    .selected(true)\n                    .on_remove(|_, _| {}),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"The shared tiers, resolved against a palette colour\",\n        ))\n        .child(\n            row(&theme).children(\n                [Variant::Filled, Variant::Light, Variant::Subtle].map(|tier| {\n                    Tag::new(format!(\"scene.tag.lime.{}\", tier.name()), tier.name())\n                        .variant(tier)\n                        .color(\"lime\")\n                        .on_remove(|_, _| {})\n                }),\n            ),\n        )\n        .into_any_element()\n}\n\n/// An identity, with a name to derive from and without one.\npub(super) fn avatar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Derived from the name it was given\"))\n        .child(\n            row(&theme)\n                .child(Avatar::new(\"Ada Lovelace\").id(\"scene.avatar.ada\"))\n                .child(Avatar::new(\"Grace Hopper\").id(\"scene.avatar.grace\"))\n                .child(Avatar::new(\"Katherine Johnson\").id(\"scene.avatar.katherine\")),\n        )\n        .child(caption(\n            &theme,\n            \"An identity tint the caller owns, and no name at all — which is drawn \\\n             as its own state rather than as a picture that failed to arrive\",\n        ))\n        .child(\n            row(&theme)\n                .child(\n                    Avatar::new(\"Grace Hopper\")\n                        .tint(identity_tint(&theme, \"agent.shell\"))\n                        .id(\"scene.avatar.tinted\"),\n                )\n                .child(Avatar::new(\"\").id(\"scene.avatar.anonymous\")),\n        )\n        .child(caption(\n            &theme,\n            \"Presence, which the host knows and the mark does not derive. No dot at \\\n             all is not the same claim as offline\",\n        ))\n        .child(\n            row(&theme)\n                .gap(px(theme.space(Space::Md)))\n                .child(\n                    Avatar::new(\"Ada Lovelace\")\n                        .presence(AvatarPresence::Online)\n                        .id(\"scene.avatar.online\"),\n                )\n                .child(\n                    Avatar::new(\"Grace Hopper\")\n                        .presence(AvatarPresence::Away)\n                        .id(\"scene.avatar.away\"),\n                )\n                .child(\n                    Avatar::new(\"Katherine Johnson\")\n                        .presence(AvatarPresence::Busy)\n                        .id(\"scene.avatar.busy\"),\n                )\n                .child(\n                    Avatar::new(\"Ada Lovelace\")\n                        .presence(AvatarPresence::Offline)\n                        .id(\"scene.avatar.offline\"),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"A stack, where each mark is cut out of the one behind it and the \\\n             remainder is a count the host supplied\",\n        ))\n        .child(\n            row(&theme).child(\n                AvatarGroup::new()\n                    .id(\"scene.avatar.group\")\n                    .size(32.0)\n                    .members([\n                        Avatar::new(\"Ada Lovelace\").presence(AvatarPresence::Online),\n                        Avatar::new(\"Grace Hopper\").presence(AvatarPresence::Away),\n                        Avatar::new(\"Katherine Johnson\"),\n                    ])\n                    .overflow(\"+4\"),\n            ),\n        )\n        .child(caption(&theme, \"Sizes\"))\n        .child(\n            row(&theme)\n                .items_center()\n                .gap(px(theme.space(Space::Md)))\n                .child(\n                    Avatar::new(\"Ada Lovelace\")\n                        .size(20.0)\n                        .id(\"scene.avatar.small\"),\n                )\n                .child(Avatar::new(\"Ada Lovelace\").id(\"scene.avatar.default\"))\n                .child(\n                    Avatar::new(\"Ada Lovelace\")\n                        .size(40.0)\n                        .id(\"scene.avatar.medium\"),\n                )\n                .child(\n                    Avatar::new(\"Ada Lovelace\")\n                        .size(56.0)\n                        .id(\"scene.avatar.large\"),\n                ),\n        )\n        .into_any_element()\n}\n\n/// Nothing to show, and the four different reasons for it.\n///\n/// These are separate states because they are separate facts. A host that\n/// refused is not a collection that is empty, and neither is a query that\n/// matched nothing; collapsing them is how a refusal gets shown as an absence.\npub(super) fn empty_state(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // An empty state fills the region whose contents are missing. Drawn on\n    // bare canvas it reads as loose centred text with no edge to be centred\n    // in, which is the one thing it never is in a product.\n    let region = |state: EmptyState| {\n        div()\n            .w_full()\n            .radius(&theme, Radius::Card)\n            .frame(&theme, Surface::Panel, Elevation::Raised)\n            .child(state)\n    };\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(&theme, \"Nothing has been started yet\"))\n        .child(region(\n            EmptyState::new(\"scene.empty-state.unstarted\", \"No runs yet\")\n                .kind(EmptyKind::Unstarted)\n                .detail(\"A run appears here once one has been started.\"),\n        ))\n        .child(caption(&theme, \"The host refused, and says so\"))\n        .child(region(\n            EmptyState::new(\n                \"scene.empty-state.unavailable\",\n                \"The host refused the request\",\n            )\n            .kind(EmptyKind::Unavailable)\n            .detail(\"Approval is required for this workspace.\")\n            .action(\n                Button::new(\"scene.empty-state.retry\")\n                    .label(\"Try again\")\n                    .on_click(|_, _| {}),\n            ),\n        ))\n        .child(caption(&theme, \"A collection that really is empty\"))\n        .child(region(\n            EmptyState::new(\"scene.empty-state.empty\", \"No runs match “failing”\")\n                .kind(EmptyKind::Empty)\n                .detail(\"Clear the filter to see every run.\"),\n        ))\n        .child(caption(&theme, \"It was tried, and it failed\"))\n        .child(region(\n            EmptyState::new(\"scene.empty-state.failed\", \"The run could not be read\")\n                .kind(EmptyKind::Failed)\n                .detail(\"The snapshot on disk is from a newer version of the format.\")\n                .action(\n                    Button::new(\"scene.empty-state.reload\")\n                        .label(\"Reload\")\n                        .on_click(|_, _| {}),\n                ),\n        ))\n        .child(caption(\n            &theme,\n            \"The host refused because the reader is not allowed\",\n        ))\n        .child(region(\n            EmptyState::new(\"scene.empty-state.unauthorized\", \"This workspace is locked\")\n                .kind(EmptyKind::Unauthorized)\n                .detail(\"Ask an owner to grant access.\"),\n        ))\n        .into_any_element()\n}\n\npub(super) fn state_ladder(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let pane = |title: &'static str, view: StateView| {\n        div()\n            .column()\n            .gap_token(&theme, Space::Xs)\n            .w(px(240.0))\n            .child(crate::foundation::text(&theme, TypeScale::Caption, title))\n            .child(view)\n    };\n    stack(&theme)\n        .w_full()\n        .child(caption(\n            &theme,\n            \"Ten phases, one surface. A refusal is not an empty list.\",\n        ))\n        .child(\n            row(&theme)\n                .child(pane(\n                    \"Idle\",\n                    StateView::new(\"scene.state.idle\", Phase::Idle),\n                ))\n                .child(pane(\n                    \"Queued\",\n                    StateView::new(\"scene.state.queued\", Phase::Queued),\n                ))\n                .child(pane(\n                    \"Blocked\",\n                    StateView::new(\"scene.state.blocked\", Phase::Blocked),\n                )),\n        )\n        .child(\n            row(&theme)\n                .child(pane(\n                    \"Loading\",\n                    StateView::new(\"scene.state.loading\", Phase::Loading),\n                ))\n                .child(pane(\n                    \"Empty\",\n                    StateView::new(\"scene.state.empty\", Phase::Empty),\n                ))\n                .child(pane(\n                    \"Cancelled\",\n                    StateView::new(\"scene.state.cancelled\", Phase::Cancelled).content(div()),\n                )),\n        )\n        .child(\n            row(&theme)\n                .child(pane(\n                    \"Unavailable\",\n                    StateView::new(\n                        \"scene.state.unavailable\",\n                        Loadable::<(), String>::Unavailable(\"the host refused\".into()),\n                    ),\n                ))\n                .child(pane(\n                    \"Error\",\n                    StateView::new(\n                        \"scene.state.error\",\n                        AsyncValue::<(), String>::error(\"the index is still building\".into()),\n                    ),\n                ))\n                .child(pane(\n                    \"Ready\",\n                    StateView::from_async(\n                        \"scene.state.ready\",\n                        &AsyncValue::<_, String>::ready(\"12 runs\"),\n                        |value| {\n                            crate::foundation::text(&theme, TypeScale::Body, *value)\n                                .into_any_element()\n                        },\n                    ),\n                )),\n        )\n        .child(pane(\"Refreshing, last value kept\", {\n            let mut value = AsyncValue::<_, String>::ready(\"12 runs\");\n            value.refresh();\n            StateView::from_async(\"scene.state.refreshing\", &value, |text| {\n                crate::foundation::text(&theme, TypeScale::Body, *text).into_any_element()\n            })\n        }))\n        .child(\n            StaleMark::new(\n                \"scene.state.stale\",\n                \"Refreshing failed. The last verified value remains.\",\n            )\n            .updated(\"a moment ago\"),\n        )\n        .into_any_element()\n}\n\npub(super) fn banner(_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 report the reader may put away, because the caller gave it somewhere to go\",\n        ))\n        .child(\n            Banner::new(\n                \"scene.banner.warning\",\n                \"The last refresh failed. The verified list is still on screen.\",\n                Tone::Warning,\n            )\n            .title(\"Stale workspace\")\n            .action(\n                Button::new(\"scene.banner.retry\")\n                    .label(\"Try again\")\n                    .secondary()\n                    .small(),\n            )\n            .on_dismiss(|_, _| {}),\n        )\n        .child(caption(\n            &theme,\n            \"A refusal the caller did not offer a way out of, so no dismiss appears\",\n        ))\n        .child(\n            Banner::new(\n                \"scene.banner.danger\",\n                \"The host refused this action.\",\n                Tone::Danger,\n            )\n            .title(\"Refused\"),\n        )\n        .into_any_element()\n}\n\npub(super) fn outcome_panel(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(&theme, \"Finished\"))\n        .child(\n            OutcomePanel::new(\"scene.outcome.success\", OutcomeKind::Success)\n                .title(\"Import finished\")\n                .count(\"50 files imported\"),\n        )\n        .child(caption(&theme, \"Finished, with failures the host numbered\"))\n        .child(\n            OutcomePanel::new(\"scene.outcome.partial\", OutcomeKind::Partial)\n                .title(\"Import finished, with failures\")\n                .count(\"47 succeeded, 3 failed\")\n                .detail(\"The three that failed are still in the queue.\")\n                .action(\n                    Button::new(\"scene.outcome.review\")\n                        .label(\"Review the three\")\n                        .secondary()\n                        .small()\n                        .on_click(|_, _| {}),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Did not finish. What the reader can do about it is a control, not a \\\n             sentence about a control\",\n        ))\n        .child(\n            OutcomePanel::new(\"scene.outcome.failed\", OutcomeKind::Failed)\n                .detail(\"The host closed the connection before any file landed.\")\n                .action(\n                    Button::new(\"scene.outcome.retry\")\n                        .label(\"Import again\")\n                        .small()\n                        .on_click(|_, _| {}),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) fn stage_progress(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(420.0))\n        .child(caption(&theme, \"Download, then verify, then install\"))\n        .child(StageProgress::new(\"scene.stage.running\").stages([\n            ProgressStage::new(\"download\", \"Download\", StageStatus::Done),\n            ProgressStage::new(\"verify\", \"Verify\", StageStatus::Active),\n            ProgressStage::new(\"install\", \"Install\", StageStatus::Pending),\n        ]))\n        .child(caption(&theme, \"A stage that failed keeps its name\"))\n        .child(StageProgress::new(\"scene.stage.failed\").stages([\n            ProgressStage::new(\"download\", \"Download\", StageStatus::Done),\n            ProgressStage::new(\"verify\", \"Verify\", StageStatus::Failed),\n            ProgressStage::new(\"install\", \"Install\", StageStatus::Pending),\n        ]))\n        .into_any_element()\n}\n\n/// The counts the animated readout scene is currently showing.\n#[derive(Debug)]\npub(super) struct SceneCounts {\n    runs: f64,\n    seconds: f64,\n}\n\nimpl Global for SceneCounts {}\n\npub(super) 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    // A readout is a reading, so it is drawn as one: the same card, caption\n    // and hierarchy a KPI gets. A number floating on the canvas beside its\n    // label is a debug print of the value, not a report of it.\n    let readout = |label: &'static str, detail: &'static str, number: AnimatedNumber| {\n        div()\n            .column()\n            .flex_1()\n            .min_w_0()\n            .gap(px(theme.space(Space::Xs)))\n            .p(px(theme.space(Space::Md)))\n            .card_surface(&theme, CardVariant::Filled)\n            .child(\n                crate::foundation::text(&theme, TypeScale::Caption, label)\n                    .text_tone(&theme, TextTone::Muted),\n            )\n            .child(number)\n            .child(\n                crate::foundation::text(&theme, TypeScale::Caption, detail)\n                    .text_tone(&theme, TextTone::Faint),\n            )\n    };\n\n    stack(&theme)\n        .w(px(520.0))\n        .child(caption(\n            &theme,\n            \"the published value is the target, from the frame it changes\",\n        ))\n        .child(\n            div()\n                .row()\n                .items_stretch()\n                .w_full()\n                .gap(px(theme.space(Space::Md)))\n                .child(readout(\n                    \"Runs this week\",\n                    \"counted by the host\",\n                    AnimatedNumber::new(\"scene.number.runs\", runs)\n                        .format(grouped)\n                        .type_scale(TypeScale::Title),\n                ))\n                .child(readout(\n                    \"Median duration\",\n                    \"one decimal, the host's choice\",\n                    AnimatedNumber::new(\"scene.number.seconds\", seconds)\n                        .format(|value| format!(\"{value:.1}s\"))\n                        .type_scale(TypeScale::Title),\n                )),\n        )\n        .child(\n            div().row().child(\n                Button::new(\"scene.number.recount\")\n                    .label(\"Recount\")\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        .into_any_element()\n}\n\npub(super) 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        // The facts are a section of a detail page rather than prose loose on\n        // the canvas, and the list is drawn the way a detail page would hold\n        // it: on a surface with an edge the two columns are read against.\n        .child(\n            div()\n                .column()\n                .card_surface(&theme, CardVariant::Elevated)\n                .p_token(&theme, Space::Md)\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        )\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(crate::foundation::text(\n                                    &theme,\n                                    TypeScale::Body,\n                                    SharedString::new_static(\n                                        \"The host refused the request. The refusal is shown as it \\\n                                     arrived.\",\n                                    ),\n                                ).text_tone(&theme, TextTone::Muted)),\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}\n\npub(super) 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(\n            &theme,\n            \"unknown, stalled, and paused work remain different facts\",\n        ))\n        .child(\n            row(&theme)\n                .gap(px(theme.spacing.lg))\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            ProgressCircle::new(\"scene.progress-circle.stalled\")\n                                .label(\"Upload stalled\")\n                                .stalled(true),\n                        )\n                        .child(caption(&theme, \"Stalled\")),\n                )\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            ProgressCircle::new(\"scene.progress-circle.paused\")\n                                .label(\"Upload paused\")\n                                .paused(true),\n                        )\n                        .child(caption(&theme, \"Paused\")),\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}\n\n/// The glyph catalog, at the sizes and tones a caller can ask for.\n///\n/// An icon appears inside a dozen other scenes, which is how it went so long\n/// without one of its own: it was recognisable everywhere and reviewed\n/// nowhere, so a change to a tone or to the direction rule would have moved a\n/// tab strip and a sidebar and been read as a change to those.\npub(super) fn icon(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let tones = [\n        (\"primary\", IconTone::Primary),\n        (\"muted\", IconTone::Muted),\n        (\"faint\", IconTone::Faint),\n        (\"accent\", IconTone::Accent),\n        (\"accent strong\", IconTone::AccentStrong),\n        (\"success\", IconTone::Success),\n        (\"warning\", IconTone::Warning),\n        (\"danger\", IconTone::Danger),\n        (\"info\", IconTone::Info),\n    ];\n\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"Phosphor Regular is the resting catalog; every glyph is rendered at a real control size\",\n        ))\n        .child(\n            row(&theme)\n                .gap(px(theme.space(Space::Xs)))\n                .children(Icon::ALL.iter().map(|glyph| {\n                    let name = glyph.name().source_name();\n                    div()\n                        .row()\n                        .items_center()\n                        .gap(px(theme.space(Space::Xs)))\n                        .w(px(160.0))\n                        .h(px(32.0))\n                        .px(px(theme.space(Space::Xs)))\n                        .radius(&theme, Radius::Control)\n                        .well(&theme)\n                        .child(IconView::named(\n                            format!(\"scene.icon.glyph.{name}\"),\n                            *glyph,\n                            name,\n                        ))\n                        .child(\n                            crate::foundation::text(&theme, TypeScale::Caption, name)\n                                .text_tone(&theme, TextTone::Muted)\n                                .text_ellipsis(),\n                        )\n                        .into_any_element()\n                })),\n        )\n        .child(caption(\n            &theme,\n            \"Fill is the selected or committed state of the same symbol, never an ornamental weight\",\n        ))\n        .child(\n            row(&theme).gap(px(theme.space(Space::Md))).children(\n                [\n                    (Icon::Star, \"star\"),\n                    (Icon::CheckCircle, \"check-circle\"),\n                    (Icon::Home, \"home\"),\n                    (Icon::Browser, \"browser\"),\n                ]\n                .map(|(glyph, label)| {\n                    div()\n                        .row()\n                        .items_center()\n                        .gap(px(theme.space(Space::Sm)))\n                        .p(px(theme.space(Space::Sm)))\n                        .radius(&theme, Radius::Card)\n                        .surface(&theme, Surface::Panel)\n                        .child(IconView::new(glyph).large().muted())\n                        .child(IconView::new(glyph.filled()).large().accent())\n                        .child(\n                            crate::foundation::text(&theme, TypeScale::Caption, label)\n                                .text_tone(&theme, TextTone::Muted),\n                        )\n                        .into_any_element()\n                }),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"The token size ramp keeps icon and control geometry on the same scale\",\n        ))\n        .child(\n            row(&theme)\n                .gap(px(theme.space(Space::Md)))\n                .child(IconView::new(Icon::Sparkle).xs().faint())\n                .child(IconView::new(Icon::Sparkle).small().muted())\n                .child(IconView::new(Icon::Sparkle).medium())\n                .child(IconView::new(Icon::Sparkle).large().accent()),\n        )\n        .child(caption(\n            &theme,\n            \"Every tone. These are facts about what a glyph reports, not decoration\",\n        ))\n        // At the size a glyph is actually drawn, a stroke two steps apart on\n        // the text ramp is a few pixels of difference nobody can hold side by\n        // side. Each tone is shown once large enough to be compared and once\n        // at the size it is used, on a panel so the comparison is against one\n        // ground rather than against the canvas at three different insets.\n        .child(\n            row(&theme)\n                .gap(px(theme.space(Space::Md)))\n                .children(tones.map(|(label, tone)| {\n                    div()\n                        .column()\n                        .items_center()\n                        .gap(px(theme.space(Space::Xs)))\n                        .w(px(88.0))\n                        .p(px(theme.space(Space::Sm)))\n                        .radius(&theme, Radius::Card)\n                        .surface(&theme, Surface::Panel)\n                        .child(\n                            IconView::named(format!(\"scene.icon.tone.{label}\"), Icon::Info, label)\n                                .tone(tone)\n                                .large(),\n                        )\n                        .child(\n                            div()\n                                .row()\n                                .gap(px(theme.space(Space::Xs)))\n                                .child(IconView::new(Icon::Check).tone(tone))\n                                .child(IconView::new(Icon::Danger).tone(tone))\n                                .child(IconView::new(Icon::Refresh).tone(tone)),\n                        )\n                        .child(\n                            crate::foundation::text(&theme, TypeScale::Caption, label)\n                                .text_tone(&theme, TextTone::Muted),\n                        )\n                        .into_any_element()\n                })),\n        )\n        .child(caption(\n            &theme,\n            \"A glyph that means a direction turns with the reading order; one that \\\n             means a thing does not\",\n        ))\n        .child(\n            row(&theme).gap(px(theme.space(Space::Md))).children(\n                [\n                    (Icon::ArrowRight, \"arrow-right\"),\n                    (Icon::Return, \"return\"),\n                    (Icon::Copy, \"copy\"),\n                    (Icon::Check, \"check\"),\n                    (Icon::Settings, \"settings\"),\n                ]\n                .map(|(glyph, name)| {\n                    IconView::named(format!(\"scene.icon.direction.{name}\"), glyph, name)\n                        .follow_direction(true)\n                        .into_any_element()\n                }),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"Semantic motion recipes: ongoing work spins, deliberation breathes, and settled feedback reacts once\",\n        ))\n        .child(\n            row(&theme)\n                .gap(px(theme.space(Space::Lg)))\n                .child(\n                    IconView::named(\"scene.icon.motion.working\", Icon::Spinner, \"Working\")\n                        .large()\n                        .accent()\n                        .spinning(\"scene.icon.motion.working.spin\"),\n                )\n                .child(\n                    IconView::named(\n                        \"scene.icon.motion.deliberating\",\n                        Icon::Sparkle,\n                        \"Deliberating\",\n                    )\n                    .large()\n                    .breathing(\"scene.icon.motion.deliberating.breathe\"),\n                )\n                .child(\n                    IconView::named(\n                        \"scene.icon.motion.success\",\n                        Icon::CheckCircle.filled(),\n                        \"Succeeded\",\n                    )\n                    .large()\n                    .success()\n                    .reacting(\"scene.icon.motion.success.pop\", crate::motion::Micro::Pop),\n                )\n                .child(\n                    IconView::named(\"scene.icon.motion.error\", Icon::Danger, \"Failed\")\n                        .large()\n                        .danger()\n                        .reacting(\"scene.icon.motion.error.wobble\", crate::motion::Micro::Wobble),\n                ),\n        )\n        .into_any_element()\n}\n\n//! What the renderer can do to a surface.\n\nuse std::{cell::RefCell, collections::HashMap};\n\nuse super::support::*;\n\nthread_local! {\n    static COMPOSITED_SPRITE_ATLASES: RefCell<HashMap<[u32; 8], Arc<RenderImage>>> =\n        RefCell::new(HashMap::new());\n}\n\npub(super) fn composited_sprite_atlas(theme: &Theme) -> Arc<RenderImage> {\n    let accent = theme.colors.accent_strong.to_rgb();\n    let info = theme.colors.info.to_rgb();\n    let key = [\n        accent.r.to_bits(),\n        accent.g.to_bits(),\n        accent.b.to_bits(),\n        accent.a.to_bits(),\n        info.r.to_bits(),\n        info.g.to_bits(),\n        info.b.to_bits(),\n        info.a.to_bits(),\n    ];\n    COMPOSITED_SPRITE_ATLASES.with(|atlases| {\n        let mut atlases = atlases.borrow_mut();\n        atlases\n            .entry(key)\n            .or_insert_with(|| Arc::new(build_composited_sprite_atlas(theme)))\n            .clone()\n    })\n}\n\nfn build_composited_sprite_atlas(theme: &Theme) -> RenderImage {\n    const TILE: i32 = 48;\n    const TILES: i32 = 3;\n\n    let accent = theme.colors.accent_strong.to_rgb();\n    let info = theme.colors.info.to_rgb();\n    let mut pixels = Vec::with_capacity((TILE * TILE * TILES * 4) as usize);\n    let byte = |channel: f32| (channel.clamp(0.0, 1.0) * 255.0).round() as u8;\n    for y in 0..TILE {\n        for x in 0..TILE * TILES {\n            let tile = x / TILE;\n            let local_x = x % TILE;\n            let dx = local_x as f32 + 0.5 - TILE as f32 / 2.0;\n            let dy = y as f32 + 0.5 - TILE as f32 / 2.0;\n            let radius = dx.hypot(dy);\n            let (red, green, blue, alpha) = match tile {\n                0 => {\n                    let mix = local_x as f32 / (TILE - 1) as f32;\n                    let alpha = ((TILE as f32 * 0.44 - radius) / 1.5).clamp(0.0, 1.0);\n                    (\n                        accent.r + (info.r - accent.r) * mix,\n                        accent.g + (info.g - accent.g) * mix,\n                        accent.b + (info.b - accent.b) * mix,\n                        alpha,\n                    )\n                }\n                1 => {\n                    let alpha = (1.0 - radius / (TILE as f32 * 0.5)).clamp(0.0, 1.0);\n                    (1.0, 1.0, 1.0, alpha * alpha)\n                }\n                _ => {\n                    let horizontal = (1.0 - dy.abs() / 2.6).clamp(0.0, 1.0)\n                        * (1.0 - dx.abs() / 22.0).clamp(0.0, 1.0);\n                    let vertical = (1.0 - dx.abs() / 2.6).clamp(0.0, 1.0)\n                        * (1.0 - dy.abs() / 22.0).clamp(0.0, 1.0);\n                    let core = (1.0 - radius / 7.0).clamp(0.0, 1.0);\n                    (1.0, 1.0, 1.0, horizontal.max(vertical).max(core))\n                }\n            };\n            pixels.extend_from_slice(&[byte(red), byte(green), byte(blue), byte(alpha)]);\n        }\n    }\n\n    RenderImage::from_rgba(size(DevicePixels(TILE * TILES), DevicePixels(TILE)), pixels)\n        .expect(\"the procedural sprite atlas has exact RGBA8 dimensions\")\n}\n\npub(super) fn visual_effects(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let radial = radial_gradient_stops(\n        point(0.32, 0.36),\n        point(0.68, 0.72),\n        [\n            linear_color_stop(theme.colors.accent_strong, 0.0),\n            linear_color_stop(theme.colors.info.opacity(0.86), 0.34),\n            linear_color_stop(theme.colors.accent.opacity(0.38), 0.7),\n            linear_color_stop(theme.colors.canvas.opacity(0.0), 1.0),\n        ],\n    )\n    .color_space(gpui::ColorSpace::Oklab);\n    let conic = conic_gradient_stops(\n        -24.0,\n        point(0.5, 0.5),\n        [\n            linear_color_stop(theme.colors.accent_strong, 0.0),\n            linear_color_stop(theme.colors.info, 0.22),\n            linear_color_stop(theme.colors.success, 0.48),\n            linear_color_stop(theme.colors.warning, 0.72),\n            linear_color_stop(theme.colors.danger, 1.0),\n        ],\n    )\n    .color_space(gpui::ColorSpace::Oklab);\n    let path_fill = conic;\n    let stroke_fill = radial;\n    let stroke_base = theme.colors.hairline_strong.opacity(0.32);\n    let sprite_atlas = composited_sprite_atlas(&theme);\n    let additive_tint = theme.colors.accent_strong;\n    let additive_tint_alt = theme.colors.info;\n    let screen_tint = theme.colors.success;\n    let screen_tint_alt = theme.colors.warning;\n    let mut effect_planner = EffectPlanner::new(EffectPolicy::new(EffectQuality::Cinematic));\n    let success_particles = effect_planner.plan(\n        EffectEvent::new(\n            \"scene-success\",\n            \"visual-effects\",\n            \"success-card\",\n            VisualCue::Success,\n        ),\n        1,\n        false,\n    );\n    let reward_particles = effect_planner.plan(\n        EffectEvent::new(\n            \"scene-reward\",\n            \"visual-effects\",\n            \"reward-card\",\n            VisualCue::Reward,\n        ),\n        1,\n        false,\n    );\n    let mut static_planner = EffectPlanner::new(EffectPolicy::new(EffectQuality::Cinematic));\n    let static_particles = static_planner.plan(\n        EffectEvent::new(\n            \"scene-static\",\n            \"visual-effects-static\",\n            \"static-card\",\n            VisualCue::Reward,\n        ),\n        1,\n        true,\n    );\n    let label = |text: &'static str| {\n        div()\n            .absolute()\n            .bottom(px(theme.spacing.sm))\n            .left(px(theme.spacing.sm))\n            .px_token(&theme, Space::Sm)\n            .py_token(&theme, Space::Xs)\n            .radius(&theme, Radius::Pill)\n            // The caption sits on top of artwork it does not control, so it\n            // carries its own opaque surface rather than a scrim: a legend\n            // that dims with what it labels stops being a legend.\n            .frame(&theme, Surface::Panel, Elevation::Raised)\n            .child(crate::foundation::text(&theme, TypeScale::Caption, text))\n    };\n\n    stack(&theme)\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Renderer-backed gradients\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Md)\n                .child(\n                    div()\n                        .relative()\n                        .w(px(248.0))\n                        .h(px(164.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .bg(radial)\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(\"scene.effects.radial\", Role::Image)\n                                .text(\"Elliptical radial gradient\")\n                                .description(\"Four ordered Oklab color stops\"),\n                        )\n                        .child(label(\"Radial · 4 stops\")),\n                )\n                .child(\n                    div()\n                        .relative()\n                        .w(px(248.0))\n                        .h(px(164.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .bg(conic)\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(\"scene.effects.conic\", Role::Image)\n                                .text(\"Clockwise conic gradient\")\n                                .description(\"Five ordered Oklab color stops\"),\n                        )\n                        .child(label(\"Conic · 5 stops\")),\n                )\n                .child(\n                    div()\n                        .relative()\n                        .w(px(248.0))\n                        .h(px(164.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .bg(theme.colors.sunken)\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(\"scene.effects.path-gradient\", Role::Image)\n                                .text(\"Conic gradient path fill\")\n                                .description(\"The same renderer primitive clipped by a GPUI path\"),\n                        )\n                        .child(\n                            div().absolute().inset_0().child(\n                                canvas(\n                                    |_, _, _| {},\n                                    move |bounds, _, window, _| {\n                                        let inset = px(22.0);\n                                        let center = bounds.center();\n                                        let mut builder = gpui::PathBuilder::fill();\n                                        builder.move_to(point(center.x, bounds.top() + inset));\n                                        builder.line_to(point(bounds.right() - inset, center.y));\n                                        builder.line_to(point(center.x, bounds.bottom() - inset));\n                                        builder.line_to(point(bounds.left() + inset, center.y));\n                                        builder.close();\n                                        if let Ok(path) = builder.build() {\n                                            window.paint_path(path, path_fill);\n                                        }\n                                    },\n                                )\n                                .size_full(),\n                            ),\n                        )\n                        .child(label(\"Path fill · conic\")),\n                ),\n        )\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Measured path strokes\",\n        ))\n        .child(\n            div()\n                .relative()\n                .w(px(776.0))\n                .h(px(180.0))\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .bg(theme.colors.sunken)\n                .semantic_in(\n                    cx,\n                    NodeSpec::new(\"scene.effects.path-strokes\", Role::Image)\n                        .text(\"Measured path stroke effects\")\n                        .description(\"Trimmed, dash-offset, and combined stroke geometry\"),\n                )\n                .child(\n                    div().absolute().inset_0().child(\n                        canvas(\n                            |_, _, _| {},\n                            move |bounds, _, window, _| {\n                                let build = |mut builder: gpui::PathBuilder, y: f32| {\n                                    let start =\n                                        point(bounds.left() + px(128.0), bounds.top() + px(y));\n                                    let end =\n                                        point(bounds.right() - px(24.0), bounds.top() + px(y));\n                                    builder.move_to(start);\n                                    builder.cubic_bezier_to(\n                                        end,\n                                        point(start.x + px(132.0), start.y - px(24.0)),\n                                        point(end.x - px(132.0), end.y + px(24.0)),\n                                    );\n                                    builder.build()\n                                };\n\n                                if let Ok(path) = build(gpui::PathBuilder::stroke(px(8.0)), 42.0) {\n                                    window.paint_path(path, stroke_base);\n                                }\n                                if let Ok(path) = build(\n                                    gpui::PathBuilder::stroke(px(8.0)).stroke_trim(0.0, 0.68),\n                                    42.0,\n                                ) {\n                                    window.paint_path(path, stroke_fill);\n                                }\n                                if let Ok(path) = build(\n                                    gpui::PathBuilder::stroke(px(7.0))\n                                        .dash_array(&[px(18.0), px(11.0)])\n                                        .dash_offset(px(9.0)),\n                                    92.0,\n                                ) {\n                                    window.paint_path(path, conic);\n                                }\n                                if let Ok(path) = build(\n                                    gpui::PathBuilder::stroke(px(7.0))\n                                        .dash_array(&[px(14.0), px(8.0)])\n                                        .dash_offset(px(-6.0))\n                                        .stroke_trim(0.16, 0.84),\n                                    142.0,\n                                ) {\n                                    window.paint_path(path, stroke_fill);\n                                }\n                            },\n                        )\n                        .size_full(),\n                    ),\n                )\n                .child(div().absolute().left(px(16.0)).top(px(31.0)).child(\n                    crate::foundation::text(&theme, TypeScale::Caption, \"Trim · 68%\"),\n                ))\n                .child(div().absolute().left(px(16.0)).top(px(81.0)).child(\n                    crate::foundation::text(&theme, TypeScale::Caption, \"Dash phase · 9 px\"),\n                ))\n                .child(div().absolute().left(px(16.0)).top(px(131.0)).child(\n                    crate::foundation::text(&theme, TypeScale::Caption, \"Trim + phase\"),\n                )),\n        )\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Composited sprite batches\",\n        ))\n        .child(\n            div()\n                .relative()\n                .w(px(776.0))\n                .h(px(190.0))\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .bg(theme.colors.sunken)\n                .semantic_in(\n                    cx,\n                    NodeSpec::new(\"scene.effects.sprite-batch\", Role::Image)\n                        .text(\"Composited sprite batch\")\n                        .description(\n                            \"One atlas with explicit source rectangles, transforms, masks, and normal, additive, and screen blending\",\n                        ),\n                )\n                .child(\n                    div().absolute().inset_0().child(\n                        canvas(\n                            |_, _, _| {},\n                            move |frame, _, window, _| {\n                                let source = |column| {\n                                    bounds(\n                                        point(DevicePixels(column * 48), DevicePixels(0)),\n                                        size(DevicePixels(48), DevicePixels(48)),\n                                    )\n                                };\n                                let destination = |x, y, width, height| {\n                                    bounds(\n                                        point(frame.left() + px(x), frame.top() + px(y)),\n                                        size(px(width), px(height)),\n                                    )\n                                };\n                                let sprites = [\n                                    SpriteInstance::new(\n                                        destination(56.0, 26.0, 104.0, 104.0),\n                                        source(0),\n                                    )\n                                    .corner_radii(Corners::all(px(28.0)))\n                                    .transform(\n                                        SpriteTransform::identity().rotate(radians(-0.16)),\n                                    ),\n                                    SpriteInstance::new(\n                                        destination(270.0, 34.0, 96.0, 96.0),\n                                        source(1),\n                                    )\n                                    .color_mode(SpriteColorMode::AlphaMask, additive_tint)\n                                    .blend_mode(SpriteBlendMode::Additive),\n                                    SpriteInstance::new(\n                                        destination(314.0, 34.0, 96.0, 96.0),\n                                        source(1),\n                                    )\n                                    .transform(\n                                        SpriteTransform::identity().rotate(radians(0.22)),\n                                    )\n                                    .color_mode(SpriteColorMode::AlphaMask, additive_tint_alt)\n                                    .blend_mode(SpriteBlendMode::Additive),\n                                    SpriteInstance::new(\n                                        destination(536.0, 24.0, 112.0, 112.0),\n                                        source(2),\n                                    )\n                                    .color_mode(SpriteColorMode::AlphaMask, screen_tint)\n                                    .blend_mode(SpriteBlendMode::Screen),\n                                    SpriteInstance::new(\n                                        destination(582.0, 30.0, 100.0, 100.0),\n                                        source(2),\n                                    )\n                                    .transform(\n                                        SpriteTransform::identity().rotate(radians(0.42)),\n                                    )\n                                    .color_mode(SpriteColorMode::AlphaMask, screen_tint_alt)\n                                    .blend_mode(SpriteBlendMode::Screen),\n                                ];\n                                window\n                                    .paint_sprite_batch(sprite_atlas.clone(), 0, &sprites)\n                                    .expect(\"the canonical sprite batch is valid\");\n                            },\n                        )\n                        .size_full(),\n                    ),\n                )\n                .child(\n                    div()\n                        .absolute()\n                        .left(px(64.0))\n                        .bottom(px(12.0))\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Normal · crop + rotate\",\n                        )),\n                )\n                .child(\n                    div()\n                        .absolute()\n                        .left(px(282.0))\n                        .bottom(px(12.0))\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Additive · alpha mask\",\n                        )),\n                )\n                .child(\n                    div()\n                        .absolute()\n                        .left(px(550.0))\n                        .bottom(px(12.0))\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Screen · atlas reuse\",\n                        )),\n                ),\n        )\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Policy-owned particle recipes\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Md)\n                .child(\n                    div()\n                        .relative()\n                        .w(px(248.0))\n                        .h(px(164.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .bg(theme.colors.sunken)\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(\"scene.effects.particles-success\", Role::Image)\n                                .text(\"Deterministic success burst\")\n                                .description(\n                                    \"A policy-owned recipe sampled at a fixed absolute time\",\n                                ),\n                        )\n                        .child(\n                            EffectParticles::new(success_particles)\n                                .sample_at(Duration::from_millis(420)),\n                        )\n                        .child(label(\"Success · 36 instances\")),\n                )\n                .child(\n                    div()\n                        .relative()\n                        .w(px(248.0))\n                        .h(px(164.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .bg(theme.colors.sunken)\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(\"scene.effects.particles-reward\", Role::Image)\n                                .text(\"Deterministic reward celebration\")\n                                .description(\n                                    \"Two emitters share one atlas upload and one sprite batch\",\n                                ),\n                        )\n                        .child(\n                            EffectParticles::new(reward_particles)\n                                .sample_at(Duration::from_millis(620)),\n                        )\n                        .child(label(\"Reward · 2 emitters\")),\n                )\n                .child(\n                    div()\n                        .relative()\n                        .w(px(248.0))\n                        .h(px(164.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .bg(theme.colors.sunken)\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(\"scene.effects.particles-static\", Role::Image)\n                                .text(\"Reduced motion particle fallback\")\n                                .description(\n                                    \"A fixed bounded constellation with no animation frames\",\n                                ),\n                        )\n                        .child(EffectParticles::new(static_particles))\n                        .child(label(\"Static · no timeline\")),\n                ),\n        )\n        .into_any_element()\n}\n\n#[derive(Debug)]\npub(super) struct SceneCinematicClip;\n\nimpl DotLottieClip for SceneCinematicClip {\n    fn metadata(&self) -> DotLottieMetadata {\n        DotLottieMetadata {\n            width: 240,\n            height: 140,\n            frame_count: 120,\n            frame_rate_millihertz: 60_000,\n            duration: Duration::from_secs(2),\n            animation_count: 1,\n            state_machine_count: 0,\n        }\n    }\n\n    fn render(&self, sample: DotLottieSample) -> Result<Arc<RenderImage>, DotLottieError> {\n        static HANDOFF_LTR: OnceLock<Arc<RenderImage>> = OnceLock::new();\n        static HANDOFF_RTL: OnceLock<Arc<RenderImage>> = OnceLock::new();\n        static POSTER: OnceLock<Arc<RenderImage>> = OnceLock::new();\n\n        const WIDTH: u32 = 240;\n        const HEIGHT: u32 = 140;\n        let cache = match (sample.progress_per_mille(), sample.mirror_x()) {\n            (500, false) => Some(&HANDOFF_LTR),\n            (500, true) => Some(&HANDOFF_RTL),\n            (700, false) => Some(&POSTER),\n            _ => None,\n        };\n        if let Some(image) = cache.and_then(OnceLock::get) {\n            return Ok(image.clone());\n        }\n        let progress = sample.progress_per_mille() as f32 / 1_000.0;\n        let direction = if sample.mirror_x() { -1.0 } else { 1.0 };\n        let angle = progress * std::f32::consts::TAU;\n        let orbit_x = 120.0 + direction * angle.cos() * 64.0;\n        let orbit_y = 70.0 + angle.sin() * 31.0;\n        let pulse = 0.72 + (angle * 2.0).sin() * 0.12;\n        let mut pixels = vec![0; (WIDTH * HEIGHT * 4) as usize];\n\n        for y in 0..HEIGHT {\n            for x in 0..WIDTH {\n                let dx = x as f32 - 120.0;\n                let dy = y as f32 - 70.0;\n                let distance = ((dx / 1.65).powi(2) + dy.powi(2)).sqrt();\n                let ring = (1.0 - (distance - 38.0).abs() / 3.2).clamp(0.0, 1.0);\n                let haze = (1.0 - distance / 76.0).clamp(0.0, 1.0).powi(3) * 0.28;\n                let orb_distance =\n                    ((x as f32 - orbit_x).powi(2) + (y as f32 - orbit_y).powi(2)).sqrt();\n                let orb = (1.0 - orb_distance / 13.0).clamp(0.0, 1.0).powi(2);\n                let directional_streak = if (y as f32 - orbit_y).abs() < 1.4 {\n                    let trail = direction * (orbit_x - x as f32);\n                    (1.0 - trail / 54.0).clamp(0.0, 1.0) * (trail / 8.0).clamp(0.0, 1.0) * 0.52\n                } else {\n                    0.0\n                };\n                let star = if dx.abs() < 1.15 || dy.abs() < 1.15 {\n                    (1.0 - distance / 28.0).clamp(0.0, 1.0) * 0.82\n                } else {\n                    0.0\n                };\n                let alpha = (ring * pulse + haze + orb + directional_streak + star).clamp(0.0, 1.0);\n                let purple = (0.35 + progress * 0.4 + dy.abs() / 180.0).clamp(0.0, 1.0);\n                let cyan = 1.0 - purple;\n                let index = ((y * WIDTH + x) * 4) as usize;\n                pixels[index] = ((72.0 * purple + 54.0 * cyan + orb * 170.0) * alpha) as u8;\n                pixels[index + 1] = ((46.0 * purple + 212.0 * cyan + orb * 80.0) * alpha) as u8;\n                pixels[index + 2] = ((238.0 * purple + 246.0 * cyan + orb * 45.0) * alpha) as u8;\n                pixels[index + 3] = (alpha * 255.0) as u8;\n            }\n        }\n\n        let image = Arc::new(\n            RenderImage::from_rgba(\n                size(DevicePixels(WIDTH as i32), DevicePixels(HEIGHT as i32)),\n                pixels,\n            )\n            .map_err(|_| DotLottieError::kind(DotLottieErrorKind::RenderFailed))?,\n        );\n        if let Some(cache) = cache {\n            let _ = cache.set(image.clone());\n            return Ok(cache.get().cloned().unwrap_or(image));\n        }\n        Ok(image)\n    }\n}\n\npub(super) fn cinematic_effects(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let clip: Rc<dyn DotLottieClip> = Rc::new(SceneCinematicClip);\n    let mut planner = EffectPlanner::new(EffectPolicy::new(EffectQuality::Cinematic));\n    let success = planner.plan(\n        EffectEvent::new(\n            \"scene-cinematic-success\",\n            \"cinematic-effects\",\n            \"success\",\n            VisualCue::Success,\n        ),\n        1,\n        false,\n    );\n    let handoff = planner.plan(\n        EffectEvent::new(\n            \"scene-cinematic-handoff\",\n            \"cinematic-effects\",\n            \"handoff\",\n            VisualCue::Handoff,\n        ),\n        1,\n        false,\n    );\n    let reward = planner.plan(\n        EffectEvent::new(\n            \"scene-cinematic-reward\",\n            \"cinematic-effects\",\n            \"reward\",\n            VisualCue::Reward,\n        ),\n        1,\n        false,\n    );\n    let mut static_planner = EffectPlanner::new(EffectPolicy::new(EffectQuality::Cinematic));\n    let static_reward = static_planner.plan(\n        EffectEvent::new(\n            \"scene-cinematic-static\",\n            \"cinematic-effects-static\",\n            \"reward\",\n            VisualCue::Reward,\n        ),\n        1,\n        true,\n    );\n\n    let card = |title: &'static str, detail: &'static str, effect: AnyElement| {\n        div()\n            .column()\n            .w(px(372.0))\n            .h(px(228.0))\n            .radius(&theme, Radius::Card)\n            .overflow_hidden()\n            .bg(theme.colors.sunken)\n            .child(div().relative().w_full().h(px(154.0)).child(effect))\n            .child(\n                div()\n                    .column()\n                    .gap_token(&theme, Space::Xs)\n                    .px_token(&theme, Space::Md)\n                    .py_token(&theme, Space::Sm)\n                    .child(crate::foundation::text(&theme, TypeScale::Label, title))\n                    .child(\n                        crate::foundation::text(&theme, TypeScale::Caption, detail)\n                            .text_color(theme.colors.text_muted),\n                    ),\n            )\n    };\n\n    stack(&theme)\n        .w(px(808.0))\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Semantic cinematic effects\",\n        ))\n        .child(caption(\n            &theme,\n            \"events choose recipes; hosts resolve bytes and own playback requests\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Md)\n                .child(card(\n                    \"Handoff · deterministic sample\",\n                    \"A resolved clip sampled at 575 ms; RTL mirrors its directional trail.\",\n                    CinematicEffect::new(\"scene.cinematic.handoff\", handoff)\n                        .clip(clip.clone())\n                        .sample_at(Duration::from_millis(575))\n                        .into_any_element(),\n                ))\n                .child(card(\n                    \"Success · runtime unavailable\",\n                    \"The semantic recipe falls back to the policy-owned particle burst.\",\n                    CinematicEffect::new(\"scene.cinematic.success\", success)\n                        .unavailable(DotLottieError::new(\n                            DotLottieErrorKind::RuntimeUnavailable,\n                            \"dotLottie backend is not installed\",\n                        ))\n                        .sample_at(Duration::from_millis(520))\n                        .into_any_element(),\n                )),\n        )\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Md)\n                .child(card(\n                    \"Reward · invalid asset fallback\",\n                    \"A refused archive stays explicit while a bounded particle recipe renders.\",\n                    CinematicEffect::new(\"scene.cinematic.invalid\", reward)\n                        .unavailable(DotLottieError::new(\n                            DotLottieErrorKind::ArchiveInvalid,\n                            \"animation archive did not pass validation\",\n                        ))\n                        .sample_at(Duration::from_millis(620))\n                        .into_any_element(),\n                ))\n                .child(card(\n                    \"Reward · reduced-motion poster\",\n                    \"The same recipe becomes a deterministic poster with no frame timeline.\",\n                    CinematicEffect::new(\"scene.cinematic.poster\", static_reward)\n                        .clip(clip)\n                        .into_any_element(),\n                )),\n        )\n        .into_any_element()\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn composited_sprite_atlas_is_stable_for_the_same_colors() {\n        let theme = Theme::studio_dark();\n\n        let first = composited_sprite_atlas(&theme);\n        let second = composited_sprite_atlas(&theme);\n\n        assert!(Arc::ptr_eq(&first, &second));\n    }\n\n    #[test]\n    fn composited_sprite_atlas_keeps_different_colors_separate() {\n        let dark = composited_sprite_atlas(&Theme::studio_dark());\n        let light = composited_sprite_atlas(&Theme::studio_light());\n\n        assert!(!Arc::ptr_eq(&dark, &light));\n    }\n}\n\n//! Assigned root size and configured FLIP, with real displayed hit targets.\nuse super::support::*;\nuse crate::motion::{CubicBezier, Flipping, MotionSpec, Spring, flip};\n\n#[derive(Default)]\nstruct Demo {\n    grown: bool,\n    direct: bool,\n    spring: bool,\n    hits: usize,\n}\n\npub(super) fn flip_configuration(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<Demo>(\n        &\"scene.flip.config-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let grown = state.borrow().grown;\n    let change = state.clone();\n    let direct = state.clone();\n    let timing = state.clone();\n    let hits = state.clone();\n    let spec = if state.borrow().spring {\n        MotionSpec::sprung(Spring::new(400.0, 28.0, 1.0))\n    } else {\n        MotionSpec::new(600, CubicBezier::new(0.0, 0.0, 1.0, 1.0)).with_delay(100)\n    };\n    let handle = flip(\"scene.flip.config-box\", window, cx);\n    let box_element = div()\n        .id(\"scene.flip.config-hit\")\n        .w(px(if grown { 270.0 } else { 130.0 }))\n        .h(px(if grown { 100.0 } else { 40.0 }))\n        .bg(theme.colors.accent)\n        .border_1()\n        .border_color(theme.colors.text)\n        .overflow_hidden()\n        .p_token(&theme, Space::Xs)\n        .child(\"Border box\")\n        .on_mouse_down(gpui::MouseButton::Left, move |_, window, _| {\n            hits.borrow_mut().hits += 1;\n            window.refresh();\n        })\n        .semantic_in(\n            cx,\n            NodeSpec::new(\"scene.flip.config-hit\", Role::Button).text(\"Border box\"),\n        )\n        .flip_size(&handle, window, cx)\n        .animate(!state.borrow().direct)\n        .animation(spec);\n    stack(&theme).w(px(600.0))\n        .child(caption(&theme,\"Synthetic FLIP · delayed tween / spring · displayed size, hit target and semantic bounds agree\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.flip.config.change\").label(\"Move and resize\").on_click(move |window,_|{let mut s=change.borrow_mut();s.grown = !s.grown;window.refresh();}))\n            .child(Button::new(\"scene.flip.config.direct\").label(if state.borrow().direct {\"Enable animation\"} else {\"Snap directly\"}).on_click(move |window,_|{let mut s=direct.borrow_mut();s.direct = !s.direct;window.refresh();}))\n            .child(Button::new(\"scene.flip.config.timing\").label(if state.borrow().spring {\"Use tween\"} else {\"Use spring\"}).on_click(move |window,_|{let mut s=timing.borrow_mut();s.spring = !s.spring;window.refresh();})))\n        .child(div().w_full().h(px(150.0)).flex().flex_col().items_start().pl(px(if grown {180.0} else {0.0})).child(box_element))\n        .child(div().child(format!(\"Displayed hits: {}\",state.borrow().hits)).semantic_in(cx,NodeSpec::new(\"scene.flip.config.hits\",Role::Status).value(state.borrow().hits.to_string())))\n        .into_any_element()\n}\n\n//! Presentation a game shell needs and an application does not.\n\nuse super::support::*;\n\npub(super) fn game_ui(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let direction = cx.layout_direction();\n    let normalized = |value| GameFraction::new(value).expect(\"scene fraction is normalized\");\n    let lyra = AgentSnapshot::new(AgentDescriptor::new(\"lyra\", \"Lyra\").role(\"Pathfinder\"))\n        .presence(AgentPresence::Online)\n        .execution(AgentExecutionState::Active(AgentActivity::UsingTool(\n            \"prism scanner\".into(),\n        )));\n    let orin = AgentSnapshot::new(AgentDescriptor::new(\"orin\", \"Orin\").role(\"Warden\"))\n        .presence(AgentPresence::Online)\n        .execution(AgentExecutionState::Waiting(WaitReason::Dependency(\n            \"beacon\".into(),\n        )));\n    let party = PartySnapshot::new([\n        PartyMember::new(lyra)\n            .expression(PersonaExpression::Focused)\n            .gauge(PartyGauge::known(\n                \"resolve\",\n                \"Resolve\",\n                normalized(0.72),\n                \"72 / 100\",\n            )),\n        PartyMember::new(orin)\n            .expression(PersonaExpression::Neutral)\n            .gauge(PartyGauge::unknown(\"bond\", \"Bond\"))\n            .gauge(PartyGauge::unavailable(\n                \"aegis\",\n                \"Aegis\",\n                \"Telemetry was not verified\",\n            )),\n    ]);\n    let objectives = ObjectiveSnapshot::new([\n        Objective::new(\"beacon\", \"Restore the beacon\")\n            .detail(\"Bring the relay online without inventing an outcome.\")\n            .state(ObjectiveState::Active)\n            .progress(normalized(0.64)),\n        Objective::new(\"crystals\", \"Align the crystals\")\n            .parent(\"beacon\")\n            .state(ObjectiveState::Completed),\n        Objective::new(\"signal\", \"Trace the signal\")\n            .parent(\"beacon\")\n            .state(ObjectiveState::Locked),\n        Objective::new(\"archive\", \"Recover the archive\")\n            .parent(\"beacon\")\n            .state(ObjectiveState::Failed(\n                \"The archive host refused access.\".into(),\n            )),\n    ]);\n    let abilities = AbilitySet::new([\n        Ability::new(\"dash\", \"Phase dash\")\n            .icon(Icon::ArrowRight)\n            .shortcut(\"Q\")\n            .charges(AbilityCharges::new(2, 3).expect(\"scene charges are valid\")),\n        Ability::new(\"nova\", \"Nova pulse\")\n            .icon(Icon::AddCircle)\n            .shortcut(\"W\")\n            .cost(\"30 focus\")\n            .state(AbilityState::CoolingDown {\n                remaining_fraction: normalized(0.4),\n                remaining: \"2.4s\".into(),\n            }),\n        Ability::new(\"ward\", \"Signal ward\")\n            .icon(Icon::Key)\n            .shortcut(\"E\")\n            .state(AbilityState::Disabled(\"No open target\".into())),\n        Ability::new(\"gate\", \"Open gate\")\n            .icon(Icon::Global)\n            .shortcut(\"R\")\n            .state(AbilityState::Unavailable(\n                \"The route has not been verified\".into(),\n            )),\n    ]);\n    let reward = RewardSnapshot::new(\"beacon-cache\", \"Beacon cache\")\n        .detail(\"The host has confirmed this reveal; claiming remains a request.\")\n        .state(RewardState::Revealed)\n        .item(\n            RewardItem::new(\"shard\", \"Prism shard\")\n                .icon(Icon::Widget)\n                .quantity(3),\n        )\n        .item(\n            RewardItem::new(\"key\", \"Signal key\")\n                .icon(Icon::Key)\n                .detail(\"Opens one relay\"),\n        );\n    let mut planner = EffectPlanner::new(EffectPolicy::new(EffectQuality::Cinematic));\n    let reward_effect = planner.plan(\n        EffectEvent::new(\n            \"beacon-cache-revealed\",\n            \"game-ui\",\n            \"beacon-cache\",\n            VisualCue::Reward,\n        ),\n        1,\n        false,\n    );\n    let heading = |text: &'static str| {\n        div()\n            .type_scale(&theme, TypeScale::Subtitle)\n            .text_tone(&theme, TextTone::Primary)\n            .child(text)\n    };\n\n    stack(&theme)\n        .size_full()\n        .items_center()\n        .justify_center()\n        .child(\n            div()\n                .column()\n                .w(px(820.0))\n                .gap_token(&theme, Space::Lg)\n                .child(\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            div()\n                                .type_scale(&theme, TypeScale::Title)\n                                .text_tone(&theme, TextTone::Primary)\n                                .child(\"Expedition interface\"),\n                        )\n                        .child(\n                            div()\n                                .type_scale(&theme, TypeScale::Caption)\n                                .text_tone(&theme, TextTone::Muted)\n                                .child(\n                                    \"Typed facts in, typed requests out; progression stays with the host.\",\n                                ),\n                        ),\n                )\n                .child(\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .child(heading(\"Party\"))\n                        .child(\n                            PartyRoster::new(\"scene.game-ui.party\", party)\n                                .selected(\"lyra\")\n                                .on_event(|_, _, _| {}),\n                        ),\n                )\n                .child(\n                    div()\n                        .row_reading(direction)\n                        .items_start()\n                        .gap_token(&theme, Space::Lg)\n                        .child(\n                            div()\n                                .column()\n                                .w(px(400.0))\n                                .gap_token(&theme, Space::Sm)\n                                .child(heading(\"Objectives\"))\n                                .child(\n                                    ObjectiveTracker::new(\n                                        \"scene.game-ui.objectives\",\n                                        objectives,\n                                    )\n                                    .selected(\"beacon\")\n                                    .on_event(|_, _, _| {}),\n                                ),\n                        )\n                        .child(\n                            div()\n                                .column()\n                                .w(px(400.0))\n                                .gap_token(&theme, Space::Sm)\n                                .child(heading(\"Reward\"))\n                                .child(\n                                    RewardReveal::new(\"scene.game-ui.reward\", reward)\n                                        .effect(reward_effect)\n                                        .sample_at(Duration::from_millis(620))\n                                        .on_event(|_, _, _| {}),\n                                ),\n                        ),\n                )\n                .child(\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .child(heading(\"Abilities\"))\n                        .child(\n                            AbilityBar::new(\"scene.game-ui.abilities\", abilities)\n                                .selected(\"dash\")\n                                .on_event(|_, _, _| {}),\n                        ),\n                ),\n        )\n        .into_any_element()\n}\n\n//! Original synthetic local geography, not a depiction of any real territory.\nuse super::support::*;\nuse crate::display::geography::*;\n\nfn ring(points: &[(f64, f64)]) -> Vec<GeoPosition> {\n    points\n        .iter()\n        .map(|&(longitude, latitude)| GeoPosition {\n            longitude,\n            latitude,\n        })\n        .collect()\n}\n\nfn fixture(projection: GeoProjection) -> Rc<GeoData> {\n    let features = vec![\n        GeoFeature {\n            id: \"lagoon\".into(),\n            label: \"Lagoon region\".into(),\n            value: Some(12.0),\n            formatted_value: \"12 samples\".into(),\n            polygons: vec![GeoPolygon {\n                exterior: ring(&[\n                    (-110.0, -28.0),\n                    (-28.0, -38.0),\n                    (4.0, 2.0),\n                    (-24.0, 58.0),\n                    (-95.0, 48.0),\n                    (-110.0, -28.0),\n                ]),\n                holes: vec![ring(&[\n                    (-76.0, -3.0),\n                    (-44.0, -3.0),\n                    (-40.0, 24.0),\n                    (-71.0, 28.0),\n                    (-76.0, -3.0),\n                ])],\n            }],\n        },\n        GeoFeature {\n            id: \"ridge\".into(),\n            label: \"Ridge\".into(),\n            value: Some(31.0),\n            formatted_value: \"31 samples\".into(),\n            polygons: vec![GeoPolygon {\n                exterior: ring(&[\n                    (20.0, -45.0),\n                    (110.0, -23.0),\n                    (82.0, 42.0),\n                    (40.0, 55.0),\n                    (12.0, 8.0),\n                    (20.0, -45.0),\n                ]),\n                holes: vec![],\n            }],\n        },\n        GeoFeature {\n            id: \"unobserved\".into(),\n            label: \"Outer island\".into(),\n            value: None,\n            formatted_value: \"\".into(),\n            polygons: vec![GeoPolygon {\n                exterior: ring(&[\n                    (117.0, 32.0),\n                    (154.0, 44.0),\n                    (140.0, 65.0),\n                    (115.0, 59.0),\n                    (117.0, 32.0),\n                ]),\n                holes: vec![],\n            }],\n        },\n    ];\n    Rc::new(\n        GeoData::new(\n            projection,\n            features,\n            vec![\n                GeoPoint {\n                    id: \"station\".into(),\n                    label: \"Station A\".into(),\n                    position: GeoPosition {\n                        longitude: 50.0,\n                        latitude: 12.0,\n                    },\n                },\n                GeoPoint {\n                    id: \"lagoon-sensor\".into(),\n                    label: \"Lagoon sensor\".into(),\n                    position: GeoPosition {\n                        longitude: -58.0,\n                        latitude: 12.0,\n                    },\n                },\n            ],\n            GeoColorDomain {\n                minimum: 0.0,\n                maximum: 40.0,\n                minimum_label: \"0 samples\".into(),\n                maximum_label: \"40 samples\".into(),\n                missing_label: \"Unobserved\".into(),\n            },\n        )\n        .expect(\"original synthetic geometry is valid\"),\n    )\n}\n\n#[derive(Default)]\nstruct FixtureCamera {\n    viewport: GeoViewport,\n    selected: Option<SharedString>,\n    data: Option<Rc<GeoData>>,\n    seam: Option<Rc<GeoData>>,\n}\n\npub(super) fn geography(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<FixtureCamera>(\n        &\"scene.geography.camera\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let viewport = state.borrow().viewport;\n    let selected = state.borrow().selected.clone();\n    let data = state\n        .borrow_mut()\n        .data\n        .get_or_insert_with(|| fixture(GeoProjection::Equirectangular))\n        .clone();\n    let seam = state.borrow_mut().seam.get_or_insert_with(|| Rc::new(GeoData::from_geojson(\n        r#\"{\"type\":\"Feature\",\"id\":\"seam-island\",\"properties\":{},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[170,-20],[-170,-20],[-170,30],[170,30],[170,-20]],[[175,-5],[-175,-5],[-175,10],[175,10],[175,-5]]]}}\"#,\n        GeoProjection::WebMercator, GeoWorldPolicy::Auto,\n        GeoColorDomain { minimum:0.0, maximum:40.0,minimum_label:\"0 samples\".into(),maximum_label:\"40 samples\".into(),missing_label:\"Unobserved\".into() },\n        |_,_| Ok(GeoProperties {label:\"Synthetic seam island\".into(),value:Some(23.0),formatted_value:\"23 samples\".into()}),\n    ).expect(\"synthetic seam geometry\"))).clone();\n    let camera_target = state.clone();\n    let value_target = state.clone();\n    let geometry_target = state.clone();\n    stack(&theme).w(px(900.0))\n        .child(caption(&theme,\"Original synthetic geography · local geometry, no tiles or real territories\"))\n        .child(caption(&theme,\"Drag / touch to pan · pinch or Ctrl-wheel to zoom · F fits · arrows / +/- / Home · [ and ] select\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.geography.camera-target\").label(\"Retarget camera\").on_click(move |window,_| {\n                let mut target=camera_target.borrow_mut();\n                target.viewport=if target.viewport.zoom>1.0 {GeoViewport::default()} else {GeoViewport {center:GeoProjected{x:0.4,y:0.48},zoom:1.8}};\n                window.refresh();\n            }))\n            .child(Button::new(\"scene.geography.value-target\").label(\"Retarget observations\").on_click(move |window,_| {\n                let mut target=value_target.borrow_mut();\n                let source=target.data.as_ref().expect(\"prepared fixture\");\n                let mut features=source.features().to_vec();\n                let value=if features[0].value==Some(12.0) {34.0} else {12.0};\n                features[0].value=Some(value); features[0].formatted_value=format!(\"{value} samples\").into();\n                target.data=Some(Rc::new(GeoData::new(source.projection(),features,source.points().to_vec(),source.color_domain().clone()).expect(\"in-domain fixture observation\")));\n                window.refresh();\n            }))\n            .child(Button::new(\"scene.geography.geometry-target\").label(\"Replace geometry\").on_click(move |window,_| {\n                let mut target=geometry_target.borrow_mut();\n                let source=target.data.as_ref().expect(\"prepared fixture\");\n                if source.features().iter().any(|f| f.id.as_ref()==\"unobserved\") {\n                    let mut features=source.features().to_vec();features.retain(|f| f.id.as_ref()!=\"unobserved\");\n                    for p in features[0].polygons.iter_mut().flat_map(|p| std::iter::once(&mut p.exterior).chain(&mut p.holes)).flatten() {p.longitude+=40.0;}\n                    let mut points=source.points().to_vec(); points.push(GeoPoint{id:\"arriving\".into(),label:\"New overlapping sensor\".into(),position:GeoPosition{longitude:-55.0,latitude:12.0}});\n                    target.data=Some(Rc::new(GeoData::new(source.projection(),features,points,source.color_domain().clone()).expect(\"translated valid fixture\")));\n                } else {target.data=Some(fixture(GeoProjection::Equirectangular));}\n                window.refresh();\n            })))\n        .child(div().row().items_start().gap_token(&theme,Space::Md)\n            .child(div().w(px(500.0)).child(GeoMap::new(\"scene.geography.ready\",\"Equirectangular · controlled camera\")\n                .state(GeoState::Ready(data)).viewport(viewport).selected(selected)\n                .on_event(move |event,window,_| {\n                    match event { GeoEvent::Select(id) => state.borrow_mut().selected=id, GeoEvent::Viewport(viewport) => state.borrow_mut().viewport=viewport }\n                    window.refresh();\n                })))\n            .child(div().w(px(320.0)).child(GeoMap::new(\"scene.geography.zoomed\",\"Web Mercator · narrow, zoomed, selected\")\n                .state(GeoState::Stale { data:fixture(GeoProjection::WebMercator), reason:\"Refresh refused; verified geometry retained\".into() })\n                .viewport(GeoViewport { center:GeoProjected{x:0.38,y:0.46},zoom:2.2 }).selected(Some(\"lagoon\".into())))))\n        .child(div().row().items_start().gap_token(&theme,Space::Md)\n            .child(div().w(px(280.0)).child(GeoMap::new(\"scene.geography.loading\",\"Loading local features\")))\n            .child(div().w(px(280.0)).child(GeoMap::new(\"scene.geography.empty\",\"Valid empty collection\").state(GeoState::Empty)))\n            .child(div().w(px(280.0)).child(GeoMap::new(\"scene.geography.refused\",\"Unsupported input\").state(GeoState::Refused(GeoRefusal::AntimeridianEdge)))))\n        .child(GeoMap::new(\"scene.geography.seam\",\"Local GeoJSON · auto world cut · fitted island with a real hole\")\n            .viewport(seam.fit_viewport([850.0,280.0],16.0).expect(\"fit synthetic island\"))\n            .selected(Some(\"seam-island\".into())).state(GeoState::Ready(seam)))\n        .into_any_element()\n}\n\npub(super) fn geography_scale(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<FixtureCamera>(\n        &\"scene.geography.scale-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    if state.borrow().data.is_none() {\n        state.borrow_mut().viewport = GeoViewport {\n            center: GeoProjected { x: 0.5, y: 0.5 },\n            zoom: 8.0,\n        };\n    }\n    let data = state\n        .borrow_mut()\n        .data\n        .get_or_insert_with(|| {\n            Rc::new(\n                GeoData::new(\n                    GeoProjection::Equirectangular,\n                    vec![],\n                    (0..1000)\n                        .map(|i| GeoPoint {\n                            id: format!(\"sample-{i}\").into(),\n                            label: format!(\"Synthetic sample {i}\").into(),\n                            position: GeoPosition {\n                                longitude: -150.0 + f64::from(i % 100) * 3.0,\n                                latitude: -45.0 + f64::from(i / 100) * 10.0,\n                            },\n                        })\n                        .collect(),\n                    GeoColorDomain {\n                        minimum: 0.0,\n                        maximum: 1.0,\n                        minimum_label: \"0\".into(),\n                        maximum_label: \"1\".into(),\n                        missing_label: \"Unobserved\".into(),\n                    },\n                )\n                .expect(\"original point grid\"),\n            )\n        })\n        .clone();\n    let selected = state.borrow().selected.clone();\n    let viewport = state.borrow().viewport;\n    let dense = state.clone();\n    stack(&theme).w(px(900.0))\n        .child(caption(&theme,format!(\"{} original local point overlays · viewport culling · six-row virtual accessible readout\",data.points().len())))\n        .child(caption(&theme,\"Scroll the readout or navigate it by keyboard; offscreen rows retain source identities, not measured bounds\"))\n        .child(Button::new(\"scene.geography.scale-density\").label(\"Load 10,000 dense points\").on_click(move |window,_| {\n            let mut target=dense.borrow_mut();\n            let points=(0..10000).map(|i| GeoPoint{id:format!(\"sample-{i}\").into(),label:format!(\"Synthetic sample {i}\").into(),position:GeoPosition{longitude:-179.0+f64::from(i%1000)*0.358,latitude:-80.0+f64::from(i/1000)*1.6}}).collect();\n            let data=GeoData::new(GeoProjection::Equirectangular,vec![],points,target.data.as_ref().expect(\"prepared fixture\").color_domain().clone()).expect(\"original point grid\");\n            target.viewport=GeoViewport{center:data.projection().project(data.points()[5000].position).expect(\"prepared fixture\"),zoom:1.0};\n            target.data=Some(Rc::new(data));\n            window.refresh();\n        }))\n        .child(GeoMap::new(\"scene.geography.scale\",\"Controlled point cloud\").state(GeoState::Ready(data)).viewport(viewport).selected(selected)\n            .on_event(move |event,window,_| {match event {GeoEvent::Select(id)=>state.borrow_mut().selected=id,GeoEvent::Viewport(v)=>state.borrow_mut().viewport=v};window.refresh();}))\n        .into_any_element()\n}\n\n//! Explicit continuous color encodings, kept separate from contribution levels.\nuse super::support::*;\nuse crate::display::heatmap::{ContinuousHeatCell, ContinuousHeatmap, HeatColorScale};\n\n#[derive(Default)]\nstruct MatrixRevisions {\n    revision: usize,\n    direct: bool,\n    selected: Option<SharedString>,\n}\n\npub(super) fn heatmap_reordering(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<MatrixRevisions>(\n        &\"scene.heat.reorder-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision % 3;\n    let rows = match revision {\n        0 => vec![\"east\", \"west\"],\n        1 => vec![\"west\", \"north\", \"east\"],\n        _ => vec![\"east\"],\n    };\n    let columns = match revision {\n        0 => vec![\"a\", \"b\", \"c\"],\n        1 => vec![\"c\", \"a\", \"d\", \"b\"],\n        _ => vec![\"a\", \"b\"],\n    };\n    let cells = rows\n        .iter()\n        .flat_map(|row| {\n            columns.iter().map(move |column| {\n                let reading = match (*row, *column) {\n                    (\"east\", \"a\") => Some(3.0),\n                    (\"east\", \"b\") => Some(12.0),\n                    (\"west\", \"a\") => Some(42.0),\n                    (\"west\", \"c\") => Some(81.0),\n                    (\"north\", \"b\") => Some(65.0),\n                    _ => None,\n                };\n                ContinuousHeatCell::new(\n                    format!(\"{row}-{column}\"),\n                    *row,\n                    *column,\n                    format!(\"{row} / {column}\"),\n                    reading,\n                )\n            })\n        })\n        .collect();\n    let next = state.clone();\n    let direct = state.clone();\n    let selection = state.clone();\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"Synthetic keyed axes · reorder, enter, exit and reinsert · raw readings never tween\",\n        ))\n        .child(\n            div()\n                .row()\n                .gap_token(&theme, Space::Sm)\n                .child(\n                    Button::new(\"scene.heat.reorder.advance\")\n                        .label(\"Advance axes\")\n                        .on_click(move |window, _| {\n                            next.borrow_mut().revision += 1;\n                            window.refresh();\n                        }),\n                )\n                .child(\n                    Button::new(\"scene.heat.reorder.direct\")\n                        .label(if state.borrow().direct {\n                            \"Enable animation\"\n                        } else {\n                            \"Direct updates\"\n                        })\n                        .on_click(move |window, _| {\n                            let mut s = direct.borrow_mut();\n                            s.direct = !s.direct;\n                            window.refresh();\n                        }),\n                ),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.heat.reorder\",\n                \"Stable caller coordinates\",\n                HeatColorScale::sequential([0.0, 100.0], theme.colors.canvas, theme.colors.accent)\n                    .expect(\"domain\"),\n                PlotState::Ready(cells),\n            )\n            .rows(rows)\n            .columns(columns)\n            .animate(!state.borrow().direct)\n            .on_current(move |id, window, _| {\n                selection.borrow_mut().selected = Some(id);\n                window.refresh();\n            })\n            .when_some(state.borrow().selected.clone(), |chart, id| {\n                chart.current(id)\n            }),\n        )\n        .into_any_element()\n}\n\npub(super) fn continuous_heatmap_transition(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let revision = crate::motion::keyed::slot::<usize>(\n        &\"scene.heat.transition-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let value = match *revision.borrow() % 3 {\n        0 => Some(-8.0),\n        1 => Some(32.0),\n        _ => None,\n    };\n    let next = revision.clone();\n    stack(&theme)\n        .w(px(440.0))\n        .child(caption(\n            &theme,\n            \"Synthetic observations · exact latest text with animated color; missing is never zero\",\n        ))\n        .child(\n            Button::new(\"scene.heat.advance\")\n                .label(\"Advance reading\")\n                .on_click(move |window, _| {\n                    *next.borrow_mut() += 1;\n                    window.refresh();\n                }),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.heat.live\",\n                \"Controlled measurement\",\n                HeatColorScale::diverging(\n                    [-8.0, 2.0, 32.0],\n                    theme.colors.accent,\n                    theme.colors.canvas,\n                    theme.colors.danger,\n                )\n                .expect(\"domain\"),\n                PlotState::Ready(vec![\n                    ContinuousHeatCell::new(\"changing\", \"row\", \"a\", \"Changing reading\", value),\n                    ContinuousHeatCell::new(\"zero\", \"row\", \"b\", \"Verified zero\", Some(0.0)),\n                ]),\n            )\n            .rows([\"row\"])\n            .columns([\"a\", \"b\"])\n            .motion(true),\n        )\n        .into_any_element()\n}\n\npub(super) fn continuous_heatmap(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let diverging = HeatColorScale::diverging(\n        [-8.0, 2.0, 32.0],\n        theme.colors.accent,\n        theme.colors.canvas,\n        theme.colors.danger,\n    )\n    .expect(\"explicit domain\");\n    let sequential =\n        HeatColorScale::sequential([0.0, 100.0], theme.colors.canvas, theme.colors.success)\n            .expect(\"explicit domain\");\n    let cells = [\n        (\"east\", \"a\", Some(-8.0)),\n        (\"east\", \"b\", Some(0.0)),\n        (\"east\", \"c\", Some(2.0)),\n        (\"west\", \"a\", Some(17.0)),\n        (\"west\", \"b\", Some(32.0)),\n        (\"west\", \"c\", None),\n    ]\n    .into_iter()\n    .map(|(row, column, reading)| {\n        ContinuousHeatCell::new(\n            format!(\"{row}-{column}\"),\n            row,\n            column,\n            format!(\"Synthetic observation {row} / {column}\"),\n            reading,\n        )\n    })\n    .collect::<Vec<_>>();\n    stack(&theme)\n        .w(px(800.0))\n        .child(caption(\n            &theme,\n            \"Synthetic measurements · explicit neutral = 2 · no observation is not zero\",\n        ))\n        .child(\n            div().w(px(720.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.wide\",\n                    \"Diverging measurements\",\n                    diverging,\n                    PlotState::Ready(cells.clone()),\n                )\n                .rows([\"east\", \"west\"])\n                .columns([\"a\", \"b\", \"c\"])\n                .current(\"east-c\")\n                .on_current(|_, _, _| {}),\n            ),\n        )\n        .child(\n            div().w(px(240.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.narrow\",\n                    \"Narrow · last verified values\",\n                    diverging,\n                    PlotState::Stale {\n                        data: cells,\n                        reason: \"Refresh refused\".into(),\n                    },\n                )\n                .rows([\"east\", \"west\"])\n                .columns([\"a\", \"b\", \"c\"]),\n            ),\n        )\n        .child(\n            div().w(px(400.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.sequential\",\n                    \"Sequential · domain 0–100\",\n                    sequential,\n                    PlotState::Ready(vec![\n                        ContinuousHeatCell::new(\"zero\", \"r\", \"a\", \"Measured zero\", Some(0.0)),\n                        ContinuousHeatCell::new(\"middle\", \"r\", \"b\", \"Middle\", Some(50.0)),\n                        ContinuousHeatCell::new(\"high\", \"r\", \"c\", \"High\", Some(100.0)),\n                    ]),\n                )\n                .rows([\"r\"])\n                .columns([\"a\", \"b\", \"c\"]),\n            ),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.continuous.invalid\",\n                \"Invalid readings are errors\",\n                sequential,\n                PlotState::Ready(vec![ContinuousHeatCell::new(\n                    \"outside\",\n                    \"r\",\n                    \"c\",\n                    \"Outside domain\",\n                    Some(101.0),\n                )]),\n            )\n            .rows([\"r\"])\n            .columns([\"c\"]),\n        )\n        .into_any_element()\n}\n\n//! Mobile list interactions, with caller-owned async state and retained rows.\n\nuse super::support::*;\nuse crate::interaction::{\n    refresh::{PullToRefresh, RefreshState},\n    swipe::{SwipeActions, SwipeSide},\n};\nuse crate::overlay::sheet::{SheetAction, SheetActionState};\n\nstruct SceneRefresh(Vec<Entity<PullToRefresh>>);\nimpl Global for SceneRefresh {}\n\npub(super) fn pull_to_refresh(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneRefresh>() {\n        let states = [\n            (\"ready\", RefreshState::Ready),\n            (\n                \"pending\",\n                RefreshState::Pending(\"Waiting for caller\".into()),\n            ),\n            (\n                \"loading\",\n                RefreshState::Loading(\"Refreshing fixture\".into()),\n            ),\n            (\n                \"error\",\n                RefreshState::Error(\"Refresh failed · retained rows\".into()),\n            ),\n        ];\n        let mut views = Vec::new();\n        for (id, state) in states {\n            let scroll = gpui::ScrollHandle::new();\n            let view = cx.new(|_| {\n                PullToRefresh::new(\n                    format!(\"scene.refresh.{id}\"),\n                    scroll.clone(),\n                    \"Refresh\",\n                    \"Release to refresh\",\n                )\n            });\n            view.update(cx, |refresh, cx| {\n                refresh.set_state(state, cx);\n                refresh.set_content(\n                    Some(Rc::new(move |_, cx| {\n                        let theme = cx.theme().clone();\n                        div()\n                            .id(SharedString::from(format!(\"scene.refresh.{id}.scroll\")))\n                            .column()\n                            .size_full()\n                            .overflow_y_scroll()\n                            .track_scroll(&scroll)\n                            .children(\n                                [\n                                    (\"notes\", \"Notes · verified fixture\"),\n                                    (\"draft\", \"Draft · verified fixture\"),\n                                    (\"archive\", \"Archive · verified fixture\"),\n                                    (\"saved\", \"Saved · verified fixture\"),\n                                ]\n                                .into_iter()\n                                .map(|(key, label)| {\n                                    div()\n                                        .h(px(64.0))\n                                        .flex_none()\n                                        .p_token(&theme, Space::Sm)\n                                        .child(crate::foundation::text(\n                                            &theme,\n                                            TypeScale::Body,\n                                            label,\n                                        ))\n                                        .semantic_in(\n                                            cx,\n                                            NodeSpec::new(\n                                                format!(\"scene.refresh.{id}.{key}\"),\n                                                Role::Group,\n                                            )\n                                            .text(label),\n                                        )\n                                }),\n                            )\n                            .into_any_element()\n                    })),\n                    cx,\n                );\n            });\n            views.push(view);\n        }\n        cx.set_global(SceneRefresh(views));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .child(caption(\n            &theme,\n            \"Fixture states · refreshing never replaces the verified rows\",\n        ))\n        .child(\n            row(&theme).items_start().children(\n                cx.global::<SceneRefresh>()\n                    .0\n                    .iter()\n                    .map(|view| div().w(px(250.0)).h(px(370.0)).child(view.clone())),\n            ),\n        )\n        .into_any_element()\n}\n\nstruct SceneSwipe(Vec<Entity<SwipeActions>>);\nimpl Global for SceneSwipe {}\n\npub(super) fn swipe_actions(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSwipe>() {\n        let mut views = Vec::new();\n        for (id, side, state) in [\n            (\"closed\", None, SheetActionState::Ready),\n            (\"left\", Some(SwipeSide::Left), SheetActionState::Ready),\n            (\n                \"right\",\n                Some(SwipeSide::Right),\n                SheetActionState::Error(\"Deletion failed; row retained\".into()),\n            ),\n            (\n                \"pending\",\n                Some(SwipeSide::Right),\n                SheetActionState::Pending(\"Waiting for caller\".into()),\n            ),\n        ] {\n            let view = cx.new(|_| SwipeActions::new(format!(\"scene.swipe.{id}\"), \"Actions\"));\n            view.update(cx, |swipe, cx| {\n                let mut remove = SheetAction::new(\"remove\", \"Delete\");\n                remove.destructive = true;\n                swipe.set_actions(SwipeSide::Left, vec![SheetAction::new(\"pin\", \"Pin\")], cx);\n                swipe.set_actions(SwipeSide::Right, vec![remove], cx);\n                swipe.set_content(\n                    Some(Rc::new(move |_, cx| {\n                        let theme = cx.theme().clone();\n                        div()\n                            .h(px(64.0))\n                            .column()\n                            .justify_center()\n                            .child(crate::foundation::text(\n                                &theme,\n                                TypeScale::Label,\n                                \"Project notes · fixture\",\n                            ))\n                            .child(crate::foundation::text(\n                                &theme,\n                                TypeScale::Body,\n                                \"Last verified content remains visible\",\n                            ))\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(format!(\"scene.swipe.{id}.content\"), Role::Group)\n                                    .text(\"Project notes · fixture\"),\n                            )\n                            .into_any_element()\n                    })),\n                    cx,\n                );\n                swipe.reveal(side, cx);\n                swipe.set_state(state, cx);\n            });\n            views.push(view);\n        }\n        cx.set_global(SceneSwipe(views));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(580.0))\n        .child(caption(\n            &theme,\n            \"Reveal is not activation · physical left and right trays\",\n        ))\n        .children(cx.global::<SceneSwipe>().0.iter().cloned())\n        .into_any_element()\n}\n\n//! Frames that decide where their contents go.\n\nuse super::support::*;\n\npub(super) fn mobile_page(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{AppBar, PageLayout};\n    let theme = cx.theme().clone();\n    let page = |name: &'static str, keyboard: bool, safe: bool| {\n        let id = format!(\"scene.mobile-page.{name}\");\n        let mut insets = gpui::WindowInsets::default();\n        if safe {\n            insets.safe_area.top = px(24.0);\n            insets.safe_area.bottom = px(20.0);\n            insets.safe_area.left = px(7.0);\n            insets.safe_area.right = px(11.0);\n        }\n        if keyboard {\n            insets.ime.bottom = px(140.0);\n        }\n        div()\n            .w(px(290.0))\n            .h(px(430.0))\n            .border_1()\n            .border_color(theme.colors.control_hairline)\n            .surface(&theme, Surface::Panel)\n            .child(\n                PageLayout::new(\n                    id.clone(),\n                    ScrollArea::new(format!(\"{id}.scroll\")).child(filler(\n                        &theme,\n                        \"Fixture page content\",\n                        12,\n                    )),\n                )\n                .insets(insets)\n                .hide_footer(keyboard)\n                .header(\n                    AppBar::new(format!(\"{id}.bar\"), name).leading(\n                        Button::new(format!(\"{id}.back\"))\n                            .label(\"Back\")\n                            .ghost()\n                            .control_size(ControlSize::Touch)\n                            .disabled(!safe)\n                            .on_click(|_, _| {}),\n                    ),\n                )\n                .footer(div().p(px(theme.space(Space::Sm))).child(\"Caller footer\")),\n            )\n    };\n    stack(&theme)\n        .child(caption(&theme, \"Fixture residual insets: desktop zero · safe area · overlapping IME with footer unmounted\"))\n        .child(row(&theme).items_start().child(page(\"Desktop\", false, false))\n            .child(page(\"Safe area\", false, true)).child(page(\"Keyboard\", true, true)))\n        .into_any_element()\n}\n\npub(super) fn scroll_edge_effect(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"Fixture transcript: content scrolls beneath a Regular glass toolbar\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(240.0))\n                .overflow_hidden()\n                .child(\n                    crate::layout::ScrollEdgeEffect::new(\"scene.scroll-edge.soft\")\n                        .top(true)\n                        .soft()\n                        .band(64.0)\n                        .child(filler(&theme, \"Earlier messages beneath the toolbar\", 10)),\n                )\n                .child(\n                    div().absolute().top(px(8.0)).left(px(16.0)).child(\n                        Glass::new(\"scene.scroll-edge.toolbar\")\n                            .radius(Radius::Pill)\n                            .child(\n                                div()\n                                    .px(px(20.0))\n                                    .py(px(10.0))\n                                    .child(\"Transcript · fixture\"),\n                            ),\n                    ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Reduced transparency: opaque scroll-edge backing\",\n        ))\n        .child(\n            div().h(px(160.0)).overflow_hidden().child(\n                crate::layout::ScrollEdgeEffect::new(\"scene.scroll-edge.hard\")\n                    .top(true)\n                    .hard()\n                    .band(64.0)\n                    .child(filler(&theme, \"The same transcript\", 7)),\n            ),\n        )\n        .into_any_element()\n}\n\npub(super) fn grid(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let item = |id: &'static str, label: &'static str| {\n        GridItem::new(\n            id,\n            Card::new()\n                .id(format!(\"scene.grid.card.{id}\"))\n                .padding(Space::Md)\n                .child(crate::foundation::text(&theme, TypeScale::Label, label))\n                .child(caption(&theme, \"Caller-owned content\")),\n        )\n        .span_at(Breakpoint::Large, if id == \"summary\" { 2 } else { 1 })\n    };\n    stack(&theme)\n        .w(px(840.0))\n        .child(caption(\n            &theme,\n            \"Columns and spans resolve from the grid's measured width while semantic order stays source order\",\n        ))\n        .child(\n            Grid::new(\"scene.grid\")\n                .columns(1)\n                .columns_at(Breakpoint::Medium, 2)\n                .columns_at(Breakpoint::Large, 3)\n                .gap(Space::Sm)\n                .items([\n                    item(\"summary\", \"Summary\"),\n                    item(\"settings\", \"Settings\"),\n                    item(\"history\", \"History\"),\n                    item(\"policy\", \"Policy\"),\n                ]),\n        )\n        .into_any_element()\n}\n\npub(super) fn container(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"Page width and gutters come from the installed theme, not component-local pixels\",\n        ))\n        .child(\n            Container::new(\"scene.container.readable\")\n                .width(ContainerWidth::Readable)\n                .child(\n                    Card::new()\n                        .id(\"scene.container.readable.card\")\n                        .padding(Space::Md)\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Readable content\",\n                        )),\n                ),\n        )\n        .child(\n            Container::new(\"scene.container.dialog\")\n                .width(ContainerWidth::Dialog)\n                .child(\n                    Card::new()\n                        .id(\"scene.container.dialog.card\")\n                        .padding(Space::Md)\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Dialog-width content\",\n                        )),\n                ),\n        )\n        .into_any_element()\n}\n\n/// A pane with a heading and something under it worth resizing.\n///\n/// Two panes of the same fixture copy demonstrate a divider and nothing else:\n/// what a reader has to be able to judge is that the two sides hold different\n/// things and that dragging trades room between them, so each side is given\n/// its own kind of content and its own heading.\nfn pane(theme: &Theme, title: &'static str, rows: &'static [&'static str]) -> gpui::Div {\n    div()\n        .column()\n        .size_full()\n        .min_w_0()\n        .overflow_hidden()\n        .child(\n            div()\n                .row()\n                .items_center()\n                .px(px(theme.space(Space::Md)))\n                .py(px(theme.space(Space::Sm)))\n                .child(\n                    crate::foundation::text(theme, TypeScale::Label, title)\n                        .text_tone(theme, TextTone::Muted),\n                ),\n        )\n        .child(\n            div()\n                .column()\n                .gap(px(theme.space(Space::Xs)))\n                .px(px(theme.space(Space::Md)))\n                .py(px(theme.space(Space::Sm)))\n                .children(\n                    rows.iter()\n                        .map(|row| crate::foundation::text(theme, TypeScale::Body, *row)),\n                ),\n        )\n}\n\npub(super) 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                .surface(&theme, Surface::Panel)\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(pane(\n                            &theme,\n                            \"Files\",\n                            &[\n                                \"src/\",\n                                \"  main.rs\",\n                                \"  theme.rs\",\n                                \"  layout/\",\n                                \"    split.rs\",\n                                \"    scroll.rs\",\n                                \"Cargo.toml\",\n                            ],\n                        ))\n                        .end(pane(\n                            &theme,\n                            \"split.rs\",\n                            &[\n                                \"pub struct SplitPane {\",\n                                \"    ratio: f32,\",\n                                \"    min_start: f32,\",\n                                \"    min_end: f32,\",\n                                \"}\",\n                                \"\",\n                                \"// The divider reports the ratio a drag\",\n                                \"// asked for; the caller decides it.\",\n                            ],\n                        ))\n                        .on_resize(|_, _, _| {})\n                        .on_collapse(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}\n\n/// The same region, already scrolled, so the shadow that says there is content\n/// above the fold is in a captured image rather than only in a test.\npub(super) fn scroll_shadow(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    crate::layout::scroll_to(\n        \"scene.scroll.scrolled\",\n        gpui::point(px(0.0), px(120.0)),\n        window,\n        cx,\n    );\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(\n            &theme,\n            \"Scrolled to the middle: content is hidden past both ends, so both \\\n             fade\",\n        ))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\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}\n\npub(super) 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(caption(\n            &theme,\n            \"Overflowing: a scrollbar, and the edges fade\",\n        ))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\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 and\n        // no edge fades. The area is as tall as what it holds rather than a\n        // height guessed at and hoped to be enough: a box a few pixels short\n        // of its content draws the scrollbar and the fade of the card above\n        // while claiming to be the card that does neither.\n        .child(caption(&theme, \"Fits: no scrollbar, no fade\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollArea::new(\"scene.scroll.summary\")\n                        .label(\"Summary\")\n                        .vertical()\n                        .fit_height()\n                        .child(filler(&theme, \"Summary\", 4)),\n                ),\n        )\n        .into_any_element()\n}\n\n/// A region scrolled off both ends, so the fade that says there is more in\n/// either direction is in a captured image, beside one that hides nothing and\n/// therefore fades at neither edge.\npub(super) fn scroll_fade(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    crate::layout::scroll_to(\n        \"scene.fade.output\",\n        gpui::point(px(0.0), px(120.0)),\n        window,\n        cx,\n    );\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(&theme, \"Scrolled: content runs past both ends\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollFade::new(\"scene.fade.scrolled\")\n                        .edges(FadeEdges::vertical())\n                        .fit_height()\n                        .child(\n                            ScrollArea::new(\"scene.fade.output\")\n                                .label(\"Run output\")\n                                .vertical()\n                                .height(200.0)\n                                .child(filler(&theme, \"Output\", 20)),\n                        ),\n                ),\n        )\n        // Nothing is hidden here, so no edge fades and the caller says so.\n        .child(caption(&theme, \"Nothing hidden: no edge fades\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollFade::new(\"scene.fade.settled\").fit_height().child(\n                        ScrollArea::new(\"scene.fade.summary\")\n                            .label(\"Summary\")\n                            .vertical()\n                            .height(200.0)\n                            .child(filler(&theme, \"Summary\", 7)),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// A complete client titlebar: product content remains clickable inside the\n/// drag strip, and platform controls keep their native hit-test identities.\npub(super) fn desktop_titlebar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    DesktopTitlebar::new(\"scene.desktop-titlebar\", \"Workspace\")\n                        .subtitle(\"main.rs\")\n                        .left(\n                            Button::new(\"scene.desktop-titlebar.workspace\")\n                                .label(\"Workspace menu\")\n                                .ghost()\n                                .small()\n                                .on_click(|_, _| {}),\n                        )\n                        .right(\n                            Badge::new(\"Connected\")\n                                .success()\n                                .id(\"scene.desktop-titlebar.status\"),\n                        )\n                        .on_event(|_, _, _| {}),\n                )\n                .child(div().h(px(112.0)).p_token(&theme, Space::Lg).child(caption(\n                    &theme,\n                    \"Host content is client input; maximize remains native Snap chrome.\",\n                ))),\n        )\n        .into_any_element()\n}\n\n/// The overflow menu of the toolbar scene, kept across frames.\npub(super) struct SceneToolbar {\n    overflow: Entity<Menu>,\n}\n\nimpl Global for SceneToolbar {}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The last two actions moved into the overflow menu.\",\n        ))\n        .into_any_element()\n}\n\n/// A layout nested three deep, with one leaf collapsed to its rail. The tree\n/// is the caller's: every divider reports the ratio it was asked for and moves\n/// nothing here.\npub(super) 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                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    SplitTree::new(\"scene.tree.workspace\")\n                        .layout(layout)\n                        // Each pane holds enough to reach the bottom of the\n                        // room the tree gave it: a pane drawn half empty says\n                        // the divider above it is in the wrong place, which is\n                        // the one thing this scene is not about.\n                        .pane(\"files\", filler(&theme, \"Files\", 13))\n                        .pane(\"editor\", filler(&theme, \"main.rs\", 7))\n                        .pane(\"terminal\", filler(&theme, \"Terminal\", 4))\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}\n\n/// A recursive dock topology: tab stacks are leaves of the same split tree,\n/// an empty stack remains available, and a collapsed nested stack keeps its\n/// rail instead of flattening the caller's arrangement.\npub(super) fn dock_tree(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let topology = DockTopology::vertical(\n        \"root\",\n        0.78,\n        DockTopology::horizontal(\n            \"workspace\",\n            0.28,\n            DockTopology::Stack(DockStack::new(\"source\", [\"files\", \"search\"]).active(\"files\")),\n            DockTopology::horizontal(\n                \"editing\",\n                0.9,\n                DockTopology::stack(\"editor\", [\"main\"]),\n                DockTopology::Stack(DockStack::new(\"outline\", [\"symbols\"]).collapsed(true)),\n            ),\n        ),\n        DockTopology::stack(\"terminal\", std::iter::empty::<&str>()),\n    );\n\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"recursive caller topology; tab groups, empty destinations, rails, and split dividers share existing primitives\",\n        ))\n        .child(\n            div()\n                .h(px(600.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    DockTree::new(\"scene.dock-tree\", topology)\n                        .panels([\n                            DockPanel::new(\"files\", \"Files\")\n                                .icon(Icon::Folder)\n                                .content(filler(&theme, \"Workspace\", 12)),\n                            DockPanel::new(\"search\", \"Search\")\n                                .icon(Icon::Magnifier)\n                                .badge(\"12\"),\n                            DockPanel::new(\"main\", \"main.rs\")\n                                .icon(Icon::Document)\n                                .content(filler(&theme, \"fn main()\", 15)),\n                            DockPanel::new(\"symbols\", \"Outline\").icon(Icon::List),\n                        ])\n                        .on_event(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}\n\n#[derive(Default)]\nstruct SceneFloatingDock {\n    bounds: Option<gpui::Bounds<f32>>,\n    saved: Option<gpui::Bounds<f32>>,\n}\nimpl Global for SceneFloatingDock {}\n\npub(super) fn dock_floating(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{DockTreeEvent, FloatingDock};\n    if !cx.has_global::<SceneFloatingDock>() {\n        cx.set_global(SceneFloatingDock::default());\n    }\n    let theme = cx.theme().clone();\n    let bounds = cx\n        .global::<SceneFloatingDock>()\n        .bounds\n        .unwrap_or(gpui::Bounds::new(\n            gpui::point(0.36, 0.18),\n            gpui::size(0.48, 0.58),\n        ));\n    stack(&theme).w(px(850.0))\n        .child(caption(&theme, \"Fixture: drag the floating header or resize corner; arrow keys adjust either. Restore uses caller-saved completed gestures.\"))\n        .child(Button::new(\"scene.dock-floating.restore\").label(\"Restore saved layout\").on_click(|_, cx| {\n            let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = state.saved; cx.refresh_windows();\n        }))\n        .child(div().h(px(500.0)).child(\n            DockTree::new(\"scene.dock-floating\", DockTopology::stack(\"workspace\", [\"main\"]))\n                .floating([FloatingDock::new(DockStack::new(\"inspector\", [\"details\"]), bounds).expect(\"valid fixture\")]).expect(\"unique fixture identities\")\n                .panels([\n                    DockPanel::new(\"main\", \"Workspace\").content(filler(&theme, \"Caller-owned background\", 15)),\n                    DockPanel::new(\"details\", \"Details\").content(filler(&theme, \"Floating inspector\", 7)),\n                ])\n                .on_event(|event, _, cx| {\n                    match event {\n                        DockTreeEvent::FloatingChanged { bounds, finished, .. } => {\n                            let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = Some(bounds); if finished { state.saved = Some(bounds); }\n                        }\n                        DockTreeEvent::FloatingCancelled { .. } => { let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = state.saved; }\n                        _ => {}\n                    }\n                    cx.refresh_windows();\n                })\n        )).into_any_element()\n}\n\n/// A whole application frame: panels in regions, one region collapsed to a\n/// rail, one panel the host refuses, and a status bar under all of it.\npub(super) 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(940.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                    // The bottom region holds one refused panel, and a refusal\n                    // is a sentence rather than a document: given a third of\n                    // the frame it reads as a region that lost its content\n                    // instead of as a panel the host would not open.\n                    .share(DockRegion::Bottom, 0.17)\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                        // No badge: a panel that cannot list problems cannot\n                        // count them either, and one unavailable reason is the\n                        // whole claim. Gluing \"there is nothing here\" onto it\n                        // would report Empty and Unavailable at once.\n                        DockPanel::new(\"problems\", \"Problems\")\n                            .icon(Icon::Danger)\n                            .unavailable(\n                                \"The language server is not running, so problems cannot be listed.\",\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}\n\npub(super) fn aspect_ratio(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // The ratio is the subject, so the block it drives is drawn the way every\n    // other bounded region in the library is: a surface step, the card radius,\n    // and its label inside it.\n    let filled = |label: &'static str| {\n        div()\n            .size_full()\n            .flex()\n            .items_center()\n            .justify_center()\n            .surface(&theme, Surface::Sunken)\n            .radius(&theme, Radius::Card)\n            .overflow_hidden()\n            .child(\n                crate::foundation::text(&theme, TypeScale::Label, label)\n                    .text_tone(&theme, TextTone::Muted),\n            )\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}\n\n/// A container that arranges itself from its own measured width.\n///\n/// Both arrangements are shown at once, because the point of the component is\n/// that the caller decides them and neither is a fallback for the other. The\n/// unmeasured first frame is a state a still image cannot hold, so it is named\n/// rather than drawn.\npub(super) fn responsive(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let arrangement = move |id: &'static str| {\n        let theme = theme.clone();\n        move |size: ContainerSize, _: &mut Window, cx: &mut App| {\n            let wide = size.width().is_some_and(|measured| measured >= 480.0);\n            // The unmeasured frame is a real state and it is named rather than\n            // guessed, which is the whole argument the component makes.\n            let heading = match size.width() {\n                None => \"Not laid out yet, so neither arrangement is chosen\".to_string(),\n                Some(measured) if wide => format!(\"{measured:.0}px wide, so two columns\"),\n                Some(measured) => format!(\"{measured:.0}px wide, so one column\"),\n            };\n            // A card rather than a tinted rectangle, and with enough in it to\n            // be a column: two panels holding one word each say nothing about\n            // an arrangement, which is what the component is for.\n            let block = |label: &'static str, lines: &'static [&'static str], cx: &mut App| {\n                div()\n                    .flex_1()\n                    .min_w_0()\n                    .column()\n                    .gap_token(&theme, Space::Xs)\n                    .p_token(&theme, Space::Md)\n                    .card_surface(&theme, CardVariant::Elevated)\n                    .child(crate::foundation::text(&theme, TypeScale::Label, label))\n                    .children(lines.iter().map(|line| {\n                        crate::foundation::text(&theme, TypeScale::Caption, *line)\n                            .text_tone(&theme, TextTone::Muted)\n                    }))\n                    .semantic_in(\n                        cx,\n                        NodeSpec::new(format!(\"{id}.{}\", label.to_lowercase()), Role::Group)\n                            .text(label),\n                    )\n            };\n            let panes = div()\n                .gap_token(&theme, Space::Sm)\n                .child(block(\n                    \"Settings\",\n                    &[\"Theme\", \"Density\", \"Reading direction\"],\n                    cx,\n                ))\n                .child(block(\n                    \"Detail\",\n                    &[\"Studio Dark\", \"Comfortable\", \"Left to right\"],\n                    cx,\n                ));\n            div()\n                .column()\n                .gap_token(&theme, Space::Sm)\n                .child(\n                    crate::foundation::text(&theme, TypeScale::Caption, heading.clone())\n                        .text_tone(&theme, TextTone::Faint),\n                )\n                .child(if wide { panes.row() } else { panes.column() })\n                .semantic_in(cx, NodeSpec::new(id, Role::Group).value(heading))\n                .into_any_element()\n        }\n    };\n\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Wide enough for two columns\"))\n        .child(div().w(px(620.0)).child(Responsive::new(\n            \"scene.responsive.wide\",\n            arrangement(\"scene.responsive.wide.body\"),\n        )))\n        .child(caption(&theme, \"The same content, narrow\"))\n        .child(div().w(px(320.0)).child(Responsive::new(\n            \"scene.responsive.narrow\",\n            arrangement(\"scene.responsive.narrow.body\"),\n        )))\n        .into_any_element()\n}\n\n//! Time-based and dimensional media.\n\nuse super::support::*;\n\n/// The cube the model scenes read: a glTF document with its own buffer\n/// inside it, so the reader is exercised on the path a host would take and\n/// nothing is fetched to draw a scene.\npub(super) const CUBE: &[u8] = include_bytes!(\"../../assets/models/cube.gltf\");\n\n/// A measured envelope, in the shape a host that read the samples would hand\n/// over. It is written down rather than sampled, because a scene that drew a\n/// different waveform every run could not be a visual baseline.\npub(super) fn scene_peaks(count: usize) -> Vec<f32> {\n    (0..count)\n        .map(|index| {\n            let phase = index as f32 / count as f32;\n            let swell = (phase * 11.0).sin() * 0.32 + (phase * 3.0).cos() * 0.28;\n            (0.42 + swell).clamp(0.05, 1.0)\n        })\n        .collect()\n}\n\npub(super) fn audio_player(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(392.0))\n        .child(\n            AudioPlayer::new(\"scene.audio.ready\")\n                .control_size(gpui_kit_theme::ControlSize::Touch)\n                .title(\"Release walkthrough\")\n                .subtitle(\"Recorded 12 March\")\n                .transport(\n                    FixtureTransport::ready(240.0)\n                        .position(72.0)\n                        .state(TransportState::Playing)\n                        .volume(0.7)\n                        .buffered([BufferedRange::new(0.0, 156.0)])\n                        .shared(),\n                )\n                .elapsed(\"01:12\")\n                .remaining(\"-02:48\")\n                .peaks(scene_peaks(96))\n                .speeds([1.0, 1.5, 2.0])\n                .step_seconds(10.0)\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.audio.rule.backend\")\n                .label(\"Nothing here can decode it\"),\n        )\n        .child(\n            AudioPlayer::new(\"scene.audio.absent\")\n                .title(\"interview.opus\")\n                .transport(\n                    FixtureTransport::new()\n                        .no_backend(\"There is no Opus decoder on this machine.\")\n                        .shared(),\n                )\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.audio.rule.none\")\n                .label(\"No player connected at all\"),\n        )\n        .child(\n            AudioPlayer::new(\"scene.audio.none\")\n                .title(\"Standup recording\")\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\nfn walkthrough_frame(cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let metric = |label: &'static str, value: &'static str| {\n        div()\n            .flex_1()\n            .min_w_0()\n            .column()\n            .gap_token(&theme, Space::Xs)\n            .p_token(&theme, Space::Sm)\n            .radius(&theme, Radius::Small)\n            .bg(theme.colors.raised)\n            .child(\n                crate::foundation::text(&theme, TypeScale::Caption, label)\n                    .text_tone(&theme, TextTone::Muted),\n            )\n            .child(crate::foundation::text(&theme, TypeScale::Subtitle, value))\n    };\n    div()\n        .size_full()\n        .column()\n        .bg(theme.colors.panel)\n        .child(\n            div()\n                .row()\n                .items_center()\n                .gap_token(&theme, Space::Sm)\n                .px_token(&theme, Space::Md)\n                .py_token(&theme, Space::Sm)\n                .surface(&theme, Surface::Raised)\n                .child(div().size(px(7.0)).rounded_full().bg(theme.colors.success))\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Release command center\",\n                )),\n        )\n        .child(\n            div()\n                .flex_1()\n                .min_h_0()\n                .row()\n                .child(\n                    div()\n                        .w(px(76.0))\n                        .h_full()\n                        .flex_none()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .p_token(&theme, Space::Sm)\n                        .bg(theme.colors.sunken)\n                        .children([16.0, 34.0, 26.0, 42.0].map(|width| {\n                            div()\n                                .w(px(width))\n                                .h(px(theme.borders.thick))\n                                .rounded_full()\n                                .bg(theme.colors.hairline_strong)\n                        })),\n                )\n                .child(\n                    div()\n                        .flex_1()\n                        .min_w_0()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .p_token(&theme, Space::Md)\n                        .child(\n                            div()\n                                .row()\n                                .gap_token(&theme, Space::Sm)\n                                .child(metric(\"Checks\", \"48 / 52\"))\n                                .child(metric(\"Coverage\", \"92%\"))\n                                .child(metric(\"Elapsed\", \"04:18\")),\n                        )\n                        .child(\n                            div()\n                                .column()\n                                .gap_token(&theme, Space::Xs)\n                                .p_token(&theme, Space::Sm)\n                                .radius(&theme, Radius::Small)\n                                .surface(&theme, Surface::Raised)\n                                .child(crate::foundation::text(\n                                    &theme,\n                                    TypeScale::Caption,\n                                    \"Verification progress\",\n                                ))\n                                .child(\n                                    div()\n                                        .h(px(6.0))\n                                        .w_full()\n                                        .rounded_full()\n                                        .overflow_hidden()\n                                        .bg(theme.colors.track)\n                                        .child(\n                                            div()\n                                                .h_full()\n                                                .w(px(218.0))\n                                                .rounded_full()\n                                                .bg(theme.colors.accent),\n                                        ),\n                                ),\n                        ),\n                ),\n        )\n        .into_any_element()\n}\n\nfn walkthrough_poster(cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .size_full()\n        .flex()\n        .flex_col()\n        .items_center()\n        .justify_center()\n        .gap_token(&theme, Space::Sm)\n        .bg(theme.colors.sunken)\n        .child(\n            div()\n                .size(px(46.0))\n                .flex()\n                .items_center()\n                .justify_center()\n                .rounded_full()\n                .frame(&theme, Surface::Raised, Elevation::Raised)\n                .child(\n                    gpui_kit_assets::icon(Icon::Play)\n                        .size(px(theme.control.md.icon_size))\n                        .text_color(theme.colors.accent_strong),\n                ),\n        )\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Release walkthrough\",\n        ))\n        .child(\n            crate::foundation::text(&theme, TypeScale::Caption, \"4 minutes · 8 chapters\")\n                .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}\n\npub(super) fn video_player(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(392.0))\n        .child(\n            VideoPlayer::new(\"scene.video.frame\")\n                .control_size(gpui_kit_theme::ControlSize::Touch)\n                .presentation(\n                    crate::content::transport::MediaPresentation::Inline,\n                    \"Present video\",\n                )\n                .presentation_refused(\"Fixture host: native video presentation is unavailable.\")\n                .on_presentation_request(|_, _, _| {})\n                .title(\"Screen capture\")\n                .transport(\n                    FixtureTransport::ready(96.0)\n                        .position(24.0)\n                        .state(TransportState::Playing)\n                        .volume(0.6)\n                        .shared(),\n                )\n                .frame(|_, cx| Some(walkthrough_frame(cx)))\n                .elapsed(\"00:24\")\n                .remaining(\"-01:12\")\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.video.rule.poster\")\n                .label(\"Poster while the first frame is still unavailable\"),\n        )\n        .child(\n            VideoPlayer::new(\"scene.video.poster\")\n                .title(\"Release walkthrough\")\n                .transport(FixtureTransport::ready(240.0).shared())\n                .poster(|_, cx| Some(walkthrough_poster(cx)))\n                .elapsed(\"00:00\")\n                .remaining(\"-04:00\")\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) fn model_viewer(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let read = || ModelState::read(CUBE, ModelBounds::default());\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            div()\n                .row()\n                .items_start()\n                .gap(px(theme.spacing.lg))\n                .child(\n                    div().flex_1().min_w_0().child(\n                        ModelViewer::new(\"scene.model.flat\")\n                            .title(\"cube.gltf\")\n                            .state(read())\n                            .orbit(0.62, 0.42)\n                            .height(240.0)\n                            .on_event(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    div().flex_1().min_w_0().child(\n                        ModelViewer::new(\"scene.model.wireframe\")\n                            .title(\"cube.gltf\")\n                            .state(read())\n                            .shading(ModelShading::Wireframe)\n                            .orbit(0.62, 0.42)\n                            .height(240.0)\n                            .on_event(|_, _, _| {}),\n                    ),\n                ),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.model.rule.refused\")\n                .label(\"A document past a bound\"),\n        )\n        .child(\n            ModelViewer::new(\"scene.model.refused\")\n                .title(\"city-block.glb\")\n                .rejected(ModelError::TooLarge {\n                    limit: ModelLimit::Triangles,\n                    found: 412_930,\n                    allowed: 24_576,\n                })\n                .height(160.0)\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) fn audio_waveform(_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            \"already-normalized peaks; a missing playhead draws no played split\",\n        ))\n        .child(\n            AudioWaveform::new(\"scene.waveform.ready\")\n                .peaks(scene_peaks(48))\n                .playhead(0.38),\n        )\n        .child(AudioWaveform::new(\"scene.waveform.loading\").state(AudioWaveformState::Loading))\n        .child(AudioWaveform::new(\"scene.waveform.empty\").state(AudioWaveformState::Empty))\n        .child(AudioWaveform::new(\"scene.waveform.unavailable\").state(\n            AudioWaveformState::Unavailable(\"The sampler host refused the request.\".into()),\n        ))\n        .child(\n            AudioWaveform::new(\"scene.waveform.error\").state(AudioWaveformState::Error(\n                \"The sampler request failed.\".into(),\n            )),\n        )\n        .into_any_element()\n}\n\n//! One canonical rendering per component, grouped the way the components are.\n//!\n//! A scene is the single description of a component's states that both the\n//! gallery and the audit tests consume, so a component cannot be reviewed\n//! visually in one arrangement and tested in another.\n//!\n//! Almost every scene is an *exhibit*: it is about one component, it lives in\n//! the file named after that component's family, and it is where a reader is\n//! sent to review it. `xtask api check` fails when a public component has no\n//! exhibit, so a component cannot be added and left unseen.\n//!\n//! The rest are *compositions*, and there are three of them. A composition is\n//! built the way a product would build one, because components interact in\n//! ways none of them shows alone. It is nobody's coverage, and [`Shows`]\n//! records the difference so the catalog does not claim a component was\n//! reviewed when it was only recognised inside a shell.\n//!\n//! What is deliberately not here is a scene per screenshot. The files below\n//! are the component families, not a taxonomy invented for this module, so a\n//! component and the rendering that reviews it move together.\n\nmod support;\n\nmod agent;\nmod canvas;\nmod cartesian;\nmod compositions;\nmod content;\nmod controls;\nmod data;\n#[cfg(feature = \"fixtures\")]\nmod datetime;\nmod display;\nmod effects;\nmod flip_configuration;\nmod game;\nmod geography;\nmod heatmap;\nmod interaction;\nmod layout;\nmod media;\nmod motion;\nmod navigation;\nmod overlay;\nmod plot;\nmod specialized;\nmod structured;\n\nuse gpui::{AnyElement, App, Window};\n\nuse crate::foundation::direction::LayoutDirection;\n\nuse agent::{\n    agent_avatar, agent_plan, agent_roster, agent_run_canvas, agent_run_issues, approval,\n    artifact_preview, clarification, cost_meter, feedback_rating, offering_catalog,\n    permission_matrix, persona, prompt_builder, server_list, thinking, tool_call,\n};\nuse canvas::{\n    canvas_regions, canvas_tools, node_graph, node_graph_layout, node_graph_motion,\n    node_graph_routing,\n};\nuse cartesian::{\n    cartesian, cartesian_dense, cartesian_layout, cartesian_lifecycle, cartesian_linked,\n    cartesian_states,\n};\nuse compositions::{motion_flip, motion_state, reading_direction};\n#[cfg(all(feature = \"terminal\", not(target_family = \"wasm\")))]\nuse content::terminal;\nuse content::{\n    agent_document, browser_panel, code_view, conversation, conversation_growing, diff_view,\n    image_viewer, log_stream, markdown, outline, transport,\n};\nuse controls::{\n    actions, auth_sign_in, auth_verification, button, cascader, choice, color_picker, copy_button,\n    dropzone, editor, editor_folding, editor_multicursor, editor_options, editor_services,\n    filter_bar, find_replace, form, inline_edit, input, keybinding, keymap_editor, mention_input,\n    multi_select, rich_text_editor, search_field, search_input, settings, settings_page, textarea,\n    toggle, touch_inputs, touch_pickers, touch_pickers_open, transfer_list, translation_packs,\n    upload_list,\n};\nuse data::{\n    data_grid, data_grid_editing, deferred_drop, diagnostics_list, drag_list, drag_tree, flow,\n    image_list, kanban, list, masonry, table, tree, tree_grid,\n};\n#[cfg(feature = \"fixtures\")]\nuse datetime::{calendar, date_range, date_time, touch_dates};\nuse display::{\n    animated_number, attachment, avatar, badge, banner, bubble, card, chart, detail, divider,\n    empty_state, failure_panel, heatmap, icon, loading, metric_card, outcome_panel,\n    performance_hud, plot, progress_bar, progress_circle, rating, sparkline, stage_progress,\n    state_ladder, status, tag, trace, trace_time,\n};\nuse effects::{cinematic_effects, visual_effects};\nuse flip_configuration::flip_configuration;\nuse game::game_ui;\nuse geography::{geography, geography_scale};\nuse heatmap::{continuous_heatmap, continuous_heatmap_transition, heatmap_reordering};\nuse interaction::{pull_to_refresh, swipe_actions};\nuse layout::{\n    aspect_ratio, container, desktop_titlebar, dock_floating, dock_tree, grid, ide_shell,\n    mobile_page, responsive, scroll_area, scroll_edge_effect, scroll_fade, scroll_shadow,\n    split_pane, split_tree, toolbar,\n};\nuse media::{audio_player, audio_waveform, model_viewer, video_player};\nuse motion::{micro, motion_primitives};\nuse navigation::{\n    accordion, adaptive_navigation, anchor_list, bottom_navigation, breadcrumb, carousel,\n    collapsible, document_tabs, nav_back_preview, nav_stack, pagination, sidebar, sidebar_overflow,\n    tabs, undo_history, wizard,\n};\nuse overlay::{\n    action_sheet, bottom_sheet, command_palette, context_menu, dialog, drawer, frost, glass,\n    glass_materials, glass_optics, hover_card, kbd, media_caption, menu, menubar,\n    notification_center, overlay, popover, toast, tooltip,\n};\nuse plot::{raw_candlestick, sankey_layout, sankey_motion};\nuse specialized::{specialized, specialized_distribution, specialized_exploration};\nuse structured::{json_view, schema_form};\n\n/// What a rendering exists to show.\n///\n/// The distinction is the difference between reviewing a component and\n/// recognising it. A component that has only ever been seen inside a shell has\n/// been recognised; nobody has looked at its states, and the catalog should\n/// not claim otherwise, which is why only [`Shows::Subjects`] counts as\n/// coverage.\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum Shows {\n    /// The components this rendering is *about*. It arranges them so their\n    /// states can be compared, and it is where a reader is sent to review\n    /// them. Everything else it draws is scaffolding.\n    Subjects(&'static [&'static str]),\n    /// An arrangement the way a product would build one, kept because\n    /// components interact in ways none of them shows alone. It is nobody's\n    /// coverage: every component it draws is reviewed somewhere else.\n    Composition(&'static [&'static str]),\n}\n\nimpl Shows {\n    /// Every component named, whichever kind this is.\n    pub fn components(&self) -> &'static [&'static str] {\n        match self {\n            Self::Subjects(names) | Self::Composition(names) => names,\n        }\n    }\n\n    /// The components this rendering is the review of, which is empty for a\n    /// composition.\n    pub fn subjects(&self) -> &'static [&'static str] {\n        match self {\n            Self::Subjects(names) => names,\n            Self::Composition(_) => &[],\n        }\n    }\n}\n\n/// One canonical rendering, addressed by name.\npub struct Scene {\n    pub name: &'static str,\n    pub build: fn(&mut Window, &mut App) -> AnyElement,\n    /// What this rendering is for, declared rather than inferred.\n    ///\n    /// It used to be read back out of the source by following every helper a\n    /// scene called, which answered a different question — *what types does\n    /// this code path touch* — and answered it as an upper bound. Three\n    /// unrelated scenes that shared one fixture helper reported the same seven\n    /// components, so \"which scene shows me\" was a claim no reader could rely\n    /// on. Declaring it makes it exact, and `xtask api check` holds the\n    /// declaration to what the source can actually reach.\n    pub shows: Shows,\n}\n\nimpl std::fmt::Debug for Scene {\n    fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        formatter\n            .debug_struct(\"Scene\")\n            .field(\"name\", &self.name)\n            .field(\"shows\", &self.shows)\n            .finish()\n    }\n}\n\n/// Every scene, in a stable order.\npub fn catalog() -> Vec<Scene> {\n    #[allow(unused_mut)]\n    let mut scenes = vec![\n        Scene {\n            name: \"bottom-sheet\",\n            build: bottom_sheet,\n            shows: Shows::Subjects(&[\"BottomSheet\"]),\n        },\n        Scene {\n            name: \"action-sheet\",\n            build: action_sheet,\n            shows: Shows::Subjects(&[\"ActionSheet\"]),\n        },\n        Scene {\n            name: \"pull-to-refresh\",\n            build: pull_to_refresh,\n            shows: Shows::Subjects(&[\"PullToRefresh\"]),\n        },\n        Scene {\n            name: \"swipe-actions\",\n            build: swipe_actions,\n            shows: Shows::Subjects(&[\"SwipeActions\"]),\n        },\n        Scene {\n            name: \"button\",\n            build: button,\n            shows: Shows::Subjects(&[\"Button\"]),\n        },\n        Scene {\n            name: \"badge\",\n            build: badge,\n            shows: Shows::Subjects(&[\"Badge\"]),\n        },\n        Scene {\n            name: \"card\",\n            build: card,\n            shows: Shows::Subjects(&[\"Card\", \"ListRow\"]),\n        },\n        Scene {\n            name: \"rating\",\n            build: rating,\n            shows: Shows::Subjects(&[\"Rating\"]),\n        },\n        Scene {\n            name: \"bubble\",\n            build: bubble,\n            shows: Shows::Subjects(&[\"Bubble\"]),\n        },\n        Scene {\n            name: \"status\",\n            build: status,\n            shows: Shows::Subjects(&[\"Callout\", \"StatusDot\", \"StatusLine\"]),\n        },\n        Scene {\n            name: \"loading\",\n            build: loading,\n            shows: Shows::Subjects(&[\n                \"BarLoader\",\n                \"LoadMore\",\n                \"PulseLoader\",\n                \"RefreshVeil\",\n                \"Skeleton\",\n                \"Spinner\",\n            ]),\n        },\n        Scene {\n            name: \"visual-effects\",\n            build: visual_effects,\n            shows: Shows::Subjects(&[\"EffectParticles\"]),\n        },\n        Scene {\n            name: \"cinematic-effects\",\n            build: cinematic_effects,\n            shows: Shows::Subjects(&[\"CinematicEffect\"]),\n        },\n        Scene {\n            name: \"choice\",\n            build: choice,\n            shows: Shows::Subjects(&[\"Checkbox\", \"Radio\", \"Slider\", \"Switch\"]),\n        },\n        Scene {\n            name: \"multi-select\",\n            build: multi_select,\n            shows: Shows::Subjects(&[\"MultiSelect\"]),\n        },\n        Scene {\n            name: \"transfer-list\",\n            build: transfer_list,\n            shows: Shows::Subjects(&[\"TransferList\"]),\n        },\n        Scene {\n            name: \"input\",\n            build: input,\n            shows: Shows::Subjects(&[\"Select\", \"TextInput\"]),\n        },\n        Scene {\n            name: \"touch-inputs\",\n            build: touch_inputs,\n            shows: Shows::Subjects(&[\"TextInput\", \"TextArea\", \"PasswordInput\", \"OneTimeCodeInput\"]),\n        },\n        Scene {\n            name: \"touch-pickers\",\n            build: touch_pickers,\n            shows: Shows::Subjects(&[\"Select\", \"Combobox\", \"MultiSelect\"]),\n        },\n        Scene {\n            name: \"touch-pickers-open\",\n            build: touch_pickers_open,\n            shows: Shows::Subjects(&[\"Combobox\"]),\n        },\n        Scene {\n            name: \"textarea\",\n            build: textarea,\n            shows: Shows::Subjects(&[\"TextArea\"]),\n        },\n        Scene {\n            name: \"editor\",\n            build: editor,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-multicursor\",\n            build: editor_multicursor,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-services\",\n            build: editor_services,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-folding\",\n            build: editor_folding,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-options\",\n            build: editor_options,\n            shows: Shows::Subjects(&[\"Editor\", \"TextArea\", \"RichTextEditor\"]),\n        },\n        Scene {\n            name: \"mention-input\",\n            build: mention_input,\n            shows: Shows::Subjects(&[\"MentionInput\"]),\n        },\n        Scene {\n            name: \"rich-text-editor\",\n            build: rich_text_editor,\n            shows: Shows::Subjects(&[\"RichTextEditor\"]),\n        },\n        Scene {\n            name: \"form\",\n            build: form,\n            shows: Shows::Subjects(&[\n                \"Combobox\",\n                \"FormField\",\n                \"NumberInput\",\n                \"SegmentedControl\",\n                \"TagInput\",\n            ]),\n        },\n        Scene {\n            name: \"auth-sign-in\",\n            build: auth_sign_in,\n            shows: Shows::Subjects(&[\"PasswordInput\"]),\n        },\n        Scene {\n            name: \"auth-verification\",\n            build: auth_verification,\n            shows: Shows::Subjects(&[\"OneTimeCodeInput\"]),\n        },\n        Scene {\n            name: \"actions\",\n            build: actions,\n            shows: Shows::Subjects(&[\"ButtonGroup\", \"IconButton\", \"SplitButton\"]),\n        },\n        Scene {\n            name: \"progress-bar\",\n            build: progress_bar,\n            shows: Shows::Subjects(&[\"ProgressBar\"]),\n        },\n        Scene {\n            name: \"state-ladder\",\n            build: state_ladder,\n            shows: Shows::Subjects(&[\"StateView\", \"StaleMark\"]),\n        },\n        Scene {\n            name: \"banner\",\n            build: banner,\n            shows: Shows::Subjects(&[\"Banner\"]),\n        },\n        Scene {\n            name: \"outcome-panel\",\n            build: outcome_panel,\n            shows: Shows::Subjects(&[\"OutcomePanel\"]),\n        },\n        Scene {\n            name: \"stage-progress\",\n            build: stage_progress,\n            shows: Shows::Subjects(&[\"StageProgress\"]),\n        },\n        Scene {\n            name: \"divider\",\n            build: divider,\n            shows: Shows::Subjects(&[\"Divider\"]),\n        },\n        Scene {\n            name: \"tag\",\n            build: tag,\n            shows: Shows::Subjects(&[\"Tag\"]),\n        },\n        Scene {\n            name: \"avatar\",\n            build: avatar,\n            shows: Shows::Subjects(&[\"Avatar\", \"AvatarGroup\"]),\n        },\n        Scene {\n            name: \"empty-state\",\n            build: empty_state,\n            shows: Shows::Subjects(&[\"EmptyState\"]),\n        },\n        Scene {\n            name: \"kbd\",\n            build: kbd,\n            shows: Shows::Subjects(&[\"Kbd\"]),\n        },\n        Scene {\n            name: \"overlay\",\n            build: overlay,\n            shows: Shows::Subjects(&[\"Overlay\"]),\n        },\n        Scene {\n            name: \"dialog\",\n            build: dialog,\n            shows: Shows::Subjects(&[\"Dialog\"]),\n        },\n        Scene {\n            name: \"tooltip\",\n            build: tooltip,\n            shows: Shows::Subjects(&[\"Tooltip\"]),\n        },\n        Scene {\n            name: \"menu\",\n            build: menu,\n            shows: Shows::Subjects(&[\"Menu\"]),\n        },\n        Scene {\n            name: \"context-menu\",\n            build: context_menu,\n            shows: Shows::Subjects(&[\"ContextMenu\"]),\n        },\n        Scene {\n            name: \"popover\",\n            build: popover,\n            shows: Shows::Subjects(&[\"Popover\"]),\n        },\n        Scene {\n            name: \"command-palette\",\n            build: command_palette,\n            shows: Shows::Subjects(&[\"CommandPalette\"]),\n        },\n        Scene {\n            name: \"toast\",\n            build: toast,\n            shows: Shows::Subjects(&[\"ToastLayer\"]),\n        },\n        Scene {\n            name: \"tabs\",\n            build: tabs,\n            shows: Shows::Subjects(&[\"Tabs\"]),\n        },\n        Scene {\n            name: \"carousel\",\n            build: carousel,\n            shows: Shows::Subjects(&[\"Carousel\"]),\n        },\n        Scene {\n            name: \"nav-stack\",\n            build: nav_stack,\n            shows: Shows::Subjects(&[\"NavStack\"]),\n        },\n        Scene {\n            name: \"accordion\",\n            build: accordion,\n            shows: Shows::Subjects(&[\"Accordion\"]),\n        },\n        Scene {\n            name: \"breadcrumb\",\n            build: breadcrumb,\n            shows: Shows::Subjects(&[\"Breadcrumb\"]),\n        },\n        Scene {\n            name: \"list\",\n            build: list,\n            shows: Shows::Subjects(&[\"List\"]),\n        },\n        Scene {\n            name: \"image-list\",\n            build: image_list,\n            shows: Shows::Subjects(&[\"ImageList\"]),\n        },\n        Scene {\n            name: \"masonry\",\n            build: masonry,\n            shows: Shows::Subjects(&[\"Masonry\"]),\n        },\n        Scene {\n            name: \"flow\",\n            build: flow,\n            shows: Shows::Subjects(&[\"Flow\"]),\n        },\n        Scene {\n            name: \"table\",\n            build: table,\n            shows: Shows::Subjects(&[\"Table\"]),\n        },\n        Scene {\n            name: \"data-grid\",\n            build: data_grid,\n            shows: Shows::Subjects(&[\"BulkBar\", \"DataGrid\"]),\n        },\n        Scene {\n            name: \"data-grid-editing\",\n            build: data_grid_editing,\n            shows: Shows::Subjects(&[\"DataGrid\"]),\n        },\n        Scene {\n            name: \"tree-grid\",\n            build: tree_grid,\n            shows: Shows::Subjects(&[\"TreeGrid\"]),\n        },\n        Scene {\n            name: \"tree\",\n            build: tree,\n            shows: Shows::Subjects(&[\"Tree\"]),\n        },\n        Scene {\n            name: \"split-pane\",\n            build: split_pane,\n            shows: Shows::Subjects(&[\"SplitPane\"]),\n        },\n        Scene {\n            name: \"grid\",\n            build: grid,\n            shows: Shows::Subjects(&[\"Grid\"]),\n        },\n        Scene {\n            name: \"container\",\n            build: container,\n            shows: Shows::Subjects(&[\"Container\"]),\n        },\n        Scene {\n            name: \"scroll-area\",\n            build: scroll_area,\n            shows: Shows::Subjects(&[\"ScrollArea\"]),\n        },\n        Scene {\n            name: \"scroll-shadow\",\n            build: scroll_shadow,\n            shows: Shows::Subjects(&[\"ScrollArea\"]),\n        },\n        Scene {\n            name: \"scroll-fade\",\n            build: scroll_fade,\n            shows: Shows::Subjects(&[\"ScrollFade\"]),\n        },\n        Scene {\n            name: \"scroll-edge-effect\",\n            build: scroll_edge_effect,\n            shows: Shows::Subjects(&[\"ScrollEdgeEffect\"]),\n        },\n        Scene {\n            name: \"frost\",\n            build: frost,\n            shows: Shows::Subjects(&[\"Frost\"]),\n        },\n        Scene {\n            name: \"glass\",\n            build: glass,\n            shows: Shows::Subjects(&[\"Glass\"]),\n        },\n        Scene {\n            name: \"glass-optics\",\n            build: glass_optics,\n            shows: Shows::Subjects(&[\"Glass\", \"GlassGroup\"]),\n        },\n        Scene {\n            name: \"glass-materials\",\n            build: glass_materials,\n            shows: Shows::Subjects(&[\"Glass\", \"GlassGroup\"]),\n        },\n        Scene {\n            name: \"media-caption\",\n            build: media_caption,\n            shows: Shows::Composition(&[\"Button\"]),\n        },\n        Scene {\n            name: \"toolbar\",\n            build: toolbar,\n            shows: Shows::Subjects(&[\"Toolbar\"]),\n        },\n        Scene {\n            name: \"desktop-titlebar\",\n            build: desktop_titlebar,\n            shows: Shows::Subjects(&[\"DesktopTitlebar\"]),\n        },\n        Scene {\n            name: \"mobile-page\",\n            build: mobile_page,\n            shows: Shows::Subjects(&[\"AppBar\", \"PageLayout\"]),\n        },\n        Scene {\n            name: \"bottom-navigation\",\n            build: bottom_navigation,\n            shows: Shows::Subjects(&[\"BottomNavigation\"]),\n        },\n        Scene {\n            name: \"nav-back-preview\",\n            build: nav_back_preview,\n            shows: Shows::Subjects(&[\"NavStack\"]),\n        },\n        Scene {\n            name: \"adaptive-navigation\",\n            build: adaptive_navigation,\n            shows: Shows::Composition(&[\n                \"Responsive\",\n                \"Sidebar\",\n                \"BottomNavigation\",\n                \"PageLayout\",\n                \"AppBar\",\n            ]),\n        },\n        Scene {\n            name: \"sidebar\",\n            build: sidebar,\n            shows: Shows::Subjects(&[\"Sidebar\"]),\n        },\n        Scene {\n            name: \"sidebar-overflow\",\n            build: sidebar_overflow,\n            shows: Shows::Subjects(&[\"Sidebar\"]),\n        },\n        Scene {\n            name: \"pagination\",\n            build: pagination,\n            shows: Shows::Subjects(&[\"Pagination\"]),\n        },\n        Scene {\n            name: \"drawer\",\n            build: drawer,\n            shows: Shows::Subjects(&[\"Drawer\"]),\n        },\n        Scene {\n            name: \"motion-flip\",\n            build: motion_flip,\n            shows: Shows::Composition(&[\"Button\", \"Card\", \"ListRow\"]),\n        },\n        Scene {\n            name: \"flip-configuration\",\n            build: flip_configuration,\n            shows: Shows::Composition(&[\"Button\"]),\n        },\n        Scene {\n            name: \"motion-state\",\n            build: motion_state,\n            shows: Shows::Composition(&[\n                \"Accordion\",\n                \"Button\",\n                \"Checkbox\",\n                \"ProgressBar\",\n                \"Radio\",\n                \"SegmentedControl\",\n                \"Switch\",\n                \"Tabs\",\n            ]),\n        },\n        Scene {\n            name: \"motion-primitives\",\n            build: motion_primitives,\n            shows: Shows::Composition(&[\"Button\", \"Tabs\"]),\n        },\n        Scene {\n            name: \"animated-number\",\n            build: animated_number,\n            shows: Shows::Subjects(&[\"AnimatedNumber\"]),\n        },\n        Scene {\n            name: \"drag-list\",\n            build: drag_list,\n            shows: Shows::Subjects(&[\"List\"]),\n        },\n        Scene {\n            name: \"deferred-drop\",\n            build: deferred_drop,\n            shows: Shows::Composition(&[\"List\", \"Tabs\", \"Tree\", \"Button\"]),\n        },\n        Scene {\n            name: \"drag-tree\",\n            build: drag_tree,\n            shows: Shows::Subjects(&[\"Tree\"]),\n        },\n        Scene {\n            name: \"dropzone\",\n            build: dropzone,\n            shows: Shows::Subjects(&[\"Dropzone\"]),\n        },\n        Scene {\n            name: \"wizard\",\n            build: wizard,\n            shows: Shows::Subjects(&[\"Wizard\"]),\n        },\n        Scene {\n            name: \"undo-history\",\n            build: undo_history,\n            shows: Shows::Subjects(&[\"UndoHistory\"]),\n        },\n        Scene {\n            name: \"settings\",\n            build: settings,\n            shows: Shows::Subjects(&[\"SettingsList\", \"SettingsRow\", \"SettingsSection\"]),\n        },\n        Scene {\n            name: \"settings-page\",\n            build: settings_page,\n            shows: Shows::Subjects(&[\"SettingsList\"]),\n        },\n        Scene {\n            name: \"translation-packs\",\n            build: translation_packs,\n            shows: Shows::Composition(&[\"Card\", \"Button\"]),\n        },\n        Scene {\n            name: \"detail\",\n            build: detail,\n            shows: Shows::Subjects(&[\"DescriptionList\", \"Timeline\"]),\n        },\n        Scene {\n            name: \"filter-bar\",\n            build: filter_bar,\n            shows: Shows::Subjects(&[\"FilterBar\"]),\n        },\n        Scene {\n            name: \"inline-edit\",\n            build: inline_edit,\n            shows: Shows::Subjects(&[\"InlineEdit\"]),\n        },\n        Scene {\n            name: \"progress-circle\",\n            build: progress_circle,\n            shows: Shows::Subjects(&[\"ProgressCircle\"]),\n        },\n        Scene {\n            name: \"split-tree\",\n            build: split_tree,\n            shows: Shows::Subjects(&[\"SplitTree\"]),\n        },\n        Scene {\n            name: \"dock-tree\",\n            build: dock_tree,\n            shows: Shows::Subjects(&[\"DockTree\"]),\n        },\n        Scene {\n            name: \"dock-floating\",\n            build: dock_floating,\n            shows: Shows::Subjects(&[\"DockTree\"]),\n        },\n        Scene {\n            name: \"ide-shell\",\n            build: ide_shell,\n            shows: Shows::Subjects(&[\"Dock\", \"StatusBar\"]),\n        },\n        Scene {\n            name: \"keybinding\",\n            build: keybinding,\n            shows: Shows::Subjects(&[\"KeybindingRecorder\"]),\n        },\n        Scene {\n            name: \"keymap-editor\",\n            build: keymap_editor,\n            shows: Shows::Subjects(&[\"KeymapEditor\"]),\n        },\n        Scene {\n            name: \"markdown\",\n            build: markdown,\n            shows: Shows::Subjects(&[\"Markdown\"]),\n        },\n        Scene {\n            name: \"agent-document\",\n            build: agent_document,\n            shows: Shows::Subjects(&[\"AgentDocument\"]),\n        },\n        Scene {\n            name: \"agent-roster\",\n            build: agent_roster,\n            shows: Shows::Subjects(&[\"AgentCard\", \"AgentGroup\", \"AgentRoster\", \"SubagentTree\"]),\n        },\n        Scene {\n            name: \"persona\",\n            build: persona,\n            shows: Shows::Subjects(&[\"PersonaDialogue\", \"PersonaPortrait\", \"VoiceReactive\"]),\n        },\n        Scene {\n            name: \"game-ui\",\n            build: game_ui,\n            shows: Shows::Subjects(&[\n                \"AbilityBar\",\n                \"ObjectiveTracker\",\n                \"PartyRoster\",\n                \"RewardReveal\",\n            ]),\n        },\n        Scene {\n            name: \"agent-run-canvas\",\n            build: agent_run_canvas,\n            shows: Shows::Subjects(&[\"AgentRunCanvas\"]),\n        },\n        Scene {\n            name: \"agent-run-issues\",\n            build: agent_run_issues,\n            shows: Shows::Subjects(&[\"AgentRunIssues\"]),\n        },\n        Scene {\n            name: \"agent-avatar\",\n            build: agent_avatar,\n            shows: Shows::Subjects(&[\"AgentActivityLine\", \"AgentAvatar\"]),\n        },\n        Scene {\n            name: \"conversation\",\n            build: conversation,\n            shows: Shows::Subjects(&[\"MessageList\"]),\n        },\n        Scene {\n            name: \"outline\",\n            build: outline,\n            shows: Shows::Subjects(&[\"Outline\"]),\n        },\n        Scene {\n            name: \"conversation-growing\",\n            build: conversation_growing,\n            shows: Shows::Subjects(&[\"MessageList\"]),\n        },\n        Scene {\n            name: \"image-viewer\",\n            build: image_viewer,\n            shows: Shows::Subjects(&[\"ImageViewer\"]),\n        },\n        Scene {\n            name: \"transport\",\n            build: transport,\n            shows: Shows::Subjects(&[\"TransportBar\"]),\n        },\n        Scene {\n            name: \"audio-player\",\n            build: audio_player,\n            shows: Shows::Subjects(&[\"AudioPlayer\"]),\n        },\n        Scene {\n            name: \"audio-waveform\",\n            build: audio_waveform,\n            shows: Shows::Subjects(&[\"AudioWaveform\"]),\n        },\n        Scene {\n            name: \"video-player\",\n            build: video_player,\n            shows: Shows::Subjects(&[\"VideoPlayer\"]),\n        },\n        Scene {\n            name: \"model-viewer\",\n            build: model_viewer,\n            shows: Shows::Subjects(&[\"ModelViewer\"]),\n        },\n        Scene {\n            name: \"approval\",\n            build: approval,\n            shows: Shows::Subjects(&[\"ApprovalPrompt\"]),\n        },\n        Scene {\n            name: \"clarification\",\n            build: clarification,\n            shows: Shows::Subjects(&[\"ClarificationPanel\"]),\n        },\n        Scene {\n            name: \"permission-matrix\",\n            build: permission_matrix,\n            shows: Shows::Subjects(&[\"PermissionMatrix\"]),\n        },\n        Scene {\n            name: \"cost-meter\",\n            build: cost_meter,\n            shows: Shows::Subjects(&[\"ContextGauge\", \"CostMeter\"]),\n        },\n        Scene {\n            name: \"prompt-builder\",\n            build: prompt_builder,\n            shows: Shows::Subjects(&[\"PromptBuilder\"]),\n        },\n        Scene {\n            name: \"feedback-rating\",\n            build: feedback_rating,\n            shows: Shows::Subjects(&[\"FeedbackRating\"]),\n        },\n        Scene {\n            name: \"artifact-preview\",\n            build: artifact_preview,\n            shows: Shows::Subjects(&[\"ArtifactPreview\"]),\n        },\n        Scene {\n            name: \"tool-call\",\n            build: tool_call,\n            shows: Shows::Subjects(&[\"ToolCall\"]),\n        },\n        Scene {\n            name: \"agent-plan\",\n            build: agent_plan,\n            shows: Shows::Subjects(&[\"AgentPlan\"]),\n        },\n        Scene {\n            name: \"node-graph\",\n            build: node_graph,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"node-graph-layout\",\n            build: node_graph_layout,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"node-graph-routing\",\n            build: node_graph_routing,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"node-graph-motion\",\n            build: node_graph_motion,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"canvas-tools\",\n            build: canvas_tools,\n            shows: Shows::Subjects(&[\"CanvasToolbar\", \"Minimap\", \"NodeGroup\"]),\n        },\n        Scene {\n            name: \"canvas-regions\",\n            build: canvas_regions,\n            shows: Shows::Subjects(&[\"NodeGraph\"]),\n        },\n        Scene {\n            name: \"browser-panel\",\n            build: browser_panel,\n            shows: Shows::Subjects(&[\"BrowserPanel\"]),\n        },\n        Scene {\n            name: \"thinking\",\n            build: thinking,\n            shows: Shows::Subjects(&[\"ThinkingBlock\"]),\n        },\n        Scene {\n            name: \"json-view\",\n            build: json_view,\n            shows: Shows::Subjects(&[\"JsonView\"]),\n        },\n        Scene {\n            name: \"schema-form\",\n            build: schema_form,\n            shows: Shows::Subjects(&[\"SchemaForm\"]),\n        },\n        Scene {\n            name: \"server-list\",\n            build: server_list,\n            shows: Shows::Subjects(&[\"ServerList\"]),\n        },\n        Scene {\n            name: \"offering-catalog\",\n            build: offering_catalog,\n            shows: Shows::Subjects(&[\"OfferingCatalog\"]),\n        },\n        Scene {\n            name: \"reading-direction\",\n            build: reading_direction,\n            shows: Shows::Composition(&[\n                \"Accordion\",\n                \"Breadcrumb\",\n                \"Button\",\n                \"Card\",\n                \"Icon\",\n                \"JsonView\",\n                \"Tabs\",\n                \"Tree\",\n            ]),\n        },\n        Scene {\n            name: \"toggle\",\n            build: toggle,\n            shows: Shows::Subjects(&[\"Toggle\", \"ToggleGroup\"]),\n        },\n        Scene {\n            name: \"collapsible\",\n            build: collapsible,\n            shows: Shows::Subjects(&[\"Collapsible\"]),\n        },\n        Scene {\n            name: \"hover-card\",\n            build: hover_card,\n            shows: Shows::Subjects(&[\"HoverCard\"]),\n        },\n        Scene {\n            name: \"menubar\",\n            build: menubar,\n            shows: Shows::Subjects(&[\"Menubar\"]),\n        },\n        Scene {\n            name: \"copy-button\",\n            build: copy_button,\n            shows: Shows::Subjects(&[\"CopyButton\"]),\n        },\n        Scene {\n            name: \"aspect-ratio\",\n            build: aspect_ratio,\n            shows: Shows::Subjects(&[\"AspectRatio\"]),\n        },\n        Scene {\n            name: \"responsive\",\n            build: responsive,\n            shows: Shows::Subjects(&[\"Responsive\"]),\n        },\n        Scene {\n            name: \"icon\",\n            build: icon,\n            shows: Shows::Subjects(&[\"Icon\"]),\n        },\n        Scene {\n            name: \"document-tabs\",\n            build: document_tabs,\n            shows: Shows::Subjects(&[\"Tabs\"]),\n        },\n        Scene {\n            name: \"search-input\",\n            build: search_input,\n            shows: Shows::Subjects(&[\"SearchInput\"]),\n        },\n        Scene {\n            name: \"search-field\",\n            build: search_field,\n            shows: Shows::Subjects(&[\"HighlightedText\", \"SearchField\"]),\n        },\n        Scene {\n            name: \"find-replace\",\n            build: find_replace,\n            shows: Shows::Subjects(&[\"FindReplace\"]),\n        },\n        Scene {\n            name: \"notification-center\",\n            build: notification_center,\n            shows: Shows::Subjects(&[\"NotificationCenter\"]),\n        },\n        Scene {\n            name: \"failure-panel\",\n            build: failure_panel,\n            shows: Shows::Subjects(&[\"FailurePanel\"]),\n        },\n        Scene {\n            name: \"log-stream\",\n            build: log_stream,\n            shows: Shows::Subjects(&[\"LogStream\"]),\n        },\n        Scene {\n            name: \"diff-view\",\n            build: diff_view,\n            shows: Shows::Subjects(&[\"DiffView\"]),\n        },\n        Scene {\n            name: \"sparkline\",\n            build: sparkline,\n            shows: Shows::Subjects(&[\"Sparkline\"]),\n        },\n        Scene {\n            name: \"performance-hud\",\n            build: performance_hud,\n            shows: Shows::Subjects(&[\"PerformanceHud\"]),\n        },\n        Scene {\n            name: \"chart\",\n            build: chart,\n            shows: Shows::Subjects(&[\n                \"AreaChart\",\n                \"BarChart\",\n                \"ChartLegend\",\n                \"GaugeChart\",\n                \"LineChart\",\n                \"PieChart\",\n                \"RadarChart\",\n                \"ScatterChart\",\n                \"StackedBarChart\",\n            ]),\n        },\n        Scene {\n            name: \"cartesian\",\n            build: cartesian,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-linked\",\n            build: cartesian_linked,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-layout\",\n            build: cartesian_layout,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-lifecycle\",\n            build: cartesian_lifecycle,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-dense\",\n            build: cartesian_dense,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-states\",\n            build: cartesian_states,\n            shows: Shows::Subjects(&[\"CartesianChart\", \"PieChart\", \"RadarChart\", \"GaugeChart\"]),\n        },\n        Scene {\n            name: \"plot\",\n            build: plot,\n            shows: Shows::Subjects(&[\"CandlestickChart\", \"Plot\", \"SankeyChart\"]),\n        },\n        Scene {\n            name: \"specialized\",\n            build: specialized,\n            shows: Shows::Subjects(&[\"SpecializedChart\"]),\n        },\n        Scene {\n            name: \"specialized-distribution\",\n            build: specialized_distribution,\n            shows: Shows::Subjects(&[\"SpecializedChart\"]),\n        },\n        Scene {\n            name: \"specialized-exploration\",\n            build: specialized_exploration,\n            shows: Shows::Subjects(&[\"SpecializedChart\"]),\n        },\n        Scene {\n            name: \"continuous-heatmap-transition\",\n            build: continuous_heatmap_transition,\n            shows: Shows::Subjects(&[\"ContinuousHeatmap\"]),\n        },\n        Scene {\n            name: \"heatmap-reordering\",\n            build: heatmap_reordering,\n            shows: Shows::Subjects(&[\"ContinuousHeatmap\"]),\n        },\n        Scene {\n            name: \"sankey-motion\",\n            build: sankey_motion,\n            shows: Shows::Subjects(&[\"SankeyChart\"]),\n        },\n        Scene {\n            name: \"continuous-heatmap\",\n            build: continuous_heatmap,\n            shows: Shows::Subjects(&[\"ContinuousHeatmap\"]),\n        },\n        Scene {\n            name: \"sankey-layout\",\n            build: sankey_layout,\n            shows: Shows::Subjects(&[\"SankeyChart\"]),\n        },\n        Scene {\n            name: \"raw-candlestick\",\n            build: raw_candlestick,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"geography\",\n            build: geography,\n            shows: Shows::Subjects(&[\"GeoMap\"]),\n        },\n        Scene {\n            name: \"geography-scale\",\n            build: geography_scale,\n            shows: Shows::Subjects(&[\"GeoMap\"]),\n        },\n        Scene {\n            name: \"attachment\",\n            build: attachment,\n            shows: Shows::Subjects(&[\"AttachmentTile\"]),\n        },\n        Scene {\n            name: \"metric-card\",\n            build: metric_card,\n            shows: Shows::Subjects(&[\"MetricCard\"]),\n        },\n        Scene {\n            name: \"kanban\",\n            build: kanban,\n            shows: Shows::Subjects(&[\"KanbanBoard\"]),\n        },\n        Scene {\n            name: \"micro\",\n            build: micro,\n            shows: Shows::Subjects(&[\"MicroMark\"]),\n        },\n        Scene {\n            name: \"trace\",\n            build: trace,\n            shows: Shows::Subjects(&[\"SpanTimeline\", \"TraceView\"]),\n        },\n        Scene {\n            name: \"trace-time\",\n            build: trace_time,\n            shows: Shows::Subjects(&[\"SpanTimeline\", \"TraceView\"]),\n        },\n        Scene {\n            name: \"heatmap\",\n            build: heatmap,\n            shows: Shows::Subjects(&[\"Heatmap\"]),\n        },\n        Scene {\n            name: \"color-picker\",\n            build: color_picker,\n            shows: Shows::Subjects(&[\"ColorPicker\", \"ColorSwatch\"]),\n        },\n        Scene {\n            name: \"code-view\",\n            build: code_view,\n            shows: Shows::Subjects(&[\"CodeView\"]),\n        },\n        Scene {\n            name: \"upload-list\",\n            build: upload_list,\n            shows: Shows::Subjects(&[\"UploadList\"]),\n        },\n        Scene {\n            name: \"cascader\",\n            build: cascader,\n            shows: Shows::Subjects(&[\"Cascader\"]),\n        },\n        Scene {\n            name: \"anchor-list\",\n            build: anchor_list,\n            shows: Shows::Subjects(&[\"AnchorList\"]),\n        },\n        Scene {\n            name: \"diagnostics-list\",\n            build: diagnostics_list,\n            shows: Shows::Subjects(&[\"DiagnosticsList\"]),\n        },\n    ];\n    #[cfg(all(feature = \"terminal\", not(target_family = \"wasm\")))]\n    scenes.push(Scene {\n        name: \"terminal\",\n        build: terminal,\n        shows: Shows::Subjects(&[\"Terminal\"]),\n    });\n    #[cfg(feature = \"fixtures\")]\n    scenes.extend([\n        Scene {\n            name: \"calendar\",\n            build: calendar,\n            shows: Shows::Subjects(&[\"Calendar\"]),\n        },\n        Scene {\n            name: \"date-range\",\n            build: date_range,\n            shows: Shows::Subjects(&[\"RangePicker\"]),\n        },\n        Scene {\n            name: \"date-time\",\n            build: date_time,\n            shows: Shows::Subjects(&[\"DateInput\", \"TimeInput\"]),\n        },\n        Scene {\n            name: \"touch-dates\",\n            build: touch_dates,\n            shows: Shows::Subjects(&[\"DateInput\", \"TimeInput\", \"RangePicker\"]),\n        },\n    ]);\n    scenes\n}\n\n/// The scene registered under `name`, or `None` when nothing is.\npub fn find(name: &str) -> Option<Scene> {\n    catalog().into_iter().find(|scene| scene.name == name)\n}\n\n/// The reading direction a scene expects.\n///\n/// The direction is a global, like the theme, so a capture run that renders\n/// the whole catalog into one process has to set it per scene the same way it\n/// activates a theme per scene. A scene that changed it while rendering would\n/// leak into whichever scene came next, and the leak would show up as a\n/// changed image somewhere else entirely.\npub fn direction(name: &str) -> LayoutDirection {\n    match name {\n        \"reading-direction\" => LayoutDirection::RightToLeft,\n        _ => LayoutDirection::LeftToRight,\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn scene_names_are_unique_and_addressable() {\n        let mut names: Vec<&str> = catalog().iter().map(|scene| scene.name).collect();\n        let count = names.len();\n        names.sort_unstable();\n        names.dedup();\n        assert_eq!(names.len(), count);\n        assert!(find(\"button\").is_some());\n        assert!(find(\"nothing\").is_none());\n    }\n}\n\n//! Motion primitives exercised against a live clock, plus described motion at rest.\n\nuse super::support::*;\nuse crate::motion::{\n    CubicBezier, Easing, Keyframe, Keyframes, MotionSpec, Presence, Spring, Stagger, Transition,\n};\nuse web_time::Instant;\n\nconst CLOCK_START: u16 = 8 * 60;\nconst CLOCK_END: u16 = 20 * 60;\nconst CLOCK_STEP: u16 = 30;\nconst CLOCK_TICK: Duration = Duration::from_millis(500);\nconst CLOCK_TRANSITION_MS: u64 = 620;\n\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\nenum MotionDemo {\n    SlidingTime,\n    Spring,\n    Keyframes,\n    Presence,\n    Stagger,\n}\n\nimpl MotionDemo {\n    fn id(self) -> &'static str {\n        match self {\n            Self::SlidingTime => \"sliding-time\",\n            Self::Spring => \"spring\",\n            Self::Keyframes => \"keyframes\",\n            Self::Presence => \"presence\",\n            Self::Stagger => \"stagger\",\n        }\n    }\n\n    fn from_id(id: &str) -> Option<Self> {\n        match id {\n            \"sliding-time\" => Some(Self::SlidingTime),\n            \"spring\" => Some(Self::Spring),\n            \"keyframes\" => Some(Self::Keyframes),\n            \"presence\" => Some(Self::Presence),\n            \"stagger\" => Some(Self::Stagger),\n            _ => None,\n        }\n    }\n}\n\n/// Caller-owned state for the five demonstrations.\n///\n/// The catalog rebuilds a scene every frame, just as an ordinary host rebuilds\n/// component builders. The state therefore lives outside the element tree;\n/// every animated channel beneath it still has a stable semantic identity.\n#[derive(Debug)]\nstruct SceneMotionPrimitives {\n    demo: MotionDemo,\n    clock_minutes: u16,\n    clock_targets: [f32; 4],\n    clock_digits: [Transition<f32>; 4],\n    clock_playing: bool,\n    clock_started_at: Option<Instant>,\n    clock_ticks: u16,\n    spring_selected: usize,\n    spring_indicator: Transition<f32>,\n    present: bool,\n    presence: Presence,\n    keyframes_started_at: Option<Instant>,\n    stagger_generation: u64,\n    stagger_started_at: Option<Instant>,\n}\n\nimpl Global for SceneMotionPrimitives {}\n\nimpl SceneMotionPrimitives {\n    fn new(theme: &Theme) -> Self {\n        let clock_spec = clock_spec(theme);\n        let spring_spec = spring_spec();\n        let presence_spec = presence_spec(theme);\n        let targets = clock_digits(CLOCK_START).map(f32::from);\n        Self {\n            demo: MotionDemo::SlidingTime,\n            clock_minutes: CLOCK_START,\n            clock_targets: targets,\n            clock_digits: targets.map(|digit| Transition::new(digit, clock_spec)),\n            clock_playing: false,\n            clock_started_at: None,\n            clock_ticks: 0,\n            spring_selected: 0,\n            spring_indicator: Transition::new(0.0, spring_spec),\n            present: true,\n            presence: Presence::visible(presence_spec, presence_spec),\n            keyframes_started_at: None,\n            stagger_generation: 0,\n            stagger_started_at: None,\n        }\n    }\n\n    fn select(&mut self, demo: MotionDemo, theme: &Theme) {\n        self.demo = demo;\n        // Element-retained animation state disappears when its tab leaves the\n        // tree. Recreate that boundary here even though the scene state itself\n        // is longer lived, so returning to a tab never resumes an invisible\n        // half-frame from the previous visit.\n        match demo {\n            MotionDemo::SlidingTime => {\n                for (digit, target) in self\n                    .clock_digits\n                    .iter_mut()\n                    .zip(self.clock_targets.iter().copied())\n                {\n                    *digit = Transition::new(target, clock_spec(theme));\n                }\n            }\n            MotionDemo::Spring => self.spring_indicator.snap(if self.spring_selected == 0 {\n                0.0\n            } else {\n                120.0\n            }),\n            MotionDemo::Keyframes => self.keyframes_started_at = None,\n            MotionDemo::Presence => {\n                let spec = presence_spec(theme);\n                self.presence = if self.present {\n                    Presence::visible(spec, spec)\n                } else {\n                    Presence::hidden(spec, spec)\n                };\n            }\n            MotionDemo::Stagger => self.stagger_started_at = None,\n        }\n    }\n\n    fn toggle_clock(&mut self, now: Instant, theme: &Theme) {\n        if self.clock_playing {\n            self.clock_playing = false;\n            self.clock_started_at = None;\n            self.clock_ticks = 0;\n            return;\n        }\n        if self.clock_minutes >= CLOCK_END {\n            self.clock_minutes = CLOCK_START;\n            self.clock_targets = clock_digits(CLOCK_START).map(f32::from);\n            for (digit, target) in self\n                .clock_digits\n                .iter_mut()\n                .zip(self.clock_targets.iter().copied())\n            {\n                *digit = Transition::new(target, clock_spec(theme));\n            }\n        }\n        self.clock_playing = true;\n        self.clock_started_at = Some(now);\n        self.clock_ticks = 0;\n    }\n\n    fn update_clock(&mut self, now: Instant) {\n        let Some(started) = self.clock_started_at else {\n            return;\n        };\n        let due = now\n            .saturating_duration_since(started)\n            .as_millis()\n            .checked_div(CLOCK_TICK.as_millis())\n            .unwrap_or(0) as u16;\n        while self.clock_ticks < due && self.clock_minutes < CLOCK_END {\n            self.clock_ticks += 1;\n            self.clock_minutes = (self.clock_minutes + CLOCK_STEP).min(CLOCK_END);\n            for (target, next) in self\n                .clock_targets\n                .iter_mut()\n                .zip(clock_digits(self.clock_minutes))\n            {\n                *target = advance_digit(*target, next);\n            }\n        }\n        if self.clock_minutes >= CLOCK_END {\n            self.clock_playing = false;\n            self.clock_started_at = None;\n            self.clock_ticks = 0;\n        }\n    }\n\n    fn sliding_time(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let spec = clock_spec(theme);\n        let values: [f32; 4] = std::array::from_fn(|index| {\n            let mut digit = self.clock_digits[index].spec(spec);\n            digit.set(self.clock_targets[index]);\n            let value = digit.animate(window, cx);\n            self.clock_digits[index] = digit;\n            value\n        });\n        let announced = format_time(self.clock_minutes);\n        let play_label = if self.clock_playing { \"Pause\" } else { \"Play\" };\n\n        demo_panel(theme, \"Four interrupted transitions on one clock\")\n            .child(\n                div()\n                    .row()\n                    .items_center()\n                    .gap(px(theme.space(Space::Xs)))\n                    .child(rolling_digit(theme, values[0]))\n                    .child(rolling_digit(theme, values[1]))\n                    .child(\n                        div()\n                            .h(px(52.0))\n                            .flex()\n                            .items_center()\n                            .mono(theme)\n                            .text_size(px(36.0))\n                            .child(\":\"),\n                    )\n                    .child(rolling_digit(theme, values[2]))\n                    .child(rolling_digit(theme, values[3]))\n                    .semantic_in(\n                        cx,\n                        NodeSpec::new(\"scene.motion.clock\", Role::Status)\n                            .text(\"Simulated time\")\n                            .value(announced),\n                    ),\n            )\n            .child(\n                Button::new(\"scene.motion.clock.play\")\n                    .label(play_label)\n                    .secondary()\n                    .on_click(|_, cx| {\n                        let now = cx.background_executor().now();\n                        let theme = cx.theme().clone();\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.toggle_clock(now, &theme)\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n            .into_any_element()\n    }\n\n    fn spring(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let mut indicator = self.spring_indicator.spec(spring_spec());\n        indicator.set(if self.spring_selected == 0 {\n            0.0\n        } else {\n            120.0\n        });\n        let left = indicator.animate(window, cx);\n        self.spring_indicator = indicator;\n        let selected = self.spring_selected;\n\n        let segment = |id: &'static str, label: &'static str, index: usize| {\n            div().w(px(120.0)).child(\n                Button::new(id)\n                    .label(label)\n                    .ghost()\n                    .selected(selected == index)\n                    .full_width(true)\n                    .on_click(move |_, cx| {\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.spring_selected = index\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n        };\n\n        demo_panel(theme, \"Velocity survives rapid retargeting\")\n            .child(\n                div()\n                    .relative()\n                    .w(px(240.0))\n                    .radius(theme, Radius::Control)\n                    .well(theme)\n                    .child(\n                        div()\n                            .row()\n                            .child(segment(\"scene.motion.spring.queue\", \"Queue\", 0))\n                            .child(segment(\"scene.motion.spring.timeline\", \"Timeline\", 1)),\n                    )\n                    .child(\n                        div()\n                            .absolute()\n                            .left(px(left))\n                            .top_0()\n                            .w(px(120.0))\n                            .h(px(theme.control.md.height))\n                            .radius(theme, Radius::Control)\n                            .bg(theme.colors.selected)\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(\"scene.motion.spring.indicator\", Role::Status)\n                                    .text(\"Selected segment indicator\")\n                                    .value(if selected == 0 { \"Queue\" } else { \"Timeline\" }),\n                            ),\n                    ),\n            )\n            .into_any_element()\n    }\n\n    fn keyframes(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let now = cx.background_executor().now();\n        let started = *self.keyframes_started_at.get_or_insert(now);\n        let elapsed = now.saturating_duration_since(started);\n        let period = Duration::from_millis(1_200);\n        let still = cx.reduce_motion();\n        if !still {\n            window.request_animation_frame();\n        }\n        let path = activity_keyframes(theme);\n        let bars = [\n            \"clone\", \"resolve\", \"compile\", \"test\", \"lint\", \"package\", \"publish\",\n        ];\n\n        demo_panel(theme, \"One validated path, seven delayed playheads\")\n            .child(\n                div()\n                    .h(px(72.0))\n                    .row()\n                    .items_end()\n                    .gap(px(theme.space(Space::Sm)))\n                    .children(bars.into_iter().enumerate().map(|(index, name)| {\n                        let delay = Duration::from_millis(index as u64 * 80);\n                        let phase = if still || elapsed < delay {\n                            0.0\n                        } else {\n                            elapsed.saturating_sub(delay).as_secs_f32() / period.as_secs_f32()\n                        };\n                        let value = path.sample(phase.rem_euclid(1.0));\n                        div()\n                            .w(px(18.0))\n                            .h(px(18.0 + 38.0 * value))\n                            .radius(theme, Radius::Small)\n                            .bg(theme.colors.accent)\n                            .opacity(0.35 + 0.65 * value)\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(\n                                    format!(\"scene.motion.keyframes.{name}\"),\n                                    Role::Status,\n                                )\n                                .text(format!(\"{name} activity\"))\n                                .value(format!(\"{value:.3}\")),\n                            )\n                    })),\n            )\n            .into_any_element()\n    }\n\n    fn presence(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let progress = self.presence.animate(window, cx);\n        let visible = self.presence.is_rendered();\n        let button = if self.present {\n            \"Hide notice\"\n        } else {\n            \"Show notice\"\n        };\n\n        demo_panel(theme, \"Logical absence waits for the exit to finish\")\n            .child(\n                div()\n                    .h(px(76.0))\n                    .flex()\n                    .items_center()\n                    .children(visible.then(|| {\n                        div()\n                            .w(px(360.0))\n                            .p(px(theme.space(Space::Md)))\n                            .radius(theme, Radius::Card)\n                            .bg(theme.colors.accent.opacity(0.14))\n                            .opacity(progress)\n                            .child(crate::foundation::text(\n                                theme,\n                                TypeScale::Body,\n                                \"The verified result is ready to review.\",\n                            ))\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(\"scene.motion.presence.notice\", Role::Status)\n                                    .text(\"The verified result is ready to review.\"),\n                            )\n                    })),\n            )\n            .child(\n                Button::new(\"scene.motion.presence.toggle\")\n                    .label(button)\n                    .secondary()\n                    .on_click(|_, cx| {\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.present = !scene.present;\n                            if scene.present {\n                                scene.presence.show();\n                            } else {\n                                scene.presence.hide();\n                            }\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n            .into_any_element()\n    }\n\n    fn stagger(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let now = cx.background_executor().now();\n        let started = *self.stagger_started_at.get_or_insert(now);\n        let elapsed = now.saturating_duration_since(started);\n        let spec = MotionSpec::new(360, Easing::EaseOut.curve(theme));\n        let stagger = Stagger::from_millis(90);\n        let total = stagger.total(3, spec);\n        let still = cx.reduce_motion();\n        if !still && elapsed < total {\n            window.request_animation_frame();\n        }\n        let rows = [\n            (\"plan\", \"Plan the release\"),\n            (\"build\", \"Build the artifacts\"),\n            (\"publish\", \"Publish the result\"),\n        ];\n\n        demo_panel(theme, \"A shared clock spreads one entrance across a list\")\n            .child(div().column().gap(px(theme.space(Space::Sm))).children(\n                rows.into_iter().enumerate().map(|(index, (id, label))| {\n                    let progress = if still {\n                        1.0\n                    } else {\n                        stagger.progress_at(elapsed, index, 3, spec)\n                    };\n                    div()\n                        .relative()\n                        .left(px(24.0 * (1.0 - progress)))\n                        .w(px(360.0))\n                        .p(px(theme.space(Space::Sm)))\n                        .radius(theme, Radius::Control)\n                        .well(theme)\n                        .opacity(progress)\n                        .child(crate::foundation::text(theme, TypeScale::Body, label))\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(format!(\"scene.motion.stagger.{id}\"), Role::Status)\n                                .text(label)\n                                .value(format!(\"replay {}\", self.stagger_generation)),\n                        )\n                }),\n            ))\n            .child(\n                Button::new(\"scene.motion.stagger.replay\")\n                    .label(\"Replay\")\n                    .secondary()\n                    .on_click(|_, cx| {\n                        let now = cx.background_executor().now();\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.stagger_generation += 1;\n                            scene.stagger_started_at = Some(now);\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n            .into_any_element()\n    }\n}\n\n/// Five interactive demonstrations of interruption, physical motion,\n/// authored timelines, delayed unmount and list choreography.\npub(super) fn motion_primitives(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneMotionPrimitives>() {\n        cx.set_global(SceneMotionPrimitives::new(cx.theme()));\n    }\n    let now = cx.background_executor().now();\n    let theme = cx.theme().clone();\n    let selected = cx.global::<SceneMotionPrimitives>().demo;\n    let tabs = Tabs::new(\"scene.motion.tabs\")\n        .tabs([\n            TabItem::new(\"sliding-time\", \"Sliding time\"),\n            TabItem::new(\"spring\", \"Spring\"),\n            TabItem::new(\"keyframes\", \"Keyframes\"),\n            TabItem::new(\"presence\", \"Presence\"),\n            TabItem::new(\"stagger\", \"Stagger\"),\n        ])\n        .selected(selected.id())\n        .on_select(|id, _, cx| {\n            let Some(demo) = MotionDemo::from_id(id.as_ref()) else {\n                return;\n            };\n            let theme = cx.theme().clone();\n            cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| scene.select(demo, &theme));\n            cx.refresh_windows();\n        });\n\n    let body = cx.update_global::<SceneMotionPrimitives, AnyElement>(|scene, cx| {\n        scene.update_clock(now);\n        if scene.clock_playing {\n            window.request_animation_frame();\n        }\n        match scene.demo {\n            MotionDemo::SlidingTime => scene.sliding_time(&theme, window, cx),\n            MotionDemo::Spring => scene.spring(&theme, window, cx),\n            MotionDemo::Keyframes => scene.keyframes(&theme, window, cx),\n            MotionDemo::Presence => scene.presence(&theme, window, cx),\n            MotionDemo::Stagger => scene.stagger(&theme, window, cx),\n        }\n    });\n\n    stack(&theme)\n        .w(px(640.0))\n        .child(tabs)\n        .child(body)\n        .into_any_element()\n}\n\nfn clock_spec(theme: &Theme) -> MotionSpec {\n    MotionSpec::new(CLOCK_TRANSITION_MS, Easing::EaseInOut.curve(theme))\n}\n\nfn spring_spec() -> MotionSpec {\n    // `bounce = 1 - damping_ratio`, so this is the same 420ms / 0.68 policy\n    // used by the reference segmented indicator.\n    MotionSpec::sprung(Spring::perceptual(Duration::from_millis(420), 0.32))\n}\n\nfn presence_spec(theme: &Theme) -> MotionSpec {\n    MotionSpec::new(360, Easing::EaseInOut.curve(theme))\n}\n\nfn activity_keyframes(theme: &Theme) -> Keyframes<f32> {\n    let linear = MotionSpec::new(1_200, CubicBezier::new(0.0, 0.0, 1.0, 1.0));\n    Keyframes::new(\n        theme,\n        linear,\n        [\n            Keyframe::new(0.0, 0.0),\n            Keyframe::new(0.35, 1.0),\n            // Local keyframes attach the curve to the stop being reached. Put\n            // EaseOut on the 0.7 stop so the outgoing 0.35..0.7 segment has\n            // the same curve as the reference implementation.\n            Keyframe::new(0.7, 0.0).eased(Easing::EaseOut),\n            Keyframe::new(1.0, 0.0),\n        ],\n    )\n    .expect(\"the activity path has four stops\")\n}\n\nfn demo_panel(theme: &Theme, caption_text: &'static str) -> gpui::Div {\n    div()\n        .min_h(px(260.0))\n        .w_full()\n        .column()\n        .items_center()\n        .justify_center()\n        .gap(px(theme.space(Space::Lg)))\n        .p(px(theme.space(Space::Xl)))\n        .radius(theme, Radius::Card)\n        .card_surface(theme, CardVariant::Elevated)\n        .child(caption(theme, caption_text))\n}\n\nfn rolling_digit(theme: &Theme, value: f32) -> gpui::Div {\n    let whole = value.floor();\n    let fraction = value - whole;\n    let current = (whole as i32).rem_euclid(10);\n    let next = (current + 1).rem_euclid(10);\n    let glyph = |digit: i32, top: f32| {\n        div()\n            .absolute()\n            .left_0()\n            .right_0()\n            .top(px(top))\n            .h(px(52.0))\n            .flex()\n            .items_center()\n            .justify_center()\n            .child(digit.to_string())\n    };\n\n    div()\n        .relative()\n        .w(px(38.0))\n        .h(px(52.0))\n        .overflow_hidden()\n        .radius(theme, Radius::Control)\n        .well(theme)\n        .mono(theme)\n        .text_size(px(40.0))\n        .child(glyph(current, -52.0 * fraction))\n        .child(glyph(next, 52.0 * (1.0 - fraction)))\n}\n\nfn clock_digits(minutes: u16) -> [u8; 4] {\n    let hour = minutes / 60;\n    let minute = minutes % 60;\n    [\n        (hour / 10) as u8,\n        (hour % 10) as u8,\n        (minute / 10) as u8,\n        (minute % 10) as u8,\n    ]\n}\n\nfn format_time(minutes: u16) -> String {\n    format!(\"{:02}:{:02}\", minutes / 60, minutes % 60)\n}\n\n/// The next scalar congruent to `digit`, always travelling forward around the\n/// decimal wheel. Thus 8 → 0 becomes 8 → 10 rather than rolling backwards.\nfn advance_digit(current: f32, digit: u8) -> f32 {\n    let current_digit = (current.round() as i32).rem_euclid(10);\n    let distance = (i32::from(digit) - current_digit).rem_euclid(10);\n    current + distance as f32\n}\n\npub(super) fn micro(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // Each motion gets a cell of its own. A still frame cannot show any of\n    // them moving, so what the picture has to carry instead is that there are\n    // five of them, that they are the same size, and which name belongs to\n    // which mark.\n    let cell = |mark: MicroMark| {\n        div()\n            .w(px(96.0))\n            .flex_none()\n            .column()\n            .items_center()\n            .justify_center()\n            .gap_token(&theme, Space::Xs)\n            .py_token(&theme, Space::Md)\n            .radius(&theme, Radius::Card)\n            .well(&theme)\n            .child(mark)\n    };\n\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"named functions of time; reduced motion leaves the glyph still\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(cell(MicroMark::new(\n                    \"scene.micro.heartbeat\",\n                    Micro::Heartbeat,\n                    \"Hb\",\n                )))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.bounce\",\n                    Micro::Bounce,\n                    \"Bn\",\n                )))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.wobble\",\n                    Micro::Wobble,\n                    \"Wb\",\n                )))\n                .child(cell(MicroMark::new(\"scene.micro.pop\", Micro::Pop, \"Pp\")))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.sparkle\",\n                    Micro::Sparkle,\n                    \"Sk\",\n                ))),\n        )\n        .child(caption(\n            &theme,\n            \"the same functions on things that are not glyphs\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(div().child(Badge::new(\"12 unread\").neutral()).micro(\n                    \"scene.micro.badge\",\n                    Micro::Pop,\n                    cx,\n                ))\n                .child(div().child(Tag::new(\"scene.micro.tag\", \"fixture\")).micro(\n                    \"scene.micro.tag.mark\",\n                    Micro::Wobble,\n                    cx,\n                ))\n                .child(div().child(StatusDot::new(Tone::Success)).micro(\n                    \"scene.micro.dot\",\n                    Micro::Heartbeat,\n                    cx,\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"a described motion, sampled along its own run rather than played\",\n        ))\n        .child(described(&theme))\n        .into_any_element()\n}\n\n/// A motion written with `motion!`, laid out as the frames it passes through.\n///\n/// This is the one thing a still frame can say about motion: a described\n/// motion can be read at a point in its run without running it, so the frames\n/// are drawn side by side and the picture is the same every time. Playing it\n/// is [`Animator`]'s job and needs a window; the gallery is where that is\n/// looked at.\nfn described(theme: &Theme) -> gpui::Div {\n    let arrive = crate::motion! {\n        duration: 420;\n        ease: overshoot;\n        opacity: 0.0 => 1.0;\n        y: 12.0 => 0.0;\n    };\n\n    let frame = |head: f32, label: &'static str| {\n        let sample = arrive.sample(theme, head);\n        div()\n            .w(px(96.0))\n            .flex_none()\n            .column()\n            .items_center()\n            .gap_token(theme, Space::Xs)\n            .py_token(theme, Space::Md)\n            .radius(theme, Radius::Card)\n            .well(theme)\n            // The slot stays drawn at every head. At the start of the run the\n            // mark has not arrived yet, and a cell with nothing in it reads\n            // as a frame that failed to render rather than as the frame where\n            // the motion has not begun.\n            .child(\n                div()\n                    .w(px(56.0))\n                    .h(px(24.0))\n                    .radius(theme, Radius::Control)\n                    .bg(theme.colors.track)\n                    .child(\n                        sample.apply(\n                            div()\n                                .size_full()\n                                .radius(theme, Radius::Control)\n                                .bg(theme.colors.accent),\n                        ),\n                    ),\n            )\n            .child(caption(theme, label))\n    };\n\n    row(theme)\n        .gap_token(theme, Space::Sm)\n        .child(frame(0.0, \"start\"))\n        .child(frame(0.25, \"quarter\"))\n        .child(frame(0.5, \"half\"))\n        .child(frame(0.75, \"three quarters\"))\n        .child(frame(1.0, \"settled\"))\n}\n\n//! Getting to a place, and knowing which place you are in.\n\nuse super::support::*;\n\npub(super) fn bottom_navigation(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::{BottomNavigation, NavigationItem};\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(390.0))\n        .child(caption(\n            &theme,\n            \"Fixture destinations; selected, enabled and disabled actions\",\n        ))\n        .child(\n            BottomNavigation::new(\"scene.bottom-navigation.ready\")\n                .items([\n                    NavigationItem::new(\"library\", \"Library\"),\n                    NavigationItem::new(\"search\", \"Search\"),\n                    NavigationItem::new(\"settings\", \"Settings\").disabled(true),\n                ])\n                .selected(\"search\")\n                .on_select(|_, _, _| {}),\n        )\n        .child(caption(\n            &theme,\n            \"No host handler: destinations are unavailable\",\n        ))\n        .child(\n            BottomNavigation::new(\"scene.bottom-navigation.unavailable\")\n                .items([\n                    NavigationItem::new(\"library\", \"Library\"),\n                    NavigationItem::new(\"search\", \"Search\"),\n                ])\n                .selected(\"library\"),\n        )\n        .into_any_element()\n}\n\npub(super) fn adaptive_navigation(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{AppBar, PageLayout, Responsive};\n    use crate::navigation::{BottomNavigation, NavigationItem};\n    let theme = cx.theme().clone();\n    let make = |id: &'static str, width: f32| {\n        div().w(px(width)).h(px(320.0)).child(\n            Responsive::new(id, move |size, _, _| {\n                let wide = size.at_least(600.0);\n                let body = div()\n                    .flex()\n                    .size_full()\n                    .when(wide, |body| {\n                        body.child(\n                            Sidebar::new(format!(\"{id}.rail\"))\n                                .section(SidebarSection::new(\"destinations\").items([\n                                    SidebarItem::new(\"library\", \"Library\"),\n                                    SidebarItem::new(\"search\", \"Search\"),\n                                ]))\n                                .active(\"search\")\n                                .on_select(|_, _, _| {}),\n                        )\n                    })\n                    .child(\n                        div()\n                            .flex_1()\n                            .p(px(16.0))\n                            .child(\"Fixture content · caller owns route selection\"),\n                    );\n                PageLayout::new(format!(\"{id}.page\"), body)\n                    .insets(gpui::WindowInsets::default())\n                    .header(AppBar::new(\n                        format!(\"{id}.bar\"),\n                        if wide {\n                            \"Wide container\"\n                        } else {\n                            \"Compact container\"\n                        },\n                    ))\n                    .hide_footer(wide)\n                    .footer(\n                        BottomNavigation::new(format!(\"{id}.bottom\"))\n                            .items([\n                                NavigationItem::new(\"library\", \"Library\"),\n                                NavigationItem::new(\"search\", \"Search\"),\n                            ])\n                            .selected(\"search\")\n                            .on_select(|_, _, _| {}),\n                    )\n                    .into_any_element()\n            })\n            .fill(),\n        )\n    };\n    stack(&theme)\n        .child(caption(&theme, \"Same caller data; measured container width selects rail or bottom destinations. No platform guessing.\"))\n        .child(make(\"scene.adaptive-navigation.wide\", 640.0))\n        .child(make(\"scene.adaptive-navigation.compact\", 350.0))\n        .into_any_element()\n}\n\npub(super) fn nav_back_preview(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::{BackTransition, NavHistory, NavStack};\n    let theme = cx.theme().clone();\n    let state = window.use_keyed_state(\"scene.nav-back-preview.state\", cx, |_, cx| {\n        let mut history = NavHistory::new(\"overview\");\n        history.push(\"details\");\n        (history, None::<BackTransition>, cx.focus_handle())\n    });\n    let (history, preview, focus) = state.read(cx).clone();\n    let progress = state.clone();\n    let cancel = state.clone();\n    let commit = state.clone();\n    let reset = state.clone();\n    let mut page = NavStack::new(\n        \"scene.nav-back-preview\",\n        &history,\n        history.current().clone(),\n        focus,\n        Card::new()\n            .padding(Space::Xl)\n            .child(history.current().clone()),\n    );\n    if let Some(preview) = &preview {\n        page = page.back_transition(preview);\n    }\n    stack(&theme).w(px(550.0))\n        .child(caption(&theme, \"Fixture host-fed progress; cancel retains the page, accept mutates caller history. Reduced motion holds full opacity.\"))\n        .child(Slider::new(\"scene.nav-back-preview.progress\").label(\"Back progress\")\n            .range(0.0, 1.0).value(preview.as_ref().map_or(0.0, BackTransition::progress))\n            .disabled(!history.can_pop()).on_change(move |value, _, cx| progress.update(cx, |state, cx| {\n                if state.1.is_none() { state.1 = BackTransition::begin(&state.0); }\n                if let Some(preview) = &mut state.1 { preview.update(value); }\n                cx.notify();\n            })))\n        .child(row(&theme)\n            .child(Button::new(\"scene.nav-back-preview.cancel\").label(\"Cancel\").disabled(preview.is_none())\n                .on_click(move |_, cx| cancel.update(cx, |state, cx| {\n                    if let Some(preview) = state.1.take() { preview.cancel(); } cx.notify();\n                })))\n            .child(Button::new(\"scene.nav-back-preview.accept\").label(\"Accept back\").disabled(preview.is_none())\n                .on_click(move |_, cx| commit.update(cx, |state, cx| {\n                    if let Some(preview) = state.1.take() { preview.commit(&mut state.0); } cx.notify();\n                })))\n            .child(Button::new(\"scene.nav-back-preview.reset\").label(\"Forward\").disabled(!history.can_forward())\n                .on_click(move |_, cx| reset.update(cx, |state, cx| { state.0.forward(); cx.notify(); }))))\n        .child(page).into_any_element()\n}\n\npub(super) fn nav_stack(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::nav_stack::{NavHistory, NavStack};\n    let theme = cx.theme().clone();\n    let state = window.use_keyed_state(\"scene.nav-stack.state\", cx, |_, cx| {\n        (\n            NavHistory::new(\"overview\"),\n            cx.focus_handle(),\n            cx.focus_handle(),\n            cx.focus_handle(),\n        )\n    });\n    let (history, overview, details, replacement) = state.read(cx).clone();\n    let focus = match history.current().as_ref() {\n        \"details\" => details,\n        \"replacement\" => replacement,\n        _ => overview,\n    };\n    let back = state.clone();\n    let forward = state.clone();\n    let push = state.clone();\n    let replace = state.clone();\n    stack(&theme).w(px(620.0))\n        .child(caption(&theme, \"Caller-owned visit history; back retains forward visits, push forks, replace preserves branches\"))\n        .child(row(&theme)\n            .child(Button::new(\"scene.nav-stack.back\").label(\"Back\").disabled(!history.can_pop())\n                .on_click(move |_, cx| back.update(cx, |state, cx| { state.0.pop(); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.forward\").label(\"Forward\").disabled(!history.can_forward())\n                .on_click(move |_, cx| forward.update(cx, |state, cx| { state.0.forward(); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.push\").label(\"Push details\")\n                .disabled(history.entries().iter().any(|id| id.as_ref() == \"details\"))\n                .on_click(move |_, cx| push.update(cx, |state, cx| { state.0.push(\"details\"); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.replace\").label(\"Replace\")\n                .disabled(history.entries().iter().any(|id| id.as_ref() == \"replacement\"))\n                .on_click(move |_, cx| replace.update(cx, |state, cx| { state.0.replace(\"replacement\"); cx.notify(); }))))\n        .child(NavStack::new(\"scene.nav-stack\", &history, history.current().clone(), focus,\n            Card::new().padding(Space::Xl)\n                .child(crate::foundation::text(&theme, TypeScale::Title, history.current().clone()))\n                .child(crate::foundation::text(&theme, TypeScale::Body,\n                    \"Only the active page is mounted. Return visits restore focus without keeping inactive controls live.\"))))\n        .into_any_element()\n}\n\npub(super) fn carousel(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let page = |id: &'static str, label: &'static str, text: &'static str| {\n        CarouselItem::new(\n            id,\n            label,\n            Card::new()\n                .id(format!(\"scene.carousel.card.{id}\"))\n                .padding(Space::Xl)\n                .child(crate::foundation::text(&theme, TypeScale::Title, label))\n                .child(crate::foundation::text(&theme, TypeScale::Body, text)),\n        )\n    };\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"A controlled, focusable page track with direct selection and reduced-motion-aware transitions\",\n        ))\n        .child(\n            Carousel::new(\"scene.carousel.ready\")\n                .items([\n                    page(\"overview\", \"Overview\", \"The first page is active.\"),\n                    page(\"details\", \"Details\", \"The caller owns the page content.\"),\n                    page(\"history\", \"History\", \"The track reports page intents.\"),\n                ])\n                .active(\"details\")\n                .looped(true)\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Carousel::new(\"scene.carousel.empty\")\n                .phase(Phase::Empty)\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(caption(\n            &theme,\n            \"In-content tabs: raised control, quiet track, tabular count\",\n        ))\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        .child(caption(\n            &theme,\n            \"places, not documents: Regular Liquid capsules, \\\n             with a translucent selected fill on the material\",\n        ))\n        .child(\n            Tabs::new(\"scene.tabs.capsules\")\n                .capsules()\n                .control_size(ControlSize::Sm)\n                .tabs([\n                    TabItem::new(\"code\", \"Portal\")\n                        .icon(Icon::Terminal)\n                        .tint(theme.colors.accent),\n                    TabItem::new(\"game\", \"Harbour\")\n                        .icon(Icon::Play)\n                        .tint(theme.colors.warning),\n                    TabItem::new(\"design\", \"notes\")\n                        .icon(Icon::Pen)\n                        .tint(theme.colors.info),\n                ])\n                .selected(\"code\")\n                .on_select(|_, _, _| {}),\n        )\n        // The body belongs to the caller: tabs render the strip only.\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Runs are rendered by the caller, not by the strip.\",\n        ))\n        .child(caption(\n            &theme,\n            \"the other answer to a strip with no room: it scrolls, and the \\\n             edge with more behind it fades\",\n        ))\n        // Deliberately narrower than its tabs, because a strip that fits shows\n        // nothing about what a strip that does not fit does.\n        .child(\n            div().w(px(300.0)).child(\n                Tabs::new(\"scene.tabs.spaces\")\n                    .tabs((1..=9).map(|n| {\n                        TabItem::new(format!(\"space-{n}\"), format!(\"Workspace {n}\"))\n                            .icon(Icon::Widget)\n                    }))\n                    .selected(\"space-5\")\n                    .scrolling()\n                    .on_select(|_, _, _| {}),\n            ),\n        )\n        .into_any_element()\n}\n\n/// The overflow menu the document-tab scene hangs off the strip.\n///\n/// The strip does not own it: a menu is an entity with an open state that\n/// outlives a frame, so the caller builds it and the strip fills it.\npub(super) struct SceneDocumentTabs {\n    overflow: Entity<Menu>,\n}\n\nimpl Global for SceneDocumentTabs {}\n\npub(super) 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}\n\npub(super) struct SceneAnchorList {\n    overflow: Entity<Menu>,\n}\n\nimpl Global for SceneAnchorList {}\n\npub(super) fn anchor_list(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneAnchorList>() {\n        let label = cx.strings().text(StringKey::AnchorMoreSections);\n        let overflow = cx.new(|cx| Menu::new(\"scene.anchor-list.menu\", window, cx).trigger(label));\n        cx.set_global(SceneAnchorList { overflow });\n    }\n    let theme = cx.theme().clone();\n    let overflow = cx.global::<SceneAnchorList>().overflow.clone();\n    stack(&theme)\n        .w(px(700.0))\n        .child(caption(\n            &theme,\n            \"section intents only; the declared overflow moves anchors into a menu\",\n        ))\n        .child(\n            AnchorList::new(\"scene.anchor-list\")\n                .anchors([\n                    Anchor::new(\"summary\", \"Summary\"),\n                    Anchor::new(\"inputs\", \"Inputs\"),\n                    Anchor::new(\"constraints\", \"Constraints\"),\n                    Anchor::new(\"verification\", \"Verification\"),\n                    Anchor::new(\"history\", \"History\").disabled(true),\n                ])\n                .active(\"inputs\")\n                .overflow_after(3)\n                .overflow_menu(overflow)\n                .on_navigate(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Requests go out over the system proxy.\",\n                        )),\n                )\n                .section(\n                    AccordionSection::new(\"storage\", \"Storage\")\n                        .description(\"Where verified results are kept\")\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Nothing is written outside the workspace.\",\n                        )),\n                )\n                .section(\n                    AccordionSection::new(\"policy\", \"Managed by policy\")\n                        .description(\"This machine cannot change these\")\n                        .disabled(true)\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Set by the administrator.\",\n                        )),\n                ),\n        )\n        // The open section is the last one, which is the case where the body\n        // meets the card's rounded corners.\n        .child(\n            Accordion::new(\"scene.accordion.release\")\n                .expanded_ids(&[\"publish\"])\n                .on_toggle(|_, _, _, _| {})\n                .section(\n                    AccordionSection::new(\"build\", \"Build\")\n                        .description(\"What the last run produced\"),\n                )\n                .section(\n                    AccordionSection::new(\"publish\", \"Publish\")\n                        .description(\"Where the signed bundle goes\")\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"The bundle is published to the workspace channel.\",\n                        )),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) 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}\n\npub(super) fn navigation_sections() -> Vec<SidebarSection> {\n    vec![\n        SidebarSection::new(\"work\").title(\"Work\").items([\n            SidebarItem::new(\"runs\", \"Runs\")\n                .icon(Icon::List)\n                .badge(\"12\")\n                .children([\n                    SidebarItem::new(\"runs.active\", \"Active\").icon(Icon::Refresh),\n                    SidebarItem::new(\"runs.archived\", \"Archived\").icon(Icon::Archive),\n                ]),\n            SidebarItem::new(\"files\", \"Files\").icon(Icon::Folder),\n        ]),\n        SidebarSection::new(\"admin\").title(\"Administration\").items([\n            SidebarItem::new(\"settings\", \"Settings\").icon(Icon::Settings),\n            SidebarItem::new(\"policy\", \"Managed by policy\")\n                .icon(Icon::Key)\n                .disabled(true),\n        ]),\n    ]\n}\n\n#[derive(Default)]\nstruct SceneSidebar {\n    active: Option<SharedString>,\n    collapsed: bool,\n}\n\nimpl Global for SceneSidebar {}\n\npub(super) fn sidebar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSidebar>() {\n        cx.set_global(SceneSidebar::default());\n    }\n    let theme = cx.theme().clone();\n    let active = cx\n        .global::<SceneSidebar>()\n        .active\n        .clone()\n        .unwrap_or_else(|| \"runs.active\".into());\n    let collapsed = cx.global::<SceneSidebar>().collapsed;\n    let rail = |ident: &'static str, collapsed: bool| {\n        Sidebar::new(ident)\n            .sections(navigation_sections())\n            .active(active.clone())\n            .collapsed(collapsed)\n            .footer(\n                crate::foundation::text(\n                    &theme,\n                    TypeScale::Caption,\n                    if collapsed {\n                        SharedString::new_static(\"v0\")\n                    } else {\n                        SharedString::new_static(\"Fixture workspace\")\n                    },\n                )\n                .text_tone(&theme, TextTone::Faint),\n            )\n            .on_select(|id, window, cx| {\n                cx.global_mut::<SceneSidebar>().active = Some(id);\n                window.refresh();\n            })\n    };\n\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"Fixture navigation — select a destination, toggle a branch, or collapse the rail\",\n        ))\n        .child(\n            div()\n                .flex()\n                .flex_row()\n                .h(px(400.0))\n                .gap(px(theme.space(Space::Lg)))\n                .child(\n                    rail(\"scene.sidebar.expanded\", collapsed)\n                        .width(260.0)\n                        .header(caption(\n                            &theme,\n                            if collapsed { \"W\" } else { \"Fixture workspace\" },\n                        ))\n                        .on_collapse(|collapsed, window, cx| {\n                            cx.global_mut::<SceneSidebar>().collapsed = collapsed;\n                            window.refresh();\n                        }),\n                )\n                .child(rail(\"scene.sidebar.collapsed\", true)),\n        )\n        .child(caption(\n            &theme,\n            \"Current destination is caller-owned; arrow keys move focus without navigating\",\n        ))\n        .into_any_element()\n}\n\npub(super) fn sidebar_overflow(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Fixture stress states — fixed slots, scrolling, long labels, and a closed current branch\"))\n        .child(div().flex().gap(px(theme.space(Space::Lg))).h(px(320.0))\n            .child(div().w(px(300.0)).h_full().child(Sidebar::new(\"scene.sidebar-overflow.scroll\")\n                .fill_width()\n                .header(caption(&theme, \"Fixed header\"))\n                .footer(caption(&theme, \"Fixed footer\"))\n                .section(SidebarSection::new(\"destinations\").title(\"Destinations\").items(\n                    (0..24).map(|index| SidebarItem::new(format!(\"destination-{index}\"),\n                        if index == 1 { \"A long destination label that needs an ellipsis\".to_owned() }\n                        else { format!(\"Fixture destination {}\", index + 1) }).disabled(index == 2))\n                ))\n                .active(\"destination-1\")\n                .on_select(|_, _, _| {})))\n            .child(Sidebar::new(\"scene.sidebar-overflow.closed\")\n                .sections(navigation_sections()).expanded_ids(&[])\n                .active(\"runs.active\")\n                .header(caption(&theme, \"Host refuses branch expansion\"))\n                .footer(caption(&theme, \"Current: Active\"))\n                .on_select(|_, _, _| {}).on_toggle(|_, _, _, _| {})))\n        .into_any_element()\n}\n\n/// The page-size control of the pagination scene, kept across frames.\npub(super) struct ScenePagination {\n    page_size: Entity<Select>,\n}\n\nimpl Global for ScenePagination {}\n\npub(super) 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                .name(\"Rows per page\")\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(caption(\n            &theme,\n            \"a known total, with the page size the host offered\",\n        ))\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(caption(\n            &theme,\n            \"an unknown total: no numbers, no last page, and no count invented\",\n        ))\n        .child(\n            Pagination::new(\"scene.pagination.unknown\")\n                .page(3)\n                .unknown_total(true)\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    SharedString::new_static(\"The body of the current step belongs to the caller.\"),\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}\n\npub(super) fn undo_history(_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            \"the caller owns every revision and whether it can be restored\",\n        ))\n        .child(\n            UndoHistory::new(\"scene.undo-history\", \"Document undo history\")\n                .entries([\n                    HistoryEntry::new(\"opened\", \"Opened the fixture\")\n                        .description(\"The initial verified document\")\n                        .source(\"Fixture host\")\n                        .time(\"10:14\"),\n                    HistoryEntry::new(\"renamed\", \"Renamed the title\")\n                        .source(\"Alex\")\n                        .time(\"10:16\"),\n                    HistoryEntry::new(\"imported\", \"Imported archived blocks\")\n                        .description(\"The archive is no longer available\")\n                        .source(\"Archive\")\n                        .time(\"10:18\")\n                        .unavailable(\"This revision cannot be restored without the archive.\"),\n                    HistoryEntry::new(\"current\", \"Reordered the summary\")\n                        .description(\"Current document\")\n                        .source(\"Alex\")\n                        .time(\"10:21\"),\n                    HistoryEntry::new(\"draft\", \"Drafted a new conclusion\")\n                        .source(\"Fixture host\")\n                        .time(\"10:23\"),\n                ])\n                .current(\"current\")\n                .on_jump(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"Requests go out over the system proxy.\",\n                ))\n                .on_toggle(|_, _, _| {}),\n        )\n        .child(\n            Collapsible::new(\"scene.collapsible.shut\", \"Diagnostics\")\n                .description(\"Nothing is collected until this is opened\")\n                .body(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"This body is absent from the tree while it is shut.\",\n                ))\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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"Set by the administrator.\",\n                )),\n        )\n        .into_any_element()\n}\n\n//! Surfaces that appear above the page and take a decision.\n\nuse super::support::*;\n\npub(super) fn kbd(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // A keystroke is only ever read beside the thing it performs, so the\n    // exhibit shows it where it is used: at the end of a menu row, at the end\n    // of a sentence, and in the run of special keys whose glyphs are the part\n    // that goes wrong.\n    let named = |label: &'static str, keystroke: &'static str, id: &'static str| {\n        div()\n            .row()\n            .w_full()\n            .items_center()\n            .justify_between()\n            .gap_token(&theme, Space::Md)\n            .py_token(&theme, Space::Xs)\n            .child(crate::foundation::text(&theme, TypeScale::Body, label))\n            .child(Kbd::new(keystroke).id(id))\n    };\n\n    stack(&theme)\n        .w(px(420.0))\n        .child(caption(&theme, \"the shortcut sits with the thing it does\"))\n        .child(\n            div()\n                .column()\n                .w_full()\n                .card_surface(&theme, CardVariant::Elevated)\n                .px_token(&theme, Space::Md)\n                .py_token(&theme, Space::Sm)\n                .child(named(\n                    \"Open the command palette\",\n                    \"cmd-shift-p\",\n                    \"scene.kbd.palette\",\n                ))\n                .child(div().w_full().h(px(theme.space(Space::Sm))))\n                .child(named(\"Copy the selection\", \"ctrl-c\", \"scene.kbd.copy\"))\n                .child(div().w_full().h(px(theme.space(Space::Sm))))\n                .child(named(\"Rename in place\", \"cmd-alt-r\", \"scene.kbd.rename\")),\n        )\n        .child(caption(\n            &theme,\n            \"the keys that need the bundled symbol face\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(Kbd::new(\"enter\").id(\"scene.kbd.confirm\"))\n                .child(Kbd::new(\"escape\").id(\"scene.kbd.dismiss\"))\n                .child(Kbd::new(\"backspace\").id(\"scene.kbd.erase\"))\n                .child(Kbd::new(\"delete\").id(\"scene.kbd.delete\"))\n                .child(Kbd::new(\"tab\").id(\"scene.kbd.advance\"))\n                .child(Kbd::new(\"space\").id(\"scene.kbd.space\"))\n                .child(Kbd::new(\"up\").id(\"scene.kbd.up\"))\n                .child(Kbd::new(\"down\").id(\"scene.kbd.down\")),\n        )\n        .child(\n            div()\n                .row()\n                .items_center()\n                .gap_token(&theme, Space::Xs)\n                .child(crate::foundation::text(&theme, TypeScale::Body, \"Press\"))\n                .child(Kbd::new(\"cmd-enter\").id(\"scene.kbd.inline\"))\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"to send the message.\",\n                ))\n                .text_color(theme.colors.text_muted),\n        )\n        .into_any_element()\n}\n\n/// A page for a modal layer to sit over.\n///\n/// A scrim drawn over an empty canvas is indistinguishable from a fill: the\n/// only thing that shows it is translucent is what stays legible underneath\n/// it. So every scene in this file that raises a modal layer puts a page worth\n/// obscuring behind it rather than one line of text.\nfn page_behind(theme: &Theme, title: &'static str) -> gpui::Div {\n    let card = |heading: &'static str, lines: usize| {\n        div()\n            .flex_1()\n            .min_w_0()\n            .card_surface(theme, CardVariant::Elevated)\n            .overflow_hidden()\n            .child(filler(theme, heading, lines))\n    };\n    div()\n        .column()\n        .w_full()\n        .gap(px(theme.space(Space::Md)))\n        .child(crate::foundation::text(theme, TypeScale::Subtitle, title))\n        .child(\n            div()\n                .row()\n                .w_full()\n                .gap(px(theme.space(Space::Md)))\n                .child(card(\"Runs\", 5))\n                .child(card(\"Details\", 5)),\n        )\n}\n\npub(super) 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(page_behind(&theme, \"Workspace settings\"))\n        .child(\n            Overlay::modal(\"scene.overlay.dialog\")\n                .placement(Placement::Center)\n                .child(\n                    crate::overlay::surface(\n                        \"scene.overlay.surface\",\n                        &theme,\n                        crate::overlay::OverlaySurface::MODAL,\n                    )\n                    .w(px(320.0))\n                    .p(px(theme.spacing.lg))\n                    .gap(px(theme.spacing.sm))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Subtitle,\n                        \"Delete this workspace?\",\n                    ))\n                    .child(\n                        crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Its runs, filters and saved views are removed for everyone. This \\\n                                 cannot be undone.\",\n                        )\n                        .text_tone(&theme, TextTone::Muted),\n                    )\n                    .child(\n                        div()\n                            .row()\n                            .justify_end()\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}\n\n/// The dialog the scene shows, kept across frames.\n///\n/// A dialog owns whether it is open and which element had the keyboard before\n/// it opened, so rebuilding it every frame would reopen it every frame.\npub(super) struct SceneDialog {\n    replace: Entity<Dialog>,\n}\n\nimpl Global for SceneDialog {}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Content behind the dialog\",\n        ))\n        .child(replace)\n        .into_any_element()\n}\n\npub(super) 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                            .accessible_description(\"Writes the theme to a file on disk\")\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}\n\n/// The menu family the scenes show, kept across frames.\n///\n/// Each of these owns whether it is open, where the keyboard is, and which\n/// submenu stands expanded, so rebuilding them every frame would reopen them\n/// every frame. Building them once is also what makes the capture static.\npub(super) struct SceneMenus {\n    menu: Entity<Menu>,\n    context: Entity<ContextMenu>,\n    palette: Entity<CommandPalette>,\n    popover: Entity<Popover>,\n}\n\nimpl Global for SceneMenus {}\n\npub(super) fn menu_items() -> Vec<MenuItem> {\n    vec![\n        MenuItem::section(\"group\", \"This run\"),\n        MenuItem::command(\"copy\", \"Copy run id\")\n            .icon(Icon::Copy)\n            .shortcut(\"cmd-c\"),\n        MenuItem::check(\"follow\", \"Follow output\", true),\n        MenuItem::separator(\"rule\"),\n        MenuItem::command(\"publish\", \"Publish\").disabled(true),\n        MenuItem::submenu(\n            \"share\",\n            \"Share\",\n            [\n                MenuItem::command(\"share.link\", \"Copy link\").shortcut(\"cmd-shift-c\"),\n                MenuItem::command(\"share.export\", \"Export as file\"),\n            ],\n        ),\n        MenuItem::separator(\"destroy\"),\n        MenuItem::command(\"delete\", \"Delete this run\")\n            .icon(Icon::Trash)\n            .destructive(true),\n    ]\n}\n\npub(super) fn scene_commands() -> Vec<Command> {\n    vec![\n        Command::new(\"workspace.open\", \"Open workspace\")\n            .section(\"Workspace\")\n            .shortcut(\"cmd-o\"),\n        Command::new(\"workspace.close\", \"Close workspace\").section(\"Workspace\"),\n        Command::new(\"workspace.publish\", \"Publish workspace\")\n            .section(\"Workspace\")\n            .unavailable(\"Approval is required\"),\n        Command::new(\"editor.wrap\", \"Toggle word wrap\").section(\"Editor\"),\n    ]\n}\n\npub(super) fn ensure_menus(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneMenus>() {\n        return;\n    }\n    let menu = cx.new(|cx| {\n        Menu::new(\"scene.menu.run\", window, cx)\n            .trigger(\"Run actions\")\n            .items(menu_items())\n    });\n    menu.update(cx, |menu, cx| {\n        menu.open_submenu(\"share\", window, cx);\n    });\n\n    // The catalog reviews the drawn surface. Left on `Native`, `open_at` would\n    // hand this list to the operating system on macOS and Windows: a modal\n    // popup no capture can hold, opened under every scene that shares these\n    // fixtures, and on Windows it takes the keyboard from the `menu` scene's\n    // exhibit while the native UIA check reads it.\n    let context = cx.new(|cx| {\n        ContextMenu::new(\"scene.context.run\", window, cx)\n            .name(\"Run actions\")\n            .target(\"run-a04\")\n            .presentation(ContextMenuPresentation::InWindow)\n            .menu(menu_items())\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .w(px(320.0))\n                    .p(px(theme.spacing.md))\n                    .surface(&theme, Surface::Panel)\n                    .radius(&theme, Radius::Card)\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Body,\n                        \"Right-click this fixture row\",\n                    ))\n                    .into_any_element()\n            })\n    });\n    context.update(cx, |context, cx| {\n        context\n            .open_at(gpui::point(px(180.0), px(150.0)), window, cx)\n            .expect(\"in-window fixture\");\n    });\n\n    let palette = cx.new(|cx| {\n        CommandPalette::new(\"scene.palette.commands\", window, cx).commands(scene_commands())\n    });\n    palette.update(cx, |palette, cx| palette.set_query(\"work\", cx));\n\n    let popover = cx.new(|cx| {\n        Popover::new(\"scene.popover.filters\", window, cx)\n            .trigger(\"Filters\")\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .column()\n                    .w(px(260.0))\n                    .gap(px(theme.spacing.sm))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Body,\n                        \"Anything can live in a popover.\",\n                    ))\n                    .child(\n                        Checkbox::new(\"scene.popover.failing\")\n                            .label(\"Failing runs only\")\n                            .on_change(|_, _, _| {}),\n                    )\n                    .into_any_element()\n            })\n    });\n    popover.update(cx, |popover, cx| popover.open(window, cx));\n\n    cx.set_global(SceneMenus {\n        menu,\n        context,\n        palette,\n        popover,\n    });\n}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The trigger owns whether the surface is open.\",\n        ))\n        .child(popover)\n        .into_any_element()\n}\n\npub(super) fn menu(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_menus(window, cx);\n    let menus = cx.global::<SceneMenus>();\n    let menu = menus.menu.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .h(px(320.0))\n        // An open surface is an overlay and takes no room in the flow, so the\n        // scene reserves the panel's review area explicitly.\n        .child(div().h(px(300.0)).child(menu))\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The right-click reports the row. Nothing is selected by it.\",\n        ))\n        .child(context)\n        .into_any_element()\n}\n\npub(super) 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}\n\n/// The notification layer the scene shows, kept across frames.\n///\n/// The stack, each timer, and each entry animation outlive a frame, so the\n/// layer is built once and the toasts are pushed once with it.\npub(super) struct SceneToasts {\n    layer: Entity<ToastLayer>,\n}\n\nimpl Global for SceneToasts {}\n\npub(super) fn toast(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneToasts>() {\n        let layer = cx.new(|cx| ToastLayer::new(window, cx).capacity(4));\n        cx.set_global(SceneToasts { layer });\n        toast_push(\n            window,\n            cx,\n            Toast::new(\"scene.toast.saved\", \"Theme exported to disk\").tone(Tone::Success),\n        );\n        toast_push(\n            window,\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            window,\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            window,\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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Content behind the notifications\",\n        ))\n        // A failure keeps its report on screen; only the success times out.\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"A danger or warning toast stays until it is dismissed.\",\n        ))\n        .child(layer)\n        .into_any_element()\n}\n\n/// The notification centre the scene shows, kept across frames.\npub(super) struct SceneNotifications {\n    centre: Entity<NotificationCenter>,\n}\n\nimpl Global for SceneNotifications {}\n\npub(super) 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}\n\n/// Glass over the page it covers, which is the only way to see that the\n/// backdrop is blurred rather than merely tinted.\npub(super) fn frost(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let card = |title: &'static str, body: &'static str| {\n        div()\n            .column()\n            .gap(px(theme.space(Space::Xs)))\n            .p(px(theme.space(Space::Md)))\n            .child(crate::foundation::text(\n                &theme,\n                TypeScale::Label,\n                SharedString::from(title),\n            ))\n            .child(caption(&theme, body))\n    };\n    // What is behind the glass is a page, not a test pattern. A block of\n    // accent stripes dropped into a panel reads as a hole cut in it, and it\n    // answers the wrong question anyway: the thing a reader has to be able to\n    // judge is whether text they can otherwise read has gone out of focus.\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(&theme, \"A floating surface on glass\"))\n        .child(\n            div()\n                .relative()\n                .h(px(200.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(filler(&theme, \"Document\", 8))\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(48.0))\n                        // Far enough left to cross the lines. Placed clear of\n                        // them the glass had nothing behind it, so the picture\n                        // could not answer the one question it is here for:\n                        // whether text a reader can otherwise read has gone\n                        // out of focus.\n                        .left(px(64.0))\n                        .w(px(240.0))\n                        .child(\n                            Frost::new(\"scene.frost.popover\")\n                                .radius(Radius::Card)\n                                .child(card(\n                                    \"Rename\",\n                                    \"The page behind stays visible, out of focus\",\n                                )),\n                        ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"The same glass, blurred further and raised above the panel\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(160.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(filler(&theme, \"Files\", 6))\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(32.0))\n                        .left(px(64.0))\n                        .w(px(280.0))\n                        .child(\n                            Frost::new(\"scene.frost.rail\")\n                                // A surface a step above the page it covers.\n                                // Tinted with the page's own colour the glass\n                                // had no surface of its own: at any alpha, a\n                                // fill the colour of what is behind it adds\n                                // nothing, and the rail's words landed\n                                // directly on the words of the file list.\n                                .surface(gpui_kit_theme::Surface::Raised)\n                                .radius(Radius::Dialog)\n                                .blur(32.0)\n                                .child(card(\n                                    \"Rail\",\n                                    \"The lines behind stay legible and out of focus\",\n                                )),\n                        ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// The optics, one at a time and then together, over a backdrop with enough\n/// structure in it that a bend is visible as a bend rather than as a smudge.\n///\n/// The presets sit side by side deliberately: `Frosted` is the control, and\n/// what separates it from `Lens` is exactly the refraction, so a reviewer\n/// looking at the pair is looking at the thing that changed.\n/// One square of the backdrop every optics plate is read against, and the two\n/// plate footprints built from it. Both are whole numbers of squares.\nconst TILE: f32 = 48.0;\nconst PLATE_WIDTH: f32 = TILE * 8.0;\nconst PLATE_HEIGHT: f32 = TILE * 3.0;\nconst JOIN_WIDTH: f32 = PLATE_WIDTH;\n\n/// A deterministic raster media fixture, not downloaded product content.\nfn glass_media() -> Arc<RenderImage> {\n    static IMAGE: OnceLock<Arc<RenderImage>> = OnceLock::new();\n    IMAGE\n        .get_or_init(|| {\n            let mut pixels = Vec::with_capacity(480 * 144 * 4);\n            for y in 0..144 {\n                for x in 0..480 {\n                    let ridge = 65 + ((x as f32 * 0.018).sin() * 30.0) as i32;\n                    let rgba = if y > ridge {\n                        [28, 91 + (x / 8) as u8, 91, 255]\n                    } else {\n                        [110 + (y / 2) as u8, 165, 220, 255]\n                    };\n                    pixels.extend_from_slice(&rgba);\n                }\n            }\n            Arc::new(\n                RenderImage::from_rgba(size(DevicePixels(480), DevicePixels(144)), pixels)\n                    .expect(\"media fixture dimensions\"),\n            )\n        })\n        .clone()\n}\n\n/// A constrained media tile owns size; its caption only names edge anchors.\npub(super) fn media_caption(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let tile = |id: &'static str, reduced: bool| {\n        let material_theme = theme.clone().with_reduce_transparency(reduced);\n        div()\n            .relative()\n            .w_full()\n            .h(px(220.0))\n            .radius(&theme, Radius::Card)\n            .overflow_hidden()\n            .child(\n                gpui::img(glass_media())\n                    .size_full()\n                    .radius(&theme, Radius::Card)\n                    .object_fit(gpui::ObjectFit::Cover),\n            )\n            .child(\n                crate::overlay::surface(\n                    id,\n                    &material_theme,\n                    crate::overlay::OverlaySurface::MEDIA_CAPTION,\n                )\n                .absolute()\n                .left_0()\n                .right_0()\n                .bottom_0()\n                .flex_row()\n                .items_center()\n                .gap_token(&theme, Space::Md)\n                .p_token(&theme, Space::Md)\n                .child(\n                    div()\n                        .flex_1()\n                        .min_w_0()\n                        .type_scale(&theme, TypeScale::Label)\n                        .child(if reduced {\n                            \"Media fixture · reduced transparency\"\n                        } else {\n                            \"Media fixture · Clear caption\"\n                        }),\n                )\n                .child(\n                    div()\n                        .type_scale(&theme, TypeScale::Caption)\n                        .child(\"3 projects\"),\n                )\n                .child(\n                    Button::new(format!(\"{id}.new\"))\n                        .label(\"New project\")\n                        .ghost()\n                        .on_click(|_, _| {}),\n                ),\n            )\n    };\n    stack(&theme)\n        .w_full()\n        .child(caption(\n            &theme,\n            \"Parent-constrained width; caption height follows its content\",\n        ))\n        .child(tile(\"scene.media-caption.clear\", false))\n        .child(tile(\"scene.media-caption.reduced\", true))\n        .into_any_element()\n}\n\npub(super) fn glass(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let label = |title: &'static str, body: &'static str| {\n        div()\n            .column()\n            .gap(px(theme.space(Space::Xs)))\n            .p(px(theme.space(Space::Md)))\n            .child(div().type_scale(&theme, TypeScale::Label).child(title))\n            .child(div().type_scale(&theme, TypeScale::Caption).child(body))\n    };\n\n    // A ruled checkerboard makes the material contract visible: Regular's\n    // rim refracts the scattered source, bending colour and luminance bands\n    // without restoring recognizable fine lines. Clear stays sharp because\n    // its blur is zero. The board is neutral, and every plate is an exact\n    // number of squares across and down: a board cut through the middle of a\n    // square at the plate edge reads as a broken pattern rather than as the\n    // ruled backdrop the optics are being measured against.\n    let checker_light = theme.colors.text_faint;\n    let checker_dark = theme.colors.canvas;\n    let checker_rule = theme.colors.divider.opacity(0.55);\n    let checkerboard =\n        |width: f32, height: f32| {\n            let columns = (width / TILE).ceil() as usize;\n            let rows = (height / TILE).ceil() as usize;\n            div()\n                .absolute()\n                .top(px(0.0))\n                .left(px(0.0))\n                .w(px(width))\n                .h(px(height))\n                .column()\n                .overflow_hidden()\n                .children((0..rows).map(|row| {\n                    div()\n                        .flex()\n                        .flex_none()\n                        .h(px(TILE))\n                        .children((0..columns).map(move |column| {\n                            div().flex_none().w(px(TILE)).h(px(TILE)).bg(\n                                if (row + column) % 2 == 0 {\n                                    checker_light\n                                } else {\n                                    checker_dark\n                                },\n                            )\n                        }))\n                }))\n                .children((0..=(width / 12.0) as usize).map(|column| {\n                    div()\n                        .absolute()\n                        .top(px(0.0))\n                        .left(px(column as f32 * 12.0))\n                        .w(px(1.0))\n                        .h(px(height))\n                        .bg(checker_rule)\n                }))\n                .children((0..=(height / 12.0) as usize).map(|row| {\n                    div()\n                        .absolute()\n                        .top(px(row as f32 * 12.0))\n                        .left(px(0.0))\n                        .w(px(width))\n                        .h(px(1.0))\n                        .bg(checker_rule)\n                }))\n        };\n\n    let plate =\n        |ident: &'static str, preset: GlassPreset, title: &'static str, body: &'static str| {\n            div()\n                .relative()\n                .h(px(PLATE_HEIGHT))\n                .w(px(PLATE_WIDTH))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    if preset == GlassPreset::Clear || ident == \"scene.glass.media\" {\n                        gpui::img(glass_media())\n                            .object_fit(gpui::ObjectFit::Cover)\n                            .w(px(PLATE_WIDTH))\n                            .h(px(PLATE_HEIGHT))\n                            .into_any_element()\n                    } else {\n                        checkerboard(PLATE_WIDTH, PLATE_HEIGHT).into_any_element()\n                    },\n                )\n                .when(ident == \"scene.glass.liquid\", |element| {\n                    element.child(div().absolute().inset_0().child(filler(\n                        &theme,\n                        \"Document text behind Regular glass\",\n                        6,\n                    )))\n                })\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(28.0))\n                        .left(px(52.0))\n                        .w(px(280.0))\n                        .child(\n                            Glass::new(ident)\n                                .preset(preset)\n                                .dimmed(preset == GlassPreset::Clear)\n                                .adaptive(true)\n                                .radius(Radius::Dialog)\n                                .child(label(title, body)),\n                        ),\n                )\n        };\n\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"Clear: dark Frosted / reduced transparency           Clear + 35% dimming / media only\",\n        ))\n        .child(\n            row(&theme)\n                .child(crate::foundation::ThemeOverlay::theme(\n                    theme.clone().with_reduce_transparency(true),\n                    plate(\n                        \"scene.glass.frosted\",\n                        GlassPreset::Clear,\n                        \"Clear: reduced transparency\",\n                        \"Dark Frosted and light content in every theme\",\n                    ),\n                ))\n                .child(plate(\n                    \"scene.glass.clear\",\n                    GlassPreset::Clear,\n                    \"Clear + dimmed\",\n                    \"A sharp media fixture, never default chrome\",\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"Regular over text and media: blur, achromatic wash, lensing and hairline\",\n        ))\n        .child(\n            row(&theme)\n                .child(plate(\n                    \"scene.glass.liquid\",\n                    GlassPreset::Liquid,\n                    \"Regular Liquid\",\n                    \"Large reading surfaces keep the window appearance\",\n                ))\n                .child(plate(\n                    \"scene.glass.media\",\n                    GlassPreset::Liquid,\n                    \"Regular on media\",\n                    \"The same material, not the Clear variant\",\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"Compact Regular controls: appearance may flip; no opaque face\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(TILE * 2.0))\n                .w(px(PLATE_WIDTH))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(div().absolute().inset_0().bg(gpui::white()))\n                .child(\n                    div()\n                        .absolute()\n                        .right_0()\n                        .top_0()\n                        .w(px(PLATE_WIDTH / 2.0))\n                        .h_full()\n                        .bg(gpui::black()),\n                )\n                .child(\n                    div()\n                        .absolute()\n                        .inset_0()\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(\n                            Glass::new(\"scene.glass.regular.one\")\n                                .preset(GlassPreset::Liquid)\n                                .surface(Surface::Raised)\n                                .radius(Radius::Pill)\n                                .adaptive(true)\n                                .child(\n                                    div()\n                                        .w(px(110.0))\n                                        .h(px(32.0))\n                                        .flex()\n                                        .items_center()\n                                        .justify_center()\n                                        .child(\"Portal\"),\n                                ),\n                        )\n                        .child(\n                            Glass::new(\"scene.glass.regular.two\")\n                                .preset(GlassPreset::Liquid)\n                                .radius(Radius::Pill)\n                                .adaptive(true)\n                                .child(\n                                    div()\n                                        .w(px(110.0))\n                                        .h(px(32.0))\n                                        .rounded(px(theme.radius(Radius::Pill)))\n                                        .bg(theme.colors.selected)\n                                        .flex()\n                                        .items_center()\n                                        .justify_center()\n                                        .child(\"Harbour\"),\n                                ),\n                        ),\n                ),\n        )\n        // The last two demonstrations sit side by side so the whole scene\n        // stays inside the window a real display can give the gallery, which\n        // is where the DirectX renderer gets looked at.\n        .child(\n            div()\n                .flex()\n                .flex_row()\n                .gap(px(theme.space(Space::Md)))\n                .child(\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(caption(&theme, \"Fused: two panes joined into one body\"))\n                        .child(\n                            div()\n                                .relative()\n                                .h(px(PLATE_HEIGHT))\n                                .w(px(JOIN_WIDTH))\n                                .surface(&theme, Surface::Panel)\n                                .radius(&theme, Radius::Card)\n                                .overflow_hidden()\n                                .child(checkerboard(JOIN_WIDTH, PLATE_HEIGHT))\n                                .child(\n                                    div().absolute().top(px(40.0)).left(px(40.0)).child(\n                                        GlassGroup::new(\"scene.glass.fused\")\n                                            .preset(GlassPreset::Liquid)\n                                            .radius(Radius::Dialog)\n                                            .gap(12.0)\n                                            .pane(\n                                                \"scene.glass.fused.left\",\n                                                label(\"Left\", \"One lobe of the body\"),\n                                            )\n                                            .pane(\n                                                \"scene.glass.fused.right\",\n                                                label(\"Right\", \"Joined across the gap\"),\n                                            ),\n                                    ),\n                                ),\n                        ),\n                )\n                .child(\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(caption(&theme, \"Large adaptive surfaces never flip\"))\n                        .child(\n                            div()\n                                .relative()\n                                .h(px(PLATE_HEIGHT))\n                                .w(px(JOIN_WIDTH))\n                                .surface(&theme, Surface::Panel)\n                                .radius(&theme, Radius::Card)\n                                .overflow_hidden()\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(0.0))\n                                        .left(px(0.0))\n                                        .w(px(JOIN_WIDTH / 2.0))\n                                        .h(px(PLATE_HEIGHT))\n                                        .bg(gpui::white()),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(0.0))\n                                        .left(px(JOIN_WIDTH / 2.0))\n                                        .w(px(JOIN_WIDTH / 2.0))\n                                        .h(px(PLATE_HEIGHT))\n                                        .bg(gpui::black()),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(28.0))\n                                        .left(px(15.0))\n                                        .w(px(160.0))\n                                        .child(\n                                            Glass::new(\"scene.glass.adaptive.bright\")\n                                                .preset(GlassPreset::Liquid)\n                                                .radius(Radius::Dialog)\n                                                .adaptive(true)\n                                                .adaptive_appearance(true)\n                                                .child(label(\n                                                    \"Bright\",\n                                                    \"The reading lands next frame\",\n                                                )),\n                                        ),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(28.0))\n                                        .left(px(JOIN_WIDTH / 2.0 + 15.0))\n                                        .w(px(160.0))\n                                        .child(\n                                            Glass::new(\"scene.glass.adaptive.dark\")\n                                                .preset(GlassPreset::Liquid)\n                                                .radius(Radius::Dialog)\n                                                .adaptive(true)\n                                                .child(label(\"Dark\", \"The same glass, other side\")),\n                                        ),\n                                ),\n                        ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Focused: one inward report edge — Regular, Clear + dimmed, Frosted, reduced\",\n        ))\n        .child(\n            row(&theme).children(\n                [\n                    (\"regular\", GlassPreset::Liquid, false, \"Regular\"),\n                    (\"clear\", GlassPreset::Clear, false, \"Clear + dimmed\"),\n                    (\"frosted\", GlassPreset::Frosted, false, \"Frosted\"),\n                    (\"reduced\", GlassPreset::Clear, true, \"Reduced\"),\n                ]\n                .into_iter()\n                .map(|(name, preset, reduced, title)| {\n                    div()\n                        .relative()\n                        .w(px(210.0))\n                        .h(px(96.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .child(\n                            gpui::img(glass_media())\n                                .size_full()\n                                .object_fit(gpui::ObjectFit::Cover),\n                        )\n                        .child(\n                            div()\n                                .absolute()\n                                .left(px(12.0))\n                                .right(px(12.0))\n                                .top(px(24.0))\n                                .child(crate::foundation::ThemeOverlay::theme(\n                                    theme.clone().with_reduce_transparency(reduced),\n                                    Glass::new(format!(\"scene.glass.focused.{name}\"))\n                                        .preset(preset)\n                                        .dimmed(preset == GlassPreset::Clear)\n                                        .focused(true)\n                                        .radius(Radius::Pill)\n                                        .child(\n                                            div()\n                                                .w_full()\n                                                .h(px(40.0))\n                                                .flex()\n                                                .items_center()\n                                                .justify_center()\n                                                .type_scale(&theme, TypeScale::Label)\n                                                .child(title),\n                                        ),\n                                )),\n                        )\n                }),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"Budget fallback: opaque cards, never holes — R keeps its focus report\",\n        ))\n        .child(div().flex().gap(px(4.0)).children(('A'..='R').map(|name| {\n            Glass::new(format!(\"scene.glass.budget.{name}\"))\n                .focused(name == 'R')\n                .child(\n                    div()\n                        .w(px(38.0))\n                        .h(px(30.0))\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .child(name.to_string()),\n                )\n        })))\n        .child(caption(\n            &theme,\n            \"Nine lobes exceed the fused budget: every pane retains an opaque face\",\n        ))\n        .child(\n            ('A'..='I').fold(GlassGroup::new(\"scene.glass.lobe-budget\"), |group, name| {\n                group.pane(\n                    format!(\"scene.glass.lobe-budget.{name}\"),\n                    div()\n                        .w(px(58.0))\n                        .h(px(30.0))\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .child(name.to_string()),\n                )\n            }),\n        )\n        .into_any_element()\n}\n\n/// Optical parameters over a deterministic ruled fixture, without a wash or\n/// decorative highlight hiding the displacement. Labels sit outside the lens.\npub(super) fn glass_optics(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let specimens = [\n        (\"identity\", \"Index 1 / unchanged\", 1., 24., 24., 0., 0.),\n        (\"water\", \"Index 1.33 / shallow bend\", 1.33, 24., 24., 0., 0.),\n        (\"glass\", \"Index 1.5 / deeper bend\", 1.5, 24., 24., 0., 0.),\n        (\n            \"thick\",\n            \"48px thickness / same index\",\n            1.5,\n            48.,\n            24.,\n            0.,\n            0.,\n        ),\n        (\"contact\", \"Source plane at base\", 1.5, 24., 0., 0., 0.),\n        (\n            \"dispersion\",\n            \"Spectral indices / no highlight\",\n            1.5,\n            24.,\n            24.,\n            0.25,\n            0.,\n        ),\n        (\n            \"reflection\",\n            \"Fresnel / same surface normal\",\n            1.5,\n            24.,\n            24.,\n            0.,\n            1.,\n        ),\n        (\n            \"scatter\",\n            \"Same optics / 8px scattering\",\n            1.5,\n            24.,\n            24.,\n            0.,\n            0.,\n        ),\n    ];\n    stack(&theme)\n        .w(px(900.))\n        .child(caption(\n            &theme,\n            \"Snell refraction — fixture grid; foreground content is not distorted\",\n        ))\n        .children(specimens.chunks(4).map(|specimens| {\n            row(&theme).children(specimens.iter().map(\n                |&(name, title, index, thickness, depth, dispersion, specular)| {\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .w(px(210.))\n                        .child(caption(&theme, title))\n                        .child(\n                            div()\n                                .relative()\n                                .w(px(210.))\n                                .h(px(180.))\n                                .overflow_hidden()\n                                .bg(theme.colors.canvas)\n                                .children((0..18).map(|line| {\n                                    div()\n                                        .absolute()\n                                        .top(px(line as f32 * 10.))\n                                        .left_0()\n                                        .w_full()\n                                        .h(px(1.))\n                                        .bg(theme.colors.text_faint)\n                                }))\n                                .children((0..21).map(|line| {\n                                    div()\n                                        .absolute()\n                                        .left(px(line as f32 * 10.))\n                                        .top_0()\n                                        .h_full()\n                                        .w(px(1.))\n                                        .bg(theme.colors.text_faint)\n                                }))\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(22.))\n                                        .left(px(25.))\n                                        .w(px(160.))\n                                        .child(\n                                            Glass::new(format!(\"scene.glass-optics.{name}\"))\n                                                .preset(GlassPreset::Lens)\n                                                .radius_px(48.)\n                                                .refraction(1.)\n                                                .thickness(thickness)\n                                                .refractive_index(index)\n                                                .backdrop_depth(depth)\n                                                .dispersion(dispersion)\n                                                .specular(specular)\n                                                .blur(if name == \"scatter\" { 8. } else { 0. })\n                                                .track_pointer(name == \"reflection\")\n                                                .pressable(true)\n                                                .child(\n                                                    div()\n                                                        .w_full()\n                                                        .h(px(136.))\n                                                        .flex()\n                                                        .items_center()\n                                                        .justify_center()\n                                                        .child(\n                                                            div()\n                                                                .px_token(&theme, Space::Sm)\n                                                                .bg(theme.colors.panel)\n                                                                .child(\"Aa 123\"),\n                                                        ),\n                                                ),\n                                        ),\n                                ),\n                        )\n                },\n            ))\n        }))\n        .child(caption(\n            &theme,\n            \"Fused Regular / zero blur — one height field; press changes thickness and its normal\",\n        ))\n        .child(\n            div()\n                .relative()\n                .w(px(864.))\n                .h(px(120.))\n                .overflow_hidden()\n                .children((0..87).map(|line| {\n                    div()\n                        .absolute()\n                        .left(px(line as f32 * 10.))\n                        .top_0()\n                        .h_full()\n                        .w(px(1.))\n                        .bg(theme.colors.text_faint)\n                }))\n                .children((0..12).map(|line| {\n                    div()\n                        .absolute()\n                        .top(px(line as f32 * 10.))\n                        .left_0()\n                        .w_full()\n                        .h(px(1.))\n                        .bg(theme.colors.text_faint)\n                }))\n                .child(\n                    div().absolute().left(px(24.)).top(px(24.)).child(\n                        GlassGroup::new(\"scene.glass-optics.fused\")\n                            .preset(GlassPreset::Liquid)\n                            .blur(0.)\n                            .thickness(48.)\n                            .refractive_index(1.5)\n                            .backdrop_depth(24.)\n                            .radius(Radius::Pill)\n                            .gap(8.)\n                            .merge(32.)\n                            .pressable(true)\n                            .pane(\n                                \"scene.glass-optics.fused.left\",\n                                div()\n                                    .w(px(380.))\n                                    .h(px(72.))\n                                    .flex()\n                                    .items_center()\n                                    .justify_center()\n                                    .child(\"Left\"),\n                            )\n                            .pane(\n                                \"scene.glass-optics.fused.right\",\n                                div()\n                                    .w(px(380.))\n                                    .h(px(72.))\n                                    .flex()\n                                    .items_center()\n                                    .justify_center()\n                                    .child(\"Right\"),\n                            ),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// Colour belongs to the optical material, including a group's bridge.\n/// Captions remain outside the specimens so tint strength is visible.\npub(super) fn glass_materials(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let specimens = [\n        (\"protected\", \"Default body protection\", true, None),\n        (\"material\", \"Caller-owned legibility\", false, None),\n        (\n            \"tint-partial\",\n            \"25% tint / visible backdrop\",\n            true,\n            Some(0.25),\n        ),\n        (\n            \"tint-solid\",\n            \"100% tint / rim above colour\",\n            true,\n            Some(1.0),\n        ),\n    ];\n    let backdrop = || {\n        div()\n            .relative()\n            .w(px(200.0))\n            .h(px(112.0))\n            .bg(gpui::rgb(0xffffff))\n            .children((0..8).map(|stripe| {\n                div()\n                    .absolute()\n                    .left(px(stripe as f32 * 25.0))\n                    .top_0()\n                    .w(px(12.0))\n                    .h_full()\n                    .bg(gpui::rgb(0x8090a0))\n            }))\n    };\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"Material policy / deterministic stripe fixture, not native reference\",\n        ))\n        .child(\n            row(&theme).children(specimens.into_iter().map(|(id, title, protect, tint)| {\n                let mut glass = Glass::new(format!(\"scene.glass-materials.{id}\"))\n                    .radius_px(24.0)\n                    .blur(2.0)\n                    .protect_text_contrast(protect);\n                if let Some(alpha) = tint {\n                    glass = glass.tint(theme.colors.accent.opacity(alpha));\n                }\n                div()\n                    .column()\n                    .gap_token(&theme, Space::Sm)\n                    .child(caption(&theme, title))\n                    .child(\n                        backdrop().child(\n                            div()\n                                .absolute()\n                                .left(px(20.0))\n                                .top(px(24.0))\n                                .child(glass.child(div().w(px(160.0)).h(px(64.0)))),\n                        ),\n                    )\n            })),\n        )\n        .child(caption(\n            &theme,\n            \"Tint across joined panes / reduced-transparency fallback\",\n        ))\n        .child(\n            row(&theme).children([false, true].into_iter().map(|reduced| {\n                let id = if reduced { \"reduced\" } else { \"joined\" };\n                let tint = theme.colors.accent.opacity(0.25);\n                let group = GlassGroup::new(format!(\"scene.glass-materials.{id}\"))\n                    .radius(Radius::Pill)\n                    .gap(8.0)\n                    .merge(32.0)\n                    .blur(2.0)\n                    .tint(tint)\n                    .pane(\n                        format!(\"scene.glass-materials.{id}.left\"),\n                        div().w(px(68.0)).h(px(56.0)),\n                    )\n                    .pane(\n                        format!(\"scene.glass-materials.{id}.right\"),\n                        div().w(px(68.0)).h(px(56.0)),\n                    );\n                backdrop().child(div().absolute().left(px(28.0)).top(px(28.0)).child(\n                    ThemeOverlay::new(move |t| t.clone().with_reduce_transparency(reduced), group),\n                ))\n            })),\n        )\n        .child(caption(\n            &theme,\n            \"Rounded foreground clips / surface shadows and joined optics stay outside\",\n        ))\n        .child(\n            row(&theme)\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(20.0)).top(px(24.0)).child(\n                            Glass::new(\"scene.glass-materials.clip-surface\")\n                                .radius_px(24.0)\n                                .child(div().w(px(160.0)).h(px(64.0)).bg(theme.colors.accent)),\n                        ),\n                    ),\n                )\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(28.0)).top(px(28.0)).child(\n                            GlassGroup::new(\"scene.glass-materials.clip-group\")\n                                .radius(Radius::Pill)\n                                .gap(8.0)\n                                .merge(32.0)\n                                .pane(\n                                    \"scene.glass-materials.clip-left\",\n                                    div().w(px(68.0)).h(px(56.0)).bg(theme.colors.accent),\n                                )\n                                .pane(\n                                    \"scene.glass-materials.clip-right\",\n                                    div().w(px(68.0)).h(px(56.0)).bg(theme.colors.accent),\n                                ),\n                        ),\n                    ),\n                )\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(20.0)).top(px(24.0)).child(\n                            crate::overlay::surface(\n                                \"scene.glass-materials.clip-frame\",\n                                &theme,\n                                crate::overlay::OverlaySurface::MODAL,\n                            )\n                            .w(px(160.0))\n                            .h(px(64.0))\n                            .children(\n                                [theme.colors.accent, theme.colors.text_faint]\n                                    .map(|color| div().w_full().h(px(32.0)).bg(color)),\n                            ),\n                        ),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// The drawer the scene shows, kept across frames and settled so the capture\n/// photographs the panel where it comes to rest rather than mid-slide.\npub(super) struct SceneDrawer {\n    filters: Entity<Drawer>,\n}\n\nimpl Global for SceneDrawer {}\n\npub(super) 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                .resizable(true)\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                    let group = |heading: &'static str, rows: gpui::Div| {\n                        div()\n                            .column()\n                            .gap(px(theme.space(Space::Sm)))\n                            .child(\n                                crate::foundation::text(&theme, TypeScale::Label, heading)\n                                    .text_tone(&theme, TextTone::Muted),\n                            )\n                            .child(rows.column().gap(px(theme.space(Space::Sm))))\n                    };\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Lg)))\n                        .child(group(\n                            \"Outcome\",\n                            div()\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.cancelled\")\n                                        .label(\"Include cancelled\")\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .child(group(\n                            \"Ownership\",\n                            div()\n                                .child(\n                                    Checkbox::new(\"scene.drawer.mine\")\n                                        .label(\"Started by me\")\n                                        .on_change(|_, _, _| {}),\n                                )\n                                .child(\n                                    Checkbox::new(\"scene.drawer.watching\")\n                                        .label(\"Repositories I watch\")\n                                        .checked(true)\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .child(group(\n                            \"Window\",\n                            div()\n                                .child(\n                                    Checkbox::new(\"scene.drawer.today\")\n                                        .label(\"Today\")\n                                        .checked(true)\n                                        .on_change(|_, _, _| {}),\n                                )\n                                .child(\n                                    Checkbox::new(\"scene.drawer.week\")\n                                        .label(\"This week\")\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .into_any_element()\n                })\n                // Two controls, sized to their labels and pinned to the\n                // reading edge: a full-width primary slab is the loudest\n                // thing on the page and says the drawer has one exit.\n                .footer(|_, cx| {\n                    let theme = cx.theme().clone();\n                    div()\n                        .row()\n                        .justify_end()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(\n                            Button::new(\"scene.drawer.cancel\")\n                                .label(\"Cancel\")\n                                .secondary()\n                                .on_click(|_, _| {}),\n                        )\n                        .child(\n                            Button::new(\"scene.drawer.apply\")\n                                .label(\"Apply\")\n                                .primary()\n                                .on_click(|_, _| {}),\n                        )\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(page_behind(&theme, \"Runs\"))\n        .child(filters)\n        .into_any_element()\n}\n\npub(super) 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(\n            row(&theme)\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Reported by\",\n                ))\n                .child(card),\n        )\n        .into_any_element()\n}\n\npub(super) 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}\n\nstruct SceneBottomSheet(Entity<crate::overlay::sheet::BottomSheet>);\nimpl Global for SceneBottomSheet {}\n\npub(super) fn bottom_sheet(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::overlay::sheet::{BottomSheet, BottomSheetEvent, SheetDetent};\n    if !cx.has_global::<SceneBottomSheet>() {\n        let sheet = cx.new(|cx| BottomSheet::new(\"scene.bottom-sheet\", window, cx));\n        sheet.update(cx, |sheet, cx| {\n            sheet.set_title(\"Choose destination · fixture\", cx);\n            sheet.set_detents(\n                vec![\n                    SheetDetent::new(\"Compact\", 290.0),\n                    SheetDetent::new(\"Half\", 430.0),\n                    SheetDetent::new(\"Full\", 640.0),\n                ],\n                \"Half\",\n                cx,\n            );\n            let scroll = gpui::ScrollHandle::new();\n            sheet.set_scroll_handle(Some(scroll.clone()), cx);\n            sheet.set_content(\n                Some(Rc::new(move |_, cx| {\n                    let _theme = cx.theme().clone();\n                    div()\n                        .id(\"scene.bottom-sheet.list\")\n                        .column()\n                        .size_full()\n                        .overflow_y_scroll()\n                        .track_scroll(&scroll)\n                        .children(\n                            [\n                                (\"home\", \"Home\"),\n                                (\"work\", \"Work\"),\n                                (\"library\", \"Library\"),\n                                (\"airport\", \"Airport\"),\n                                (\"station\", \"Station\"),\n                                (\"garden\", \"Garden\"),\n                                (\"museum\", \"Museum\"),\n                            ]\n                            .into_iter()\n                            .map(|(id, label)| {\n                                Button::new(format!(\"scene.bottom-sheet.destination.{id}\"))\n                                    .label(label)\n                                    .secondary()\n                                    .control_size(gpui_kit_theme::ControlSize::Touch)\n                                    .on_click(|_, _| {})\n                            }),\n                        )\n                        .into_any_element()\n                })),\n                cx,\n            );\n            sheet.open(window, cx);\n            sheet.settle(cx);\n        });\n        cx.subscribe(&sheet, |sheet, event, cx| {\n            if let BottomSheetEvent::DetentRequested(id) = event {\n                sheet.update(cx, |sheet, cx| {\n                    sheet.set_detent(id.clone(), cx);\n                });\n            }\n        })\n        .detach();\n        cx.set_global(SceneBottomSheet(sheet));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .h(px(640.0))\n        .child(page_behind(&theme, \"Caller-owned destinations\"))\n        .child(cx.global::<SceneBottomSheet>().0.clone())\n        .into_any_element()\n}\n\nstruct SceneActionSheet(Entity<crate::overlay::sheet::ActionSheet>);\nimpl Global for SceneActionSheet {}\n\npub(super) fn action_sheet(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::overlay::sheet::{ActionSheet, SheetAction, SheetActionState};\n    if !cx.has_global::<SceneActionSheet>() {\n        let sheet = cx.new(|cx| ActionSheet::new(\"scene.action-sheet\", window, cx));\n        sheet.update(cx, |sheet, cx| {\n            let mut remove = SheetAction::new(\"remove\", \"Remove from collection\");\n            remove.destructive = true;\n            let mut share = SheetAction::new(\"share\", \"Share unavailable\");\n            share.disabled = true;\n            sheet.set_actions(\n                vec![SheetAction::new(\"save\", \"Save a copy\"), share, remove],\n                cx,\n            );\n            sheet.set_state(\n                SheetActionState::Error(\n                    \"Fixture refusal: the last attempt failed; nothing was removed.\".into(),\n                ),\n                cx,\n            );\n            sheet.sheet().update(cx, |sheet, cx| {\n                sheet.set_title(\"Collection actions · fixture\", cx);\n            });\n            sheet.open(window, cx);\n            sheet.sheet().update(cx, |sheet, cx| sheet.settle(cx));\n        });\n        cx.set_global(SceneActionSheet(sheet));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .h(px(600.0))\n        .child(page_behind(&theme, \"Last verified collection\"))\n        .child(cx.global::<SceneActionSheet>().0.clone())\n        .into_any_element()\n}\n\n//! Validated conserved flow layouts with persistent node/link labels.\nuse super::support::*;\nuse crate::display::plot::{SankeyAlignment, SankeyOrder};\n\n#[derive(Default)]\nstruct FlowRevisions {\n    revision: usize,\n    direct: bool,\n    selected: Option<SharedString>,\n}\n\npub(super) fn sankey_motion(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<FlowRevisions>(\n        &\"scene.sankey.motion-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision % 3;\n    let flows = if revision == 0 {\n        vec![(\"ad\", \"a\", \"d\", 70.0), (\"bc\", \"b\", \"c\", 30.0)]\n    } else if revision == 1 {\n        vec![(\"ad\", \"a\", \"d\", 20.0), (\"bc\", \"b\", \"c\", 80.0)]\n    } else {\n        vec![(\"ad\", \"a\", \"d\", 45.0)]\n    };\n    let mut nodes = Vec::new();\n    let mut links = Vec::new();\n    let mut weights = Vec::new();\n    for (id, source, target, value) in flows {\n        for node in [source, target] {\n            nodes.push(SankeyNode::new(\n                node,\n                node,\n                value.to_string(),\n                Default::default(),\n            ));\n        }\n        links.push(SankeyLink::new(\n            id,\n            source,\n            target,\n            format!(\"{source} → {target}\"),\n            value.to_string(),\n            Default::default(),\n            Default::default(),\n            0.0,\n        ));\n        weights.push(value);\n    }\n    let (data, _) = SankeyData::new(nodes, links)\n        .layout_ordered(\n            &weights,\n            0.08,\n            0.1,\n            SankeyAlignment::Left,\n            SankeyOrder::Barycenter,\n        )\n        .expect(\"conserved synthetic flow\");\n    let next = state.clone();\n    let direct = state.clone();\n    let select = state.clone();\n    stack(&theme).w(px(600.0)).child(caption(&theme,\"Synthetic conserved endpoint layouts · ribbons remain attached during motion; exact current values\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.sankey.motion.advance\").label(\"Advance flows\").on_click(move |window,_|{next.borrow_mut().revision+=1;window.refresh();}))\n            .child(Button::new(\"scene.sankey.motion.direct\").label(if state.borrow().direct {\"Enable animation\"} else {\"Direct updates\"}).on_click(move |window,_|{let mut s=direct.borrow_mut();s.direct = !s.direct;window.refresh();})))\n        .child(SankeyChart::new(\"scene.sankey.motion\",\"Keyed node and ribbon updates\",PlotState::Ready(data)).animate(!state.borrow().direct).labels(true)\n            .selected(state.borrow().selected.clone()).on_current(move |id,window,_|{select.borrow_mut().selected=Some(id);window.refresh();}))\n        .into_any_element()\n}\n\npub(super) fn sankey_layout(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let graph = SankeyData::new(\n        [\n            (\"a\", \"Incoming A\", \"70\"),\n            (\"b\", \"Incoming B\", \"30\"),\n            (\"c\", \"Destination C\", \"30\"),\n            (\"d\", \"Destination D\", \"70\"),\n        ]\n        .map(|(id, label, value)| SankeyNode::new(id, label, value, Default::default())),\n        [\n            (\"ad\", \"a\", \"d\", \"A → D\", \"70\"),\n            (\"bc\", \"b\", \"c\", \"B → C\", \"30\"),\n        ]\n        .map(|(id, source, target, label, value)| {\n            SankeyLink::new(\n                id,\n                source,\n                target,\n                label,\n                value,\n                Default::default(),\n                Default::default(),\n                0.0,\n            )\n        }),\n    );\n    stack(&theme)\n        .w(px(860.0))\n        .child(caption(\n            &theme,\n            \"Synthetic conserved flows · same 70:30 scale · deterministic crossing reduction\",\n        ))\n        .child(\n            div().row().gap_token(&theme, Space::Lg).children(\n                [\n                    (SankeyOrder::Input, \"input\", \"Input order\"),\n                    (SankeyOrder::Barycenter, \"ordered\", \"Barycenter order\"),\n                ]\n                .map(|(order, id, label)| {\n                    let (data, _) = graph\n                        .clone()\n                        .layout_ordered(&[70.0, 30.0], 0.08, 0.1, SankeyAlignment::Left, order)\n                        .expect(\"valid flows\");\n                    div().w(px(380.0)).child(\n                        SankeyChart::new(\n                            Ident::new(\"scene.sankey\").child(id),\n                            label,\n                            PlotState::Ready(data),\n                        )\n                        .labels(true)\n                        .on_current(|_, _, _| {}),\n                    )\n                }),\n            ),\n        )\n        .into_any_element()\n}\n\npub(super) fn raw_candlestick(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::display::chart::{\n        cartesian::CartesianChart,\n        data::{ChartScale, ChartValue, RawPoint, RawSeries, SeriesMark, ValueAxis},\n        scale::{NumericScale, ScaleKind},\n    };\n    use crate::display::plot::RawOhlc;\n    let theme = cx.theme().clone();\n    let day = 86_400_000.0;\n    let x = ChartScale::Numeric(\n        NumericScale::new(ScaleKind::Time, [0.0, 4.0 * day]).expect(\"time domain\"),\n    );\n    let candles = RawOhlc::series(\n        \"ohlc\",\n        \"price\",\n        [\n            RawOhlc::new(\n                \"day-a\",\n                day,\n                [30.0, 60.0, 20.0, 50.0],\n                \"Day A\",\n                \"O30 H60 L20 C50\",\n            ),\n            RawOhlc::new(\n                \"day-b\",\n                day * 2.0,\n                [65.0, 75.0, 35.0, 40.0],\n                \"Day B\",\n                \"O65 H75 L35 C40\",\n            ),\n            RawOhlc::new(\n                \"day-c\",\n                day * 3.0,\n                [45.0, 55.0, 30.0, 45.0],\n                \"Day C · doji\",\n                \"O45 H55 L30 C45\",\n            ),\n        ],\n        theme.colors.success,\n        theme.colors.danger,\n    )\n    .expect(\"validated OHLC\");\n    let volume = RawSeries::new(\"volume\", \"volume\", SeriesMark::Bar)\n        .tint(theme.colors.accent.opacity(0.22))\n        .points(\n            [\n                (\"day-a\", day, 120.0),\n                (\"day-b\", 2.0 * day, 260.0),\n                (\"day-c\", 3.0 * day, 80.0),\n            ]\n            .map(|(id, x, value)| RawPoint::new(id, ChartValue::Number(x), Some(value))),\n        );\n    let overlay = RawSeries::new(\"reference\", \"price\", SeriesMark::Line)\n        .tint(theme.colors.warning)\n        .points(\n            [\n                (\"day-a\", day, 42.0),\n                (\"day-b\", 2.0 * day, 48.0),\n                (\"day-c\", 3.0 * day, 46.0),\n            ]\n            .map(|(id, x, value)| RawPoint::new(id, ChartValue::Number(x), Some(value))),\n        );\n    stack(&theme).w(px(900.0)).child(caption(&theme, \"Synthetic OHLC · shared UTC-duration x scale · independent volume axis · caller overlay\"))\n        .child(CartesianChart::new(\"scene.raw-ohlc\", \"OHLC with volume and overlay\", x, [\n            ValueAxis { id: \"price\".into(), label: \"Price\".into(), scale: NumericScale::new(ScaleKind::Linear, [0.0, 80.0]).expect(\"price domain\") },\n            ValueAxis { id: \"volume\".into(), label: \"Volume\".into(), scale: NumericScale::new(ScaleKind::Linear, [0.0, 300.0]).expect(\"volume domain\") },\n        ]).series([volume, candles, overlay]).format_ticks(move |axis, value| if axis == \"x\" { format!(\"D{:.0}\", value / day).into() } else { value.to_string().into() }).selected(Some(ChartSelection::new(\"ohlc\", \"day-b\"))).on_event(|_, _, _| {}))\n        .into_any_element()\n}\n\n//! Raw-value specialized visualization exhibits, using original synthetic data.\n\nuse super::support::*;\nuse crate::display::specialized::{\n    HierarchyNode, SpecializedChart, SpecializedData, WeightedValue,\n};\n\n#[derive(Default)]\nstruct Exploration {\n    revision: usize,\n    focus: Option<SharedString>,\n    selected: Option<SharedString>,\n    refuse: bool,\n}\n\npub(super) fn specialized_exploration(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<Exploration>(\n        &\"scene.specialized.explore-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision;\n    let selected = state.borrow().selected.clone();\n    let focus = state\n        .borrow()\n        .focus\n        .clone()\n        .unwrap_or_else(|| \"total\".into());\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All samples\",\n        vec![\n            HierarchyNode::branch(\n                \"group\",\n                \"Processing\",\n                vec![\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"parse\",\n                        \"Parsing\",\n                        if revision.is_multiple_of(2) {\n                            12.0\n                        } else {\n                            47.0\n                        },\n                    )),\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"execute\",\n                        \"Execution\",\n                        if revision.is_multiple_of(2) {\n                            68.0\n                        } else {\n                            13.0\n                        },\n                    )),\n                ],\n            ),\n            HierarchyNode::leaf(WeightedValue::new(\"deliver\", \"Delivery\", 20.0)),\n        ],\n    );\n    let next = state.clone();\n    let refusal = state.clone();\n    let charts = [\n        (\n            \"tree\",\n            \"Area · drill/back\",\n            SpecializedData::treemap_at(&root, &focus),\n        ),\n        (\n            \"sun\",\n            \"Angle · drill/back\",\n            SpecializedData::sunburst_at(&root, &focus),\n        ),\n        (\n            \"funnel\",\n            \"Width · enter/update/exit\",\n            SpecializedData::funnel(match revision % 3 {\n                0 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 120.0),\n                    WeightedValue::new(\"finish\", \"Finished\", 24.0),\n                ],\n                1 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 75.0),\n                    WeightedValue::new(\"new\", \"New sample\", 38.0),\n                ],\n                _ => vec![],\n            }),\n        ),\n    ];\n    stack(&theme).w(px(860.0))\n        .child(caption(&theme,\"Synthetic live fixtures · advance during motion to interrupt; empty exit shapes are not selectable\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.specialized.advance\").label(\"Advance samples\").on_click(move |window,_| { next.borrow_mut().revision+=1; window.refresh(); }))\n            .child(Button::new(\"scene.specialized.refuse\").label(if state.borrow().refuse { \"Accept proposals\" } else { \"Refuse proposals\" }).on_click(move |window,_| { let mut s=refusal.borrow_mut(); s.refuse = !s.refuse; window.refresh(); })))\n        .child(div().row().gap_token(&theme,Space::Lg).children(charts.into_iter().map(|(id,label,data)| {\n            let select = state.clone();\n            let navigate = state.clone();\n            div().w(px(260.0)).child(SpecializedChart::new(Ident::new(\"scene.specialized.live\").child(id),label,PlotState::Ready(data.expect(\"valid exploration fixture\")))\n                .motion(true).labels(true).selected(selected.clone())\n                .on_current(move |id,window,_| { let mut s=select.borrow_mut(); if !s.refuse { s.selected=Some(id); } window.refresh(); })\n                .on_navigate(move |id,window,_| { let mut s=navigate.borrow_mut(); if !s.refuse { s.focus=Some(id); } window.refresh(); }))\n        }))).into_any_element()\n}\n\npub(super) fn specialized(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let leaf = |id, label, value| HierarchyNode::leaf(WeightedValue::new(id, label, value));\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All work\",\n        vec![\n            leaf(\"build\", \"Build\", 60.0),\n            HierarchyNode::branch(\n                \"verify\",\n                \"Verification\",\n                vec![leaf(\"tests\", \"Tests\", 30.0), leaf(\"lint\", \"Lint\", 10.0)],\n            ),\n        ],\n    );\n    let fixtures = [\n        (\n            \"treemap\",\n            \"Treemap · area = work\",\n            SpecializedData::treemap(&root),\n        ),\n        (\n            \"sunburst\",\n            \"Sunburst · angle = work\",\n            SpecializedData::sunburst(&root),\n        ),\n        (\n            \"funnel\",\n            \"Funnel · width = count\",\n            SpecializedData::funnel(vec![\n                WeightedValue::new(\"seen\", \"Seen\", 120.0),\n                WeightedValue::new(\"started\", \"Started\", 75.0),\n                WeightedValue::new(\"done\", \"Completed\", 24.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(940.0))\n        .child(caption(\n            &theme,\n            \"Synthetic hierarchy fixtures · select marks with arrow keys or value keys\",\n        ))\n        .child(\n            div()\n                .row()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(280.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid hierarchy\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .child(\n            div().w(px(220.0)).child(SpecializedChart::new(\n                \"scene.specialized.zero\",\n                \"Zero is measured, not missing\",\n                PlotState::Stale {\n                    data: SpecializedData::funnel(vec![WeightedValue::new(\n                        \"zero\",\n                        \"Measured zero\",\n                        0.0,\n                    )])\n                    .expect(\"zero\"),\n                    reason: \"Refresh refused; verified zero retained\".into(),\n                },\n            )),\n        )\n        .into_any_element()\n}\n\npub(super) fn specialized_distribution(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let fixtures = [\n        (\n            \"histogram\",\n            \"Histogram · count per bin\",\n            SpecializedData::histogram(&[-2.0, -1.0, 0.0, 0.0, 1.0, 3.0], &[-2.0, 0.0, 1.0, 3.0]),\n        ),\n        (\n            \"box\",\n            \"Box · R-7 / Tukey · domain 0–110\",\n            SpecializedData::box_plot(\n                \"latency\",\n                \"Latency\",\n                &[1.0, 2.0, 4.0, 7.0, 8.0, 100.0],\n                [0.0, 110.0],\n            ),\n        ),\n        (\n            \"range\",\n            \"Range · domain −10–30\",\n            SpecializedData::range(\"interval\", \"Expected interval\", -4.0, 18.0, [-10.0, 30.0]),\n        ),\n        (\n            \"waterfall\",\n            \"Waterfall · signed changes\",\n            SpecializedData::waterfall(vec![\n                WeightedValue::new(\"open\", \"Opening\", 60.0),\n                WeightedValue::new(\"cost\", \"Cost\", -90.0),\n                WeightedValue::new(\"credit\", \"Credit\", 10.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(1000.0))\n        .child(caption(\n            &theme,\n            \"Synthetic distribution fixtures · explicit bin edges and R-7 / Tukey statistics\",\n        ))\n        .child(\n            div()\n                .row()\n                .flex_wrap()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(440.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid synthetic fixture\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .into_any_element()\n}\n\n//! A schema, rendered as data or as a form.\n\nuse super::support::*;\n\n/// A document with the three facts a viewer usually confuses: a key holding\n/// `null`, a key holding an empty object, and a key that is simply not here.\npub(super) fn scene_document() -> JsonValue {\n    JsonValue::object([\n        (\"id\", JsonValue::string(\"run-4812\")),\n        (\"attempts\", JsonValue::number(\"3\")),\n        (\"streaming\", JsonValue::Bool(true)),\n        // Nothing has been recorded here yet, which is not the same as the\n        // key being missing: `resumed_from` is missing, and says nothing.\n        (\"cursor\", JsonValue::Null),\n        (\"labels\", JsonValue::object(Vec::<(&str, JsonValue)>::new())),\n        (\n            \"credentials\",\n            JsonValue::object([(\"token\", JsonValue::redacted(\"51 characters\"))]),\n        ),\n        (\n            \"request\",\n            JsonValue::object([\n                (\"method\", JsonValue::string(\"POST\")),\n                (\n                    \"headers\",\n                    JsonValue::object([\n                        (\"content-type\", JsonValue::string(\"application/json\")),\n                        (\"authorization\", JsonValue::redacted(\"a value\")),\n                    ]),\n                ),\n            ]),\n        ),\n        (\n            \"steps\",\n            JsonValue::array([\n                JsonValue::string(\"plan\"),\n                JsonValue::string(\"apply\"),\n                JsonValue::object([(\"retries\", JsonValue::number(\"0\"))]),\n            ]),\n        ),\n    ])\n}\n\npub(super) 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}\n\n/// The form kept across frames.\n///\n/// Its fields own carets, open menus and a selection, so rebuilding it every\n/// frame would throw away whatever had been typed into it.\npub(super) struct SceneSchemaForm {\n    form: Entity<SchemaForm>,\n}\n\nimpl Global for SceneSchemaForm {}\n\npub(super) fn scene_schema() -> Schema {\n    Schema::new()\n        .field(\n            SchemaField::new(\n                \"path\",\n                SchemaKind::Text {\n                    placeholder: Some(\"relative to the workspace\".into()),\n                    secret: false,\n                },\n            )\n            .label(\"File\")\n            .description(\"Which file the call reads\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\n                \"max_bytes\",\n                SchemaKind::Integer(NumberBounds::new().min(1.0).max(65_536.0).step(1024.0)),\n            )\n            .label(\"Maximum bytes\"),\n        )\n        .field(\n            SchemaField::new(\"follow_symlinks\", SchemaKind::Boolean).label(\"Follow symbolic links\"),\n        )\n        .field(\n            SchemaField::new(\n                \"encoding\",\n                SchemaKind::Enum(vec![\n                    SchemaChoice::new(\"utf-8\", \"UTF-8\"),\n                    SchemaChoice::new(\"latin-1\", \"Latin-1\"),\n                ]),\n            )\n            .label(\"Encoding\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\"attachments\", SchemaKind::Files { max: Some(2) })\n                .label(\"Attachments\")\n                .description(\"Paths are acquired and accepted by the host\"),\n        )\n        .field(\n            SchemaField::new(\n                \"headers\",\n                SchemaKind::List {\n                    item: Box::new(SchemaField::new(\n                        \"header\",\n                        SchemaKind::Object(vec![\n                            SchemaField::new(\n                                \"name\",\n                                SchemaKind::Text {\n                                    placeholder: Some(\"Header name\".into()),\n                                    secret: false,\n                                },\n                            )\n                            .label(\"Name\")\n                            .required(true),\n                            SchemaField::new(\"enabled\", SchemaKind::Boolean).label(\"Enabled\"),\n                        ]),\n                    )),\n                    max: Some(3),\n                },\n            )\n            .label(\"Headers\"),\n        )\n        .field(\n            SchemaField::new(\n                \"limits\",\n                SchemaKind::Object(vec![\n                    SchemaField::new(\"timeout_ms\", SchemaKind::Integer(NumberBounds::new()))\n                        .label(\"Timeout in milliseconds\"),\n                ]),\n            )\n            .label(\"Limits\"),\n        )\n        .field(\n            SchemaField::new(\n                \"matcher\",\n                SchemaKind::Unrenderable(\n                    \"This argument is one of three shapes at once, and no single control \\\n                     stands for that.\"\n                        .into(),\n                ),\n            )\n            .label(\"Matcher\")\n            .required(true),\n        )\n}\n\npub(super) fn schema_form(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSchemaForm>() {\n        set_schema_file_policy(DefaultSchemaFilePolicy, cx);\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            let _ = form.set_field_validation(\"encoding\", ValidationState::Validating, cx);\n            form.set_files(\"attachments\", vec![\"/workspace/brief.md\".into()], cx)\n                .expect(\"the scene's permissive file policy accepts its fixture\");\n            form.add_list_item(\"headers\", window, 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}\n\n//! What more than one family of scenes needs.\n//!\n//! Everything here is used by scenes in at least two families. A fixture\n//! that only one family builds lives in that family, next to the scenes\n//! that read it, so that moving a component moves its fixture with it.\n\npub(super) use gpui::{\n    AnyElement, App, Corners, DevicePixels, Entity, Focusable, Global, IntoElement, Pixels,\n    RenderImage, SharedString, SpriteBlendMode, SpriteColorMode, SpriteInstance, SpriteTransform,\n    Window, bounds, canvas, conic_gradient_stops, div, linear_color_stop, point, prelude::*, px,\n    radial_gradient_stops, radians, size,\n};\npub(super) use gpui_kit_assets::Icon;\npub(super) use gpui_kit_semantics::{NodeSpec, Role, Semantic};\npub(super) use gpui_kit_theme::{Radius, Space, Surface, SyntaxColor, TextTone, Theme, TypeScale};\npub(super) use std::rc::Rc;\npub(super) use std::sync::{Arc, OnceLock};\npub(super) use std::time::Duration;\n\npub(super) use crate::controls::combobox::Combobox;\npub(super) use crate::controls::input::TextInput;\npub(super) use crate::controls::keybinding_recorder::KeybindingRecorder;\npub(super) use crate::controls::number_input::NumberInput;\npub(super) use crate::controls::select::{Select, SelectOption};\npub(super) use crate::controls::split_button::SplitButton;\npub(super) use crate::controls::tag_input::TagInput;\npub(super) use crate::controls::textarea::{Frame, TextArea};\npub(super) use crate::display::badge::Tone;\npub(super) use crate::display::icon::{Icon as IconView, IconTone};\npub(super) use crate::foundation::ActiveTheme;\npub(super) use crate::foundation::direction::{ActiveDirection, DirectionalExt};\npub(super) use crate::interaction::dnd;\npub(super) use crate::overlay::toast::push as toast_push;\npub(super) use crate::overlay::{Edge, Kbd, Overlay, Placement, Tooltip, Tooltipped};\npub(super) use crate::prelude::*;\npub(super) use crate::strings::{ActiveStrings, StringKey};\n\npub(super) fn stack(theme: &Theme) -> gpui::Div {\n    div()\n        .column()\n        .gap(px(theme.spacing.md))\n        .p(px(theme.spacing.lg))\n        .page(theme)\n        .font_family(theme.typography.sans.clone())\n}\n\npub(super) fn row(theme: &Theme) -> gpui::Div {\n    div()\n        .row()\n        .flex_wrap()\n        .gap(px(theme.spacing.sm))\n        .items_center()\n}\n\n/// A pane of fixture copy, for a scene that needs something on both sides of a\n/// divider or below a viewport.\npub(super) fn filler(theme: &Theme, title: &'static str, lines: usize) -> gpui::Div {\n    let mut pane = div()\n        .flex()\n        .flex_col()\n        .gap(px(theme.space(Space::Xs)))\n        .p(px(theme.space(Space::Md)))\n        .child(crate::foundation::text(\n            theme,\n            TypeScale::Label,\n            SharedString::from(title),\n        ));\n    for line in 1..=lines {\n        pane = pane.child(\n            crate::foundation::text(\n                theme,\n                TypeScale::Code,\n                SharedString::from(format!(\"Fixture line {line:02}\")),\n            )\n            .text_tone(theme, TextTone::Muted),\n        );\n    }\n    pane\n}\n\n/// A caption naming the state a drag scene was staged in.\npub(super) fn caption(theme: &Theme, text: impl Into<SharedString>) -> gpui::Div {\n    crate::foundation::text(theme, TypeScale::Caption, text.into())\n        .text_tone(theme, TextTone::Muted)\n}\n\n/// The element a host hands back for an image this crate did not fetch.\n///\n/// A flat fill rather than a picture, because the crate ships no photographs\n/// and a scene has to photograph the same pixels every run. Neutral, and\n/// quieter than the surface it sits in: a stand-in painted in the accent was\n/// the loudest thing in every scene that used one, which said the placeholder\n/// mattered more than the component being reviewed around it.\npub(super) fn scene_picture(label: &'static str, cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .size_full()\n        .flex()\n        .flex_col()\n        .items_center()\n        .justify_center()\n        .gap(px(theme.space(gpui_kit_theme::Space::Xs)))\n        .bg(theme.colors.sunken)\n        .child(\n            gpui_kit_assets::icon(gpui_kit_assets::Icon::Image)\n                .size(px(theme.typography.subtitle.line_height))\n                .text_color(theme.colors.text_faint),\n        )\n        .child(\n            crate::foundation::text(&theme, TypeScale::Caption, SharedString::new_static(label))\n                .text_tone(&theme, TextTone::Faint),\n        )\n        .into_any_element()\n}\n\n/// The ordinary-application views that own state across frames.\npub(super) struct SceneOrdinary {\n    pub(super) menubar: Entity<Menubar>,\n    pub(super) hover_card: Entity<HoverCard>,\n    pub(super) copy_idle: Entity<CopyButton>,\n    pub(super) copy: Entity<CopyButton>,\n    pub(super) copy_refused: Entity<CopyButton>,\n}\n\nimpl Global for SceneOrdinary {}\n\npub(super) fn ensure_ordinary(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneOrdinary>() {\n        return;\n    }\n    let menubar = cx.new(|cx| {\n        Menubar::new(\n            \"scene.menubar\",\n            [\n                MenubarMenu::new(\n                    \"file\",\n                    \"File\",\n                    [\n                        MenuItem::command(\"file.new\", \"New run\").shortcut(\"cmd-n\"),\n                        MenuItem::command(\"file.open\", \"Open workspace\").shortcut(\"cmd-o\"),\n                        MenuItem::separator(\"file.rule\"),\n                        MenuItem::submenu(\n                            \"file.export\",\n                            \"Export\",\n                            [\n                                MenuItem::command(\"file.export.json\", \"As JSON\"),\n                                MenuItem::command(\"file.export.text\", \"As plain text\"),\n                            ],\n                        ),\n                    ],\n                ),\n                MenubarMenu::new(\n                    \"edit\",\n                    \"Edit\",\n                    [\n                        MenuItem::command(\"edit.undo\", \"Undo\").shortcut(\"cmd-z\"),\n                        MenuItem::check(\"edit.wrap\", \"Wrap lines\", true),\n                    ],\n                ),\n                MenubarMenu::new(\"view\", \"View\", [MenuItem::command(\"view.zoom\", \"Zoom in\")]),\n                MenubarMenu::new(\"policy\", \"Policy\", []).disabled(true),\n            ],\n            window,\n            cx,\n        )\n    });\n    menubar.update(cx, |bar, cx| bar.open(\"file\", window, cx));\n\n    let hover_card = cx.new(|cx| {\n        HoverCard::new(\"scene.hover-card\", window, cx)\n            .name(\"Run 4821\")\n            .trigger(|_, cx| {\n                let theme = cx.theme().clone();\n                crate::foundation::text(&theme, TypeScale::Caption, \"run 4821\")\n                    .text_color(theme.colors.accent)\n                    .into_any_element()\n            })\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .column()\n                    // A column stretches its children across, and a badge\n                    // stretched that far stops reading as a label and starts\n                    // reading as a filled bar.\n                    .items_start()\n                    .gap(px(theme.spacing.xs))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Strong,\n                        \"Nightly regression sweep\",\n                    ))\n                    .child(\n                        crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Finished in 4 minutes, 12 checks, none failed.\",\n                        )\n                        .text_tone(&theme, TextTone::Muted),\n                    )\n                    .child(Badge::new(\"Ready\").success())\n                    .into_any_element()\n            })\n    });\n    hover_card.update(cx, |card, cx| card.open(cx));\n\n    // Nobody has pressed this one. It is the state a reader sees almost all\n    // of the time, and it was the one state of the three no image held.\n    let copy_idle = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-idle\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Ok(()))\n    });\n\n    // The confirmation outlives the capture. At its ordinary length it expires\n    // partway through a run, so which of the two states this scene showed\n    // depended on how long the run took to reach it.\n    let copy = cx.new(|cx| {\n        CopyButton::new(\"scene.copy\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .confirmation(std::time::Duration::from_secs(60 * 60))\n            .copier(|_, _| Ok(()))\n    });\n    copy.update(cx, |button, cx| button.copy(cx));\n\n    let copy_refused = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-refused\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Err(\"The clipboard did not take it.\".into()))\n    });\n    copy_refused.update(cx, |button, cx| button.copy(cx));\n\n    cx.set_global(SceneOrdinary {\n        menubar,\n        hover_card,\n        copy_idle,\n        copy,\n        copy_refused,\n    });\n}\n"
    },
    {
      "name": "cartesian-layout",
      "capture": "cargo run -p xtask -- headless capture cartesian-layout",
      "kind": "exhibit",
      "subjects": [
        "CartesianChart"
      ],
      "uses": [
        "CartesianChart"
      ],
      "example": "fn cartesian_layout(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let changed = crate::motion::keyed::slot::<bool>(\n        &\"scene.cartesian-layout.readings\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revised = *changed.borrow();\n    let mut charts = Vec::new();\n    for (id, orientation) in [\n        (\"vertical\", ChartOrientation::Vertical),\n        (\"horizontal\", ChartOrientation::Horizontal),\n    ] {\n        let axis = |id: &str, domain| ValueAxis {\n            id: id.to_owned().into(),\n            label: id.to_owned().into(),\n            scale: NumericScale::new(ScaleKind::Linear, domain).expect(\"fixture value domain\"),\n        };\n        let mut points = [(\"West\", 63., 17.), (\"East\", 29., 74.), (\"North\", 42., 42.)]\n            .into_iter()\n            .map(|(id, y, baseline)| {\n                let y = if revised { y + 13.125 } else { y };\n                RawPoint::new(id, ChartValue::Category(id.into()), Some(y))\n                    .baseline(baseline)\n                    .error([y.min(baseline) - 9., y.max(baseline) + 7.])\n                    .text(id, format!(\"{baseline} → {y} units\"))\n            })\n            .collect::<Vec<_>>();\n        if revised {\n            points.reverse();\n        }\n        let report = changed.clone();\n        charts.push(\n            div().flex_1().min_w_0().child(\n                CartesianChart::new(\n                    format!(\"scene.cartesian-layout.{id}\"),\n                    format!(\"{id} · ranges, independent axes\"),\n                    ChartScale::Category(\n                        CategoryScale::new([\"West\", \"East\", \"North\"])\n                            .expect(\"fixture category identities\"),\n                    ),\n                    [axis(\"Units\", [-10., 100.]), axis(\"Percent\", [0., 100.])],\n                )\n                .orientation(orientation)\n                .x_axis_side(if orientation == ChartOrientation::Vertical {\n                    AxisSide::Leading\n                } else {\n                    AxisSide::Trailing\n                })\n                .axis_side(\n                    \"Percent\",\n                    if orientation == ChartOrientation::Vertical {\n                        AxisSide::Trailing\n                    } else {\n                        AxisSide::Leading\n                    },\n                )\n                .expect(\"fixture axis\")\n                .axis_ticks(\n                    \"Units\",\n                    [-10., 17., 63., 100.].map(|value| ChartTick {\n                        value: ChartValue::Number(value),\n                        label: format!(\"{value} u\").into(),\n                    }),\n                )\n                .expect(\"explicit asymmetric value ticks\")\n                .series([\n                    RawSeries::new(\"Interval\", \"Units\", SeriesMark::Range).points(points),\n                    RawSeries::new(\"Forecast\", \"Percent\", SeriesMark::Scatter).points([\n                        RawPoint::new(\n                            \"East\",\n                            ChartValue::Category(\"East\".into()),\n                            Some(if revised { 71.25 } else { 36.5 }),\n                        )\n                        .text(\"East forecast\", if revised { \"71.25%\" } else { \"36.5%\" }),\n                    ]),\n                ])\n                .custom_marks(|_, _| {\n                    Some(\n                        CustomMark::new(22., 8., |bounds, color, window, _| {\n                            window.paint_quad(gpui::fill(bounds, color))\n                        })\n                        .expect(\"positive custom fixture mark\"),\n                    )\n                })\n                .selected(Some(ChartSelection::new(\"Interval\", \"West\")))\n                .height(230.)\n                .on_event(move |event, window, _| {\n                    if matches!(event, CartesianEvent::Select(Some(_))) {\n                        let next = !*report.borrow();\n                        *report.borrow_mut() = next;\n                        window.refresh();\n                    }\n                }),\n            ),\n        );\n    }\n    stack(&theme).w(px(920.)).child(caption(&theme,\"Original fixtures · opposite axis lanes, caller ticks and custom glyphs; click a mark to update/reorder raw readings\"))\n        .child(div().row().items_start().gap_token(&theme,Space::Lg).children(charts)).into_any_element()\n}"
    },
    {
      "name": "cartesian-lifecycle",
      "capture": "cargo run -p xtask -- headless capture cartesian-lifecycle",
      "kind": "exhibit",
      "subjects": [
        "CartesianChart"
      ],
      "uses": [
        "CartesianChart"
      ],
      "example": "fn cartesian_lifecycle(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::display::chart::cartesian::CartesianMotion;\n    use crate::motion::{CubicBezier, MotionSpec};\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<u8>(\n        &\"scene.lifecycle.state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let flags = *state.borrow();\n    let emphasis = crate::motion::keyed::slot::<Option<SharedString>>(\n        &\"scene.lifecycle.emphasis\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let emphasized = emphasis.borrow().clone();\n    let controls = [\n        (\"update\", \"Update values / colors\", 1),\n        (\"hide\", \"Hide / show observed\", 2),\n        (\"remove\", \"Remove / restore west\", 4),\n        (\"reorder\", \"Reorder series\", 8),\n        (\"viewport\", \"Change viewport\", 16),\n    ]\n    .into_iter()\n    .map(|(id, label, mask)| {\n        let state = state.clone();\n        Button::new(format!(\"scene.lifecycle.{id}\"))\n            .label(label)\n            .secondary()\n            .on_click(move |window, _| {\n                *state.borrow_mut() ^= mask;\n                window.refresh();\n            })\n    })\n    .collect::<Vec<_>>();\n    let revised = flags & 1 != 0;\n    let observed = RawSeries::new(\"observed\", \"units\", SeriesMark::Bar)\n        .tint(if revised {\n            gpui::hsla(0.82, 0.65, 0.52, 1.)\n        } else {\n            gpui::hsla(0.55, 0.75, 0.43, 1.)\n        })\n        .points(\n            [\n                (\"west\", 17., 23.),\n                (\"central\", 47., 73.),\n                (\"east\", 83., 41.),\n            ]\n            .into_iter()\n            .filter(|(id, _, _)| flags & 4 == 0 || *id != \"west\")\n            .map(|(id, x, y)| {\n                let value = if revised { 100. - y } else { y };\n                RawPoint::new(id, ChartValue::Number(x), Some(value))\n                    .text(id, format!(\"{value} observed\"))\n            }),\n        );\n    let forecast = RawSeries::new(\"forecast\", \"units\", SeriesMark::Bar)\n        .tint(gpui::hsla(0.08, 0.8, 0.55, 1.))\n        .points(\n            [\n                (\"west\", 17., 39.),\n                (\"central\", 47., 52.),\n                (\"east\", 83., 67.),\n            ]\n            .into_iter()\n            .map(|(id, x, y)| {\n                RawPoint::new(id, ChartValue::Number(x), Some(y)).text(id, format!(\"{y} forecast\"))\n            }),\n        );\n    let mut series = vec![observed, forecast];\n    if flags & 8 != 0 {\n        series.reverse();\n    }\n    let linear = MotionSpec::new(800, CubicBezier::new(0., 0., 1., 1.));\n    let x = NumericScale::new(\n        ScaleKind::Linear,\n        if flags & 16 != 0 {\n            [0., 140.]\n        } else {\n            [0., 100.]\n        },\n    )\n    .expect(\"fixture x domain\");\n    stack(&theme).w(px(920.))\n        .child(caption(&theme,\"Original fixture · keyed geometry, color and presence; retired visuals never remain interactive. Playback uses 800ms linear transitions.\"))\n        .child(div().row().flex_wrap().gap_token(&theme,Space::Sm).children(controls))\n        .child(CartesianChart::new(\"scene.lifecycle.chart\",\"Observed and forecast\",ChartScale::Numeric(x),[\n            ValueAxis{id:\"units\".into(),label:\"Units\".into(),scale:NumericScale::new(ScaleKind::Linear,[0.,100.]).expect(\"fixture y domain\")}])\n            .series(series).hidden([(\"observed\",2),(\"forecast\",32)].into_iter().filter(|(_,mask)|flags&mask!=0).map(|(id,_)|id))\n            .emphasized(emphasized)\n            .motion(CartesianMotion{enter:linear,update:linear,exit:linear}).height(300.)\n            .selected(Some(ChartSelection::new(\"observed\",\"west\")))\n            .on_event(move|event,window,_|{\n                match event {\n                    CartesianEvent::Emphasis(value)=>*emphasis.borrow_mut()=value,\n                    CartesianEvent::Visibility{series,visible}=>{\n                        let mask=if series==\"observed\"{2}else{32};\n                        if visible {*state.borrow_mut()&=!mask;}else{*state.borrow_mut()|=mask;}\n                    },\n                    _=>return,\n                }\n                window.refresh();\n            }))\n        .into_any_element()\n}"
    },
    {
      "name": "cartesian-dense",
      "capture": "cargo run -p xtask -- headless capture cartesian-dense",
      "kind": "exhibit",
      "subjects": [
        "CartesianChart"
      ],
      "uses": [
        "CartesianChart"
      ],
      "example": "fn cartesian_dense(window: &mut Window, cx: &mut App) -> AnyElement {\n    #[derive(Default)]\n    struct Readings {\n        series: Option<Rc<Vec<RawSeries>>>,\n        selected: Option<ChartSelection>,\n    }\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<Readings>(\n        &\"scene.cartesian.dense-input\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let mut state_value = state.borrow_mut();\n    if state_value.series.is_none() {\n        state_value.selected = Some(ChartSelection::new(\"signal\", \"time-620000ms\"));\n    }\n    let series = state_value\n        .series\n        .get_or_insert_with(|| {\n            Rc::new(vec![\n                RawSeries::new(\"signal\", \"value\", SeriesMark::Area).points((0..6000).map(\n                    |sample| {\n                        let time = sample as f64 * 0.5;\n                        let value = if (450.0..550.0).contains(&time) {\n                            None\n                        } else {\n                            Some(if time == 620. {\n                                73.125\n                            } else if time == 1800. {\n                                -29.\n                            } else {\n                                5. + (time / 90.).sin() * 9.\n                            })\n                        };\n                        RawPoint::new(\n                            format!(\"time-{}ms\", (time * 1000.) as u64),\n                            ChartValue::Number(time),\n                            value,\n                        )\n                        .text(\n                            format!(\"t={time}\"),\n                            value.map(|v| format!(\"{v:.3} units\")).unwrap_or_default(),\n                        )\n                    },\n                )),\n            ])\n        })\n        .clone();\n    let selected = state_value.selected.clone();\n    drop(state_value);\n    let scale =\n        |domain| NumericScale::new(ScaleKind::Linear, domain).expect(\"finite dense fixture domain\");\n    let mut charts = Vec::new();\n    for (name, label, width, sampling) in [\n        (\n            \"exact\",\n            \"Exact path · 6,000 raw observations\",\n            550.,\n            PathSampling::Exact,\n        ),\n        (\n            \"sampled\",\n            \"Pixel extrema · same raw identities\",\n            290.,\n            PathSampling::MinMax,\n        ),\n    ] {\n        let report = state.clone();\n        charts.push(\n            div().w(px(width)).min_w_0().child(\n                CartesianChart::new(\n                    format!(\"scene.cartesian.dense.{name}\"),\n                    label,\n                    ChartScale::Numeric(scale([0., 2999.5])),\n                    [ValueAxis {\n                        id: \"value\".into(),\n                        label: \"Units\".into(),\n                        scale: scale([-40., 85.]),\n                    }],\n                )\n                .shared_series(series.clone())\n                .animate(false)\n                .sampling(sampling)\n                .height(220.)\n                .selected(selected.clone())\n                .on_event(move |event, window, _| {\n                    if let CartesianEvent::Select(value) = event {\n                        report.borrow_mut().selected = value;\n                        window.refresh();\n                    }\n                }),\n            ),\n        );\n    }\n    stack(&theme).w(px(920.))\n        .child(caption(&theme, \"Original fixture · path reduction preserves positive/negative spikes and missing runs; selection and exact values remain caller-owned\"))\n        .child(div().row().items_start().gap_token(&theme, Space::Lg).children(charts))\n        .into_any_element()\n}"
    },
    {
      "name": "cartesian-states",
      "capture": "cargo run -p xtask -- headless capture cartesian-states",
      "kind": "exhibit",
      "subjects": [
        "CartesianChart",
        "PieChart",
        "RadarChart",
        "GaugeChart"
      ],
      "uses": [
        "CartesianChart",
        "PieChart",
        "RadarChart",
        "GaugeChart"
      ],
      "example": "fn cartesian_states(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::display::chart::{GaugeChart, PieChart, RadarChart};\n    use crate::state::AsyncValue;\n    let theme = cx.theme().clone();\n    let scale = NumericScale::new(ScaleKind::Linear, [0., 100.]).expect(\"finite fixture domain\");\n    let point = |id: &str, y| RawPoint::new(id, ChartValue::Number(0.), Some(y));\n    let pie = PieChart::from_raw(\n        \"scene.raw.pie\",\n        \"Raw shares · 13 / 29 / 7\",\n        RawSeries::new(\"shares\", \"\", SeriesMark::Bar).points([\n            point(\"West\", 13.),\n            point(\"East\", 29.),\n            point(\"North\", 7.),\n        ]),\n    )\n    .expect(\"valid raw pie fixture\")\n    .donut();\n    let axes = [\"Speed\", \"Coverage\", \"Quality\"].map(|id| ValueAxis {\n        id: id.into(),\n        label: id.into(),\n        scale,\n    });\n    let radar = RadarChart::from_raw(\n        \"scene.raw.radar\",\n        \"Explicit radial domains\",\n        [RawSeries::new(\"score\", \"\", SeriesMark::Line).points([\n            point(\"Quality\", 91.),\n            point(\"Speed\", 38.),\n            point(\"Coverage\", 67.),\n        ])],\n        &axes,\n    )\n    .expect(\"valid raw radar fixture\");\n    let gauge = GaugeChart::from_raw(\n        \"scene.raw.gauge\",\n        \"Raw reading · domain 0–100\",\n        point(\"verified\", 73.125).text(\"Verified\", \"73.125\"),\n        scale,\n    )\n    .expect(\"in-domain gauge fixture\");\n    let states: [(&str, AsyncValue<(), String>); 4] = [\n        (\"Loading\", AsyncValue::loading()),\n        (\"Empty\", AsyncValue::empty()),\n        (\n            \"Unavailable\",\n            AsyncValue::refused(\"Fixture capability refused\"),\n        ),\n        (\"Error\", AsyncValue::error(\"Fixture input failed\".into())),\n    ];\n    stack(&theme)\n        .w(px(920.))\n        .child(caption(\n            &theme,\n            \"Raw polar fixtures and truthful non-ready Cartesian states\",\n        ))\n        .child(\n            div()\n                .row()\n                .items_start()\n                .gap_token(&theme, Space::Lg)\n                .child(div().flex_1().child(pie))\n                .child(div().flex_1().child(radar))\n                .child(div().flex_1().child(gauge)),\n        )\n        .child(\n            div()\n                .row()\n                .items_start()\n                .flex_wrap()\n                .gap_token(&theme, Space::Lg)\n                .children(states.into_iter().map(|(label, state)| {\n                    div().w(px(430.)).child(\n                        CartesianChart::new(\n                            format!(\"scene.raw.state.{label}\"),\n                            label,\n                            ChartScale::Numeric(scale),\n                            [ValueAxis {\n                                id: \"y\".into(),\n                                label: \"Value\".into(),\n                                scale,\n                            }],\n                        )\n                        .state(state),\n                    )\n                })),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "plot",
      "capture": "cargo run -p xtask -- headless capture plot",
      "kind": "exhibit",
      "subjects": [
        "CandlestickChart",
        "Plot",
        "SankeyChart"
      ],
      "uses": [
        "CandlestickChart",
        "Plot",
        "SankeyChart"
      ],
      "example": "fn plot(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let accent = theme.colors.accent;\n    let custom_marks = vec![\n        PlotMark::new(\n            \"first\",\n            \"First stage\",\n            \"18 jobs\",\n            bounds(point(0.08, 0.58), size(0.18, 0.28)),\n        ),\n        PlotMark::new(\n            \"middle\",\n            \"Middle stage\",\n            \"34 jobs\",\n            bounds(point(0.40, 0.30), size(0.18, 0.56)),\n        ),\n        PlotMark::new(\n            \"last\",\n            \"Last stage\",\n            \"26 jobs\",\n            bounds(point(0.72, 0.44), size(0.18, 0.42)),\n        ),\n    ];\n    let painted_marks = custom_marks.clone();\n    let candles = [\n        Candlestick::new(\"monday\", 0.10, 0.32, 0.58, 0.20, 0.50, \"Monday\", \"32–50\"),\n        Candlestick::new(\"tuesday\", 0.30, 0.52, 0.66, 0.38, 0.44, \"Tuesday\", \"52–44\"),\n        Candlestick::new(\n            \"wednesday\",\n            0.50,\n            0.45,\n            0.80,\n            0.40,\n            0.72,\n            \"Wednesday\",\n            \"45–72\",\n        ),\n        Candlestick::new(\n            \"thursday\", 0.70, 0.70, 0.76, 0.34, 0.42, \"Thursday\", \"70–42\",\n        ),\n        Candlestick::new(\"friday\", 0.90, 0.44, 0.88, 0.36, 0.82, \"Friday\", \"44–82\"),\n    ];\n    let source_tint = identity_tint(&theme, \"agent.read\");\n    let target_tint = identity_tint(&theme, \"agent.write\");\n    let sankey = SankeyData::new(\n        [\n            SankeyNode::new(\n                \"queued\",\n                \"Queued\",\n                \"48 jobs\",\n                bounds(point(0.03, 0.20), size(0.08, 0.58)),\n            )\n            .tint(source_tint),\n            SankeyNode::new(\n                \"running\",\n                \"Running\",\n                \"34 jobs\",\n                bounds(point(0.46, 0.28), size(0.08, 0.42)),\n            ),\n            SankeyNode::new(\n                \"completed\",\n                \"Completed\",\n                \"26 jobs\",\n                bounds(point(0.89, 0.12), size(0.08, 0.32)),\n            )\n            .tint(target_tint),\n            SankeyNode::new(\n                \"deferred\",\n                \"Deferred\",\n                \"8 jobs\",\n                bounds(point(0.89, 0.62), size(0.08, 0.18)),\n            )\n            .tint(theme.colors.warning),\n        ],\n        [\n            SankeyLink::new(\n                \"queue-running\",\n                \"queued\",\n                \"running\",\n                \"Queued to running\",\n                \"34 jobs\",\n                point(0.11, 0.48),\n                point(0.46, 0.49),\n                0.30,\n            )\n            .tint(source_tint),\n            SankeyLink::new(\n                \"running-completed\",\n                \"running\",\n                \"completed\",\n                \"Running to completed\",\n                \"26 jobs\",\n                point(0.54, 0.44),\n                point(0.89, 0.28),\n                0.24,\n            )\n            .tint(target_tint),\n            SankeyLink::new(\n                \"running-deferred\",\n                \"running\",\n                \"deferred\",\n                \"Running to deferred\",\n                \"8 jobs\",\n                point(0.54, 0.62),\n                point(0.89, 0.71),\n                0.10,\n            )\n            .tint(theme.colors.warning),\n        ],\n    )\n    .layout(\n        &[34.0, 26.0, 8.0],\n        0.08,\n        0.16,\n        crate::display::plot::SankeyAlignment::Justify,\n    )\n    .expect(\"acyclic fixture with valid flow weights\")\n    .0;\n\n    let column = || div().column().flex_1().min_w_0();\n    stack(&theme)\n        .w(px(920.0))\n        .child(caption(\n            &theme,\n            \"normalized geometry and exact wording remain caller-owned\",\n        ))\n        .child(\n            div()\n                .row()\n                .items_start()\n                .w_full()\n                .gap(px(theme.space(Space::Lg)))\n                .child(\n                    column().child(\n                        Plot::new(\n                            \"scene.plot.custom\",\n                            \"Pipeline\",\n                            PlotState::Ready(custom_marks),\n                        )\n                        .current(\"middle\")\n                        .on_current(|_, _, _| {})\n                        .paint(move |frame, window, _| {\n                            for mark in &painted_marks {\n                                window\n                                    .paint_quad(gpui::fill(frame.mark_bounds(mark.bounds), accent));\n                            }\n                        }),\n                    ),\n                )\n                .child(\n                    column().child(\n                        CandlestickChart::new(\n                            \"scene.plot.candles\",\n                            \"Daily range\",\n                            PlotState::Ready(candles.into()),\n                        )\n                        .current(\"wednesday\")\n                        .on_current(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    column().child(\n                        SankeyChart::new(\"scene.plot.sankey\", \"Run flow\", PlotState::Ready(sankey))\n                            .current(\"node.running\")\n                            .on_current(|_, _, _| {}),\n                    ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "specialized",
      "capture": "cargo run -p xtask -- headless capture specialized",
      "kind": "exhibit",
      "subjects": [
        "SpecializedChart"
      ],
      "uses": [
        "SpecializedChart"
      ],
      "example": "fn specialized(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let leaf = |id, label, value| HierarchyNode::leaf(WeightedValue::new(id, label, value));\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All work\",\n        vec![\n            leaf(\"build\", \"Build\", 60.0),\n            HierarchyNode::branch(\n                \"verify\",\n                \"Verification\",\n                vec![leaf(\"tests\", \"Tests\", 30.0), leaf(\"lint\", \"Lint\", 10.0)],\n            ),\n        ],\n    );\n    let fixtures = [\n        (\n            \"treemap\",\n            \"Treemap · area = work\",\n            SpecializedData::treemap(&root),\n        ),\n        (\n            \"sunburst\",\n            \"Sunburst · angle = work\",\n            SpecializedData::sunburst(&root),\n        ),\n        (\n            \"funnel\",\n            \"Funnel · width = count\",\n            SpecializedData::funnel(vec![\n                WeightedValue::new(\"seen\", \"Seen\", 120.0),\n                WeightedValue::new(\"started\", \"Started\", 75.0),\n                WeightedValue::new(\"done\", \"Completed\", 24.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(940.0))\n        .child(caption(\n            &theme,\n            \"Synthetic hierarchy fixtures · select marks with arrow keys or value keys\",\n        ))\n        .child(\n            div()\n                .row()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(280.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid hierarchy\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .child(\n            div().w(px(220.0)).child(SpecializedChart::new(\n                \"scene.specialized.zero\",\n                \"Zero is measured, not missing\",\n                PlotState::Stale {\n                    data: SpecializedData::funnel(vec![WeightedValue::new(\n                        \"zero\",\n                        \"Measured zero\",\n                        0.0,\n                    )])\n                    .expect(\"zero\"),\n                    reason: \"Refresh refused; verified zero retained\".into(),\n                },\n            )),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "specialized-distribution",
      "capture": "cargo run -p xtask -- headless capture specialized-distribution",
      "kind": "exhibit",
      "subjects": [
        "SpecializedChart"
      ],
      "uses": [
        "SpecializedChart"
      ],
      "example": "fn specialized_distribution(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let fixtures = [\n        (\n            \"histogram\",\n            \"Histogram · count per bin\",\n            SpecializedData::histogram(&[-2.0, -1.0, 0.0, 0.0, 1.0, 3.0], &[-2.0, 0.0, 1.0, 3.0]),\n        ),\n        (\n            \"box\",\n            \"Box · R-7 / Tukey · domain 0–110\",\n            SpecializedData::box_plot(\n                \"latency\",\n                \"Latency\",\n                &[1.0, 2.0, 4.0, 7.0, 8.0, 100.0],\n                [0.0, 110.0],\n            ),\n        ),\n        (\n            \"range\",\n            \"Range · domain −10–30\",\n            SpecializedData::range(\"interval\", \"Expected interval\", -4.0, 18.0, [-10.0, 30.0]),\n        ),\n        (\n            \"waterfall\",\n            \"Waterfall · signed changes\",\n            SpecializedData::waterfall(vec![\n                WeightedValue::new(\"open\", \"Opening\", 60.0),\n                WeightedValue::new(\"cost\", \"Cost\", -90.0),\n                WeightedValue::new(\"credit\", \"Credit\", 10.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(1000.0))\n        .child(caption(\n            &theme,\n            \"Synthetic distribution fixtures · explicit bin edges and R-7 / Tukey statistics\",\n        ))\n        .child(\n            div()\n                .row()\n                .flex_wrap()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(440.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid synthetic fixture\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "specialized-exploration",
      "capture": "cargo run -p xtask -- headless capture specialized-exploration",
      "kind": "exhibit",
      "subjects": [
        "SpecializedChart"
      ],
      "uses": [
        "SpecializedChart"
      ],
      "example": "fn specialized_exploration(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<Exploration>(\n        &\"scene.specialized.explore-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision;\n    let selected = state.borrow().selected.clone();\n    let focus = state\n        .borrow()\n        .focus\n        .clone()\n        .unwrap_or_else(|| \"total\".into());\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All samples\",\n        vec![\n            HierarchyNode::branch(\n                \"group\",\n                \"Processing\",\n                vec![\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"parse\",\n                        \"Parsing\",\n                        if revision.is_multiple_of(2) {\n                            12.0\n                        } else {\n                            47.0\n                        },\n                    )),\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"execute\",\n                        \"Execution\",\n                        if revision.is_multiple_of(2) {\n                            68.0\n                        } else {\n                            13.0\n                        },\n                    )),\n                ],\n            ),\n            HierarchyNode::leaf(WeightedValue::new(\"deliver\", \"Delivery\", 20.0)),\n        ],\n    );\n    let next = state.clone();\n    let refusal = state.clone();\n    let charts = [\n        (\n            \"tree\",\n            \"Area · drill/back\",\n            SpecializedData::treemap_at(&root, &focus),\n        ),\n        (\n            \"sun\",\n            \"Angle · drill/back\",\n            SpecializedData::sunburst_at(&root, &focus),\n        ),\n        (\n            \"funnel\",\n            \"Width · enter/update/exit\",\n            SpecializedData::funnel(match revision % 3 {\n                0 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 120.0),\n                    WeightedValue::new(\"finish\", \"Finished\", 24.0),\n                ],\n                1 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 75.0),\n                    WeightedValue::new(\"new\", \"New sample\", 38.0),\n                ],\n                _ => vec![],\n            }),\n        ),\n    ];\n    stack(&theme).w(px(860.0))\n        .child(caption(&theme,\"Synthetic live fixtures · advance during motion to interrupt; empty exit shapes are not selectable\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.specialized.advance\").label(\"Advance samples\").on_click(move |window,_| { next.borrow_mut().revision+=1; window.refresh(); }))\n            .child(Button::new(\"scene.specialized.refuse\").label(if state.borrow().refuse { \"Accept proposals\" } else { \"Refuse proposals\" }).on_click(move |window,_| { let mut s=refusal.borrow_mut(); s.refuse = !s.refuse; window.refresh(); })))\n        .child(div().row().gap_token(&theme,Space::Lg).children(charts.into_iter().map(|(id,label,data)| {\n            let select = state.clone();\n            let navigate = state.clone();\n            div().w(px(260.0)).child(SpecializedChart::new(Ident::new(\"scene.specialized.live\").child(id),label,PlotState::Ready(data.expect(\"valid exploration fixture\")))\n                .motion(true).labels(true).selected(selected.clone())\n                .on_current(move |id,window,_| { let mut s=select.borrow_mut(); if !s.refuse { s.selected=Some(id); } window.refresh(); })\n                .on_navigate(move |id,window,_| { let mut s=navigate.borrow_mut(); if !s.refuse { s.focus=Some(id); } window.refresh(); }))\n        }))).into_any_element()\n}\n\npub(super) fn specialized(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let leaf = |id, label, value| HierarchyNode::leaf(WeightedValue::new(id, label, value));\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All work\",\n        vec![\n            leaf(\"build\", \"Build\", 60.0),\n            HierarchyNode::branch(\n                \"verify\",\n                \"Verification\",\n                vec![leaf(\"tests\", \"Tests\", 30.0), leaf(\"lint\", \"Lint\", 10.0)],\n            ),\n        ],\n    );\n    let fixtures = [\n        (\n            \"treemap\",\n            \"Treemap · area = work\",\n            SpecializedData::treemap(&root),\n        ),\n        (\n            \"sunburst\",\n            \"Sunburst · angle = work\",\n            SpecializedData::sunburst(&root),\n        ),\n        (\n            \"funnel\",\n            \"Funnel · width = count\",\n            SpecializedData::funnel(vec![\n                WeightedValue::new(\"seen\", \"Seen\", 120.0),\n                WeightedValue::new(\"started\", \"Started\", 75.0),\n                WeightedValue::new(\"done\", \"Completed\", 24.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(940.0))\n        .child(caption(\n            &theme,\n            \"Synthetic hierarchy fixtures · select marks with arrow keys or value keys\",\n        ))\n        .child(\n            div()\n                .row()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(280.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid hierarchy\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .child(\n            div().w(px(220.0)).child(SpecializedChart::new(\n                \"scene.specialized.zero\",\n                \"Zero is measured, not missing\",\n                PlotState::Stale {\n                    data: SpecializedData::funnel(vec![WeightedValue::new(\n                        \"zero\",\n                        \"Measured zero\",\n                        0.0,\n                    )])\n                    .expect(\"zero\"),\n                    reason: \"Refresh refused; verified zero retained\".into(),\n                },\n            )),\n        )\n        .into_any_element()\n}\n\npub(super) fn specialized_distribution(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let fixtures = [\n        (\n            \"histogram\",\n            \"Histogram · count per bin\",\n            SpecializedData::histogram(&[-2.0, -1.0, 0.0, 0.0, 1.0, 3.0], &[-2.0, 0.0, 1.0, 3.0]),\n        ),\n        (\n            \"box\",\n            \"Box · R-7 / Tukey · domain 0–110\",\n            SpecializedData::box_plot(\n                \"latency\",\n                \"Latency\",\n                &[1.0, 2.0, 4.0, 7.0, 8.0, 100.0],\n                [0.0, 110.0],\n            ),\n        ),\n        (\n            \"range\",\n            \"Range · domain −10–30\",\n            SpecializedData::range(\"interval\", \"Expected interval\", -4.0, 18.0, [-10.0, 30.0]),\n        ),\n        (\n            \"waterfall\",\n            \"Waterfall · signed changes\",\n            SpecializedData::waterfall(vec![\n                WeightedValue::new(\"open\", \"Opening\", 60.0),\n                WeightedValue::new(\"cost\", \"Cost\", -90.0),\n                WeightedValue::new(\"credit\", \"Credit\", 10.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(1000.0))\n        .child(caption(\n            &theme,\n            \"Synthetic distribution fixtures · explicit bin edges and R-7 / Tukey statistics\",\n        ))\n        .child(\n            div()\n                .row()\n                .flex_wrap()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(440.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid synthetic fixture\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .into_any_element()\n}\n\n//! A schema, rendered as data or as a form.\n\nuse super::support::*;\n\n/// A document with the three facts a viewer usually confuses: a key holding\n/// `null`, a key holding an empty object, and a key that is simply not here.\npub(super) fn scene_document() -> JsonValue {\n    JsonValue::object([\n        (\"id\", JsonValue::string(\"run-4812\")),\n        (\"attempts\", JsonValue::number(\"3\")),\n        (\"streaming\", JsonValue::Bool(true)),\n        // Nothing has been recorded here yet, which is not the same as the\n        // key being missing: `resumed_from` is missing, and says nothing.\n        (\"cursor\", JsonValue::Null),\n        (\"labels\", JsonValue::object(Vec::<(&str, JsonValue)>::new())),\n        (\n            \"credentials\",\n            JsonValue::object([(\"token\", JsonValue::redacted(\"51 characters\"))]),\n        ),\n        (\n            \"request\",\n            JsonValue::object([\n                (\"method\", JsonValue::string(\"POST\")),\n                (\n                    \"headers\",\n                    JsonValue::object([\n                        (\"content-type\", JsonValue::string(\"application/json\")),\n                        (\"authorization\", JsonValue::redacted(\"a value\")),\n                    ]),\n                ),\n            ]),\n        ),\n        (\n            \"steps\",\n            JsonValue::array([\n                JsonValue::string(\"plan\"),\n                JsonValue::string(\"apply\"),\n                JsonValue::object([(\"retries\", JsonValue::number(\"0\"))]),\n            ]),\n        ),\n    ])\n}\n\npub(super) 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}\n\n/// The form kept across frames.\n///\n/// Its fields own carets, open menus and a selection, so rebuilding it every\n/// frame would throw away whatever had been typed into it.\npub(super) struct SceneSchemaForm {\n    form: Entity<SchemaForm>,\n}\n\nimpl Global for SceneSchemaForm {}\n\npub(super) fn scene_schema() -> Schema {\n    Schema::new()\n        .field(\n            SchemaField::new(\n                \"path\",\n                SchemaKind::Text {\n                    placeholder: Some(\"relative to the workspace\".into()),\n                    secret: false,\n                },\n            )\n            .label(\"File\")\n            .description(\"Which file the call reads\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\n                \"max_bytes\",\n                SchemaKind::Integer(NumberBounds::new().min(1.0).max(65_536.0).step(1024.0)),\n            )\n            .label(\"Maximum bytes\"),\n        )\n        .field(\n            SchemaField::new(\"follow_symlinks\", SchemaKind::Boolean).label(\"Follow symbolic links\"),\n        )\n        .field(\n            SchemaField::new(\n                \"encoding\",\n                SchemaKind::Enum(vec![\n                    SchemaChoice::new(\"utf-8\", \"UTF-8\"),\n                    SchemaChoice::new(\"latin-1\", \"Latin-1\"),\n                ]),\n            )\n            .label(\"Encoding\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\"attachments\", SchemaKind::Files { max: Some(2) })\n                .label(\"Attachments\")\n                .description(\"Paths are acquired and accepted by the host\"),\n        )\n        .field(\n            SchemaField::new(\n                \"headers\",\n                SchemaKind::List {\n                    item: Box::new(SchemaField::new(\n                        \"header\",\n                        SchemaKind::Object(vec![\n                            SchemaField::new(\n                                \"name\",\n                                SchemaKind::Text {\n                                    placeholder: Some(\"Header name\".into()),\n                                    secret: false,\n                                },\n                            )\n                            .label(\"Name\")\n                            .required(true),\n                            SchemaField::new(\"enabled\", SchemaKind::Boolean).label(\"Enabled\"),\n                        ]),\n                    )),\n                    max: Some(3),\n                },\n            )\n            .label(\"Headers\"),\n        )\n        .field(\n            SchemaField::new(\n                \"limits\",\n                SchemaKind::Object(vec![\n                    SchemaField::new(\"timeout_ms\", SchemaKind::Integer(NumberBounds::new()))\n                        .label(\"Timeout in milliseconds\"),\n                ]),\n            )\n            .label(\"Limits\"),\n        )\n        .field(\n            SchemaField::new(\n                \"matcher\",\n                SchemaKind::Unrenderable(\n                    \"This argument is one of three shapes at once, and no single control \\\n                     stands for that.\"\n                        .into(),\n                ),\n            )\n            .label(\"Matcher\")\n            .required(true),\n        )\n}\n\npub(super) fn schema_form(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSchemaForm>() {\n        set_schema_file_policy(DefaultSchemaFilePolicy, cx);\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            let _ = form.set_field_validation(\"encoding\", ValidationState::Validating, cx);\n            form.set_files(\"attachments\", vec![\"/workspace/brief.md\".into()], cx)\n                .expect(\"the scene's permissive file policy accepts its fixture\");\n            form.add_list_item(\"headers\", window, 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}\n\n//! What more than one family of scenes needs.\n//!\n//! Everything here is used by scenes in at least two families. A fixture\n//! that only one family builds lives in that family, next to the scenes\n//! that read it, so that moving a component moves its fixture with it.\n\npub(super) use gpui::{\n    AnyElement, App, Corners, DevicePixels, Entity, Focusable, Global, IntoElement, Pixels,\n    RenderImage, SharedString, SpriteBlendMode, SpriteColorMode, SpriteInstance, SpriteTransform,\n    Window, bounds, canvas, conic_gradient_stops, div, linear_color_stop, point, prelude::*, px,\n    radial_gradient_stops, radians, size,\n};\npub(super) use gpui_kit_assets::Icon;\npub(super) use gpui_kit_semantics::{NodeSpec, Role, Semantic};\npub(super) use gpui_kit_theme::{Radius, Space, Surface, SyntaxColor, TextTone, Theme, TypeScale};\npub(super) use std::rc::Rc;\npub(super) use std::sync::{Arc, OnceLock};\npub(super) use std::time::Duration;\n\npub(super) use crate::controls::combobox::Combobox;\npub(super) use crate::controls::input::TextInput;\npub(super) use crate::controls::keybinding_recorder::KeybindingRecorder;\npub(super) use crate::controls::number_input::NumberInput;\npub(super) use crate::controls::select::{Select, SelectOption};\npub(super) use crate::controls::split_button::SplitButton;\npub(super) use crate::controls::tag_input::TagInput;\npub(super) use crate::controls::textarea::{Frame, TextArea};\npub(super) use crate::display::badge::Tone;\npub(super) use crate::display::icon::{Icon as IconView, IconTone};\npub(super) use crate::foundation::ActiveTheme;\npub(super) use crate::foundation::direction::{ActiveDirection, DirectionalExt};\npub(super) use crate::interaction::dnd;\npub(super) use crate::overlay::toast::push as toast_push;\npub(super) use crate::overlay::{Edge, Kbd, Overlay, Placement, Tooltip, Tooltipped};\npub(super) use crate::prelude::*;\npub(super) use crate::strings::{ActiveStrings, StringKey};\n\npub(super) fn stack(theme: &Theme) -> gpui::Div {\n    div()\n        .column()\n        .gap(px(theme.spacing.md))\n        .p(px(theme.spacing.lg))\n        .page(theme)\n        .font_family(theme.typography.sans.clone())\n}\n\npub(super) fn row(theme: &Theme) -> gpui::Div {\n    div()\n        .row()\n        .flex_wrap()\n        .gap(px(theme.spacing.sm))\n        .items_center()\n}\n\n/// A pane of fixture copy, for a scene that needs something on both sides of a\n/// divider or below a viewport.\npub(super) fn filler(theme: &Theme, title: &'static str, lines: usize) -> gpui::Div {\n    let mut pane = div()\n        .flex()\n        .flex_col()\n        .gap(px(theme.space(Space::Xs)))\n        .p(px(theme.space(Space::Md)))\n        .child(crate::foundation::text(\n            theme,\n            TypeScale::Label,\n            SharedString::from(title),\n        ));\n    for line in 1..=lines {\n        pane = pane.child(\n            crate::foundation::text(\n                theme,\n                TypeScale::Code,\n                SharedString::from(format!(\"Fixture line {line:02}\")),\n            )\n            .text_tone(theme, TextTone::Muted),\n        );\n    }\n    pane\n}\n\n/// A caption naming the state a drag scene was staged in.\npub(super) fn caption(theme: &Theme, text: impl Into<SharedString>) -> gpui::Div {\n    crate::foundation::text(theme, TypeScale::Caption, text.into())\n        .text_tone(theme, TextTone::Muted)\n}\n\n/// The element a host hands back for an image this crate did not fetch.\n///\n/// A flat fill rather than a picture, because the crate ships no photographs\n/// and a scene has to photograph the same pixels every run. Neutral, and\n/// quieter than the surface it sits in: a stand-in painted in the accent was\n/// the loudest thing in every scene that used one, which said the placeholder\n/// mattered more than the component being reviewed around it.\npub(super) fn scene_picture(label: &'static str, cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .size_full()\n        .flex()\n        .flex_col()\n        .items_center()\n        .justify_center()\n        .gap(px(theme.space(gpui_kit_theme::Space::Xs)))\n        .bg(theme.colors.sunken)\n        .child(\n            gpui_kit_assets::icon(gpui_kit_assets::Icon::Image)\n                .size(px(theme.typography.subtitle.line_height))\n                .text_color(theme.colors.text_faint),\n        )\n        .child(\n            crate::foundation::text(&theme, TypeScale::Caption, SharedString::new_static(label))\n                .text_tone(&theme, TextTone::Faint),\n        )\n        .into_any_element()\n}\n\n/// The ordinary-application views that own state across frames.\npub(super) struct SceneOrdinary {\n    pub(super) menubar: Entity<Menubar>,\n    pub(super) hover_card: Entity<HoverCard>,\n    pub(super) copy_idle: Entity<CopyButton>,\n    pub(super) copy: Entity<CopyButton>,\n    pub(super) copy_refused: Entity<CopyButton>,\n}\n\nimpl Global for SceneOrdinary {}\n\npub(super) fn ensure_ordinary(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneOrdinary>() {\n        return;\n    }\n    let menubar = cx.new(|cx| {\n        Menubar::new(\n            \"scene.menubar\",\n            [\n                MenubarMenu::new(\n                    \"file\",\n                    \"File\",\n                    [\n                        MenuItem::command(\"file.new\", \"New run\").shortcut(\"cmd-n\"),\n                        MenuItem::command(\"file.open\", \"Open workspace\").shortcut(\"cmd-o\"),\n                        MenuItem::separator(\"file.rule\"),\n                        MenuItem::submenu(\n                            \"file.export\",\n                            \"Export\",\n                            [\n                                MenuItem::command(\"file.export.json\", \"As JSON\"),\n                                MenuItem::command(\"file.export.text\", \"As plain text\"),\n                            ],\n                        ),\n                    ],\n                ),\n                MenubarMenu::new(\n                    \"edit\",\n                    \"Edit\",\n                    [\n                        MenuItem::command(\"edit.undo\", \"Undo\").shortcut(\"cmd-z\"),\n                        MenuItem::check(\"edit.wrap\", \"Wrap lines\", true),\n                    ],\n                ),\n                MenubarMenu::new(\"view\", \"View\", [MenuItem::command(\"view.zoom\", \"Zoom in\")]),\n                MenubarMenu::new(\"policy\", \"Policy\", []).disabled(true),\n            ],\n            window,\n            cx,\n        )\n    });\n    menubar.update(cx, |bar, cx| bar.open(\"file\", window, cx));\n\n    let hover_card = cx.new(|cx| {\n        HoverCard::new(\"scene.hover-card\", window, cx)\n            .name(\"Run 4821\")\n            .trigger(|_, cx| {\n                let theme = cx.theme().clone();\n                crate::foundation::text(&theme, TypeScale::Caption, \"run 4821\")\n                    .text_color(theme.colors.accent)\n                    .into_any_element()\n            })\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .column()\n                    // A column stretches its children across, and a badge\n                    // stretched that far stops reading as a label and starts\n                    // reading as a filled bar.\n                    .items_start()\n                    .gap(px(theme.spacing.xs))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Strong,\n                        \"Nightly regression sweep\",\n                    ))\n                    .child(\n                        crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Finished in 4 minutes, 12 checks, none failed.\",\n                        )\n                        .text_tone(&theme, TextTone::Muted),\n                    )\n                    .child(Badge::new(\"Ready\").success())\n                    .into_any_element()\n            })\n    });\n    hover_card.update(cx, |card, cx| card.open(cx));\n\n    // Nobody has pressed this one. It is the state a reader sees almost all\n    // of the time, and it was the one state of the three no image held.\n    let copy_idle = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-idle\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Ok(()))\n    });\n\n    // The confirmation outlives the capture. At its ordinary length it expires\n    // partway through a run, so which of the two states this scene showed\n    // depended on how long the run took to reach it.\n    let copy = cx.new(|cx| {\n        CopyButton::new(\"scene.copy\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .confirmation(std::time::Duration::from_secs(60 * 60))\n            .copier(|_, _| Ok(()))\n    });\n    copy.update(cx, |button, cx| button.copy(cx));\n\n    let copy_refused = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-refused\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Err(\"The clipboard did not take it.\".into()))\n    });\n    copy_refused.update(cx, |button, cx| button.copy(cx));\n\n    cx.set_global(SceneOrdinary {\n        menubar,\n        hover_card,\n        copy_idle,\n        copy,\n        copy_refused,\n    });\n}\n"
    },
    {
      "name": "continuous-heatmap-transition",
      "capture": "cargo run -p xtask -- headless capture continuous-heatmap-transition",
      "kind": "exhibit",
      "subjects": [
        "ContinuousHeatmap"
      ],
      "uses": [
        "ContinuousHeatmap"
      ],
      "example": "fn continuous_heatmap_transition(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let revision = crate::motion::keyed::slot::<usize>(\n        &\"scene.heat.transition-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let value = match *revision.borrow() % 3 {\n        0 => Some(-8.0),\n        1 => Some(32.0),\n        _ => None,\n    };\n    let next = revision.clone();\n    stack(&theme)\n        .w(px(440.0))\n        .child(caption(\n            &theme,\n            \"Synthetic observations · exact latest text with animated color; missing is never zero\",\n        ))\n        .child(\n            Button::new(\"scene.heat.advance\")\n                .label(\"Advance reading\")\n                .on_click(move |window, _| {\n                    *next.borrow_mut() += 1;\n                    window.refresh();\n                }),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.heat.live\",\n                \"Controlled measurement\",\n                HeatColorScale::diverging(\n                    [-8.0, 2.0, 32.0],\n                    theme.colors.accent,\n                    theme.colors.canvas,\n                    theme.colors.danger,\n                )\n                .expect(\"domain\"),\n                PlotState::Ready(vec![\n                    ContinuousHeatCell::new(\"changing\", \"row\", \"a\", \"Changing reading\", value),\n                    ContinuousHeatCell::new(\"zero\", \"row\", \"b\", \"Verified zero\", Some(0.0)),\n                ]),\n            )\n            .rows([\"row\"])\n            .columns([\"a\", \"b\"])\n            .motion(true),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "heatmap-reordering",
      "capture": "cargo run -p xtask -- headless capture heatmap-reordering",
      "kind": "exhibit",
      "subjects": [
        "ContinuousHeatmap"
      ],
      "uses": [
        "ContinuousHeatmap"
      ],
      "example": "fn heatmap_reordering(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<MatrixRevisions>(\n        &\"scene.heat.reorder-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision % 3;\n    let rows = match revision {\n        0 => vec![\"east\", \"west\"],\n        1 => vec![\"west\", \"north\", \"east\"],\n        _ => vec![\"east\"],\n    };\n    let columns = match revision {\n        0 => vec![\"a\", \"b\", \"c\"],\n        1 => vec![\"c\", \"a\", \"d\", \"b\"],\n        _ => vec![\"a\", \"b\"],\n    };\n    let cells = rows\n        .iter()\n        .flat_map(|row| {\n            columns.iter().map(move |column| {\n                let reading = match (*row, *column) {\n                    (\"east\", \"a\") => Some(3.0),\n                    (\"east\", \"b\") => Some(12.0),\n                    (\"west\", \"a\") => Some(42.0),\n                    (\"west\", \"c\") => Some(81.0),\n                    (\"north\", \"b\") => Some(65.0),\n                    _ => None,\n                };\n                ContinuousHeatCell::new(\n                    format!(\"{row}-{column}\"),\n                    *row,\n                    *column,\n                    format!(\"{row} / {column}\"),\n                    reading,\n                )\n            })\n        })\n        .collect();\n    let next = state.clone();\n    let direct = state.clone();\n    let selection = state.clone();\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"Synthetic keyed axes · reorder, enter, exit and reinsert · raw readings never tween\",\n        ))\n        .child(\n            div()\n                .row()\n                .gap_token(&theme, Space::Sm)\n                .child(\n                    Button::new(\"scene.heat.reorder.advance\")\n                        .label(\"Advance axes\")\n                        .on_click(move |window, _| {\n                            next.borrow_mut().revision += 1;\n                            window.refresh();\n                        }),\n                )\n                .child(\n                    Button::new(\"scene.heat.reorder.direct\")\n                        .label(if state.borrow().direct {\n                            \"Enable animation\"\n                        } else {\n                            \"Direct updates\"\n                        })\n                        .on_click(move |window, _| {\n                            let mut s = direct.borrow_mut();\n                            s.direct = !s.direct;\n                            window.refresh();\n                        }),\n                ),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.heat.reorder\",\n                \"Stable caller coordinates\",\n                HeatColorScale::sequential([0.0, 100.0], theme.colors.canvas, theme.colors.accent)\n                    .expect(\"domain\"),\n                PlotState::Ready(cells),\n            )\n            .rows(rows)\n            .columns(columns)\n            .animate(!state.borrow().direct)\n            .on_current(move |id, window, _| {\n                selection.borrow_mut().selected = Some(id);\n                window.refresh();\n            })\n            .when_some(state.borrow().selected.clone(), |chart, id| {\n                chart.current(id)\n            }),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "sankey-motion",
      "capture": "cargo run -p xtask -- headless capture sankey-motion",
      "kind": "exhibit",
      "subjects": [
        "SankeyChart"
      ],
      "uses": [
        "SankeyChart"
      ],
      "example": "fn sankey_motion(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<FlowRevisions>(\n        &\"scene.sankey.motion-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision % 3;\n    let flows = if revision == 0 {\n        vec![(\"ad\", \"a\", \"d\", 70.0), (\"bc\", \"b\", \"c\", 30.0)]\n    } else if revision == 1 {\n        vec![(\"ad\", \"a\", \"d\", 20.0), (\"bc\", \"b\", \"c\", 80.0)]\n    } else {\n        vec![(\"ad\", \"a\", \"d\", 45.0)]\n    };\n    let mut nodes = Vec::new();\n    let mut links = Vec::new();\n    let mut weights = Vec::new();\n    for (id, source, target, value) in flows {\n        for node in [source, target] {\n            nodes.push(SankeyNode::new(\n                node,\n                node,\n                value.to_string(),\n                Default::default(),\n            ));\n        }\n        links.push(SankeyLink::new(\n            id,\n            source,\n            target,\n            format!(\"{source} → {target}\"),\n            value.to_string(),\n            Default::default(),\n            Default::default(),\n            0.0,\n        ));\n        weights.push(value);\n    }\n    let (data, _) = SankeyData::new(nodes, links)\n        .layout_ordered(\n            &weights,\n            0.08,\n            0.1,\n            SankeyAlignment::Left,\n            SankeyOrder::Barycenter,\n        )\n        .expect(\"conserved synthetic flow\");\n    let next = state.clone();\n    let direct = state.clone();\n    let select = state.clone();\n    stack(&theme).w(px(600.0)).child(caption(&theme,\"Synthetic conserved endpoint layouts · ribbons remain attached during motion; exact current values\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.sankey.motion.advance\").label(\"Advance flows\").on_click(move |window,_|{next.borrow_mut().revision+=1;window.refresh();}))\n            .child(Button::new(\"scene.sankey.motion.direct\").label(if state.borrow().direct {\"Enable animation\"} else {\"Direct updates\"}).on_click(move |window,_|{let mut s=direct.borrow_mut();s.direct = !s.direct;window.refresh();})))\n        .child(SankeyChart::new(\"scene.sankey.motion\",\"Keyed node and ribbon updates\",PlotState::Ready(data)).animate(!state.borrow().direct).labels(true)\n            .selected(state.borrow().selected.clone()).on_current(move |id,window,_|{select.borrow_mut().selected=Some(id);window.refresh();}))\n        .into_any_element()\n}\n\npub(super) fn sankey_layout(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let graph = SankeyData::new(\n        [\n            (\"a\", \"Incoming A\", \"70\"),\n            (\"b\", \"Incoming B\", \"30\"),\n            (\"c\", \"Destination C\", \"30\"),\n            (\"d\", \"Destination D\", \"70\"),\n        ]\n        .map(|(id, label, value)| SankeyNode::new(id, label, value, Default::default())),\n        [\n            (\"ad\", \"a\", \"d\", \"A → D\", \"70\"),\n            (\"bc\", \"b\", \"c\", \"B → C\", \"30\"),\n        ]\n        .map(|(id, source, target, label, value)| {\n            SankeyLink::new(\n                id,\n                source,\n                target,\n                label,\n                value,\n                Default::default(),\n                Default::default(),\n                0.0,\n            )\n        }),\n    );\n    stack(&theme)\n        .w(px(860.0))\n        .child(caption(\n            &theme,\n            \"Synthetic conserved flows · same 70:30 scale · deterministic crossing reduction\",\n        ))\n        .child(\n            div().row().gap_token(&theme, Space::Lg).children(\n                [\n                    (SankeyOrder::Input, \"input\", \"Input order\"),\n                    (SankeyOrder::Barycenter, \"ordered\", \"Barycenter order\"),\n                ]\n                .map(|(order, id, label)| {\n                    let (data, _) = graph\n                        .clone()\n                        .layout_ordered(&[70.0, 30.0], 0.08, 0.1, SankeyAlignment::Left, order)\n                        .expect(\"valid flows\");\n                    div().w(px(380.0)).child(\n                        SankeyChart::new(\n                            Ident::new(\"scene.sankey\").child(id),\n                            label,\n                            PlotState::Ready(data),\n                        )\n                        .labels(true)\n                        .on_current(|_, _, _| {}),\n                    )\n                }),\n            ),\n        )\n        .into_any_element()\n}\n\npub(super) fn raw_candlestick(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::display::chart::{\n        cartesian::CartesianChart,\n        data::{ChartScale, ChartValue, RawPoint, RawSeries, SeriesMark, ValueAxis},\n        scale::{NumericScale, ScaleKind},\n    };\n    use crate::display::plot::RawOhlc;\n    let theme = cx.theme().clone();\n    let day = 86_400_000.0;\n    let x = ChartScale::Numeric(\n        NumericScale::new(ScaleKind::Time, [0.0, 4.0 * day]).expect(\"time domain\"),\n    );\n    let candles = RawOhlc::series(\n        \"ohlc\",\n        \"price\",\n        [\n            RawOhlc::new(\n                \"day-a\",\n                day,\n                [30.0, 60.0, 20.0, 50.0],\n                \"Day A\",\n                \"O30 H60 L20 C50\",\n            ),\n            RawOhlc::new(\n                \"day-b\",\n                day * 2.0,\n                [65.0, 75.0, 35.0, 40.0],\n                \"Day B\",\n                \"O65 H75 L35 C40\",\n            ),\n            RawOhlc::new(\n                \"day-c\",\n                day * 3.0,\n                [45.0, 55.0, 30.0, 45.0],\n                \"Day C · doji\",\n                \"O45 H55 L30 C45\",\n            ),\n        ],\n        theme.colors.success,\n        theme.colors.danger,\n    )\n    .expect(\"validated OHLC\");\n    let volume = RawSeries::new(\"volume\", \"volume\", SeriesMark::Bar)\n        .tint(theme.colors.accent.opacity(0.22))\n        .points(\n            [\n                (\"day-a\", day, 120.0),\n                (\"day-b\", 2.0 * day, 260.0),\n                (\"day-c\", 3.0 * day, 80.0),\n            ]\n            .map(|(id, x, value)| RawPoint::new(id, ChartValue::Number(x), Some(value))),\n        );\n    let overlay = RawSeries::new(\"reference\", \"price\", SeriesMark::Line)\n        .tint(theme.colors.warning)\n        .points(\n            [\n                (\"day-a\", day, 42.0),\n                (\"day-b\", 2.0 * day, 48.0),\n                (\"day-c\", 3.0 * day, 46.0),\n            ]\n            .map(|(id, x, value)| RawPoint::new(id, ChartValue::Number(x), Some(value))),\n        );\n    stack(&theme).w(px(900.0)).child(caption(&theme, \"Synthetic OHLC · shared UTC-duration x scale · independent volume axis · caller overlay\"))\n        .child(CartesianChart::new(\"scene.raw-ohlc\", \"OHLC with volume and overlay\", x, [\n            ValueAxis { id: \"price\".into(), label: \"Price\".into(), scale: NumericScale::new(ScaleKind::Linear, [0.0, 80.0]).expect(\"price domain\") },\n            ValueAxis { id: \"volume\".into(), label: \"Volume\".into(), scale: NumericScale::new(ScaleKind::Linear, [0.0, 300.0]).expect(\"volume domain\") },\n        ]).series([volume, candles, overlay]).format_ticks(move |axis, value| if axis == \"x\" { format!(\"D{:.0}\", value / day).into() } else { value.to_string().into() }).selected(Some(ChartSelection::new(\"ohlc\", \"day-b\"))).on_event(|_, _, _| {}))\n        .into_any_element()\n}\n\n//! Raw-value specialized visualization exhibits, using original synthetic data.\n\nuse super::support::*;\nuse crate::display::specialized::{\n    HierarchyNode, SpecializedChart, SpecializedData, WeightedValue,\n};\n\n#[derive(Default)]\nstruct Exploration {\n    revision: usize,\n    focus: Option<SharedString>,\n    selected: Option<SharedString>,\n    refuse: bool,\n}\n\npub(super) fn specialized_exploration(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<Exploration>(\n        &\"scene.specialized.explore-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision;\n    let selected = state.borrow().selected.clone();\n    let focus = state\n        .borrow()\n        .focus\n        .clone()\n        .unwrap_or_else(|| \"total\".into());\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All samples\",\n        vec![\n            HierarchyNode::branch(\n                \"group\",\n                \"Processing\",\n                vec![\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"parse\",\n                        \"Parsing\",\n                        if revision.is_multiple_of(2) {\n                            12.0\n                        } else {\n                            47.0\n                        },\n                    )),\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"execute\",\n                        \"Execution\",\n                        if revision.is_multiple_of(2) {\n                            68.0\n                        } else {\n                            13.0\n                        },\n                    )),\n                ],\n            ),\n            HierarchyNode::leaf(WeightedValue::new(\"deliver\", \"Delivery\", 20.0)),\n        ],\n    );\n    let next = state.clone();\n    let refusal = state.clone();\n    let charts = [\n        (\n            \"tree\",\n            \"Area · drill/back\",\n            SpecializedData::treemap_at(&root, &focus),\n        ),\n        (\n            \"sun\",\n            \"Angle · drill/back\",\n            SpecializedData::sunburst_at(&root, &focus),\n        ),\n        (\n            \"funnel\",\n            \"Width · enter/update/exit\",\n            SpecializedData::funnel(match revision % 3 {\n                0 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 120.0),\n                    WeightedValue::new(\"finish\", \"Finished\", 24.0),\n                ],\n                1 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 75.0),\n                    WeightedValue::new(\"new\", \"New sample\", 38.0),\n                ],\n                _ => vec![],\n            }),\n        ),\n    ];\n    stack(&theme).w(px(860.0))\n        .child(caption(&theme,\"Synthetic live fixtures · advance during motion to interrupt; empty exit shapes are not selectable\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.specialized.advance\").label(\"Advance samples\").on_click(move |window,_| { next.borrow_mut().revision+=1; window.refresh(); }))\n            .child(Button::new(\"scene.specialized.refuse\").label(if state.borrow().refuse { \"Accept proposals\" } else { \"Refuse proposals\" }).on_click(move |window,_| { let mut s=refusal.borrow_mut(); s.refuse = !s.refuse; window.refresh(); })))\n        .child(div().row().gap_token(&theme,Space::Lg).children(charts.into_iter().map(|(id,label,data)| {\n            let select = state.clone();\n            let navigate = state.clone();\n            div().w(px(260.0)).child(SpecializedChart::new(Ident::new(\"scene.specialized.live\").child(id),label,PlotState::Ready(data.expect(\"valid exploration fixture\")))\n                .motion(true).labels(true).selected(selected.clone())\n                .on_current(move |id,window,_| { let mut s=select.borrow_mut(); if !s.refuse { s.selected=Some(id); } window.refresh(); })\n                .on_navigate(move |id,window,_| { let mut s=navigate.borrow_mut(); if !s.refuse { s.focus=Some(id); } window.refresh(); }))\n        }))).into_any_element()\n}\n\npub(super) fn specialized(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let leaf = |id, label, value| HierarchyNode::leaf(WeightedValue::new(id, label, value));\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All work\",\n        vec![\n            leaf(\"build\", \"Build\", 60.0),\n            HierarchyNode::branch(\n                \"verify\",\n                \"Verification\",\n                vec![leaf(\"tests\", \"Tests\", 30.0), leaf(\"lint\", \"Lint\", 10.0)],\n            ),\n        ],\n    );\n    let fixtures = [\n        (\n            \"treemap\",\n            \"Treemap · area = work\",\n            SpecializedData::treemap(&root),\n        ),\n        (\n            \"sunburst\",\n            \"Sunburst · angle = work\",\n            SpecializedData::sunburst(&root),\n        ),\n        (\n            \"funnel\",\n            \"Funnel · width = count\",\n            SpecializedData::funnel(vec![\n                WeightedValue::new(\"seen\", \"Seen\", 120.0),\n                WeightedValue::new(\"started\", \"Started\", 75.0),\n                WeightedValue::new(\"done\", \"Completed\", 24.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(940.0))\n        .child(caption(\n            &theme,\n            \"Synthetic hierarchy fixtures · select marks with arrow keys or value keys\",\n        ))\n        .child(\n            div()\n                .row()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(280.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid hierarchy\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .child(\n            div().w(px(220.0)).child(SpecializedChart::new(\n                \"scene.specialized.zero\",\n                \"Zero is measured, not missing\",\n                PlotState::Stale {\n                    data: SpecializedData::funnel(vec![WeightedValue::new(\n                        \"zero\",\n                        \"Measured zero\",\n                        0.0,\n                    )])\n                    .expect(\"zero\"),\n                    reason: \"Refresh refused; verified zero retained\".into(),\n                },\n            )),\n        )\n        .into_any_element()\n}\n\npub(super) fn specialized_distribution(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let fixtures = [\n        (\n            \"histogram\",\n            \"Histogram · count per bin\",\n            SpecializedData::histogram(&[-2.0, -1.0, 0.0, 0.0, 1.0, 3.0], &[-2.0, 0.0, 1.0, 3.0]),\n        ),\n        (\n            \"box\",\n            \"Box · R-7 / Tukey · domain 0–110\",\n            SpecializedData::box_plot(\n                \"latency\",\n                \"Latency\",\n                &[1.0, 2.0, 4.0, 7.0, 8.0, 100.0],\n                [0.0, 110.0],\n            ),\n        ),\n        (\n            \"range\",\n            \"Range · domain −10–30\",\n            SpecializedData::range(\"interval\", \"Expected interval\", -4.0, 18.0, [-10.0, 30.0]),\n        ),\n        (\n            \"waterfall\",\n            \"Waterfall · signed changes\",\n            SpecializedData::waterfall(vec![\n                WeightedValue::new(\"open\", \"Opening\", 60.0),\n                WeightedValue::new(\"cost\", \"Cost\", -90.0),\n                WeightedValue::new(\"credit\", \"Credit\", 10.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(1000.0))\n        .child(caption(\n            &theme,\n            \"Synthetic distribution fixtures · explicit bin edges and R-7 / Tukey statistics\",\n        ))\n        .child(\n            div()\n                .row()\n                .flex_wrap()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(440.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid synthetic fixture\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .into_any_element()\n}\n\n//! A schema, rendered as data or as a form.\n\nuse super::support::*;\n\n/// A document with the three facts a viewer usually confuses: a key holding\n/// `null`, a key holding an empty object, and a key that is simply not here.\npub(super) fn scene_document() -> JsonValue {\n    JsonValue::object([\n        (\"id\", JsonValue::string(\"run-4812\")),\n        (\"attempts\", JsonValue::number(\"3\")),\n        (\"streaming\", JsonValue::Bool(true)),\n        // Nothing has been recorded here yet, which is not the same as the\n        // key being missing: `resumed_from` is missing, and says nothing.\n        (\"cursor\", JsonValue::Null),\n        (\"labels\", JsonValue::object(Vec::<(&str, JsonValue)>::new())),\n        (\n            \"credentials\",\n            JsonValue::object([(\"token\", JsonValue::redacted(\"51 characters\"))]),\n        ),\n        (\n            \"request\",\n            JsonValue::object([\n                (\"method\", JsonValue::string(\"POST\")),\n                (\n                    \"headers\",\n                    JsonValue::object([\n                        (\"content-type\", JsonValue::string(\"application/json\")),\n                        (\"authorization\", JsonValue::redacted(\"a value\")),\n                    ]),\n                ),\n            ]),\n        ),\n        (\n            \"steps\",\n            JsonValue::array([\n                JsonValue::string(\"plan\"),\n                JsonValue::string(\"apply\"),\n                JsonValue::object([(\"retries\", JsonValue::number(\"0\"))]),\n            ]),\n        ),\n    ])\n}\n\npub(super) 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}\n\n/// The form kept across frames.\n///\n/// Its fields own carets, open menus and a selection, so rebuilding it every\n/// frame would throw away whatever had been typed into it.\npub(super) struct SceneSchemaForm {\n    form: Entity<SchemaForm>,\n}\n\nimpl Global for SceneSchemaForm {}\n\npub(super) fn scene_schema() -> Schema {\n    Schema::new()\n        .field(\n            SchemaField::new(\n                \"path\",\n                SchemaKind::Text {\n                    placeholder: Some(\"relative to the workspace\".into()),\n                    secret: false,\n                },\n            )\n            .label(\"File\")\n            .description(\"Which file the call reads\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\n                \"max_bytes\",\n                SchemaKind::Integer(NumberBounds::new().min(1.0).max(65_536.0).step(1024.0)),\n            )\n            .label(\"Maximum bytes\"),\n        )\n        .field(\n            SchemaField::new(\"follow_symlinks\", SchemaKind::Boolean).label(\"Follow symbolic links\"),\n        )\n        .field(\n            SchemaField::new(\n                \"encoding\",\n                SchemaKind::Enum(vec![\n                    SchemaChoice::new(\"utf-8\", \"UTF-8\"),\n                    SchemaChoice::new(\"latin-1\", \"Latin-1\"),\n                ]),\n            )\n            .label(\"Encoding\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\"attachments\", SchemaKind::Files { max: Some(2) })\n                .label(\"Attachments\")\n                .description(\"Paths are acquired and accepted by the host\"),\n        )\n        .field(\n            SchemaField::new(\n                \"headers\",\n                SchemaKind::List {\n                    item: Box::new(SchemaField::new(\n                        \"header\",\n                        SchemaKind::Object(vec![\n                            SchemaField::new(\n                                \"name\",\n                                SchemaKind::Text {\n                                    placeholder: Some(\"Header name\".into()),\n                                    secret: false,\n                                },\n                            )\n                            .label(\"Name\")\n                            .required(true),\n                            SchemaField::new(\"enabled\", SchemaKind::Boolean).label(\"Enabled\"),\n                        ]),\n                    )),\n                    max: Some(3),\n                },\n            )\n            .label(\"Headers\"),\n        )\n        .field(\n            SchemaField::new(\n                \"limits\",\n                SchemaKind::Object(vec![\n                    SchemaField::new(\"timeout_ms\", SchemaKind::Integer(NumberBounds::new()))\n                        .label(\"Timeout in milliseconds\"),\n                ]),\n            )\n            .label(\"Limits\"),\n        )\n        .field(\n            SchemaField::new(\n                \"matcher\",\n                SchemaKind::Unrenderable(\n                    \"This argument is one of three shapes at once, and no single control \\\n                     stands for that.\"\n                        .into(),\n                ),\n            )\n            .label(\"Matcher\")\n            .required(true),\n        )\n}\n\npub(super) fn schema_form(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSchemaForm>() {\n        set_schema_file_policy(DefaultSchemaFilePolicy, cx);\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            let _ = form.set_field_validation(\"encoding\", ValidationState::Validating, cx);\n            form.set_files(\"attachments\", vec![\"/workspace/brief.md\".into()], cx)\n                .expect(\"the scene's permissive file policy accepts its fixture\");\n            form.add_list_item(\"headers\", window, 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}\n\n//! What more than one family of scenes needs.\n//!\n//! Everything here is used by scenes in at least two families. A fixture\n//! that only one family builds lives in that family, next to the scenes\n//! that read it, so that moving a component moves its fixture with it.\n\npub(super) use gpui::{\n    AnyElement, App, Corners, DevicePixels, Entity, Focusable, Global, IntoElement, Pixels,\n    RenderImage, SharedString, SpriteBlendMode, SpriteColorMode, SpriteInstance, SpriteTransform,\n    Window, bounds, canvas, conic_gradient_stops, div, linear_color_stop, point, prelude::*, px,\n    radial_gradient_stops, radians, size,\n};\npub(super) use gpui_kit_assets::Icon;\npub(super) use gpui_kit_semantics::{NodeSpec, Role, Semantic};\npub(super) use gpui_kit_theme::{Radius, Space, Surface, SyntaxColor, TextTone, Theme, TypeScale};\npub(super) use std::rc::Rc;\npub(super) use std::sync::{Arc, OnceLock};\npub(super) use std::time::Duration;\n\npub(super) use crate::controls::combobox::Combobox;\npub(super) use crate::controls::input::TextInput;\npub(super) use crate::controls::keybinding_recorder::KeybindingRecorder;\npub(super) use crate::controls::number_input::NumberInput;\npub(super) use crate::controls::select::{Select, SelectOption};\npub(super) use crate::controls::split_button::SplitButton;\npub(super) use crate::controls::tag_input::TagInput;\npub(super) use crate::controls::textarea::{Frame, TextArea};\npub(super) use crate::display::badge::Tone;\npub(super) use crate::display::icon::{Icon as IconView, IconTone};\npub(super) use crate::foundation::ActiveTheme;\npub(super) use crate::foundation::direction::{ActiveDirection, DirectionalExt};\npub(super) use crate::interaction::dnd;\npub(super) use crate::overlay::toast::push as toast_push;\npub(super) use crate::overlay::{Edge, Kbd, Overlay, Placement, Tooltip, Tooltipped};\npub(super) use crate::prelude::*;\npub(super) use crate::strings::{ActiveStrings, StringKey};\n\npub(super) fn stack(theme: &Theme) -> gpui::Div {\n    div()\n        .column()\n        .gap(px(theme.spacing.md))\n        .p(px(theme.spacing.lg))\n        .page(theme)\n        .font_family(theme.typography.sans.clone())\n}\n\npub(super) fn row(theme: &Theme) -> gpui::Div {\n    div()\n        .row()\n        .flex_wrap()\n        .gap(px(theme.spacing.sm))\n        .items_center()\n}\n\n/// A pane of fixture copy, for a scene that needs something on both sides of a\n/// divider or below a viewport.\npub(super) fn filler(theme: &Theme, title: &'static str, lines: usize) -> gpui::Div {\n    let mut pane = div()\n        .flex()\n        .flex_col()\n        .gap(px(theme.space(Space::Xs)))\n        .p(px(theme.space(Space::Md)))\n        .child(crate::foundation::text(\n            theme,\n            TypeScale::Label,\n            SharedString::from(title),\n        ));\n    for line in 1..=lines {\n        pane = pane.child(\n            crate::foundation::text(\n                theme,\n                TypeScale::Code,\n                SharedString::from(format!(\"Fixture line {line:02}\")),\n            )\n            .text_tone(theme, TextTone::Muted),\n        );\n    }\n    pane\n}\n\n/// A caption naming the state a drag scene was staged in.\npub(super) fn caption(theme: &Theme, text: impl Into<SharedString>) -> gpui::Div {\n    crate::foundation::text(theme, TypeScale::Caption, text.into())\n        .text_tone(theme, TextTone::Muted)\n}\n\n/// The element a host hands back for an image this crate did not fetch.\n///\n/// A flat fill rather than a picture, because the crate ships no photographs\n/// and a scene has to photograph the same pixels every run. Neutral, and\n/// quieter than the surface it sits in: a stand-in painted in the accent was\n/// the loudest thing in every scene that used one, which said the placeholder\n/// mattered more than the component being reviewed around it.\npub(super) fn scene_picture(label: &'static str, cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .size_full()\n        .flex()\n        .flex_col()\n        .items_center()\n        .justify_center()\n        .gap(px(theme.space(gpui_kit_theme::Space::Xs)))\n        .bg(theme.colors.sunken)\n        .child(\n            gpui_kit_assets::icon(gpui_kit_assets::Icon::Image)\n                .size(px(theme.typography.subtitle.line_height))\n                .text_color(theme.colors.text_faint),\n        )\n        .child(\n            crate::foundation::text(&theme, TypeScale::Caption, SharedString::new_static(label))\n                .text_tone(&theme, TextTone::Faint),\n        )\n        .into_any_element()\n}\n\n/// The ordinary-application views that own state across frames.\npub(super) struct SceneOrdinary {\n    pub(super) menubar: Entity<Menubar>,\n    pub(super) hover_card: Entity<HoverCard>,\n    pub(super) copy_idle: Entity<CopyButton>,\n    pub(super) copy: Entity<CopyButton>,\n    pub(super) copy_refused: Entity<CopyButton>,\n}\n\nimpl Global for SceneOrdinary {}\n\npub(super) fn ensure_ordinary(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneOrdinary>() {\n        return;\n    }\n    let menubar = cx.new(|cx| {\n        Menubar::new(\n            \"scene.menubar\",\n            [\n                MenubarMenu::new(\n                    \"file\",\n                    \"File\",\n                    [\n                        MenuItem::command(\"file.new\", \"New run\").shortcut(\"cmd-n\"),\n                        MenuItem::command(\"file.open\", \"Open workspace\").shortcut(\"cmd-o\"),\n                        MenuItem::separator(\"file.rule\"),\n                        MenuItem::submenu(\n                            \"file.export\",\n                            \"Export\",\n                            [\n                                MenuItem::command(\"file.export.json\", \"As JSON\"),\n                                MenuItem::command(\"file.export.text\", \"As plain text\"),\n                            ],\n                        ),\n                    ],\n                ),\n                MenubarMenu::new(\n                    \"edit\",\n                    \"Edit\",\n                    [\n                        MenuItem::command(\"edit.undo\", \"Undo\").shortcut(\"cmd-z\"),\n                        MenuItem::check(\"edit.wrap\", \"Wrap lines\", true),\n                    ],\n                ),\n                MenubarMenu::new(\"view\", \"View\", [MenuItem::command(\"view.zoom\", \"Zoom in\")]),\n                MenubarMenu::new(\"policy\", \"Policy\", []).disabled(true),\n            ],\n            window,\n            cx,\n        )\n    });\n    menubar.update(cx, |bar, cx| bar.open(\"file\", window, cx));\n\n    let hover_card = cx.new(|cx| {\n        HoverCard::new(\"scene.hover-card\", window, cx)\n            .name(\"Run 4821\")\n            .trigger(|_, cx| {\n                let theme = cx.theme().clone();\n                crate::foundation::text(&theme, TypeScale::Caption, \"run 4821\")\n                    .text_color(theme.colors.accent)\n                    .into_any_element()\n            })\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .column()\n                    // A column stretches its children across, and a badge\n                    // stretched that far stops reading as a label and starts\n                    // reading as a filled bar.\n                    .items_start()\n                    .gap(px(theme.spacing.xs))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Strong,\n                        \"Nightly regression sweep\",\n                    ))\n                    .child(\n                        crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Finished in 4 minutes, 12 checks, none failed.\",\n                        )\n                        .text_tone(&theme, TextTone::Muted),\n                    )\n                    .child(Badge::new(\"Ready\").success())\n                    .into_any_element()\n            })\n    });\n    hover_card.update(cx, |card, cx| card.open(cx));\n\n    // Nobody has pressed this one. It is the state a reader sees almost all\n    // of the time, and it was the one state of the three no image held.\n    let copy_idle = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-idle\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Ok(()))\n    });\n\n    // The confirmation outlives the capture. At its ordinary length it expires\n    // partway through a run, so which of the two states this scene showed\n    // depended on how long the run took to reach it.\n    let copy = cx.new(|cx| {\n        CopyButton::new(\"scene.copy\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .confirmation(std::time::Duration::from_secs(60 * 60))\n            .copier(|_, _| Ok(()))\n    });\n    copy.update(cx, |button, cx| button.copy(cx));\n\n    let copy_refused = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-refused\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Err(\"The clipboard did not take it.\".into()))\n    });\n    copy_refused.update(cx, |button, cx| button.copy(cx));\n\n    cx.set_global(SceneOrdinary {\n        menubar,\n        hover_card,\n        copy_idle,\n        copy,\n        copy_refused,\n    });\n}\n"
    },
    {
      "name": "continuous-heatmap",
      "capture": "cargo run -p xtask -- headless capture continuous-heatmap",
      "kind": "exhibit",
      "subjects": [
        "ContinuousHeatmap"
      ],
      "uses": [
        "ContinuousHeatmap"
      ],
      "example": "fn continuous_heatmap(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let diverging = HeatColorScale::diverging(\n        [-8.0, 2.0, 32.0],\n        theme.colors.accent,\n        theme.colors.canvas,\n        theme.colors.danger,\n    )\n    .expect(\"explicit domain\");\n    let sequential =\n        HeatColorScale::sequential([0.0, 100.0], theme.colors.canvas, theme.colors.success)\n            .expect(\"explicit domain\");\n    let cells = [\n        (\"east\", \"a\", Some(-8.0)),\n        (\"east\", \"b\", Some(0.0)),\n        (\"east\", \"c\", Some(2.0)),\n        (\"west\", \"a\", Some(17.0)),\n        (\"west\", \"b\", Some(32.0)),\n        (\"west\", \"c\", None),\n    ]\n    .into_iter()\n    .map(|(row, column, reading)| {\n        ContinuousHeatCell::new(\n            format!(\"{row}-{column}\"),\n            row,\n            column,\n            format!(\"Synthetic observation {row} / {column}\"),\n            reading,\n        )\n    })\n    .collect::<Vec<_>>();\n    stack(&theme)\n        .w(px(800.0))\n        .child(caption(\n            &theme,\n            \"Synthetic measurements · explicit neutral = 2 · no observation is not zero\",\n        ))\n        .child(\n            div().w(px(720.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.wide\",\n                    \"Diverging measurements\",\n                    diverging,\n                    PlotState::Ready(cells.clone()),\n                )\n                .rows([\"east\", \"west\"])\n                .columns([\"a\", \"b\", \"c\"])\n                .current(\"east-c\")\n                .on_current(|_, _, _| {}),\n            ),\n        )\n        .child(\n            div().w(px(240.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.narrow\",\n                    \"Narrow · last verified values\",\n                    diverging,\n                    PlotState::Stale {\n                        data: cells,\n                        reason: \"Refresh refused\".into(),\n                    },\n                )\n                .rows([\"east\", \"west\"])\n                .columns([\"a\", \"b\", \"c\"]),\n            ),\n        )\n        .child(\n            div().w(px(400.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.sequential\",\n                    \"Sequential · domain 0–100\",\n                    sequential,\n                    PlotState::Ready(vec![\n                        ContinuousHeatCell::new(\"zero\", \"r\", \"a\", \"Measured zero\", Some(0.0)),\n                        ContinuousHeatCell::new(\"middle\", \"r\", \"b\", \"Middle\", Some(50.0)),\n                        ContinuousHeatCell::new(\"high\", \"r\", \"c\", \"High\", Some(100.0)),\n                    ]),\n                )\n                .rows([\"r\"])\n                .columns([\"a\", \"b\", \"c\"]),\n            ),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.continuous.invalid\",\n                \"Invalid readings are errors\",\n                sequential,\n                PlotState::Ready(vec![ContinuousHeatCell::new(\n                    \"outside\",\n                    \"r\",\n                    \"c\",\n                    \"Outside domain\",\n                    Some(101.0),\n                )]),\n            )\n            .rows([\"r\"])\n            .columns([\"c\"]),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "sankey-layout",
      "capture": "cargo run -p xtask -- headless capture sankey-layout",
      "kind": "exhibit",
      "subjects": [
        "SankeyChart"
      ],
      "uses": [
        "SankeyChart"
      ],
      "example": "fn sankey_layout(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let graph = SankeyData::new(\n        [\n            (\"a\", \"Incoming A\", \"70\"),\n            (\"b\", \"Incoming B\", \"30\"),\n            (\"c\", \"Destination C\", \"30\"),\n            (\"d\", \"Destination D\", \"70\"),\n        ]\n        .map(|(id, label, value)| SankeyNode::new(id, label, value, Default::default())),\n        [\n            (\"ad\", \"a\", \"d\", \"A → D\", \"70\"),\n            (\"bc\", \"b\", \"c\", \"B → C\", \"30\"),\n        ]\n        .map(|(id, source, target, label, value)| {\n            SankeyLink::new(\n                id,\n                source,\n                target,\n                label,\n                value,\n                Default::default(),\n                Default::default(),\n                0.0,\n            )\n        }),\n    );\n    stack(&theme)\n        .w(px(860.0))\n        .child(caption(\n            &theme,\n            \"Synthetic conserved flows · same 70:30 scale · deterministic crossing reduction\",\n        ))\n        .child(\n            div().row().gap_token(&theme, Space::Lg).children(\n                [\n                    (SankeyOrder::Input, \"input\", \"Input order\"),\n                    (SankeyOrder::Barycenter, \"ordered\", \"Barycenter order\"),\n                ]\n                .map(|(order, id, label)| {\n                    let (data, _) = graph\n                        .clone()\n                        .layout_ordered(&[70.0, 30.0], 0.08, 0.1, SankeyAlignment::Left, order)\n                        .expect(\"valid flows\");\n                    div().w(px(380.0)).child(\n                        SankeyChart::new(\n                            Ident::new(\"scene.sankey\").child(id),\n                            label,\n                            PlotState::Ready(data),\n                        )\n                        .labels(true)\n                        .on_current(|_, _, _| {}),\n                    )\n                }),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "raw-candlestick",
      "capture": "cargo run -p xtask -- headless capture raw-candlestick",
      "kind": "exhibit",
      "subjects": [
        "CartesianChart"
      ],
      "uses": [
        "CartesianChart"
      ],
      "example": "fn raw_candlestick(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::display::chart::{\n        cartesian::CartesianChart,\n        data::{ChartScale, ChartValue, RawPoint, RawSeries, SeriesMark, ValueAxis},\n        scale::{NumericScale, ScaleKind},\n    };\n    use crate::display::plot::RawOhlc;\n    let theme = cx.theme().clone();\n    let day = 86_400_000.0;\n    let x = ChartScale::Numeric(\n        NumericScale::new(ScaleKind::Time, [0.0, 4.0 * day]).expect(\"time domain\"),\n    );\n    let candles = RawOhlc::series(\n        \"ohlc\",\n        \"price\",\n        [\n            RawOhlc::new(\n                \"day-a\",\n                day,\n                [30.0, 60.0, 20.0, 50.0],\n                \"Day A\",\n                \"O30 H60 L20 C50\",\n            ),\n            RawOhlc::new(\n                \"day-b\",\n                day * 2.0,\n                [65.0, 75.0, 35.0, 40.0],\n                \"Day B\",\n                \"O65 H75 L35 C40\",\n            ),\n            RawOhlc::new(\n                \"day-c\",\n                day * 3.0,\n                [45.0, 55.0, 30.0, 45.0],\n                \"Day C · doji\",\n                \"O45 H55 L30 C45\",\n            ),\n        ],\n        theme.colors.success,\n        theme.colors.danger,\n    )\n    .expect(\"validated OHLC\");\n    let volume = RawSeries::new(\"volume\", \"volume\", SeriesMark::Bar)\n        .tint(theme.colors.accent.opacity(0.22))\n        .points(\n            [\n                (\"day-a\", day, 120.0),\n                (\"day-b\", 2.0 * day, 260.0),\n                (\"day-c\", 3.0 * day, 80.0),\n            ]\n            .map(|(id, x, value)| RawPoint::new(id, ChartValue::Number(x), Some(value))),\n        );\n    let overlay = RawSeries::new(\"reference\", \"price\", SeriesMark::Line)\n        .tint(theme.colors.warning)\n        .points(\n            [\n                (\"day-a\", day, 42.0),\n                (\"day-b\", 2.0 * day, 48.0),\n                (\"day-c\", 3.0 * day, 46.0),\n            ]\n            .map(|(id, x, value)| RawPoint::new(id, ChartValue::Number(x), Some(value))),\n        );\n    stack(&theme).w(px(900.0)).child(caption(&theme, \"Synthetic OHLC · shared UTC-duration x scale · independent volume axis · caller overlay\"))\n        .child(CartesianChart::new(\"scene.raw-ohlc\", \"OHLC with volume and overlay\", x, [\n            ValueAxis { id: \"price\".into(), label: \"Price\".into(), scale: NumericScale::new(ScaleKind::Linear, [0.0, 80.0]).expect(\"price domain\") },\n            ValueAxis { id: \"volume\".into(), label: \"Volume\".into(), scale: NumericScale::new(ScaleKind::Linear, [0.0, 300.0]).expect(\"volume domain\") },\n        ]).series([volume, candles, overlay]).format_ticks(move |axis, value| if axis == \"x\" { format!(\"D{:.0}\", value / day).into() } else { value.to_string().into() }).selected(Some(ChartSelection::new(\"ohlc\", \"day-b\"))).on_event(|_, _, _| {}))\n        .into_any_element()\n}\n\n//! Raw-value specialized visualization exhibits, using original synthetic data.\n\nuse super::support::*;\nuse crate::display::specialized::{\n    HierarchyNode, SpecializedChart, SpecializedData, WeightedValue,\n};\n\n#[derive(Default)]\nstruct Exploration {\n    revision: usize,\n    focus: Option<SharedString>,\n    selected: Option<SharedString>,\n    refuse: bool,\n}\n\npub(super) fn specialized_exploration(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<Exploration>(\n        &\"scene.specialized.explore-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision;\n    let selected = state.borrow().selected.clone();\n    let focus = state\n        .borrow()\n        .focus\n        .clone()\n        .unwrap_or_else(|| \"total\".into());\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All samples\",\n        vec![\n            HierarchyNode::branch(\n                \"group\",\n                \"Processing\",\n                vec![\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"parse\",\n                        \"Parsing\",\n                        if revision.is_multiple_of(2) {\n                            12.0\n                        } else {\n                            47.0\n                        },\n                    )),\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"execute\",\n                        \"Execution\",\n                        if revision.is_multiple_of(2) {\n                            68.0\n                        } else {\n                            13.0\n                        },\n                    )),\n                ],\n            ),\n            HierarchyNode::leaf(WeightedValue::new(\"deliver\", \"Delivery\", 20.0)),\n        ],\n    );\n    let next = state.clone();\n    let refusal = state.clone();\n    let charts = [\n        (\n            \"tree\",\n            \"Area · drill/back\",\n            SpecializedData::treemap_at(&root, &focus),\n        ),\n        (\n            \"sun\",\n            \"Angle · drill/back\",\n            SpecializedData::sunburst_at(&root, &focus),\n        ),\n        (\n            \"funnel\",\n            \"Width · enter/update/exit\",\n            SpecializedData::funnel(match revision % 3 {\n                0 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 120.0),\n                    WeightedValue::new(\"finish\", \"Finished\", 24.0),\n                ],\n                1 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 75.0),\n                    WeightedValue::new(\"new\", \"New sample\", 38.0),\n                ],\n                _ => vec![],\n            }),\n        ),\n    ];\n    stack(&theme).w(px(860.0))\n        .child(caption(&theme,\"Synthetic live fixtures · advance during motion to interrupt; empty exit shapes are not selectable\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.specialized.advance\").label(\"Advance samples\").on_click(move |window,_| { next.borrow_mut().revision+=1; window.refresh(); }))\n            .child(Button::new(\"scene.specialized.refuse\").label(if state.borrow().refuse { \"Accept proposals\" } else { \"Refuse proposals\" }).on_click(move |window,_| { let mut s=refusal.borrow_mut(); s.refuse = !s.refuse; window.refresh(); })))\n        .child(div().row().gap_token(&theme,Space::Lg).children(charts.into_iter().map(|(id,label,data)| {\n            let select = state.clone();\n            let navigate = state.clone();\n            div().w(px(260.0)).child(SpecializedChart::new(Ident::new(\"scene.specialized.live\").child(id),label,PlotState::Ready(data.expect(\"valid exploration fixture\")))\n                .motion(true).labels(true).selected(selected.clone())\n                .on_current(move |id,window,_| { let mut s=select.borrow_mut(); if !s.refuse { s.selected=Some(id); } window.refresh(); })\n                .on_navigate(move |id,window,_| { let mut s=navigate.borrow_mut(); if !s.refuse { s.focus=Some(id); } window.refresh(); }))\n        }))).into_any_element()\n}\n\npub(super) fn specialized(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let leaf = |id, label, value| HierarchyNode::leaf(WeightedValue::new(id, label, value));\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All work\",\n        vec![\n            leaf(\"build\", \"Build\", 60.0),\n            HierarchyNode::branch(\n                \"verify\",\n                \"Verification\",\n                vec![leaf(\"tests\", \"Tests\", 30.0), leaf(\"lint\", \"Lint\", 10.0)],\n            ),\n        ],\n    );\n    let fixtures = [\n        (\n            \"treemap\",\n            \"Treemap · area = work\",\n            SpecializedData::treemap(&root),\n        ),\n        (\n            \"sunburst\",\n            \"Sunburst · angle = work\",\n            SpecializedData::sunburst(&root),\n        ),\n        (\n            \"funnel\",\n            \"Funnel · width = count\",\n            SpecializedData::funnel(vec![\n                WeightedValue::new(\"seen\", \"Seen\", 120.0),\n                WeightedValue::new(\"started\", \"Started\", 75.0),\n                WeightedValue::new(\"done\", \"Completed\", 24.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(940.0))\n        .child(caption(\n            &theme,\n            \"Synthetic hierarchy fixtures · select marks with arrow keys or value keys\",\n        ))\n        .child(\n            div()\n                .row()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(280.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid hierarchy\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .child(\n            div().w(px(220.0)).child(SpecializedChart::new(\n                \"scene.specialized.zero\",\n                \"Zero is measured, not missing\",\n                PlotState::Stale {\n                    data: SpecializedData::funnel(vec![WeightedValue::new(\n                        \"zero\",\n                        \"Measured zero\",\n                        0.0,\n                    )])\n                    .expect(\"zero\"),\n                    reason: \"Refresh refused; verified zero retained\".into(),\n                },\n            )),\n        )\n        .into_any_element()\n}\n\npub(super) fn specialized_distribution(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let fixtures = [\n        (\n            \"histogram\",\n            \"Histogram · count per bin\",\n            SpecializedData::histogram(&[-2.0, -1.0, 0.0, 0.0, 1.0, 3.0], &[-2.0, 0.0, 1.0, 3.0]),\n        ),\n        (\n            \"box\",\n            \"Box · R-7 / Tukey · domain 0–110\",\n            SpecializedData::box_plot(\n                \"latency\",\n                \"Latency\",\n                &[1.0, 2.0, 4.0, 7.0, 8.0, 100.0],\n                [0.0, 110.0],\n            ),\n        ),\n        (\n            \"range\",\n            \"Range · domain −10–30\",\n            SpecializedData::range(\"interval\", \"Expected interval\", -4.0, 18.0, [-10.0, 30.0]),\n        ),\n        (\n            \"waterfall\",\n            \"Waterfall · signed changes\",\n            SpecializedData::waterfall(vec![\n                WeightedValue::new(\"open\", \"Opening\", 60.0),\n                WeightedValue::new(\"cost\", \"Cost\", -90.0),\n                WeightedValue::new(\"credit\", \"Credit\", 10.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(1000.0))\n        .child(caption(\n            &theme,\n            \"Synthetic distribution fixtures · explicit bin edges and R-7 / Tukey statistics\",\n        ))\n        .child(\n            div()\n                .row()\n                .flex_wrap()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(440.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid synthetic fixture\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .into_any_element()\n}\n\n//! A schema, rendered as data or as a form.\n\nuse super::support::*;\n\n/// A document with the three facts a viewer usually confuses: a key holding\n/// `null`, a key holding an empty object, and a key that is simply not here.\npub(super) fn scene_document() -> JsonValue {\n    JsonValue::object([\n        (\"id\", JsonValue::string(\"run-4812\")),\n        (\"attempts\", JsonValue::number(\"3\")),\n        (\"streaming\", JsonValue::Bool(true)),\n        // Nothing has been recorded here yet, which is not the same as the\n        // key being missing: `resumed_from` is missing, and says nothing.\n        (\"cursor\", JsonValue::Null),\n        (\"labels\", JsonValue::object(Vec::<(&str, JsonValue)>::new())),\n        (\n            \"credentials\",\n            JsonValue::object([(\"token\", JsonValue::redacted(\"51 characters\"))]),\n        ),\n        (\n            \"request\",\n            JsonValue::object([\n                (\"method\", JsonValue::string(\"POST\")),\n                (\n                    \"headers\",\n                    JsonValue::object([\n                        (\"content-type\", JsonValue::string(\"application/json\")),\n                        (\"authorization\", JsonValue::redacted(\"a value\")),\n                    ]),\n                ),\n            ]),\n        ),\n        (\n            \"steps\",\n            JsonValue::array([\n                JsonValue::string(\"plan\"),\n                JsonValue::string(\"apply\"),\n                JsonValue::object([(\"retries\", JsonValue::number(\"0\"))]),\n            ]),\n        ),\n    ])\n}\n\npub(super) 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}\n\n/// The form kept across frames.\n///\n/// Its fields own carets, open menus and a selection, so rebuilding it every\n/// frame would throw away whatever had been typed into it.\npub(super) struct SceneSchemaForm {\n    form: Entity<SchemaForm>,\n}\n\nimpl Global for SceneSchemaForm {}\n\npub(super) fn scene_schema() -> Schema {\n    Schema::new()\n        .field(\n            SchemaField::new(\n                \"path\",\n                SchemaKind::Text {\n                    placeholder: Some(\"relative to the workspace\".into()),\n                    secret: false,\n                },\n            )\n            .label(\"File\")\n            .description(\"Which file the call reads\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\n                \"max_bytes\",\n                SchemaKind::Integer(NumberBounds::new().min(1.0).max(65_536.0).step(1024.0)),\n            )\n            .label(\"Maximum bytes\"),\n        )\n        .field(\n            SchemaField::new(\"follow_symlinks\", SchemaKind::Boolean).label(\"Follow symbolic links\"),\n        )\n        .field(\n            SchemaField::new(\n                \"encoding\",\n                SchemaKind::Enum(vec![\n                    SchemaChoice::new(\"utf-8\", \"UTF-8\"),\n                    SchemaChoice::new(\"latin-1\", \"Latin-1\"),\n                ]),\n            )\n            .label(\"Encoding\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\"attachments\", SchemaKind::Files { max: Some(2) })\n                .label(\"Attachments\")\n                .description(\"Paths are acquired and accepted by the host\"),\n        )\n        .field(\n            SchemaField::new(\n                \"headers\",\n                SchemaKind::List {\n                    item: Box::new(SchemaField::new(\n                        \"header\",\n                        SchemaKind::Object(vec![\n                            SchemaField::new(\n                                \"name\",\n                                SchemaKind::Text {\n                                    placeholder: Some(\"Header name\".into()),\n                                    secret: false,\n                                },\n                            )\n                            .label(\"Name\")\n                            .required(true),\n                            SchemaField::new(\"enabled\", SchemaKind::Boolean).label(\"Enabled\"),\n                        ]),\n                    )),\n                    max: Some(3),\n                },\n            )\n            .label(\"Headers\"),\n        )\n        .field(\n            SchemaField::new(\n                \"limits\",\n                SchemaKind::Object(vec![\n                    SchemaField::new(\"timeout_ms\", SchemaKind::Integer(NumberBounds::new()))\n                        .label(\"Timeout in milliseconds\"),\n                ]),\n            )\n            .label(\"Limits\"),\n        )\n        .field(\n            SchemaField::new(\n                \"matcher\",\n                SchemaKind::Unrenderable(\n                    \"This argument is one of three shapes at once, and no single control \\\n                     stands for that.\"\n                        .into(),\n                ),\n            )\n            .label(\"Matcher\")\n            .required(true),\n        )\n}\n\npub(super) fn schema_form(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSchemaForm>() {\n        set_schema_file_policy(DefaultSchemaFilePolicy, cx);\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            let _ = form.set_field_validation(\"encoding\", ValidationState::Validating, cx);\n            form.set_files(\"attachments\", vec![\"/workspace/brief.md\".into()], cx)\n                .expect(\"the scene's permissive file policy accepts its fixture\");\n            form.add_list_item(\"headers\", window, 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}\n\n//! What more than one family of scenes needs.\n//!\n//! Everything here is used by scenes in at least two families. A fixture\n//! that only one family builds lives in that family, next to the scenes\n//! that read it, so that moving a component moves its fixture with it.\n\npub(super) use gpui::{\n    AnyElement, App, Corners, DevicePixels, Entity, Focusable, Global, IntoElement, Pixels,\n    RenderImage, SharedString, SpriteBlendMode, SpriteColorMode, SpriteInstance, SpriteTransform,\n    Window, bounds, canvas, conic_gradient_stops, div, linear_color_stop, point, prelude::*, px,\n    radial_gradient_stops, radians, size,\n};\npub(super) use gpui_kit_assets::Icon;\npub(super) use gpui_kit_semantics::{NodeSpec, Role, Semantic};\npub(super) use gpui_kit_theme::{Radius, Space, Surface, SyntaxColor, TextTone, Theme, TypeScale};\npub(super) use std::rc::Rc;\npub(super) use std::sync::{Arc, OnceLock};\npub(super) use std::time::Duration;\n\npub(super) use crate::controls::combobox::Combobox;\npub(super) use crate::controls::input::TextInput;\npub(super) use crate::controls::keybinding_recorder::KeybindingRecorder;\npub(super) use crate::controls::number_input::NumberInput;\npub(super) use crate::controls::select::{Select, SelectOption};\npub(super) use crate::controls::split_button::SplitButton;\npub(super) use crate::controls::tag_input::TagInput;\npub(super) use crate::controls::textarea::{Frame, TextArea};\npub(super) use crate::display::badge::Tone;\npub(super) use crate::display::icon::{Icon as IconView, IconTone};\npub(super) use crate::foundation::ActiveTheme;\npub(super) use crate::foundation::direction::{ActiveDirection, DirectionalExt};\npub(super) use crate::interaction::dnd;\npub(super) use crate::overlay::toast::push as toast_push;\npub(super) use crate::overlay::{Edge, Kbd, Overlay, Placement, Tooltip, Tooltipped};\npub(super) use crate::prelude::*;\npub(super) use crate::strings::{ActiveStrings, StringKey};\n\npub(super) fn stack(theme: &Theme) -> gpui::Div {\n    div()\n        .column()\n        .gap(px(theme.spacing.md))\n        .p(px(theme.spacing.lg))\n        .page(theme)\n        .font_family(theme.typography.sans.clone())\n}\n\npub(super) fn row(theme: &Theme) -> gpui::Div {\n    div()\n        .row()\n        .flex_wrap()\n        .gap(px(theme.spacing.sm))\n        .items_center()\n}\n\n/// A pane of fixture copy, for a scene that needs something on both sides of a\n/// divider or below a viewport.\npub(super) fn filler(theme: &Theme, title: &'static str, lines: usize) -> gpui::Div {\n    let mut pane = div()\n        .flex()\n        .flex_col()\n        .gap(px(theme.space(Space::Xs)))\n        .p(px(theme.space(Space::Md)))\n        .child(crate::foundation::text(\n            theme,\n            TypeScale::Label,\n            SharedString::from(title),\n        ));\n    for line in 1..=lines {\n        pane = pane.child(\n            crate::foundation::text(\n                theme,\n                TypeScale::Code,\n                SharedString::from(format!(\"Fixture line {line:02}\")),\n            )\n            .text_tone(theme, TextTone::Muted),\n        );\n    }\n    pane\n}\n\n/// A caption naming the state a drag scene was staged in.\npub(super) fn caption(theme: &Theme, text: impl Into<SharedString>) -> gpui::Div {\n    crate::foundation::text(theme, TypeScale::Caption, text.into())\n        .text_tone(theme, TextTone::Muted)\n}\n\n/// The element a host hands back for an image this crate did not fetch.\n///\n/// A flat fill rather than a picture, because the crate ships no photographs\n/// and a scene has to photograph the same pixels every run. Neutral, and\n/// quieter than the surface it sits in: a stand-in painted in the accent was\n/// the loudest thing in every scene that used one, which said the placeholder\n/// mattered more than the component being reviewed around it.\npub(super) fn scene_picture(label: &'static str, cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .size_full()\n        .flex()\n        .flex_col()\n        .items_center()\n        .justify_center()\n        .gap(px(theme.space(gpui_kit_theme::Space::Xs)))\n        .bg(theme.colors.sunken)\n        .child(\n            gpui_kit_assets::icon(gpui_kit_assets::Icon::Image)\n                .size(px(theme.typography.subtitle.line_height))\n                .text_color(theme.colors.text_faint),\n        )\n        .child(\n            crate::foundation::text(&theme, TypeScale::Caption, SharedString::new_static(label))\n                .text_tone(&theme, TextTone::Faint),\n        )\n        .into_any_element()\n}\n\n/// The ordinary-application views that own state across frames.\npub(super) struct SceneOrdinary {\n    pub(super) menubar: Entity<Menubar>,\n    pub(super) hover_card: Entity<HoverCard>,\n    pub(super) copy_idle: Entity<CopyButton>,\n    pub(super) copy: Entity<CopyButton>,\n    pub(super) copy_refused: Entity<CopyButton>,\n}\n\nimpl Global for SceneOrdinary {}\n\npub(super) fn ensure_ordinary(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneOrdinary>() {\n        return;\n    }\n    let menubar = cx.new(|cx| {\n        Menubar::new(\n            \"scene.menubar\",\n            [\n                MenubarMenu::new(\n                    \"file\",\n                    \"File\",\n                    [\n                        MenuItem::command(\"file.new\", \"New run\").shortcut(\"cmd-n\"),\n                        MenuItem::command(\"file.open\", \"Open workspace\").shortcut(\"cmd-o\"),\n                        MenuItem::separator(\"file.rule\"),\n                        MenuItem::submenu(\n                            \"file.export\",\n                            \"Export\",\n                            [\n                                MenuItem::command(\"file.export.json\", \"As JSON\"),\n                                MenuItem::command(\"file.export.text\", \"As plain text\"),\n                            ],\n                        ),\n                    ],\n                ),\n                MenubarMenu::new(\n                    \"edit\",\n                    \"Edit\",\n                    [\n                        MenuItem::command(\"edit.undo\", \"Undo\").shortcut(\"cmd-z\"),\n                        MenuItem::check(\"edit.wrap\", \"Wrap lines\", true),\n                    ],\n                ),\n                MenubarMenu::new(\"view\", \"View\", [MenuItem::command(\"view.zoom\", \"Zoom in\")]),\n                MenubarMenu::new(\"policy\", \"Policy\", []).disabled(true),\n            ],\n            window,\n            cx,\n        )\n    });\n    menubar.update(cx, |bar, cx| bar.open(\"file\", window, cx));\n\n    let hover_card = cx.new(|cx| {\n        HoverCard::new(\"scene.hover-card\", window, cx)\n            .name(\"Run 4821\")\n            .trigger(|_, cx| {\n                let theme = cx.theme().clone();\n                crate::foundation::text(&theme, TypeScale::Caption, \"run 4821\")\n                    .text_color(theme.colors.accent)\n                    .into_any_element()\n            })\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .column()\n                    // A column stretches its children across, and a badge\n                    // stretched that far stops reading as a label and starts\n                    // reading as a filled bar.\n                    .items_start()\n                    .gap(px(theme.spacing.xs))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Strong,\n                        \"Nightly regression sweep\",\n                    ))\n                    .child(\n                        crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Finished in 4 minutes, 12 checks, none failed.\",\n                        )\n                        .text_tone(&theme, TextTone::Muted),\n                    )\n                    .child(Badge::new(\"Ready\").success())\n                    .into_any_element()\n            })\n    });\n    hover_card.update(cx, |card, cx| card.open(cx));\n\n    // Nobody has pressed this one. It is the state a reader sees almost all\n    // of the time, and it was the one state of the three no image held.\n    let copy_idle = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-idle\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Ok(()))\n    });\n\n    // The confirmation outlives the capture. At its ordinary length it expires\n    // partway through a run, so which of the two states this scene showed\n    // depended on how long the run took to reach it.\n    let copy = cx.new(|cx| {\n        CopyButton::new(\"scene.copy\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .confirmation(std::time::Duration::from_secs(60 * 60))\n            .copier(|_, _| Ok(()))\n    });\n    copy.update(cx, |button, cx| button.copy(cx));\n\n    let copy_refused = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-refused\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Err(\"The clipboard did not take it.\".into()))\n    });\n    copy_refused.update(cx, |button, cx| button.copy(cx));\n\n    cx.set_global(SceneOrdinary {\n        menubar,\n        hover_card,\n        copy_idle,\n        copy,\n        copy_refused,\n    });\n}\n"
    },
    {
      "name": "geography",
      "capture": "cargo run -p xtask -- headless capture geography",
      "kind": "exhibit",
      "subjects": [
        "GeoMap"
      ],
      "uses": [
        "GeoMap"
      ],
      "example": "fn geography(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<FixtureCamera>(\n        &\"scene.geography.camera\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let viewport = state.borrow().viewport;\n    let selected = state.borrow().selected.clone();\n    let data = state\n        .borrow_mut()\n        .data\n        .get_or_insert_with(|| fixture(GeoProjection::Equirectangular))\n        .clone();\n    let seam = state.borrow_mut().seam.get_or_insert_with(|| Rc::new(GeoData::from_geojson(\n        r#\"{\"type\":\"Feature\",\"id\":\"seam-island\",\"properties\":{},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[170,-20],[-170,-20],[-170,30],[170,30],[170,-20]],[[175,-5],[-175,-5],[-175,10],[175,10],[175,-5]]]}}\"#,\n        GeoProjection::WebMercator, GeoWorldPolicy::Auto,\n        GeoColorDomain { minimum:0.0, maximum:40.0,minimum_label:\"0 samples\".into(),maximum_label:\"40 samples\".into(),missing_label:\"Unobserved\".into() },\n        |_,_| Ok(GeoProperties {label:\"Synthetic seam island\".into(),value:Some(23.0),formatted_value:\"23 samples\".into()}),\n    ).expect(\"synthetic seam geometry\"))).clone();\n    let camera_target = state.clone();\n    let value_target = state.clone();\n    let geometry_target = state.clone();\n    stack(&theme).w(px(900.0))\n        .child(caption(&theme,\"Original synthetic geography · local geometry, no tiles or real territories\"))\n        .child(caption(&theme,\"Drag / touch to pan · pinch or Ctrl-wheel to zoom · F fits · arrows / +/- / Home · [ and ] select\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.geography.camera-target\").label(\"Retarget camera\").on_click(move |window,_| {\n                let mut target=camera_target.borrow_mut();\n                target.viewport=if target.viewport.zoom>1.0 {GeoViewport::default()} else {GeoViewport {center:GeoProjected{x:0.4,y:0.48},zoom:1.8}};\n                window.refresh();\n            }))\n            .child(Button::new(\"scene.geography.value-target\").label(\"Retarget observations\").on_click(move |window,_| {\n                let mut target=value_target.borrow_mut();\n                let source=target.data.as_ref().expect(\"prepared fixture\");\n                let mut features=source.features().to_vec();\n                let value=if features[0].value==Some(12.0) {34.0} else {12.0};\n                features[0].value=Some(value); features[0].formatted_value=format!(\"{value} samples\").into();\n                target.data=Some(Rc::new(GeoData::new(source.projection(),features,source.points().to_vec(),source.color_domain().clone()).expect(\"in-domain fixture observation\")));\n                window.refresh();\n            }))\n            .child(Button::new(\"scene.geography.geometry-target\").label(\"Replace geometry\").on_click(move |window,_| {\n                let mut target=geometry_target.borrow_mut();\n                let source=target.data.as_ref().expect(\"prepared fixture\");\n                if source.features().iter().any(|f| f.id.as_ref()==\"unobserved\") {\n                    let mut features=source.features().to_vec();features.retain(|f| f.id.as_ref()!=\"unobserved\");\n                    for p in features[0].polygons.iter_mut().flat_map(|p| std::iter::once(&mut p.exterior).chain(&mut p.holes)).flatten() {p.longitude+=40.0;}\n                    let mut points=source.points().to_vec(); points.push(GeoPoint{id:\"arriving\".into(),label:\"New overlapping sensor\".into(),position:GeoPosition{longitude:-55.0,latitude:12.0}});\n                    target.data=Some(Rc::new(GeoData::new(source.projection(),features,points,source.color_domain().clone()).expect(\"translated valid fixture\")));\n                } else {target.data=Some(fixture(GeoProjection::Equirectangular));}\n                window.refresh();\n            })))\n        .child(div().row().items_start().gap_token(&theme,Space::Md)\n            .child(div().w(px(500.0)).child(GeoMap::new(\"scene.geography.ready\",\"Equirectangular · controlled camera\")\n                .state(GeoState::Ready(data)).viewport(viewport).selected(selected)\n                .on_event(move |event,window,_| {\n                    match event { GeoEvent::Select(id) => state.borrow_mut().selected=id, GeoEvent::Viewport(viewport) => state.borrow_mut().viewport=viewport }\n                    window.refresh();\n                })))\n            .child(div().w(px(320.0)).child(GeoMap::new(\"scene.geography.zoomed\",\"Web Mercator · narrow, zoomed, selected\")\n                .state(GeoState::Stale { data:fixture(GeoProjection::WebMercator), reason:\"Refresh refused; verified geometry retained\".into() })\n                .viewport(GeoViewport { center:GeoProjected{x:0.38,y:0.46},zoom:2.2 }).selected(Some(\"lagoon\".into())))))\n        .child(div().row().items_start().gap_token(&theme,Space::Md)\n            .child(div().w(px(280.0)).child(GeoMap::new(\"scene.geography.loading\",\"Loading local features\")))\n            .child(div().w(px(280.0)).child(GeoMap::new(\"scene.geography.empty\",\"Valid empty collection\").state(GeoState::Empty)))\n            .child(div().w(px(280.0)).child(GeoMap::new(\"scene.geography.refused\",\"Unsupported input\").state(GeoState::Refused(GeoRefusal::AntimeridianEdge)))))\n        .child(GeoMap::new(\"scene.geography.seam\",\"Local GeoJSON · auto world cut · fitted island with a real hole\")\n            .viewport(seam.fit_viewport([850.0,280.0],16.0).expect(\"fit synthetic island\"))\n            .selected(Some(\"seam-island\".into())).state(GeoState::Ready(seam)))\n        .into_any_element()\n}\n\npub(super) fn geography_scale(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<FixtureCamera>(\n        &\"scene.geography.scale-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    if state.borrow().data.is_none() {\n        state.borrow_mut().viewport = GeoViewport {\n            center: GeoProjected { x: 0.5, y: 0.5 },\n            zoom: 8.0,\n        };\n    }\n    let data = state\n        .borrow_mut()\n        .data\n        .get_or_insert_with(|| {\n            Rc::new(\n                GeoData::new(\n                    GeoProjection::Equirectangular,\n                    vec![],\n                    (0..1000)\n                        .map(|i| GeoPoint {\n                            id: format!(\"sample-{i}\").into(),\n                            label: format!(\"Synthetic sample {i}\").into(),\n                            position: GeoPosition {\n                                longitude: -150.0 + f64::from(i % 100) * 3.0,\n                                latitude: -45.0 + f64::from(i / 100) * 10.0,\n                            },\n                        })\n                        .collect(),\n                    GeoColorDomain {\n                        minimum: 0.0,\n                        maximum: 1.0,\n                        minimum_label: \"0\".into(),\n                        maximum_label: \"1\".into(),\n                        missing_label: \"Unobserved\".into(),\n                    },\n                )\n                .expect(\"original point grid\"),\n            )\n        })\n        .clone();\n    let selected = state.borrow().selected.clone();\n    let viewport = state.borrow().viewport;\n    let dense = state.clone();\n    stack(&theme).w(px(900.0))\n        .child(caption(&theme,format!(\"{} original local point overlays · viewport culling · six-row virtual accessible readout\",data.points().len())))\n        .child(caption(&theme,\"Scroll the readout or navigate it by keyboard; offscreen rows retain source identities, not measured bounds\"))\n        .child(Button::new(\"scene.geography.scale-density\").label(\"Load 10,000 dense points\").on_click(move |window,_| {\n            let mut target=dense.borrow_mut();\n            let points=(0..10000).map(|i| GeoPoint{id:format!(\"sample-{i}\").into(),label:format!(\"Synthetic sample {i}\").into(),position:GeoPosition{longitude:-179.0+f64::from(i%1000)*0.358,latitude:-80.0+f64::from(i/1000)*1.6}}).collect();\n            let data=GeoData::new(GeoProjection::Equirectangular,vec![],points,target.data.as_ref().expect(\"prepared fixture\").color_domain().clone()).expect(\"original point grid\");\n            target.viewport=GeoViewport{center:data.projection().project(data.points()[5000].position).expect(\"prepared fixture\"),zoom:1.0};\n            target.data=Some(Rc::new(data));\n            window.refresh();\n        }))\n        .child(GeoMap::new(\"scene.geography.scale\",\"Controlled point cloud\").state(GeoState::Ready(data)).viewport(viewport).selected(selected)\n            .on_event(move |event,window,_| {match event {GeoEvent::Select(id)=>state.borrow_mut().selected=id,GeoEvent::Viewport(v)=>state.borrow_mut().viewport=v};window.refresh();}))\n        .into_any_element()\n}\n\n//! Explicit continuous color encodings, kept separate from contribution levels.\nuse super::support::*;\nuse crate::display::heatmap::{ContinuousHeatCell, ContinuousHeatmap, HeatColorScale};\n\n#[derive(Default)]\nstruct MatrixRevisions {\n    revision: usize,\n    direct: bool,\n    selected: Option<SharedString>,\n}\n\npub(super) fn heatmap_reordering(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<MatrixRevisions>(\n        &\"scene.heat.reorder-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision % 3;\n    let rows = match revision {\n        0 => vec![\"east\", \"west\"],\n        1 => vec![\"west\", \"north\", \"east\"],\n        _ => vec![\"east\"],\n    };\n    let columns = match revision {\n        0 => vec![\"a\", \"b\", \"c\"],\n        1 => vec![\"c\", \"a\", \"d\", \"b\"],\n        _ => vec![\"a\", \"b\"],\n    };\n    let cells = rows\n        .iter()\n        .flat_map(|row| {\n            columns.iter().map(move |column| {\n                let reading = match (*row, *column) {\n                    (\"east\", \"a\") => Some(3.0),\n                    (\"east\", \"b\") => Some(12.0),\n                    (\"west\", \"a\") => Some(42.0),\n                    (\"west\", \"c\") => Some(81.0),\n                    (\"north\", \"b\") => Some(65.0),\n                    _ => None,\n                };\n                ContinuousHeatCell::new(\n                    format!(\"{row}-{column}\"),\n                    *row,\n                    *column,\n                    format!(\"{row} / {column}\"),\n                    reading,\n                )\n            })\n        })\n        .collect();\n    let next = state.clone();\n    let direct = state.clone();\n    let selection = state.clone();\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"Synthetic keyed axes · reorder, enter, exit and reinsert · raw readings never tween\",\n        ))\n        .child(\n            div()\n                .row()\n                .gap_token(&theme, Space::Sm)\n                .child(\n                    Button::new(\"scene.heat.reorder.advance\")\n                        .label(\"Advance axes\")\n                        .on_click(move |window, _| {\n                            next.borrow_mut().revision += 1;\n                            window.refresh();\n                        }),\n                )\n                .child(\n                    Button::new(\"scene.heat.reorder.direct\")\n                        .label(if state.borrow().direct {\n                            \"Enable animation\"\n                        } else {\n                            \"Direct updates\"\n                        })\n                        .on_click(move |window, _| {\n                            let mut s = direct.borrow_mut();\n                            s.direct = !s.direct;\n                            window.refresh();\n                        }),\n                ),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.heat.reorder\",\n                \"Stable caller coordinates\",\n                HeatColorScale::sequential([0.0, 100.0], theme.colors.canvas, theme.colors.accent)\n                    .expect(\"domain\"),\n                PlotState::Ready(cells),\n            )\n            .rows(rows)\n            .columns(columns)\n            .animate(!state.borrow().direct)\n            .on_current(move |id, window, _| {\n                selection.borrow_mut().selected = Some(id);\n                window.refresh();\n            })\n            .when_some(state.borrow().selected.clone(), |chart, id| {\n                chart.current(id)\n            }),\n        )\n        .into_any_element()\n}\n\npub(super) fn continuous_heatmap_transition(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let revision = crate::motion::keyed::slot::<usize>(\n        &\"scene.heat.transition-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let value = match *revision.borrow() % 3 {\n        0 => Some(-8.0),\n        1 => Some(32.0),\n        _ => None,\n    };\n    let next = revision.clone();\n    stack(&theme)\n        .w(px(440.0))\n        .child(caption(\n            &theme,\n            \"Synthetic observations · exact latest text with animated color; missing is never zero\",\n        ))\n        .child(\n            Button::new(\"scene.heat.advance\")\n                .label(\"Advance reading\")\n                .on_click(move |window, _| {\n                    *next.borrow_mut() += 1;\n                    window.refresh();\n                }),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.heat.live\",\n                \"Controlled measurement\",\n                HeatColorScale::diverging(\n                    [-8.0, 2.0, 32.0],\n                    theme.colors.accent,\n                    theme.colors.canvas,\n                    theme.colors.danger,\n                )\n                .expect(\"domain\"),\n                PlotState::Ready(vec![\n                    ContinuousHeatCell::new(\"changing\", \"row\", \"a\", \"Changing reading\", value),\n                    ContinuousHeatCell::new(\"zero\", \"row\", \"b\", \"Verified zero\", Some(0.0)),\n                ]),\n            )\n            .rows([\"row\"])\n            .columns([\"a\", \"b\"])\n            .motion(true),\n        )\n        .into_any_element()\n}\n\npub(super) fn continuous_heatmap(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let diverging = HeatColorScale::diverging(\n        [-8.0, 2.0, 32.0],\n        theme.colors.accent,\n        theme.colors.canvas,\n        theme.colors.danger,\n    )\n    .expect(\"explicit domain\");\n    let sequential =\n        HeatColorScale::sequential([0.0, 100.0], theme.colors.canvas, theme.colors.success)\n            .expect(\"explicit domain\");\n    let cells = [\n        (\"east\", \"a\", Some(-8.0)),\n        (\"east\", \"b\", Some(0.0)),\n        (\"east\", \"c\", Some(2.0)),\n        (\"west\", \"a\", Some(17.0)),\n        (\"west\", \"b\", Some(32.0)),\n        (\"west\", \"c\", None),\n    ]\n    .into_iter()\n    .map(|(row, column, reading)| {\n        ContinuousHeatCell::new(\n            format!(\"{row}-{column}\"),\n            row,\n            column,\n            format!(\"Synthetic observation {row} / {column}\"),\n            reading,\n        )\n    })\n    .collect::<Vec<_>>();\n    stack(&theme)\n        .w(px(800.0))\n        .child(caption(\n            &theme,\n            \"Synthetic measurements · explicit neutral = 2 · no observation is not zero\",\n        ))\n        .child(\n            div().w(px(720.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.wide\",\n                    \"Diverging measurements\",\n                    diverging,\n                    PlotState::Ready(cells.clone()),\n                )\n                .rows([\"east\", \"west\"])\n                .columns([\"a\", \"b\", \"c\"])\n                .current(\"east-c\")\n                .on_current(|_, _, _| {}),\n            ),\n        )\n        .child(\n            div().w(px(240.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.narrow\",\n                    \"Narrow · last verified values\",\n                    diverging,\n                    PlotState::Stale {\n                        data: cells,\n                        reason: \"Refresh refused\".into(),\n                    },\n                )\n                .rows([\"east\", \"west\"])\n                .columns([\"a\", \"b\", \"c\"]),\n            ),\n        )\n        .child(\n            div().w(px(400.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.sequential\",\n                    \"Sequential · domain 0–100\",\n                    sequential,\n                    PlotState::Ready(vec![\n                        ContinuousHeatCell::new(\"zero\", \"r\", \"a\", \"Measured zero\", Some(0.0)),\n                        ContinuousHeatCell::new(\"middle\", \"r\", \"b\", \"Middle\", Some(50.0)),\n                        ContinuousHeatCell::new(\"high\", \"r\", \"c\", \"High\", Some(100.0)),\n                    ]),\n                )\n                .rows([\"r\"])\n                .columns([\"a\", \"b\", \"c\"]),\n            ),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.continuous.invalid\",\n                \"Invalid readings are errors\",\n                sequential,\n                PlotState::Ready(vec![ContinuousHeatCell::new(\n                    \"outside\",\n                    \"r\",\n                    \"c\",\n                    \"Outside domain\",\n                    Some(101.0),\n                )]),\n            )\n            .rows([\"r\"])\n            .columns([\"c\"]),\n        )\n        .into_any_element()\n}\n\n//! Mobile list interactions, with caller-owned async state and retained rows.\n\nuse super::support::*;\nuse crate::interaction::{\n    refresh::{PullToRefresh, RefreshState},\n    swipe::{SwipeActions, SwipeSide},\n};\nuse crate::overlay::sheet::{SheetAction, SheetActionState};\n\nstruct SceneRefresh(Vec<Entity<PullToRefresh>>);\nimpl Global for SceneRefresh {}\n\npub(super) fn pull_to_refresh(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneRefresh>() {\n        let states = [\n            (\"ready\", RefreshState::Ready),\n            (\n                \"pending\",\n                RefreshState::Pending(\"Waiting for caller\".into()),\n            ),\n            (\n                \"loading\",\n                RefreshState::Loading(\"Refreshing fixture\".into()),\n            ),\n            (\n                \"error\",\n                RefreshState::Error(\"Refresh failed · retained rows\".into()),\n            ),\n        ];\n        let mut views = Vec::new();\n        for (id, state) in states {\n            let scroll = gpui::ScrollHandle::new();\n            let view = cx.new(|_| {\n                PullToRefresh::new(\n                    format!(\"scene.refresh.{id}\"),\n                    scroll.clone(),\n                    \"Refresh\",\n                    \"Release to refresh\",\n                )\n            });\n            view.update(cx, |refresh, cx| {\n                refresh.set_state(state, cx);\n                refresh.set_content(\n                    Some(Rc::new(move |_, cx| {\n                        let theme = cx.theme().clone();\n                        div()\n                            .id(SharedString::from(format!(\"scene.refresh.{id}.scroll\")))\n                            .column()\n                            .size_full()\n                            .overflow_y_scroll()\n                            .track_scroll(&scroll)\n                            .children(\n                                [\n                                    (\"notes\", \"Notes · verified fixture\"),\n                                    (\"draft\", \"Draft · verified fixture\"),\n                                    (\"archive\", \"Archive · verified fixture\"),\n                                    (\"saved\", \"Saved · verified fixture\"),\n                                ]\n                                .into_iter()\n                                .map(|(key, label)| {\n                                    div()\n                                        .h(px(64.0))\n                                        .flex_none()\n                                        .p_token(&theme, Space::Sm)\n                                        .child(crate::foundation::text(\n                                            &theme,\n                                            TypeScale::Body,\n                                            label,\n                                        ))\n                                        .semantic_in(\n                                            cx,\n                                            NodeSpec::new(\n                                                format!(\"scene.refresh.{id}.{key}\"),\n                                                Role::Group,\n                                            )\n                                            .text(label),\n                                        )\n                                }),\n                            )\n                            .into_any_element()\n                    })),\n                    cx,\n                );\n            });\n            views.push(view);\n        }\n        cx.set_global(SceneRefresh(views));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .child(caption(\n            &theme,\n            \"Fixture states · refreshing never replaces the verified rows\",\n        ))\n        .child(\n            row(&theme).items_start().children(\n                cx.global::<SceneRefresh>()\n                    .0\n                    .iter()\n                    .map(|view| div().w(px(250.0)).h(px(370.0)).child(view.clone())),\n            ),\n        )\n        .into_any_element()\n}\n\nstruct SceneSwipe(Vec<Entity<SwipeActions>>);\nimpl Global for SceneSwipe {}\n\npub(super) fn swipe_actions(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSwipe>() {\n        let mut views = Vec::new();\n        for (id, side, state) in [\n            (\"closed\", None, SheetActionState::Ready),\n            (\"left\", Some(SwipeSide::Left), SheetActionState::Ready),\n            (\n                \"right\",\n                Some(SwipeSide::Right),\n                SheetActionState::Error(\"Deletion failed; row retained\".into()),\n            ),\n            (\n                \"pending\",\n                Some(SwipeSide::Right),\n                SheetActionState::Pending(\"Waiting for caller\".into()),\n            ),\n        ] {\n            let view = cx.new(|_| SwipeActions::new(format!(\"scene.swipe.{id}\"), \"Actions\"));\n            view.update(cx, |swipe, cx| {\n                let mut remove = SheetAction::new(\"remove\", \"Delete\");\n                remove.destructive = true;\n                swipe.set_actions(SwipeSide::Left, vec![SheetAction::new(\"pin\", \"Pin\")], cx);\n                swipe.set_actions(SwipeSide::Right, vec![remove], cx);\n                swipe.set_content(\n                    Some(Rc::new(move |_, cx| {\n                        let theme = cx.theme().clone();\n                        div()\n                            .h(px(64.0))\n                            .column()\n                            .justify_center()\n                            .child(crate::foundation::text(\n                                &theme,\n                                TypeScale::Label,\n                                \"Project notes · fixture\",\n                            ))\n                            .child(crate::foundation::text(\n                                &theme,\n                                TypeScale::Body,\n                                \"Last verified content remains visible\",\n                            ))\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(format!(\"scene.swipe.{id}.content\"), Role::Group)\n                                    .text(\"Project notes · fixture\"),\n                            )\n                            .into_any_element()\n                    })),\n                    cx,\n                );\n                swipe.reveal(side, cx);\n                swipe.set_state(state, cx);\n            });\n            views.push(view);\n        }\n        cx.set_global(SceneSwipe(views));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(580.0))\n        .child(caption(\n            &theme,\n            \"Reveal is not activation · physical left and right trays\",\n        ))\n        .children(cx.global::<SceneSwipe>().0.iter().cloned())\n        .into_any_element()\n}\n\n//! Frames that decide where their contents go.\n\nuse super::support::*;\n\npub(super) fn mobile_page(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{AppBar, PageLayout};\n    let theme = cx.theme().clone();\n    let page = |name: &'static str, keyboard: bool, safe: bool| {\n        let id = format!(\"scene.mobile-page.{name}\");\n        let mut insets = gpui::WindowInsets::default();\n        if safe {\n            insets.safe_area.top = px(24.0);\n            insets.safe_area.bottom = px(20.0);\n            insets.safe_area.left = px(7.0);\n            insets.safe_area.right = px(11.0);\n        }\n        if keyboard {\n            insets.ime.bottom = px(140.0);\n        }\n        div()\n            .w(px(290.0))\n            .h(px(430.0))\n            .border_1()\n            .border_color(theme.colors.control_hairline)\n            .surface(&theme, Surface::Panel)\n            .child(\n                PageLayout::new(\n                    id.clone(),\n                    ScrollArea::new(format!(\"{id}.scroll\")).child(filler(\n                        &theme,\n                        \"Fixture page content\",\n                        12,\n                    )),\n                )\n                .insets(insets)\n                .hide_footer(keyboard)\n                .header(\n                    AppBar::new(format!(\"{id}.bar\"), name).leading(\n                        Button::new(format!(\"{id}.back\"))\n                            .label(\"Back\")\n                            .ghost()\n                            .control_size(ControlSize::Touch)\n                            .disabled(!safe)\n                            .on_click(|_, _| {}),\n                    ),\n                )\n                .footer(div().p(px(theme.space(Space::Sm))).child(\"Caller footer\")),\n            )\n    };\n    stack(&theme)\n        .child(caption(&theme, \"Fixture residual insets: desktop zero · safe area · overlapping IME with footer unmounted\"))\n        .child(row(&theme).items_start().child(page(\"Desktop\", false, false))\n            .child(page(\"Safe area\", false, true)).child(page(\"Keyboard\", true, true)))\n        .into_any_element()\n}\n\npub(super) fn scroll_edge_effect(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"Fixture transcript: content scrolls beneath a Regular glass toolbar\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(240.0))\n                .overflow_hidden()\n                .child(\n                    crate::layout::ScrollEdgeEffect::new(\"scene.scroll-edge.soft\")\n                        .top(true)\n                        .soft()\n                        .band(64.0)\n                        .child(filler(&theme, \"Earlier messages beneath the toolbar\", 10)),\n                )\n                .child(\n                    div().absolute().top(px(8.0)).left(px(16.0)).child(\n                        Glass::new(\"scene.scroll-edge.toolbar\")\n                            .radius(Radius::Pill)\n                            .child(\n                                div()\n                                    .px(px(20.0))\n                                    .py(px(10.0))\n                                    .child(\"Transcript · fixture\"),\n                            ),\n                    ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Reduced transparency: opaque scroll-edge backing\",\n        ))\n        .child(\n            div().h(px(160.0)).overflow_hidden().child(\n                crate::layout::ScrollEdgeEffect::new(\"scene.scroll-edge.hard\")\n                    .top(true)\n                    .hard()\n                    .band(64.0)\n                    .child(filler(&theme, \"The same transcript\", 7)),\n            ),\n        )\n        .into_any_element()\n}\n\npub(super) fn grid(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let item = |id: &'static str, label: &'static str| {\n        GridItem::new(\n            id,\n            Card::new()\n                .id(format!(\"scene.grid.card.{id}\"))\n                .padding(Space::Md)\n                .child(crate::foundation::text(&theme, TypeScale::Label, label))\n                .child(caption(&theme, \"Caller-owned content\")),\n        )\n        .span_at(Breakpoint::Large, if id == \"summary\" { 2 } else { 1 })\n    };\n    stack(&theme)\n        .w(px(840.0))\n        .child(caption(\n            &theme,\n            \"Columns and spans resolve from the grid's measured width while semantic order stays source order\",\n        ))\n        .child(\n            Grid::new(\"scene.grid\")\n                .columns(1)\n                .columns_at(Breakpoint::Medium, 2)\n                .columns_at(Breakpoint::Large, 3)\n                .gap(Space::Sm)\n                .items([\n                    item(\"summary\", \"Summary\"),\n                    item(\"settings\", \"Settings\"),\n                    item(\"history\", \"History\"),\n                    item(\"policy\", \"Policy\"),\n                ]),\n        )\n        .into_any_element()\n}\n\npub(super) fn container(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"Page width and gutters come from the installed theme, not component-local pixels\",\n        ))\n        .child(\n            Container::new(\"scene.container.readable\")\n                .width(ContainerWidth::Readable)\n                .child(\n                    Card::new()\n                        .id(\"scene.container.readable.card\")\n                        .padding(Space::Md)\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Readable content\",\n                        )),\n                ),\n        )\n        .child(\n            Container::new(\"scene.container.dialog\")\n                .width(ContainerWidth::Dialog)\n                .child(\n                    Card::new()\n                        .id(\"scene.container.dialog.card\")\n                        .padding(Space::Md)\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Dialog-width content\",\n                        )),\n                ),\n        )\n        .into_any_element()\n}\n\n/// A pane with a heading and something under it worth resizing.\n///\n/// Two panes of the same fixture copy demonstrate a divider and nothing else:\n/// what a reader has to be able to judge is that the two sides hold different\n/// things and that dragging trades room between them, so each side is given\n/// its own kind of content and its own heading.\nfn pane(theme: &Theme, title: &'static str, rows: &'static [&'static str]) -> gpui::Div {\n    div()\n        .column()\n        .size_full()\n        .min_w_0()\n        .overflow_hidden()\n        .child(\n            div()\n                .row()\n                .items_center()\n                .px(px(theme.space(Space::Md)))\n                .py(px(theme.space(Space::Sm)))\n                .child(\n                    crate::foundation::text(theme, TypeScale::Label, title)\n                        .text_tone(theme, TextTone::Muted),\n                ),\n        )\n        .child(\n            div()\n                .column()\n                .gap(px(theme.space(Space::Xs)))\n                .px(px(theme.space(Space::Md)))\n                .py(px(theme.space(Space::Sm)))\n                .children(\n                    rows.iter()\n                        .map(|row| crate::foundation::text(theme, TypeScale::Body, *row)),\n                ),\n        )\n}\n\npub(super) 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                .surface(&theme, Surface::Panel)\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(pane(\n                            &theme,\n                            \"Files\",\n                            &[\n                                \"src/\",\n                                \"  main.rs\",\n                                \"  theme.rs\",\n                                \"  layout/\",\n                                \"    split.rs\",\n                                \"    scroll.rs\",\n                                \"Cargo.toml\",\n                            ],\n                        ))\n                        .end(pane(\n                            &theme,\n                            \"split.rs\",\n                            &[\n                                \"pub struct SplitPane {\",\n                                \"    ratio: f32,\",\n                                \"    min_start: f32,\",\n                                \"    min_end: f32,\",\n                                \"}\",\n                                \"\",\n                                \"// The divider reports the ratio a drag\",\n                                \"// asked for; the caller decides it.\",\n                            ],\n                        ))\n                        .on_resize(|_, _, _| {})\n                        .on_collapse(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}\n\n/// The same region, already scrolled, so the shadow that says there is content\n/// above the fold is in a captured image rather than only in a test.\npub(super) fn scroll_shadow(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    crate::layout::scroll_to(\n        \"scene.scroll.scrolled\",\n        gpui::point(px(0.0), px(120.0)),\n        window,\n        cx,\n    );\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(\n            &theme,\n            \"Scrolled to the middle: content is hidden past both ends, so both \\\n             fade\",\n        ))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\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}\n\npub(super) 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(caption(\n            &theme,\n            \"Overflowing: a scrollbar, and the edges fade\",\n        ))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\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 and\n        // no edge fades. The area is as tall as what it holds rather than a\n        // height guessed at and hoped to be enough: a box a few pixels short\n        // of its content draws the scrollbar and the fade of the card above\n        // while claiming to be the card that does neither.\n        .child(caption(&theme, \"Fits: no scrollbar, no fade\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollArea::new(\"scene.scroll.summary\")\n                        .label(\"Summary\")\n                        .vertical()\n                        .fit_height()\n                        .child(filler(&theme, \"Summary\", 4)),\n                ),\n        )\n        .into_any_element()\n}\n\n/// A region scrolled off both ends, so the fade that says there is more in\n/// either direction is in a captured image, beside one that hides nothing and\n/// therefore fades at neither edge.\npub(super) fn scroll_fade(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    crate::layout::scroll_to(\n        \"scene.fade.output\",\n        gpui::point(px(0.0), px(120.0)),\n        window,\n        cx,\n    );\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(&theme, \"Scrolled: content runs past both ends\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollFade::new(\"scene.fade.scrolled\")\n                        .edges(FadeEdges::vertical())\n                        .fit_height()\n                        .child(\n                            ScrollArea::new(\"scene.fade.output\")\n                                .label(\"Run output\")\n                                .vertical()\n                                .height(200.0)\n                                .child(filler(&theme, \"Output\", 20)),\n                        ),\n                ),\n        )\n        // Nothing is hidden here, so no edge fades and the caller says so.\n        .child(caption(&theme, \"Nothing hidden: no edge fades\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollFade::new(\"scene.fade.settled\").fit_height().child(\n                        ScrollArea::new(\"scene.fade.summary\")\n                            .label(\"Summary\")\n                            .vertical()\n                            .height(200.0)\n                            .child(filler(&theme, \"Summary\", 7)),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// A complete client titlebar: product content remains clickable inside the\n/// drag strip, and platform controls keep their native hit-test identities.\npub(super) fn desktop_titlebar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    DesktopTitlebar::new(\"scene.desktop-titlebar\", \"Workspace\")\n                        .subtitle(\"main.rs\")\n                        .left(\n                            Button::new(\"scene.desktop-titlebar.workspace\")\n                                .label(\"Workspace menu\")\n                                .ghost()\n                                .small()\n                                .on_click(|_, _| {}),\n                        )\n                        .right(\n                            Badge::new(\"Connected\")\n                                .success()\n                                .id(\"scene.desktop-titlebar.status\"),\n                        )\n                        .on_event(|_, _, _| {}),\n                )\n                .child(div().h(px(112.0)).p_token(&theme, Space::Lg).child(caption(\n                    &theme,\n                    \"Host content is client input; maximize remains native Snap chrome.\",\n                ))),\n        )\n        .into_any_element()\n}\n\n/// The overflow menu of the toolbar scene, kept across frames.\npub(super) struct SceneToolbar {\n    overflow: Entity<Menu>,\n}\n\nimpl Global for SceneToolbar {}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The last two actions moved into the overflow menu.\",\n        ))\n        .into_any_element()\n}\n\n/// A layout nested three deep, with one leaf collapsed to its rail. The tree\n/// is the caller's: every divider reports the ratio it was asked for and moves\n/// nothing here.\npub(super) 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                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    SplitTree::new(\"scene.tree.workspace\")\n                        .layout(layout)\n                        // Each pane holds enough to reach the bottom of the\n                        // room the tree gave it: a pane drawn half empty says\n                        // the divider above it is in the wrong place, which is\n                        // the one thing this scene is not about.\n                        .pane(\"files\", filler(&theme, \"Files\", 13))\n                        .pane(\"editor\", filler(&theme, \"main.rs\", 7))\n                        .pane(\"terminal\", filler(&theme, \"Terminal\", 4))\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}\n\n/// A recursive dock topology: tab stacks are leaves of the same split tree,\n/// an empty stack remains available, and a collapsed nested stack keeps its\n/// rail instead of flattening the caller's arrangement.\npub(super) fn dock_tree(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let topology = DockTopology::vertical(\n        \"root\",\n        0.78,\n        DockTopology::horizontal(\n            \"workspace\",\n            0.28,\n            DockTopology::Stack(DockStack::new(\"source\", [\"files\", \"search\"]).active(\"files\")),\n            DockTopology::horizontal(\n                \"editing\",\n                0.9,\n                DockTopology::stack(\"editor\", [\"main\"]),\n                DockTopology::Stack(DockStack::new(\"outline\", [\"symbols\"]).collapsed(true)),\n            ),\n        ),\n        DockTopology::stack(\"terminal\", std::iter::empty::<&str>()),\n    );\n\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"recursive caller topology; tab groups, empty destinations, rails, and split dividers share existing primitives\",\n        ))\n        .child(\n            div()\n                .h(px(600.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    DockTree::new(\"scene.dock-tree\", topology)\n                        .panels([\n                            DockPanel::new(\"files\", \"Files\")\n                                .icon(Icon::Folder)\n                                .content(filler(&theme, \"Workspace\", 12)),\n                            DockPanel::new(\"search\", \"Search\")\n                                .icon(Icon::Magnifier)\n                                .badge(\"12\"),\n                            DockPanel::new(\"main\", \"main.rs\")\n                                .icon(Icon::Document)\n                                .content(filler(&theme, \"fn main()\", 15)),\n                            DockPanel::new(\"symbols\", \"Outline\").icon(Icon::List),\n                        ])\n                        .on_event(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}\n\n#[derive(Default)]\nstruct SceneFloatingDock {\n    bounds: Option<gpui::Bounds<f32>>,\n    saved: Option<gpui::Bounds<f32>>,\n}\nimpl Global for SceneFloatingDock {}\n\npub(super) fn dock_floating(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{DockTreeEvent, FloatingDock};\n    if !cx.has_global::<SceneFloatingDock>() {\n        cx.set_global(SceneFloatingDock::default());\n    }\n    let theme = cx.theme().clone();\n    let bounds = cx\n        .global::<SceneFloatingDock>()\n        .bounds\n        .unwrap_or(gpui::Bounds::new(\n            gpui::point(0.36, 0.18),\n            gpui::size(0.48, 0.58),\n        ));\n    stack(&theme).w(px(850.0))\n        .child(caption(&theme, \"Fixture: drag the floating header or resize corner; arrow keys adjust either. Restore uses caller-saved completed gestures.\"))\n        .child(Button::new(\"scene.dock-floating.restore\").label(\"Restore saved layout\").on_click(|_, cx| {\n            let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = state.saved; cx.refresh_windows();\n        }))\n        .child(div().h(px(500.0)).child(\n            DockTree::new(\"scene.dock-floating\", DockTopology::stack(\"workspace\", [\"main\"]))\n                .floating([FloatingDock::new(DockStack::new(\"inspector\", [\"details\"]), bounds).expect(\"valid fixture\")]).expect(\"unique fixture identities\")\n                .panels([\n                    DockPanel::new(\"main\", \"Workspace\").content(filler(&theme, \"Caller-owned background\", 15)),\n                    DockPanel::new(\"details\", \"Details\").content(filler(&theme, \"Floating inspector\", 7)),\n                ])\n                .on_event(|event, _, cx| {\n                    match event {\n                        DockTreeEvent::FloatingChanged { bounds, finished, .. } => {\n                            let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = Some(bounds); if finished { state.saved = Some(bounds); }\n                        }\n                        DockTreeEvent::FloatingCancelled { .. } => { let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = state.saved; }\n                        _ => {}\n                    }\n                    cx.refresh_windows();\n                })\n        )).into_any_element()\n}\n\n/// A whole application frame: panels in regions, one region collapsed to a\n/// rail, one panel the host refuses, and a status bar under all of it.\npub(super) 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(940.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                    // The bottom region holds one refused panel, and a refusal\n                    // is a sentence rather than a document: given a third of\n                    // the frame it reads as a region that lost its content\n                    // instead of as a panel the host would not open.\n                    .share(DockRegion::Bottom, 0.17)\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                        // No badge: a panel that cannot list problems cannot\n                        // count them either, and one unavailable reason is the\n                        // whole claim. Gluing \"there is nothing here\" onto it\n                        // would report Empty and Unavailable at once.\n                        DockPanel::new(\"problems\", \"Problems\")\n                            .icon(Icon::Danger)\n                            .unavailable(\n                                \"The language server is not running, so problems cannot be listed.\",\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}\n\npub(super) fn aspect_ratio(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // The ratio is the subject, so the block it drives is drawn the way every\n    // other bounded region in the library is: a surface step, the card radius,\n    // and its label inside it.\n    let filled = |label: &'static str| {\n        div()\n            .size_full()\n            .flex()\n            .items_center()\n            .justify_center()\n            .surface(&theme, Surface::Sunken)\n            .radius(&theme, Radius::Card)\n            .overflow_hidden()\n            .child(\n                crate::foundation::text(&theme, TypeScale::Label, label)\n                    .text_tone(&theme, TextTone::Muted),\n            )\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}\n\n/// A container that arranges itself from its own measured width.\n///\n/// Both arrangements are shown at once, because the point of the component is\n/// that the caller decides them and neither is a fallback for the other. The\n/// unmeasured first frame is a state a still image cannot hold, so it is named\n/// rather than drawn.\npub(super) fn responsive(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let arrangement = move |id: &'static str| {\n        let theme = theme.clone();\n        move |size: ContainerSize, _: &mut Window, cx: &mut App| {\n            let wide = size.width().is_some_and(|measured| measured >= 480.0);\n            // The unmeasured frame is a real state and it is named rather than\n            // guessed, which is the whole argument the component makes.\n            let heading = match size.width() {\n                None => \"Not laid out yet, so neither arrangement is chosen\".to_string(),\n                Some(measured) if wide => format!(\"{measured:.0}px wide, so two columns\"),\n                Some(measured) => format!(\"{measured:.0}px wide, so one column\"),\n            };\n            // A card rather than a tinted rectangle, and with enough in it to\n            // be a column: two panels holding one word each say nothing about\n            // an arrangement, which is what the component is for.\n            let block = |label: &'static str, lines: &'static [&'static str], cx: &mut App| {\n                div()\n                    .flex_1()\n                    .min_w_0()\n                    .column()\n                    .gap_token(&theme, Space::Xs)\n                    .p_token(&theme, Space::Md)\n                    .card_surface(&theme, CardVariant::Elevated)\n                    .child(crate::foundation::text(&theme, TypeScale::Label, label))\n                    .children(lines.iter().map(|line| {\n                        crate::foundation::text(&theme, TypeScale::Caption, *line)\n                            .text_tone(&theme, TextTone::Muted)\n                    }))\n                    .semantic_in(\n                        cx,\n                        NodeSpec::new(format!(\"{id}.{}\", label.to_lowercase()), Role::Group)\n                            .text(label),\n                    )\n            };\n            let panes = div()\n                .gap_token(&theme, Space::Sm)\n                .child(block(\n                    \"Settings\",\n                    &[\"Theme\", \"Density\", \"Reading direction\"],\n                    cx,\n                ))\n                .child(block(\n                    \"Detail\",\n                    &[\"Studio Dark\", \"Comfortable\", \"Left to right\"],\n                    cx,\n                ));\n            div()\n                .column()\n                .gap_token(&theme, Space::Sm)\n                .child(\n                    crate::foundation::text(&theme, TypeScale::Caption, heading.clone())\n                        .text_tone(&theme, TextTone::Faint),\n                )\n                .child(if wide { panes.row() } else { panes.column() })\n                .semantic_in(cx, NodeSpec::new(id, Role::Group).value(heading))\n                .into_any_element()\n        }\n    };\n\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Wide enough for two columns\"))\n        .child(div().w(px(620.0)).child(Responsive::new(\n            \"scene.responsive.wide\",\n            arrangement(\"scene.responsive.wide.body\"),\n        )))\n        .child(caption(&theme, \"The same content, narrow\"))\n        .child(div().w(px(320.0)).child(Responsive::new(\n            \"scene.responsive.narrow\",\n            arrangement(\"scene.responsive.narrow.body\"),\n        )))\n        .into_any_element()\n}\n\n//! Time-based and dimensional media.\n\nuse super::support::*;\n\n/// The cube the model scenes read: a glTF document with its own buffer\n/// inside it, so the reader is exercised on the path a host would take and\n/// nothing is fetched to draw a scene.\npub(super) const CUBE: &[u8] = include_bytes!(\"../../assets/models/cube.gltf\");\n\n/// A measured envelope, in the shape a host that read the samples would hand\n/// over. It is written down rather than sampled, because a scene that drew a\n/// different waveform every run could not be a visual baseline.\npub(super) fn scene_peaks(count: usize) -> Vec<f32> {\n    (0..count)\n        .map(|index| {\n            let phase = index as f32 / count as f32;\n            let swell = (phase * 11.0).sin() * 0.32 + (phase * 3.0).cos() * 0.28;\n            (0.42 + swell).clamp(0.05, 1.0)\n        })\n        .collect()\n}\n\npub(super) fn audio_player(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(392.0))\n        .child(\n            AudioPlayer::new(\"scene.audio.ready\")\n                .control_size(gpui_kit_theme::ControlSize::Touch)\n                .title(\"Release walkthrough\")\n                .subtitle(\"Recorded 12 March\")\n                .transport(\n                    FixtureTransport::ready(240.0)\n                        .position(72.0)\n                        .state(TransportState::Playing)\n                        .volume(0.7)\n                        .buffered([BufferedRange::new(0.0, 156.0)])\n                        .shared(),\n                )\n                .elapsed(\"01:12\")\n                .remaining(\"-02:48\")\n                .peaks(scene_peaks(96))\n                .speeds([1.0, 1.5, 2.0])\n                .step_seconds(10.0)\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.audio.rule.backend\")\n                .label(\"Nothing here can decode it\"),\n        )\n        .child(\n            AudioPlayer::new(\"scene.audio.absent\")\n                .title(\"interview.opus\")\n                .transport(\n                    FixtureTransport::new()\n                        .no_backend(\"There is no Opus decoder on this machine.\")\n                        .shared(),\n                )\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.audio.rule.none\")\n                .label(\"No player connected at all\"),\n        )\n        .child(\n            AudioPlayer::new(\"scene.audio.none\")\n                .title(\"Standup recording\")\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\nfn walkthrough_frame(cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let metric = |label: &'static str, value: &'static str| {\n        div()\n            .flex_1()\n            .min_w_0()\n            .column()\n            .gap_token(&theme, Space::Xs)\n            .p_token(&theme, Space::Sm)\n            .radius(&theme, Radius::Small)\n            .bg(theme.colors.raised)\n            .child(\n                crate::foundation::text(&theme, TypeScale::Caption, label)\n                    .text_tone(&theme, TextTone::Muted),\n            )\n            .child(crate::foundation::text(&theme, TypeScale::Subtitle, value))\n    };\n    div()\n        .size_full()\n        .column()\n        .bg(theme.colors.panel)\n        .child(\n            div()\n                .row()\n                .items_center()\n                .gap_token(&theme, Space::Sm)\n                .px_token(&theme, Space::Md)\n                .py_token(&theme, Space::Sm)\n                .surface(&theme, Surface::Raised)\n                .child(div().size(px(7.0)).rounded_full().bg(theme.colors.success))\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Release command center\",\n                )),\n        )\n        .child(\n            div()\n                .flex_1()\n                .min_h_0()\n                .row()\n                .child(\n                    div()\n                        .w(px(76.0))\n                        .h_full()\n                        .flex_none()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .p_token(&theme, Space::Sm)\n                        .bg(theme.colors.sunken)\n                        .children([16.0, 34.0, 26.0, 42.0].map(|width| {\n                            div()\n                                .w(px(width))\n                                .h(px(theme.borders.thick))\n                                .rounded_full()\n                                .bg(theme.colors.hairline_strong)\n                        })),\n                )\n                .child(\n                    div()\n                        .flex_1()\n                        .min_w_0()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .p_token(&theme, Space::Md)\n                        .child(\n                            div()\n                                .row()\n                                .gap_token(&theme, Space::Sm)\n                                .child(metric(\"Checks\", \"48 / 52\"))\n                                .child(metric(\"Coverage\", \"92%\"))\n                                .child(metric(\"Elapsed\", \"04:18\")),\n                        )\n                        .child(\n                            div()\n                                .column()\n                                .gap_token(&theme, Space::Xs)\n                                .p_token(&theme, Space::Sm)\n                                .radius(&theme, Radius::Small)\n                                .surface(&theme, Surface::Raised)\n                                .child(crate::foundation::text(\n                                    &theme,\n                                    TypeScale::Caption,\n                                    \"Verification progress\",\n                                ))\n                                .child(\n                                    div()\n                                        .h(px(6.0))\n                                        .w_full()\n                                        .rounded_full()\n                                        .overflow_hidden()\n                                        .bg(theme.colors.track)\n                                        .child(\n                                            div()\n                                                .h_full()\n                                                .w(px(218.0))\n                                                .rounded_full()\n                                                .bg(theme.colors.accent),\n                                        ),\n                                ),\n                        ),\n                ),\n        )\n        .into_any_element()\n}\n\nfn walkthrough_poster(cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .size_full()\n        .flex()\n        .flex_col()\n        .items_center()\n        .justify_center()\n        .gap_token(&theme, Space::Sm)\n        .bg(theme.colors.sunken)\n        .child(\n            div()\n                .size(px(46.0))\n                .flex()\n                .items_center()\n                .justify_center()\n                .rounded_full()\n                .frame(&theme, Surface::Raised, Elevation::Raised)\n                .child(\n                    gpui_kit_assets::icon(Icon::Play)\n                        .size(px(theme.control.md.icon_size))\n                        .text_color(theme.colors.accent_strong),\n                ),\n        )\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Release walkthrough\",\n        ))\n        .child(\n            crate::foundation::text(&theme, TypeScale::Caption, \"4 minutes · 8 chapters\")\n                .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}\n\npub(super) fn video_player(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(392.0))\n        .child(\n            VideoPlayer::new(\"scene.video.frame\")\n                .control_size(gpui_kit_theme::ControlSize::Touch)\n                .presentation(\n                    crate::content::transport::MediaPresentation::Inline,\n                    \"Present video\",\n                )\n                .presentation_refused(\"Fixture host: native video presentation is unavailable.\")\n                .on_presentation_request(|_, _, _| {})\n                .title(\"Screen capture\")\n                .transport(\n                    FixtureTransport::ready(96.0)\n                        .position(24.0)\n                        .state(TransportState::Playing)\n                        .volume(0.6)\n                        .shared(),\n                )\n                .frame(|_, cx| Some(walkthrough_frame(cx)))\n                .elapsed(\"00:24\")\n                .remaining(\"-01:12\")\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.video.rule.poster\")\n                .label(\"Poster while the first frame is still unavailable\"),\n        )\n        .child(\n            VideoPlayer::new(\"scene.video.poster\")\n                .title(\"Release walkthrough\")\n                .transport(FixtureTransport::ready(240.0).shared())\n                .poster(|_, cx| Some(walkthrough_poster(cx)))\n                .elapsed(\"00:00\")\n                .remaining(\"-04:00\")\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) fn model_viewer(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let read = || ModelState::read(CUBE, ModelBounds::default());\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            div()\n                .row()\n                .items_start()\n                .gap(px(theme.spacing.lg))\n                .child(\n                    div().flex_1().min_w_0().child(\n                        ModelViewer::new(\"scene.model.flat\")\n                            .title(\"cube.gltf\")\n                            .state(read())\n                            .orbit(0.62, 0.42)\n                            .height(240.0)\n                            .on_event(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    div().flex_1().min_w_0().child(\n                        ModelViewer::new(\"scene.model.wireframe\")\n                            .title(\"cube.gltf\")\n                            .state(read())\n                            .shading(ModelShading::Wireframe)\n                            .orbit(0.62, 0.42)\n                            .height(240.0)\n                            .on_event(|_, _, _| {}),\n                    ),\n                ),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.model.rule.refused\")\n                .label(\"A document past a bound\"),\n        )\n        .child(\n            ModelViewer::new(\"scene.model.refused\")\n                .title(\"city-block.glb\")\n                .rejected(ModelError::TooLarge {\n                    limit: ModelLimit::Triangles,\n                    found: 412_930,\n                    allowed: 24_576,\n                })\n                .height(160.0)\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) fn audio_waveform(_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            \"already-normalized peaks; a missing playhead draws no played split\",\n        ))\n        .child(\n            AudioWaveform::new(\"scene.waveform.ready\")\n                .peaks(scene_peaks(48))\n                .playhead(0.38),\n        )\n        .child(AudioWaveform::new(\"scene.waveform.loading\").state(AudioWaveformState::Loading))\n        .child(AudioWaveform::new(\"scene.waveform.empty\").state(AudioWaveformState::Empty))\n        .child(AudioWaveform::new(\"scene.waveform.unavailable\").state(\n            AudioWaveformState::Unavailable(\"The sampler host refused the request.\".into()),\n        ))\n        .child(\n            AudioWaveform::new(\"scene.waveform.error\").state(AudioWaveformState::Error(\n                \"The sampler request failed.\".into(),\n            )),\n        )\n        .into_any_element()\n}\n\n//! One canonical rendering per component, grouped the way the components are.\n//!\n//! A scene is the single description of a component's states that both the\n//! gallery and the audit tests consume, so a component cannot be reviewed\n//! visually in one arrangement and tested in another.\n//!\n//! Almost every scene is an *exhibit*: it is about one component, it lives in\n//! the file named after that component's family, and it is where a reader is\n//! sent to review it. `xtask api check` fails when a public component has no\n//! exhibit, so a component cannot be added and left unseen.\n//!\n//! The rest are *compositions*, and there are three of them. A composition is\n//! built the way a product would build one, because components interact in\n//! ways none of them shows alone. It is nobody's coverage, and [`Shows`]\n//! records the difference so the catalog does not claim a component was\n//! reviewed when it was only recognised inside a shell.\n//!\n//! What is deliberately not here is a scene per screenshot. The files below\n//! are the component families, not a taxonomy invented for this module, so a\n//! component and the rendering that reviews it move together.\n\nmod support;\n\nmod agent;\nmod canvas;\nmod cartesian;\nmod compositions;\nmod content;\nmod controls;\nmod data;\n#[cfg(feature = \"fixtures\")]\nmod datetime;\nmod display;\nmod effects;\nmod flip_configuration;\nmod game;\nmod geography;\nmod heatmap;\nmod interaction;\nmod layout;\nmod media;\nmod motion;\nmod navigation;\nmod overlay;\nmod plot;\nmod specialized;\nmod structured;\n\nuse gpui::{AnyElement, App, Window};\n\nuse crate::foundation::direction::LayoutDirection;\n\nuse agent::{\n    agent_avatar, agent_plan, agent_roster, agent_run_canvas, agent_run_issues, approval,\n    artifact_preview, clarification, cost_meter, feedback_rating, offering_catalog,\n    permission_matrix, persona, prompt_builder, server_list, thinking, tool_call,\n};\nuse canvas::{\n    canvas_regions, canvas_tools, node_graph, node_graph_layout, node_graph_motion,\n    node_graph_routing,\n};\nuse cartesian::{\n    cartesian, cartesian_dense, cartesian_layout, cartesian_lifecycle, cartesian_linked,\n    cartesian_states,\n};\nuse compositions::{motion_flip, motion_state, reading_direction};\n#[cfg(all(feature = \"terminal\", not(target_family = \"wasm\")))]\nuse content::terminal;\nuse content::{\n    agent_document, browser_panel, code_view, conversation, conversation_growing, diff_view,\n    image_viewer, log_stream, markdown, outline, transport,\n};\nuse controls::{\n    actions, auth_sign_in, auth_verification, button, cascader, choice, color_picker, copy_button,\n    dropzone, editor, editor_folding, editor_multicursor, editor_options, editor_services,\n    filter_bar, find_replace, form, inline_edit, input, keybinding, keymap_editor, mention_input,\n    multi_select, rich_text_editor, search_field, search_input, settings, settings_page, textarea,\n    toggle, touch_inputs, touch_pickers, touch_pickers_open, transfer_list, translation_packs,\n    upload_list,\n};\nuse data::{\n    data_grid, data_grid_editing, deferred_drop, diagnostics_list, drag_list, drag_tree, flow,\n    image_list, kanban, list, masonry, table, tree, tree_grid,\n};\n#[cfg(feature = \"fixtures\")]\nuse datetime::{calendar, date_range, date_time, touch_dates};\nuse display::{\n    animated_number, attachment, avatar, badge, banner, bubble, card, chart, detail, divider,\n    empty_state, failure_panel, heatmap, icon, loading, metric_card, outcome_panel,\n    performance_hud, plot, progress_bar, progress_circle, rating, sparkline, stage_progress,\n    state_ladder, status, tag, trace, trace_time,\n};\nuse effects::{cinematic_effects, visual_effects};\nuse flip_configuration::flip_configuration;\nuse game::game_ui;\nuse geography::{geography, geography_scale};\nuse heatmap::{continuous_heatmap, continuous_heatmap_transition, heatmap_reordering};\nuse interaction::{pull_to_refresh, swipe_actions};\nuse layout::{\n    aspect_ratio, container, desktop_titlebar, dock_floating, dock_tree, grid, ide_shell,\n    mobile_page, responsive, scroll_area, scroll_edge_effect, scroll_fade, scroll_shadow,\n    split_pane, split_tree, toolbar,\n};\nuse media::{audio_player, audio_waveform, model_viewer, video_player};\nuse motion::{micro, motion_primitives};\nuse navigation::{\n    accordion, adaptive_navigation, anchor_list, bottom_navigation, breadcrumb, carousel,\n    collapsible, document_tabs, nav_back_preview, nav_stack, pagination, sidebar, sidebar_overflow,\n    tabs, undo_history, wizard,\n};\nuse overlay::{\n    action_sheet, bottom_sheet, command_palette, context_menu, dialog, drawer, frost, glass,\n    glass_materials, glass_optics, hover_card, kbd, media_caption, menu, menubar,\n    notification_center, overlay, popover, toast, tooltip,\n};\nuse plot::{raw_candlestick, sankey_layout, sankey_motion};\nuse specialized::{specialized, specialized_distribution, specialized_exploration};\nuse structured::{json_view, schema_form};\n\n/// What a rendering exists to show.\n///\n/// The distinction is the difference between reviewing a component and\n/// recognising it. A component that has only ever been seen inside a shell has\n/// been recognised; nobody has looked at its states, and the catalog should\n/// not claim otherwise, which is why only [`Shows::Subjects`] counts as\n/// coverage.\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum Shows {\n    /// The components this rendering is *about*. It arranges them so their\n    /// states can be compared, and it is where a reader is sent to review\n    /// them. Everything else it draws is scaffolding.\n    Subjects(&'static [&'static str]),\n    /// An arrangement the way a product would build one, kept because\n    /// components interact in ways none of them shows alone. It is nobody's\n    /// coverage: every component it draws is reviewed somewhere else.\n    Composition(&'static [&'static str]),\n}\n\nimpl Shows {\n    /// Every component named, whichever kind this is.\n    pub fn components(&self) -> &'static [&'static str] {\n        match self {\n            Self::Subjects(names) | Self::Composition(names) => names,\n        }\n    }\n\n    /// The components this rendering is the review of, which is empty for a\n    /// composition.\n    pub fn subjects(&self) -> &'static [&'static str] {\n        match self {\n            Self::Subjects(names) => names,\n            Self::Composition(_) => &[],\n        }\n    }\n}\n\n/// One canonical rendering, addressed by name.\npub struct Scene {\n    pub name: &'static str,\n    pub build: fn(&mut Window, &mut App) -> AnyElement,\n    /// What this rendering is for, declared rather than inferred.\n    ///\n    /// It used to be read back out of the source by following every helper a\n    /// scene called, which answered a different question — *what types does\n    /// this code path touch* — and answered it as an upper bound. Three\n    /// unrelated scenes that shared one fixture helper reported the same seven\n    /// components, so \"which scene shows me\" was a claim no reader could rely\n    /// on. Declaring it makes it exact, and `xtask api check` holds the\n    /// declaration to what the source can actually reach.\n    pub shows: Shows,\n}\n\nimpl std::fmt::Debug for Scene {\n    fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        formatter\n            .debug_struct(\"Scene\")\n            .field(\"name\", &self.name)\n            .field(\"shows\", &self.shows)\n            .finish()\n    }\n}\n\n/// Every scene, in a stable order.\npub fn catalog() -> Vec<Scene> {\n    #[allow(unused_mut)]\n    let mut scenes = vec![\n        Scene {\n            name: \"bottom-sheet\",\n            build: bottom_sheet,\n            shows: Shows::Subjects(&[\"BottomSheet\"]),\n        },\n        Scene {\n            name: \"action-sheet\",\n            build: action_sheet,\n            shows: Shows::Subjects(&[\"ActionSheet\"]),\n        },\n        Scene {\n            name: \"pull-to-refresh\",\n            build: pull_to_refresh,\n            shows: Shows::Subjects(&[\"PullToRefresh\"]),\n        },\n        Scene {\n            name: \"swipe-actions\",\n            build: swipe_actions,\n            shows: Shows::Subjects(&[\"SwipeActions\"]),\n        },\n        Scene {\n            name: \"button\",\n            build: button,\n            shows: Shows::Subjects(&[\"Button\"]),\n        },\n        Scene {\n            name: \"badge\",\n            build: badge,\n            shows: Shows::Subjects(&[\"Badge\"]),\n        },\n        Scene {\n            name: \"card\",\n            build: card,\n            shows: Shows::Subjects(&[\"Card\", \"ListRow\"]),\n        },\n        Scene {\n            name: \"rating\",\n            build: rating,\n            shows: Shows::Subjects(&[\"Rating\"]),\n        },\n        Scene {\n            name: \"bubble\",\n            build: bubble,\n            shows: Shows::Subjects(&[\"Bubble\"]),\n        },\n        Scene {\n            name: \"status\",\n            build: status,\n            shows: Shows::Subjects(&[\"Callout\", \"StatusDot\", \"StatusLine\"]),\n        },\n        Scene {\n            name: \"loading\",\n            build: loading,\n            shows: Shows::Subjects(&[\n                \"BarLoader\",\n                \"LoadMore\",\n                \"PulseLoader\",\n                \"RefreshVeil\",\n                \"Skeleton\",\n                \"Spinner\",\n            ]),\n        },\n        Scene {\n            name: \"visual-effects\",\n            build: visual_effects,\n            shows: Shows::Subjects(&[\"EffectParticles\"]),\n        },\n        Scene {\n            name: \"cinematic-effects\",\n            build: cinematic_effects,\n            shows: Shows::Subjects(&[\"CinematicEffect\"]),\n        },\n        Scene {\n            name: \"choice\",\n            build: choice,\n            shows: Shows::Subjects(&[\"Checkbox\", \"Radio\", \"Slider\", \"Switch\"]),\n        },\n        Scene {\n            name: \"multi-select\",\n            build: multi_select,\n            shows: Shows::Subjects(&[\"MultiSelect\"]),\n        },\n        Scene {\n            name: \"transfer-list\",\n            build: transfer_list,\n            shows: Shows::Subjects(&[\"TransferList\"]),\n        },\n        Scene {\n            name: \"input\",\n            build: input,\n            shows: Shows::Subjects(&[\"Select\", \"TextInput\"]),\n        },\n        Scene {\n            name: \"touch-inputs\",\n            build: touch_inputs,\n            shows: Shows::Subjects(&[\"TextInput\", \"TextArea\", \"PasswordInput\", \"OneTimeCodeInput\"]),\n        },\n        Scene {\n            name: \"touch-pickers\",\n            build: touch_pickers,\n            shows: Shows::Subjects(&[\"Select\", \"Combobox\", \"MultiSelect\"]),\n        },\n        Scene {\n            name: \"touch-pickers-open\",\n            build: touch_pickers_open,\n            shows: Shows::Subjects(&[\"Combobox\"]),\n        },\n        Scene {\n            name: \"textarea\",\n            build: textarea,\n            shows: Shows::Subjects(&[\"TextArea\"]),\n        },\n        Scene {\n            name: \"editor\",\n            build: editor,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-multicursor\",\n            build: editor_multicursor,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-services\",\n            build: editor_services,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-folding\",\n            build: editor_folding,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-options\",\n            build: editor_options,\n            shows: Shows::Subjects(&[\"Editor\", \"TextArea\", \"RichTextEditor\"]),\n        },\n        Scene {\n            name: \"mention-input\",\n            build: mention_input,\n            shows: Shows::Subjects(&[\"MentionInput\"]),\n        },\n        Scene {\n            name: \"rich-text-editor\",\n            build: rich_text_editor,\n            shows: Shows::Subjects(&[\"RichTextEditor\"]),\n        },\n        Scene {\n            name: \"form\",\n            build: form,\n            shows: Shows::Subjects(&[\n                \"Combobox\",\n                \"FormField\",\n                \"NumberInput\",\n                \"SegmentedControl\",\n                \"TagInput\",\n            ]),\n        },\n        Scene {\n            name: \"auth-sign-in\",\n            build: auth_sign_in,\n            shows: Shows::Subjects(&[\"PasswordInput\"]),\n        },\n        Scene {\n            name: \"auth-verification\",\n            build: auth_verification,\n            shows: Shows::Subjects(&[\"OneTimeCodeInput\"]),\n        },\n        Scene {\n            name: \"actions\",\n            build: actions,\n            shows: Shows::Subjects(&[\"ButtonGroup\", \"IconButton\", \"SplitButton\"]),\n        },\n        Scene {\n            name: \"progress-bar\",\n            build: progress_bar,\n            shows: Shows::Subjects(&[\"ProgressBar\"]),\n        },\n        Scene {\n            name: \"state-ladder\",\n            build: state_ladder,\n            shows: Shows::Subjects(&[\"StateView\", \"StaleMark\"]),\n        },\n        Scene {\n            name: \"banner\",\n            build: banner,\n            shows: Shows::Subjects(&[\"Banner\"]),\n        },\n        Scene {\n            name: \"outcome-panel\",\n            build: outcome_panel,\n            shows: Shows::Subjects(&[\"OutcomePanel\"]),\n        },\n        Scene {\n            name: \"stage-progress\",\n            build: stage_progress,\n            shows: Shows::Subjects(&[\"StageProgress\"]),\n        },\n        Scene {\n            name: \"divider\",\n            build: divider,\n            shows: Shows::Subjects(&[\"Divider\"]),\n        },\n        Scene {\n            name: \"tag\",\n            build: tag,\n            shows: Shows::Subjects(&[\"Tag\"]),\n        },\n        Scene {\n            name: \"avatar\",\n            build: avatar,\n            shows: Shows::Subjects(&[\"Avatar\", \"AvatarGroup\"]),\n        },\n        Scene {\n            name: \"empty-state\",\n            build: empty_state,\n            shows: Shows::Subjects(&[\"EmptyState\"]),\n        },\n        Scene {\n            name: \"kbd\",\n            build: kbd,\n            shows: Shows::Subjects(&[\"Kbd\"]),\n        },\n        Scene {\n            name: \"overlay\",\n            build: overlay,\n            shows: Shows::Subjects(&[\"Overlay\"]),\n        },\n        Scene {\n            name: \"dialog\",\n            build: dialog,\n            shows: Shows::Subjects(&[\"Dialog\"]),\n        },\n        Scene {\n            name: \"tooltip\",\n            build: tooltip,\n            shows: Shows::Subjects(&[\"Tooltip\"]),\n        },\n        Scene {\n            name: \"menu\",\n            build: menu,\n            shows: Shows::Subjects(&[\"Menu\"]),\n        },\n        Scene {\n            name: \"context-menu\",\n            build: context_menu,\n            shows: Shows::Subjects(&[\"ContextMenu\"]),\n        },\n        Scene {\n            name: \"popover\",\n            build: popover,\n            shows: Shows::Subjects(&[\"Popover\"]),\n        },\n        Scene {\n            name: \"command-palette\",\n            build: command_palette,\n            shows: Shows::Subjects(&[\"CommandPalette\"]),\n        },\n        Scene {\n            name: \"toast\",\n            build: toast,\n            shows: Shows::Subjects(&[\"ToastLayer\"]),\n        },\n        Scene {\n            name: \"tabs\",\n            build: tabs,\n            shows: Shows::Subjects(&[\"Tabs\"]),\n        },\n        Scene {\n            name: \"carousel\",\n            build: carousel,\n            shows: Shows::Subjects(&[\"Carousel\"]),\n        },\n        Scene {\n            name: \"nav-stack\",\n            build: nav_stack,\n            shows: Shows::Subjects(&[\"NavStack\"]),\n        },\n        Scene {\n            name: \"accordion\",\n            build: accordion,\n            shows: Shows::Subjects(&[\"Accordion\"]),\n        },\n        Scene {\n            name: \"breadcrumb\",\n            build: breadcrumb,\n            shows: Shows::Subjects(&[\"Breadcrumb\"]),\n        },\n        Scene {\n            name: \"list\",\n            build: list,\n            shows: Shows::Subjects(&[\"List\"]),\n        },\n        Scene {\n            name: \"image-list\",\n            build: image_list,\n            shows: Shows::Subjects(&[\"ImageList\"]),\n        },\n        Scene {\n            name: \"masonry\",\n            build: masonry,\n            shows: Shows::Subjects(&[\"Masonry\"]),\n        },\n        Scene {\n            name: \"flow\",\n            build: flow,\n            shows: Shows::Subjects(&[\"Flow\"]),\n        },\n        Scene {\n            name: \"table\",\n            build: table,\n            shows: Shows::Subjects(&[\"Table\"]),\n        },\n        Scene {\n            name: \"data-grid\",\n            build: data_grid,\n            shows: Shows::Subjects(&[\"BulkBar\", \"DataGrid\"]),\n        },\n        Scene {\n            name: \"data-grid-editing\",\n            build: data_grid_editing,\n            shows: Shows::Subjects(&[\"DataGrid\"]),\n        },\n        Scene {\n            name: \"tree-grid\",\n            build: tree_grid,\n            shows: Shows::Subjects(&[\"TreeGrid\"]),\n        },\n        Scene {\n            name: \"tree\",\n            build: tree,\n            shows: Shows::Subjects(&[\"Tree\"]),\n        },\n        Scene {\n            name: \"split-pane\",\n            build: split_pane,\n            shows: Shows::Subjects(&[\"SplitPane\"]),\n        },\n        Scene {\n            name: \"grid\",\n            build: grid,\n            shows: Shows::Subjects(&[\"Grid\"]),\n        },\n        Scene {\n            name: \"container\",\n            build: container,\n            shows: Shows::Subjects(&[\"Container\"]),\n        },\n        Scene {\n            name: \"scroll-area\",\n            build: scroll_area,\n            shows: Shows::Subjects(&[\"ScrollArea\"]),\n        },\n        Scene {\n            name: \"scroll-shadow\",\n            build: scroll_shadow,\n            shows: Shows::Subjects(&[\"ScrollArea\"]),\n        },\n        Scene {\n            name: \"scroll-fade\",\n            build: scroll_fade,\n            shows: Shows::Subjects(&[\"ScrollFade\"]),\n        },\n        Scene {\n            name: \"scroll-edge-effect\",\n            build: scroll_edge_effect,\n            shows: Shows::Subjects(&[\"ScrollEdgeEffect\"]),\n        },\n        Scene {\n            name: \"frost\",\n            build: frost,\n            shows: Shows::Subjects(&[\"Frost\"]),\n        },\n        Scene {\n            name: \"glass\",\n            build: glass,\n            shows: Shows::Subjects(&[\"Glass\"]),\n        },\n        Scene {\n            name: \"glass-optics\",\n            build: glass_optics,\n            shows: Shows::Subjects(&[\"Glass\", \"GlassGroup\"]),\n        },\n        Scene {\n            name: \"glass-materials\",\n            build: glass_materials,\n            shows: Shows::Subjects(&[\"Glass\", \"GlassGroup\"]),\n        },\n        Scene {\n            name: \"media-caption\",\n            build: media_caption,\n            shows: Shows::Composition(&[\"Button\"]),\n        },\n        Scene {\n            name: \"toolbar\",\n            build: toolbar,\n            shows: Shows::Subjects(&[\"Toolbar\"]),\n        },\n        Scene {\n            name: \"desktop-titlebar\",\n            build: desktop_titlebar,\n            shows: Shows::Subjects(&[\"DesktopTitlebar\"]),\n        },\n        Scene {\n            name: \"mobile-page\",\n            build: mobile_page,\n            shows: Shows::Subjects(&[\"AppBar\", \"PageLayout\"]),\n        },\n        Scene {\n            name: \"bottom-navigation\",\n            build: bottom_navigation,\n            shows: Shows::Subjects(&[\"BottomNavigation\"]),\n        },\n        Scene {\n            name: \"nav-back-preview\",\n            build: nav_back_preview,\n            shows: Shows::Subjects(&[\"NavStack\"]),\n        },\n        Scene {\n            name: \"adaptive-navigation\",\n            build: adaptive_navigation,\n            shows: Shows::Composition(&[\n                \"Responsive\",\n                \"Sidebar\",\n                \"BottomNavigation\",\n                \"PageLayout\",\n                \"AppBar\",\n            ]),\n        },\n        Scene {\n            name: \"sidebar\",\n            build: sidebar,\n            shows: Shows::Subjects(&[\"Sidebar\"]),\n        },\n        Scene {\n            name: \"sidebar-overflow\",\n            build: sidebar_overflow,\n            shows: Shows::Subjects(&[\"Sidebar\"]),\n        },\n        Scene {\n            name: \"pagination\",\n            build: pagination,\n            shows: Shows::Subjects(&[\"Pagination\"]),\n        },\n        Scene {\n            name: \"drawer\",\n            build: drawer,\n            shows: Shows::Subjects(&[\"Drawer\"]),\n        },\n        Scene {\n            name: \"motion-flip\",\n            build: motion_flip,\n            shows: Shows::Composition(&[\"Button\", \"Card\", \"ListRow\"]),\n        },\n        Scene {\n            name: \"flip-configuration\",\n            build: flip_configuration,\n            shows: Shows::Composition(&[\"Button\"]),\n        },\n        Scene {\n            name: \"motion-state\",\n            build: motion_state,\n            shows: Shows::Composition(&[\n                \"Accordion\",\n                \"Button\",\n                \"Checkbox\",\n                \"ProgressBar\",\n                \"Radio\",\n                \"SegmentedControl\",\n                \"Switch\",\n                \"Tabs\",\n            ]),\n        },\n        Scene {\n            name: \"motion-primitives\",\n            build: motion_primitives,\n            shows: Shows::Composition(&[\"Button\", \"Tabs\"]),\n        },\n        Scene {\n            name: \"animated-number\",\n            build: animated_number,\n            shows: Shows::Subjects(&[\"AnimatedNumber\"]),\n        },\n        Scene {\n            name: \"drag-list\",\n            build: drag_list,\n            shows: Shows::Subjects(&[\"List\"]),\n        },\n        Scene {\n            name: \"deferred-drop\",\n            build: deferred_drop,\n            shows: Shows::Composition(&[\"List\", \"Tabs\", \"Tree\", \"Button\"]),\n        },\n        Scene {\n            name: \"drag-tree\",\n            build: drag_tree,\n            shows: Shows::Subjects(&[\"Tree\"]),\n        },\n        Scene {\n            name: \"dropzone\",\n            build: dropzone,\n            shows: Shows::Subjects(&[\"Dropzone\"]),\n        },\n        Scene {\n            name: \"wizard\",\n            build: wizard,\n            shows: Shows::Subjects(&[\"Wizard\"]),\n        },\n        Scene {\n            name: \"undo-history\",\n            build: undo_history,\n            shows: Shows::Subjects(&[\"UndoHistory\"]),\n        },\n        Scene {\n            name: \"settings\",\n            build: settings,\n            shows: Shows::Subjects(&[\"SettingsList\", \"SettingsRow\", \"SettingsSection\"]),\n        },\n        Scene {\n            name: \"settings-page\",\n            build: settings_page,\n            shows: Shows::Subjects(&[\"SettingsList\"]),\n        },\n        Scene {\n            name: \"translation-packs\",\n            build: translation_packs,\n            shows: Shows::Composition(&[\"Card\", \"Button\"]),\n        },\n        Scene {\n            name: \"detail\",\n            build: detail,\n            shows: Shows::Subjects(&[\"DescriptionList\", \"Timeline\"]),\n        },\n        Scene {\n            name: \"filter-bar\",\n            build: filter_bar,\n            shows: Shows::Subjects(&[\"FilterBar\"]),\n        },\n        Scene {\n            name: \"inline-edit\",\n            build: inline_edit,\n            shows: Shows::Subjects(&[\"InlineEdit\"]),\n        },\n        Scene {\n            name: \"progress-circle\",\n            build: progress_circle,\n            shows: Shows::Subjects(&[\"ProgressCircle\"]),\n        },\n        Scene {\n            name: \"split-tree\",\n            build: split_tree,\n            shows: Shows::Subjects(&[\"SplitTree\"]),\n        },\n        Scene {\n            name: \"dock-tree\",\n            build: dock_tree,\n            shows: Shows::Subjects(&[\"DockTree\"]),\n        },\n        Scene {\n            name: \"dock-floating\",\n            build: dock_floating,\n            shows: Shows::Subjects(&[\"DockTree\"]),\n        },\n        Scene {\n            name: \"ide-shell\",\n            build: ide_shell,\n            shows: Shows::Subjects(&[\"Dock\", \"StatusBar\"]),\n        },\n        Scene {\n            name: \"keybinding\",\n            build: keybinding,\n            shows: Shows::Subjects(&[\"KeybindingRecorder\"]),\n        },\n        Scene {\n            name: \"keymap-editor\",\n            build: keymap_editor,\n            shows: Shows::Subjects(&[\"KeymapEditor\"]),\n        },\n        Scene {\n            name: \"markdown\",\n            build: markdown,\n            shows: Shows::Subjects(&[\"Markdown\"]),\n        },\n        Scene {\n            name: \"agent-document\",\n            build: agent_document,\n            shows: Shows::Subjects(&[\"AgentDocument\"]),\n        },\n        Scene {\n            name: \"agent-roster\",\n            build: agent_roster,\n            shows: Shows::Subjects(&[\"AgentCard\", \"AgentGroup\", \"AgentRoster\", \"SubagentTree\"]),\n        },\n        Scene {\n            name: \"persona\",\n            build: persona,\n            shows: Shows::Subjects(&[\"PersonaDialogue\", \"PersonaPortrait\", \"VoiceReactive\"]),\n        },\n        Scene {\n            name: \"game-ui\",\n            build: game_ui,\n            shows: Shows::Subjects(&[\n                \"AbilityBar\",\n                \"ObjectiveTracker\",\n                \"PartyRoster\",\n                \"RewardReveal\",\n            ]),\n        },\n        Scene {\n            name: \"agent-run-canvas\",\n            build: agent_run_canvas,\n            shows: Shows::Subjects(&[\"AgentRunCanvas\"]),\n        },\n        Scene {\n            name: \"agent-run-issues\",\n            build: agent_run_issues,\n            shows: Shows::Subjects(&[\"AgentRunIssues\"]),\n        },\n        Scene {\n            name: \"agent-avatar\",\n            build: agent_avatar,\n            shows: Shows::Subjects(&[\"AgentActivityLine\", \"AgentAvatar\"]),\n        },\n        Scene {\n            name: \"conversation\",\n            build: conversation,\n            shows: Shows::Subjects(&[\"MessageList\"]),\n        },\n        Scene {\n            name: \"outline\",\n            build: outline,\n            shows: Shows::Subjects(&[\"Outline\"]),\n        },\n        Scene {\n            name: \"conversation-growing\",\n            build: conversation_growing,\n            shows: Shows::Subjects(&[\"MessageList\"]),\n        },\n        Scene {\n            name: \"image-viewer\",\n            build: image_viewer,\n            shows: Shows::Subjects(&[\"ImageViewer\"]),\n        },\n        Scene {\n            name: \"transport\",\n            build: transport,\n            shows: Shows::Subjects(&[\"TransportBar\"]),\n        },\n        Scene {\n            name: \"audio-player\",\n            build: audio_player,\n            shows: Shows::Subjects(&[\"AudioPlayer\"]),\n        },\n        Scene {\n            name: \"audio-waveform\",\n            build: audio_waveform,\n            shows: Shows::Subjects(&[\"AudioWaveform\"]),\n        },\n        Scene {\n            name: \"video-player\",\n            build: video_player,\n            shows: Shows::Subjects(&[\"VideoPlayer\"]),\n        },\n        Scene {\n            name: \"model-viewer\",\n            build: model_viewer,\n            shows: Shows::Subjects(&[\"ModelViewer\"]),\n        },\n        Scene {\n            name: \"approval\",\n            build: approval,\n            shows: Shows::Subjects(&[\"ApprovalPrompt\"]),\n        },\n        Scene {\n            name: \"clarification\",\n            build: clarification,\n            shows: Shows::Subjects(&[\"ClarificationPanel\"]),\n        },\n        Scene {\n            name: \"permission-matrix\",\n            build: permission_matrix,\n            shows: Shows::Subjects(&[\"PermissionMatrix\"]),\n        },\n        Scene {\n            name: \"cost-meter\",\n            build: cost_meter,\n            shows: Shows::Subjects(&[\"ContextGauge\", \"CostMeter\"]),\n        },\n        Scene {\n            name: \"prompt-builder\",\n            build: prompt_builder,\n            shows: Shows::Subjects(&[\"PromptBuilder\"]),\n        },\n        Scene {\n            name: \"feedback-rating\",\n            build: feedback_rating,\n            shows: Shows::Subjects(&[\"FeedbackRating\"]),\n        },\n        Scene {\n            name: \"artifact-preview\",\n            build: artifact_preview,\n            shows: Shows::Subjects(&[\"ArtifactPreview\"]),\n        },\n        Scene {\n            name: \"tool-call\",\n            build: tool_call,\n            shows: Shows::Subjects(&[\"ToolCall\"]),\n        },\n        Scene {\n            name: \"agent-plan\",\n            build: agent_plan,\n            shows: Shows::Subjects(&[\"AgentPlan\"]),\n        },\n        Scene {\n            name: \"node-graph\",\n            build: node_graph,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"node-graph-layout\",\n            build: node_graph_layout,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"node-graph-routing\",\n            build: node_graph_routing,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"node-graph-motion\",\n            build: node_graph_motion,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"canvas-tools\",\n            build: canvas_tools,\n            shows: Shows::Subjects(&[\"CanvasToolbar\", \"Minimap\", \"NodeGroup\"]),\n        },\n        Scene {\n            name: \"canvas-regions\",\n            build: canvas_regions,\n            shows: Shows::Subjects(&[\"NodeGraph\"]),\n        },\n        Scene {\n            name: \"browser-panel\",\n            build: browser_panel,\n            shows: Shows::Subjects(&[\"BrowserPanel\"]),\n        },\n        Scene {\n            name: \"thinking\",\n            build: thinking,\n            shows: Shows::Subjects(&[\"ThinkingBlock\"]),\n        },\n        Scene {\n            name: \"json-view\",\n            build: json_view,\n            shows: Shows::Subjects(&[\"JsonView\"]),\n        },\n        Scene {\n            name: \"schema-form\",\n            build: schema_form,\n            shows: Shows::Subjects(&[\"SchemaForm\"]),\n        },\n        Scene {\n            name: \"server-list\",\n            build: server_list,\n            shows: Shows::Subjects(&[\"ServerList\"]),\n        },\n        Scene {\n            name: \"offering-catalog\",\n            build: offering_catalog,\n            shows: Shows::Subjects(&[\"OfferingCatalog\"]),\n        },\n        Scene {\n            name: \"reading-direction\",\n            build: reading_direction,\n            shows: Shows::Composition(&[\n                \"Accordion\",\n                \"Breadcrumb\",\n                \"Button\",\n                \"Card\",\n                \"Icon\",\n                \"JsonView\",\n                \"Tabs\",\n                \"Tree\",\n            ]),\n        },\n        Scene {\n            name: \"toggle\",\n            build: toggle,\n            shows: Shows::Subjects(&[\"Toggle\", \"ToggleGroup\"]),\n        },\n        Scene {\n            name: \"collapsible\",\n            build: collapsible,\n            shows: Shows::Subjects(&[\"Collapsible\"]),\n        },\n        Scene {\n            name: \"hover-card\",\n            build: hover_card,\n            shows: Shows::Subjects(&[\"HoverCard\"]),\n        },\n        Scene {\n            name: \"menubar\",\n            build: menubar,\n            shows: Shows::Subjects(&[\"Menubar\"]),\n        },\n        Scene {\n            name: \"copy-button\",\n            build: copy_button,\n            shows: Shows::Subjects(&[\"CopyButton\"]),\n        },\n        Scene {\n            name: \"aspect-ratio\",\n            build: aspect_ratio,\n            shows: Shows::Subjects(&[\"AspectRatio\"]),\n        },\n        Scene {\n            name: \"responsive\",\n            build: responsive,\n            shows: Shows::Subjects(&[\"Responsive\"]),\n        },\n        Scene {\n            name: \"icon\",\n            build: icon,\n            shows: Shows::Subjects(&[\"Icon\"]),\n        },\n        Scene {\n            name: \"document-tabs\",\n            build: document_tabs,\n            shows: Shows::Subjects(&[\"Tabs\"]),\n        },\n        Scene {\n            name: \"search-input\",\n            build: search_input,\n            shows: Shows::Subjects(&[\"SearchInput\"]),\n        },\n        Scene {\n            name: \"search-field\",\n            build: search_field,\n            shows: Shows::Subjects(&[\"HighlightedText\", \"SearchField\"]),\n        },\n        Scene {\n            name: \"find-replace\",\n            build: find_replace,\n            shows: Shows::Subjects(&[\"FindReplace\"]),\n        },\n        Scene {\n            name: \"notification-center\",\n            build: notification_center,\n            shows: Shows::Subjects(&[\"NotificationCenter\"]),\n        },\n        Scene {\n            name: \"failure-panel\",\n            build: failure_panel,\n            shows: Shows::Subjects(&[\"FailurePanel\"]),\n        },\n        Scene {\n            name: \"log-stream\",\n            build: log_stream,\n            shows: Shows::Subjects(&[\"LogStream\"]),\n        },\n        Scene {\n            name: \"diff-view\",\n            build: diff_view,\n            shows: Shows::Subjects(&[\"DiffView\"]),\n        },\n        Scene {\n            name: \"sparkline\",\n            build: sparkline,\n            shows: Shows::Subjects(&[\"Sparkline\"]),\n        },\n        Scene {\n            name: \"performance-hud\",\n            build: performance_hud,\n            shows: Shows::Subjects(&[\"PerformanceHud\"]),\n        },\n        Scene {\n            name: \"chart\",\n            build: chart,\n            shows: Shows::Subjects(&[\n                \"AreaChart\",\n                \"BarChart\",\n                \"ChartLegend\",\n                \"GaugeChart\",\n                \"LineChart\",\n                \"PieChart\",\n                \"RadarChart\",\n                \"ScatterChart\",\n                \"StackedBarChart\",\n            ]),\n        },\n        Scene {\n            name: \"cartesian\",\n            build: cartesian,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-linked\",\n            build: cartesian_linked,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-layout\",\n            build: cartesian_layout,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-lifecycle\",\n            build: cartesian_lifecycle,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-dense\",\n            build: cartesian_dense,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-states\",\n            build: cartesian_states,\n            shows: Shows::Subjects(&[\"CartesianChart\", \"PieChart\", \"RadarChart\", \"GaugeChart\"]),\n        },\n        Scene {\n            name: \"plot\",\n            build: plot,\n            shows: Shows::Subjects(&[\"CandlestickChart\", \"Plot\", \"SankeyChart\"]),\n        },\n        Scene {\n            name: \"specialized\",\n            build: specialized,\n            shows: Shows::Subjects(&[\"SpecializedChart\"]),\n        },\n        Scene {\n            name: \"specialized-distribution\",\n            build: specialized_distribution,\n            shows: Shows::Subjects(&[\"SpecializedChart\"]),\n        },\n        Scene {\n            name: \"specialized-exploration\",\n            build: specialized_exploration,\n            shows: Shows::Subjects(&[\"SpecializedChart\"]),\n        },\n        Scene {\n            name: \"continuous-heatmap-transition\",\n            build: continuous_heatmap_transition,\n            shows: Shows::Subjects(&[\"ContinuousHeatmap\"]),\n        },\n        Scene {\n            name: \"heatmap-reordering\",\n            build: heatmap_reordering,\n            shows: Shows::Subjects(&[\"ContinuousHeatmap\"]),\n        },\n        Scene {\n            name: \"sankey-motion\",\n            build: sankey_motion,\n            shows: Shows::Subjects(&[\"SankeyChart\"]),\n        },\n        Scene {\n            name: \"continuous-heatmap\",\n            build: continuous_heatmap,\n            shows: Shows::Subjects(&[\"ContinuousHeatmap\"]),\n        },\n        Scene {\n            name: \"sankey-layout\",\n            build: sankey_layout,\n            shows: Shows::Subjects(&[\"SankeyChart\"]),\n        },\n        Scene {\n            name: \"raw-candlestick\",\n            build: raw_candlestick,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"geography\",\n            build: geography,\n            shows: Shows::Subjects(&[\"GeoMap\"]),\n        },\n        Scene {\n            name: \"geography-scale\",\n            build: geography_scale,\n            shows: Shows::Subjects(&[\"GeoMap\"]),\n        },\n        Scene {\n            name: \"attachment\",\n            build: attachment,\n            shows: Shows::Subjects(&[\"AttachmentTile\"]),\n        },\n        Scene {\n            name: \"metric-card\",\n            build: metric_card,\n            shows: Shows::Subjects(&[\"MetricCard\"]),\n        },\n        Scene {\n            name: \"kanban\",\n            build: kanban,\n            shows: Shows::Subjects(&[\"KanbanBoard\"]),\n        },\n        Scene {\n            name: \"micro\",\n            build: micro,\n            shows: Shows::Subjects(&[\"MicroMark\"]),\n        },\n        Scene {\n            name: \"trace\",\n            build: trace,\n            shows: Shows::Subjects(&[\"SpanTimeline\", \"TraceView\"]),\n        },\n        Scene {\n            name: \"trace-time\",\n            build: trace_time,\n            shows: Shows::Subjects(&[\"SpanTimeline\", \"TraceView\"]),\n        },\n        Scene {\n            name: \"heatmap\",\n            build: heatmap,\n            shows: Shows::Subjects(&[\"Heatmap\"]),\n        },\n        Scene {\n            name: \"color-picker\",\n            build: color_picker,\n            shows: Shows::Subjects(&[\"ColorPicker\", \"ColorSwatch\"]),\n        },\n        Scene {\n            name: \"code-view\",\n            build: code_view,\n            shows: Shows::Subjects(&[\"CodeView\"]),\n        },\n        Scene {\n            name: \"upload-list\",\n            build: upload_list,\n            shows: Shows::Subjects(&[\"UploadList\"]),\n        },\n        Scene {\n            name: \"cascader\",\n            build: cascader,\n            shows: Shows::Subjects(&[\"Cascader\"]),\n        },\n        Scene {\n            name: \"anchor-list\",\n            build: anchor_list,\n            shows: Shows::Subjects(&[\"AnchorList\"]),\n        },\n        Scene {\n            name: \"diagnostics-list\",\n            build: diagnostics_list,\n            shows: Shows::Subjects(&[\"DiagnosticsList\"]),\n        },\n    ];\n    #[cfg(all(feature = \"terminal\", not(target_family = \"wasm\")))]\n    scenes.push(Scene {\n        name: \"terminal\",\n        build: terminal,\n        shows: Shows::Subjects(&[\"Terminal\"]),\n    });\n    #[cfg(feature = \"fixtures\")]\n    scenes.extend([\n        Scene {\n            name: \"calendar\",\n            build: calendar,\n            shows: Shows::Subjects(&[\"Calendar\"]),\n        },\n        Scene {\n            name: \"date-range\",\n            build: date_range,\n            shows: Shows::Subjects(&[\"RangePicker\"]),\n        },\n        Scene {\n            name: \"date-time\",\n            build: date_time,\n            shows: Shows::Subjects(&[\"DateInput\", \"TimeInput\"]),\n        },\n        Scene {\n            name: \"touch-dates\",\n            build: touch_dates,\n            shows: Shows::Subjects(&[\"DateInput\", \"TimeInput\", \"RangePicker\"]),\n        },\n    ]);\n    scenes\n}\n\n/// The scene registered under `name`, or `None` when nothing is.\npub fn find(name: &str) -> Option<Scene> {\n    catalog().into_iter().find(|scene| scene.name == name)\n}\n\n/// The reading direction a scene expects.\n///\n/// The direction is a global, like the theme, so a capture run that renders\n/// the whole catalog into one process has to set it per scene the same way it\n/// activates a theme per scene. A scene that changed it while rendering would\n/// leak into whichever scene came next, and the leak would show up as a\n/// changed image somewhere else entirely.\npub fn direction(name: &str) -> LayoutDirection {\n    match name {\n        \"reading-direction\" => LayoutDirection::RightToLeft,\n        _ => LayoutDirection::LeftToRight,\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn scene_names_are_unique_and_addressable() {\n        let mut names: Vec<&str> = catalog().iter().map(|scene| scene.name).collect();\n        let count = names.len();\n        names.sort_unstable();\n        names.dedup();\n        assert_eq!(names.len(), count);\n        assert!(find(\"button\").is_some());\n        assert!(find(\"nothing\").is_none());\n    }\n}\n\n//! Motion primitives exercised against a live clock, plus described motion at rest.\n\nuse super::support::*;\nuse crate::motion::{\n    CubicBezier, Easing, Keyframe, Keyframes, MotionSpec, Presence, Spring, Stagger, Transition,\n};\nuse web_time::Instant;\n\nconst CLOCK_START: u16 = 8 * 60;\nconst CLOCK_END: u16 = 20 * 60;\nconst CLOCK_STEP: u16 = 30;\nconst CLOCK_TICK: Duration = Duration::from_millis(500);\nconst CLOCK_TRANSITION_MS: u64 = 620;\n\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\nenum MotionDemo {\n    SlidingTime,\n    Spring,\n    Keyframes,\n    Presence,\n    Stagger,\n}\n\nimpl MotionDemo {\n    fn id(self) -> &'static str {\n        match self {\n            Self::SlidingTime => \"sliding-time\",\n            Self::Spring => \"spring\",\n            Self::Keyframes => \"keyframes\",\n            Self::Presence => \"presence\",\n            Self::Stagger => \"stagger\",\n        }\n    }\n\n    fn from_id(id: &str) -> Option<Self> {\n        match id {\n            \"sliding-time\" => Some(Self::SlidingTime),\n            \"spring\" => Some(Self::Spring),\n            \"keyframes\" => Some(Self::Keyframes),\n            \"presence\" => Some(Self::Presence),\n            \"stagger\" => Some(Self::Stagger),\n            _ => None,\n        }\n    }\n}\n\n/// Caller-owned state for the five demonstrations.\n///\n/// The catalog rebuilds a scene every frame, just as an ordinary host rebuilds\n/// component builders. The state therefore lives outside the element tree;\n/// every animated channel beneath it still has a stable semantic identity.\n#[derive(Debug)]\nstruct SceneMotionPrimitives {\n    demo: MotionDemo,\n    clock_minutes: u16,\n    clock_targets: [f32; 4],\n    clock_digits: [Transition<f32>; 4],\n    clock_playing: bool,\n    clock_started_at: Option<Instant>,\n    clock_ticks: u16,\n    spring_selected: usize,\n    spring_indicator: Transition<f32>,\n    present: bool,\n    presence: Presence,\n    keyframes_started_at: Option<Instant>,\n    stagger_generation: u64,\n    stagger_started_at: Option<Instant>,\n}\n\nimpl Global for SceneMotionPrimitives {}\n\nimpl SceneMotionPrimitives {\n    fn new(theme: &Theme) -> Self {\n        let clock_spec = clock_spec(theme);\n        let spring_spec = spring_spec();\n        let presence_spec = presence_spec(theme);\n        let targets = clock_digits(CLOCK_START).map(f32::from);\n        Self {\n            demo: MotionDemo::SlidingTime,\n            clock_minutes: CLOCK_START,\n            clock_targets: targets,\n            clock_digits: targets.map(|digit| Transition::new(digit, clock_spec)),\n            clock_playing: false,\n            clock_started_at: None,\n            clock_ticks: 0,\n            spring_selected: 0,\n            spring_indicator: Transition::new(0.0, spring_spec),\n            present: true,\n            presence: Presence::visible(presence_spec, presence_spec),\n            keyframes_started_at: None,\n            stagger_generation: 0,\n            stagger_started_at: None,\n        }\n    }\n\n    fn select(&mut self, demo: MotionDemo, theme: &Theme) {\n        self.demo = demo;\n        // Element-retained animation state disappears when its tab leaves the\n        // tree. Recreate that boundary here even though the scene state itself\n        // is longer lived, so returning to a tab never resumes an invisible\n        // half-frame from the previous visit.\n        match demo {\n            MotionDemo::SlidingTime => {\n                for (digit, target) in self\n                    .clock_digits\n                    .iter_mut()\n                    .zip(self.clock_targets.iter().copied())\n                {\n                    *digit = Transition::new(target, clock_spec(theme));\n                }\n            }\n            MotionDemo::Spring => self.spring_indicator.snap(if self.spring_selected == 0 {\n                0.0\n            } else {\n                120.0\n            }),\n            MotionDemo::Keyframes => self.keyframes_started_at = None,\n            MotionDemo::Presence => {\n                let spec = presence_spec(theme);\n                self.presence = if self.present {\n                    Presence::visible(spec, spec)\n                } else {\n                    Presence::hidden(spec, spec)\n                };\n            }\n            MotionDemo::Stagger => self.stagger_started_at = None,\n        }\n    }\n\n    fn toggle_clock(&mut self, now: Instant, theme: &Theme) {\n        if self.clock_playing {\n            self.clock_playing = false;\n            self.clock_started_at = None;\n            self.clock_ticks = 0;\n            return;\n        }\n        if self.clock_minutes >= CLOCK_END {\n            self.clock_minutes = CLOCK_START;\n            self.clock_targets = clock_digits(CLOCK_START).map(f32::from);\n            for (digit, target) in self\n                .clock_digits\n                .iter_mut()\n                .zip(self.clock_targets.iter().copied())\n            {\n                *digit = Transition::new(target, clock_spec(theme));\n            }\n        }\n        self.clock_playing = true;\n        self.clock_started_at = Some(now);\n        self.clock_ticks = 0;\n    }\n\n    fn update_clock(&mut self, now: Instant) {\n        let Some(started) = self.clock_started_at else {\n            return;\n        };\n        let due = now\n            .saturating_duration_since(started)\n            .as_millis()\n            .checked_div(CLOCK_TICK.as_millis())\n            .unwrap_or(0) as u16;\n        while self.clock_ticks < due && self.clock_minutes < CLOCK_END {\n            self.clock_ticks += 1;\n            self.clock_minutes = (self.clock_minutes + CLOCK_STEP).min(CLOCK_END);\n            for (target, next) in self\n                .clock_targets\n                .iter_mut()\n                .zip(clock_digits(self.clock_minutes))\n            {\n                *target = advance_digit(*target, next);\n            }\n        }\n        if self.clock_minutes >= CLOCK_END {\n            self.clock_playing = false;\n            self.clock_started_at = None;\n            self.clock_ticks = 0;\n        }\n    }\n\n    fn sliding_time(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let spec = clock_spec(theme);\n        let values: [f32; 4] = std::array::from_fn(|index| {\n            let mut digit = self.clock_digits[index].spec(spec);\n            digit.set(self.clock_targets[index]);\n            let value = digit.animate(window, cx);\n            self.clock_digits[index] = digit;\n            value\n        });\n        let announced = format_time(self.clock_minutes);\n        let play_label = if self.clock_playing { \"Pause\" } else { \"Play\" };\n\n        demo_panel(theme, \"Four interrupted transitions on one clock\")\n            .child(\n                div()\n                    .row()\n                    .items_center()\n                    .gap(px(theme.space(Space::Xs)))\n                    .child(rolling_digit(theme, values[0]))\n                    .child(rolling_digit(theme, values[1]))\n                    .child(\n                        div()\n                            .h(px(52.0))\n                            .flex()\n                            .items_center()\n                            .mono(theme)\n                            .text_size(px(36.0))\n                            .child(\":\"),\n                    )\n                    .child(rolling_digit(theme, values[2]))\n                    .child(rolling_digit(theme, values[3]))\n                    .semantic_in(\n                        cx,\n                        NodeSpec::new(\"scene.motion.clock\", Role::Status)\n                            .text(\"Simulated time\")\n                            .value(announced),\n                    ),\n            )\n            .child(\n                Button::new(\"scene.motion.clock.play\")\n                    .label(play_label)\n                    .secondary()\n                    .on_click(|_, cx| {\n                        let now = cx.background_executor().now();\n                        let theme = cx.theme().clone();\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.toggle_clock(now, &theme)\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n            .into_any_element()\n    }\n\n    fn spring(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let mut indicator = self.spring_indicator.spec(spring_spec());\n        indicator.set(if self.spring_selected == 0 {\n            0.0\n        } else {\n            120.0\n        });\n        let left = indicator.animate(window, cx);\n        self.spring_indicator = indicator;\n        let selected = self.spring_selected;\n\n        let segment = |id: &'static str, label: &'static str, index: usize| {\n            div().w(px(120.0)).child(\n                Button::new(id)\n                    .label(label)\n                    .ghost()\n                    .selected(selected == index)\n                    .full_width(true)\n                    .on_click(move |_, cx| {\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.spring_selected = index\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n        };\n\n        demo_panel(theme, \"Velocity survives rapid retargeting\")\n            .child(\n                div()\n                    .relative()\n                    .w(px(240.0))\n                    .radius(theme, Radius::Control)\n                    .well(theme)\n                    .child(\n                        div()\n                            .row()\n                            .child(segment(\"scene.motion.spring.queue\", \"Queue\", 0))\n                            .child(segment(\"scene.motion.spring.timeline\", \"Timeline\", 1)),\n                    )\n                    .child(\n                        div()\n                            .absolute()\n                            .left(px(left))\n                            .top_0()\n                            .w(px(120.0))\n                            .h(px(theme.control.md.height))\n                            .radius(theme, Radius::Control)\n                            .bg(theme.colors.selected)\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(\"scene.motion.spring.indicator\", Role::Status)\n                                    .text(\"Selected segment indicator\")\n                                    .value(if selected == 0 { \"Queue\" } else { \"Timeline\" }),\n                            ),\n                    ),\n            )\n            .into_any_element()\n    }\n\n    fn keyframes(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let now = cx.background_executor().now();\n        let started = *self.keyframes_started_at.get_or_insert(now);\n        let elapsed = now.saturating_duration_since(started);\n        let period = Duration::from_millis(1_200);\n        let still = cx.reduce_motion();\n        if !still {\n            window.request_animation_frame();\n        }\n        let path = activity_keyframes(theme);\n        let bars = [\n            \"clone\", \"resolve\", \"compile\", \"test\", \"lint\", \"package\", \"publish\",\n        ];\n\n        demo_panel(theme, \"One validated path, seven delayed playheads\")\n            .child(\n                div()\n                    .h(px(72.0))\n                    .row()\n                    .items_end()\n                    .gap(px(theme.space(Space::Sm)))\n                    .children(bars.into_iter().enumerate().map(|(index, name)| {\n                        let delay = Duration::from_millis(index as u64 * 80);\n                        let phase = if still || elapsed < delay {\n                            0.0\n                        } else {\n                            elapsed.saturating_sub(delay).as_secs_f32() / period.as_secs_f32()\n                        };\n                        let value = path.sample(phase.rem_euclid(1.0));\n                        div()\n                            .w(px(18.0))\n                            .h(px(18.0 + 38.0 * value))\n                            .radius(theme, Radius::Small)\n                            .bg(theme.colors.accent)\n                            .opacity(0.35 + 0.65 * value)\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(\n                                    format!(\"scene.motion.keyframes.{name}\"),\n                                    Role::Status,\n                                )\n                                .text(format!(\"{name} activity\"))\n                                .value(format!(\"{value:.3}\")),\n                            )\n                    })),\n            )\n            .into_any_element()\n    }\n\n    fn presence(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let progress = self.presence.animate(window, cx);\n        let visible = self.presence.is_rendered();\n        let button = if self.present {\n            \"Hide notice\"\n        } else {\n            \"Show notice\"\n        };\n\n        demo_panel(theme, \"Logical absence waits for the exit to finish\")\n            .child(\n                div()\n                    .h(px(76.0))\n                    .flex()\n                    .items_center()\n                    .children(visible.then(|| {\n                        div()\n                            .w(px(360.0))\n                            .p(px(theme.space(Space::Md)))\n                            .radius(theme, Radius::Card)\n                            .bg(theme.colors.accent.opacity(0.14))\n                            .opacity(progress)\n                            .child(crate::foundation::text(\n                                theme,\n                                TypeScale::Body,\n                                \"The verified result is ready to review.\",\n                            ))\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(\"scene.motion.presence.notice\", Role::Status)\n                                    .text(\"The verified result is ready to review.\"),\n                            )\n                    })),\n            )\n            .child(\n                Button::new(\"scene.motion.presence.toggle\")\n                    .label(button)\n                    .secondary()\n                    .on_click(|_, cx| {\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.present = !scene.present;\n                            if scene.present {\n                                scene.presence.show();\n                            } else {\n                                scene.presence.hide();\n                            }\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n            .into_any_element()\n    }\n\n    fn stagger(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let now = cx.background_executor().now();\n        let started = *self.stagger_started_at.get_or_insert(now);\n        let elapsed = now.saturating_duration_since(started);\n        let spec = MotionSpec::new(360, Easing::EaseOut.curve(theme));\n        let stagger = Stagger::from_millis(90);\n        let total = stagger.total(3, spec);\n        let still = cx.reduce_motion();\n        if !still && elapsed < total {\n            window.request_animation_frame();\n        }\n        let rows = [\n            (\"plan\", \"Plan the release\"),\n            (\"build\", \"Build the artifacts\"),\n            (\"publish\", \"Publish the result\"),\n        ];\n\n        demo_panel(theme, \"A shared clock spreads one entrance across a list\")\n            .child(div().column().gap(px(theme.space(Space::Sm))).children(\n                rows.into_iter().enumerate().map(|(index, (id, label))| {\n                    let progress = if still {\n                        1.0\n                    } else {\n                        stagger.progress_at(elapsed, index, 3, spec)\n                    };\n                    div()\n                        .relative()\n                        .left(px(24.0 * (1.0 - progress)))\n                        .w(px(360.0))\n                        .p(px(theme.space(Space::Sm)))\n                        .radius(theme, Radius::Control)\n                        .well(theme)\n                        .opacity(progress)\n                        .child(crate::foundation::text(theme, TypeScale::Body, label))\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(format!(\"scene.motion.stagger.{id}\"), Role::Status)\n                                .text(label)\n                                .value(format!(\"replay {}\", self.stagger_generation)),\n                        )\n                }),\n            ))\n            .child(\n                Button::new(\"scene.motion.stagger.replay\")\n                    .label(\"Replay\")\n                    .secondary()\n                    .on_click(|_, cx| {\n                        let now = cx.background_executor().now();\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.stagger_generation += 1;\n                            scene.stagger_started_at = Some(now);\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n            .into_any_element()\n    }\n}\n\n/// Five interactive demonstrations of interruption, physical motion,\n/// authored timelines, delayed unmount and list choreography.\npub(super) fn motion_primitives(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneMotionPrimitives>() {\n        cx.set_global(SceneMotionPrimitives::new(cx.theme()));\n    }\n    let now = cx.background_executor().now();\n    let theme = cx.theme().clone();\n    let selected = cx.global::<SceneMotionPrimitives>().demo;\n    let tabs = Tabs::new(\"scene.motion.tabs\")\n        .tabs([\n            TabItem::new(\"sliding-time\", \"Sliding time\"),\n            TabItem::new(\"spring\", \"Spring\"),\n            TabItem::new(\"keyframes\", \"Keyframes\"),\n            TabItem::new(\"presence\", \"Presence\"),\n            TabItem::new(\"stagger\", \"Stagger\"),\n        ])\n        .selected(selected.id())\n        .on_select(|id, _, cx| {\n            let Some(demo) = MotionDemo::from_id(id.as_ref()) else {\n                return;\n            };\n            let theme = cx.theme().clone();\n            cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| scene.select(demo, &theme));\n            cx.refresh_windows();\n        });\n\n    let body = cx.update_global::<SceneMotionPrimitives, AnyElement>(|scene, cx| {\n        scene.update_clock(now);\n        if scene.clock_playing {\n            window.request_animation_frame();\n        }\n        match scene.demo {\n            MotionDemo::SlidingTime => scene.sliding_time(&theme, window, cx),\n            MotionDemo::Spring => scene.spring(&theme, window, cx),\n            MotionDemo::Keyframes => scene.keyframes(&theme, window, cx),\n            MotionDemo::Presence => scene.presence(&theme, window, cx),\n            MotionDemo::Stagger => scene.stagger(&theme, window, cx),\n        }\n    });\n\n    stack(&theme)\n        .w(px(640.0))\n        .child(tabs)\n        .child(body)\n        .into_any_element()\n}\n\nfn clock_spec(theme: &Theme) -> MotionSpec {\n    MotionSpec::new(CLOCK_TRANSITION_MS, Easing::EaseInOut.curve(theme))\n}\n\nfn spring_spec() -> MotionSpec {\n    // `bounce = 1 - damping_ratio`, so this is the same 420ms / 0.68 policy\n    // used by the reference segmented indicator.\n    MotionSpec::sprung(Spring::perceptual(Duration::from_millis(420), 0.32))\n}\n\nfn presence_spec(theme: &Theme) -> MotionSpec {\n    MotionSpec::new(360, Easing::EaseInOut.curve(theme))\n}\n\nfn activity_keyframes(theme: &Theme) -> Keyframes<f32> {\n    let linear = MotionSpec::new(1_200, CubicBezier::new(0.0, 0.0, 1.0, 1.0));\n    Keyframes::new(\n        theme,\n        linear,\n        [\n            Keyframe::new(0.0, 0.0),\n            Keyframe::new(0.35, 1.0),\n            // Local keyframes attach the curve to the stop being reached. Put\n            // EaseOut on the 0.7 stop so the outgoing 0.35..0.7 segment has\n            // the same curve as the reference implementation.\n            Keyframe::new(0.7, 0.0).eased(Easing::EaseOut),\n            Keyframe::new(1.0, 0.0),\n        ],\n    )\n    .expect(\"the activity path has four stops\")\n}\n\nfn demo_panel(theme: &Theme, caption_text: &'static str) -> gpui::Div {\n    div()\n        .min_h(px(260.0))\n        .w_full()\n        .column()\n        .items_center()\n        .justify_center()\n        .gap(px(theme.space(Space::Lg)))\n        .p(px(theme.space(Space::Xl)))\n        .radius(theme, Radius::Card)\n        .card_surface(theme, CardVariant::Elevated)\n        .child(caption(theme, caption_text))\n}\n\nfn rolling_digit(theme: &Theme, value: f32) -> gpui::Div {\n    let whole = value.floor();\n    let fraction = value - whole;\n    let current = (whole as i32).rem_euclid(10);\n    let next = (current + 1).rem_euclid(10);\n    let glyph = |digit: i32, top: f32| {\n        div()\n            .absolute()\n            .left_0()\n            .right_0()\n            .top(px(top))\n            .h(px(52.0))\n            .flex()\n            .items_center()\n            .justify_center()\n            .child(digit.to_string())\n    };\n\n    div()\n        .relative()\n        .w(px(38.0))\n        .h(px(52.0))\n        .overflow_hidden()\n        .radius(theme, Radius::Control)\n        .well(theme)\n        .mono(theme)\n        .text_size(px(40.0))\n        .child(glyph(current, -52.0 * fraction))\n        .child(glyph(next, 52.0 * (1.0 - fraction)))\n}\n\nfn clock_digits(minutes: u16) -> [u8; 4] {\n    let hour = minutes / 60;\n    let minute = minutes % 60;\n    [\n        (hour / 10) as u8,\n        (hour % 10) as u8,\n        (minute / 10) as u8,\n        (minute % 10) as u8,\n    ]\n}\n\nfn format_time(minutes: u16) -> String {\n    format!(\"{:02}:{:02}\", minutes / 60, minutes % 60)\n}\n\n/// The next scalar congruent to `digit`, always travelling forward around the\n/// decimal wheel. Thus 8 → 0 becomes 8 → 10 rather than rolling backwards.\nfn advance_digit(current: f32, digit: u8) -> f32 {\n    let current_digit = (current.round() as i32).rem_euclid(10);\n    let distance = (i32::from(digit) - current_digit).rem_euclid(10);\n    current + distance as f32\n}\n\npub(super) fn micro(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // Each motion gets a cell of its own. A still frame cannot show any of\n    // them moving, so what the picture has to carry instead is that there are\n    // five of them, that they are the same size, and which name belongs to\n    // which mark.\n    let cell = |mark: MicroMark| {\n        div()\n            .w(px(96.0))\n            .flex_none()\n            .column()\n            .items_center()\n            .justify_center()\n            .gap_token(&theme, Space::Xs)\n            .py_token(&theme, Space::Md)\n            .radius(&theme, Radius::Card)\n            .well(&theme)\n            .child(mark)\n    };\n\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"named functions of time; reduced motion leaves the glyph still\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(cell(MicroMark::new(\n                    \"scene.micro.heartbeat\",\n                    Micro::Heartbeat,\n                    \"Hb\",\n                )))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.bounce\",\n                    Micro::Bounce,\n                    \"Bn\",\n                )))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.wobble\",\n                    Micro::Wobble,\n                    \"Wb\",\n                )))\n                .child(cell(MicroMark::new(\"scene.micro.pop\", Micro::Pop, \"Pp\")))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.sparkle\",\n                    Micro::Sparkle,\n                    \"Sk\",\n                ))),\n        )\n        .child(caption(\n            &theme,\n            \"the same functions on things that are not glyphs\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(div().child(Badge::new(\"12 unread\").neutral()).micro(\n                    \"scene.micro.badge\",\n                    Micro::Pop,\n                    cx,\n                ))\n                .child(div().child(Tag::new(\"scene.micro.tag\", \"fixture\")).micro(\n                    \"scene.micro.tag.mark\",\n                    Micro::Wobble,\n                    cx,\n                ))\n                .child(div().child(StatusDot::new(Tone::Success)).micro(\n                    \"scene.micro.dot\",\n                    Micro::Heartbeat,\n                    cx,\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"a described motion, sampled along its own run rather than played\",\n        ))\n        .child(described(&theme))\n        .into_any_element()\n}\n\n/// A motion written with `motion!`, laid out as the frames it passes through.\n///\n/// This is the one thing a still frame can say about motion: a described\n/// motion can be read at a point in its run without running it, so the frames\n/// are drawn side by side and the picture is the same every time. Playing it\n/// is [`Animator`]'s job and needs a window; the gallery is where that is\n/// looked at.\nfn described(theme: &Theme) -> gpui::Div {\n    let arrive = crate::motion! {\n        duration: 420;\n        ease: overshoot;\n        opacity: 0.0 => 1.0;\n        y: 12.0 => 0.0;\n    };\n\n    let frame = |head: f32, label: &'static str| {\n        let sample = arrive.sample(theme, head);\n        div()\n            .w(px(96.0))\n            .flex_none()\n            .column()\n            .items_center()\n            .gap_token(theme, Space::Xs)\n            .py_token(theme, Space::Md)\n            .radius(theme, Radius::Card)\n            .well(theme)\n            // The slot stays drawn at every head. At the start of the run the\n            // mark has not arrived yet, and a cell with nothing in it reads\n            // as a frame that failed to render rather than as the frame where\n            // the motion has not begun.\n            .child(\n                div()\n                    .w(px(56.0))\n                    .h(px(24.0))\n                    .radius(theme, Radius::Control)\n                    .bg(theme.colors.track)\n                    .child(\n                        sample.apply(\n                            div()\n                                .size_full()\n                                .radius(theme, Radius::Control)\n                                .bg(theme.colors.accent),\n                        ),\n                    ),\n            )\n            .child(caption(theme, label))\n    };\n\n    row(theme)\n        .gap_token(theme, Space::Sm)\n        .child(frame(0.0, \"start\"))\n        .child(frame(0.25, \"quarter\"))\n        .child(frame(0.5, \"half\"))\n        .child(frame(0.75, \"three quarters\"))\n        .child(frame(1.0, \"settled\"))\n}\n\n//! Getting to a place, and knowing which place you are in.\n\nuse super::support::*;\n\npub(super) fn bottom_navigation(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::{BottomNavigation, NavigationItem};\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(390.0))\n        .child(caption(\n            &theme,\n            \"Fixture destinations; selected, enabled and disabled actions\",\n        ))\n        .child(\n            BottomNavigation::new(\"scene.bottom-navigation.ready\")\n                .items([\n                    NavigationItem::new(\"library\", \"Library\"),\n                    NavigationItem::new(\"search\", \"Search\"),\n                    NavigationItem::new(\"settings\", \"Settings\").disabled(true),\n                ])\n                .selected(\"search\")\n                .on_select(|_, _, _| {}),\n        )\n        .child(caption(\n            &theme,\n            \"No host handler: destinations are unavailable\",\n        ))\n        .child(\n            BottomNavigation::new(\"scene.bottom-navigation.unavailable\")\n                .items([\n                    NavigationItem::new(\"library\", \"Library\"),\n                    NavigationItem::new(\"search\", \"Search\"),\n                ])\n                .selected(\"library\"),\n        )\n        .into_any_element()\n}\n\npub(super) fn adaptive_navigation(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{AppBar, PageLayout, Responsive};\n    use crate::navigation::{BottomNavigation, NavigationItem};\n    let theme = cx.theme().clone();\n    let make = |id: &'static str, width: f32| {\n        div().w(px(width)).h(px(320.0)).child(\n            Responsive::new(id, move |size, _, _| {\n                let wide = size.at_least(600.0);\n                let body = div()\n                    .flex()\n                    .size_full()\n                    .when(wide, |body| {\n                        body.child(\n                            Sidebar::new(format!(\"{id}.rail\"))\n                                .section(SidebarSection::new(\"destinations\").items([\n                                    SidebarItem::new(\"library\", \"Library\"),\n                                    SidebarItem::new(\"search\", \"Search\"),\n                                ]))\n                                .active(\"search\")\n                                .on_select(|_, _, _| {}),\n                        )\n                    })\n                    .child(\n                        div()\n                            .flex_1()\n                            .p(px(16.0))\n                            .child(\"Fixture content · caller owns route selection\"),\n                    );\n                PageLayout::new(format!(\"{id}.page\"), body)\n                    .insets(gpui::WindowInsets::default())\n                    .header(AppBar::new(\n                        format!(\"{id}.bar\"),\n                        if wide {\n                            \"Wide container\"\n                        } else {\n                            \"Compact container\"\n                        },\n                    ))\n                    .hide_footer(wide)\n                    .footer(\n                        BottomNavigation::new(format!(\"{id}.bottom\"))\n                            .items([\n                                NavigationItem::new(\"library\", \"Library\"),\n                                NavigationItem::new(\"search\", \"Search\"),\n                            ])\n                            .selected(\"search\")\n                            .on_select(|_, _, _| {}),\n                    )\n                    .into_any_element()\n            })\n            .fill(),\n        )\n    };\n    stack(&theme)\n        .child(caption(&theme, \"Same caller data; measured container width selects rail or bottom destinations. No platform guessing.\"))\n        .child(make(\"scene.adaptive-navigation.wide\", 640.0))\n        .child(make(\"scene.adaptive-navigation.compact\", 350.0))\n        .into_any_element()\n}\n\npub(super) fn nav_back_preview(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::{BackTransition, NavHistory, NavStack};\n    let theme = cx.theme().clone();\n    let state = window.use_keyed_state(\"scene.nav-back-preview.state\", cx, |_, cx| {\n        let mut history = NavHistory::new(\"overview\");\n        history.push(\"details\");\n        (history, None::<BackTransition>, cx.focus_handle())\n    });\n    let (history, preview, focus) = state.read(cx).clone();\n    let progress = state.clone();\n    let cancel = state.clone();\n    let commit = state.clone();\n    let reset = state.clone();\n    let mut page = NavStack::new(\n        \"scene.nav-back-preview\",\n        &history,\n        history.current().clone(),\n        focus,\n        Card::new()\n            .padding(Space::Xl)\n            .child(history.current().clone()),\n    );\n    if let Some(preview) = &preview {\n        page = page.back_transition(preview);\n    }\n    stack(&theme).w(px(550.0))\n        .child(caption(&theme, \"Fixture host-fed progress; cancel retains the page, accept mutates caller history. Reduced motion holds full opacity.\"))\n        .child(Slider::new(\"scene.nav-back-preview.progress\").label(\"Back progress\")\n            .range(0.0, 1.0).value(preview.as_ref().map_or(0.0, BackTransition::progress))\n            .disabled(!history.can_pop()).on_change(move |value, _, cx| progress.update(cx, |state, cx| {\n                if state.1.is_none() { state.1 = BackTransition::begin(&state.0); }\n                if let Some(preview) = &mut state.1 { preview.update(value); }\n                cx.notify();\n            })))\n        .child(row(&theme)\n            .child(Button::new(\"scene.nav-back-preview.cancel\").label(\"Cancel\").disabled(preview.is_none())\n                .on_click(move |_, cx| cancel.update(cx, |state, cx| {\n                    if let Some(preview) = state.1.take() { preview.cancel(); } cx.notify();\n                })))\n            .child(Button::new(\"scene.nav-back-preview.accept\").label(\"Accept back\").disabled(preview.is_none())\n                .on_click(move |_, cx| commit.update(cx, |state, cx| {\n                    if let Some(preview) = state.1.take() { preview.commit(&mut state.0); } cx.notify();\n                })))\n            .child(Button::new(\"scene.nav-back-preview.reset\").label(\"Forward\").disabled(!history.can_forward())\n                .on_click(move |_, cx| reset.update(cx, |state, cx| { state.0.forward(); cx.notify(); }))))\n        .child(page).into_any_element()\n}\n\npub(super) fn nav_stack(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::nav_stack::{NavHistory, NavStack};\n    let theme = cx.theme().clone();\n    let state = window.use_keyed_state(\"scene.nav-stack.state\", cx, |_, cx| {\n        (\n            NavHistory::new(\"overview\"),\n            cx.focus_handle(),\n            cx.focus_handle(),\n            cx.focus_handle(),\n        )\n    });\n    let (history, overview, details, replacement) = state.read(cx).clone();\n    let focus = match history.current().as_ref() {\n        \"details\" => details,\n        \"replacement\" => replacement,\n        _ => overview,\n    };\n    let back = state.clone();\n    let forward = state.clone();\n    let push = state.clone();\n    let replace = state.clone();\n    stack(&theme).w(px(620.0))\n        .child(caption(&theme, \"Caller-owned visit history; back retains forward visits, push forks, replace preserves branches\"))\n        .child(row(&theme)\n            .child(Button::new(\"scene.nav-stack.back\").label(\"Back\").disabled(!history.can_pop())\n                .on_click(move |_, cx| back.update(cx, |state, cx| { state.0.pop(); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.forward\").label(\"Forward\").disabled(!history.can_forward())\n                .on_click(move |_, cx| forward.update(cx, |state, cx| { state.0.forward(); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.push\").label(\"Push details\")\n                .disabled(history.entries().iter().any(|id| id.as_ref() == \"details\"))\n                .on_click(move |_, cx| push.update(cx, |state, cx| { state.0.push(\"details\"); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.replace\").label(\"Replace\")\n                .disabled(history.entries().iter().any(|id| id.as_ref() == \"replacement\"))\n                .on_click(move |_, cx| replace.update(cx, |state, cx| { state.0.replace(\"replacement\"); cx.notify(); }))))\n        .child(NavStack::new(\"scene.nav-stack\", &history, history.current().clone(), focus,\n            Card::new().padding(Space::Xl)\n                .child(crate::foundation::text(&theme, TypeScale::Title, history.current().clone()))\n                .child(crate::foundation::text(&theme, TypeScale::Body,\n                    \"Only the active page is mounted. Return visits restore focus without keeping inactive controls live.\"))))\n        .into_any_element()\n}\n\npub(super) fn carousel(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let page = |id: &'static str, label: &'static str, text: &'static str| {\n        CarouselItem::new(\n            id,\n            label,\n            Card::new()\n                .id(format!(\"scene.carousel.card.{id}\"))\n                .padding(Space::Xl)\n                .child(crate::foundation::text(&theme, TypeScale::Title, label))\n                .child(crate::foundation::text(&theme, TypeScale::Body, text)),\n        )\n    };\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"A controlled, focusable page track with direct selection and reduced-motion-aware transitions\",\n        ))\n        .child(\n            Carousel::new(\"scene.carousel.ready\")\n                .items([\n                    page(\"overview\", \"Overview\", \"The first page is active.\"),\n                    page(\"details\", \"Details\", \"The caller owns the page content.\"),\n                    page(\"history\", \"History\", \"The track reports page intents.\"),\n                ])\n                .active(\"details\")\n                .looped(true)\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Carousel::new(\"scene.carousel.empty\")\n                .phase(Phase::Empty)\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(caption(\n            &theme,\n            \"In-content tabs: raised control, quiet track, tabular count\",\n        ))\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        .child(caption(\n            &theme,\n            \"places, not documents: Regular Liquid capsules, \\\n             with a translucent selected fill on the material\",\n        ))\n        .child(\n            Tabs::new(\"scene.tabs.capsules\")\n                .capsules()\n                .control_size(ControlSize::Sm)\n                .tabs([\n                    TabItem::new(\"code\", \"Portal\")\n                        .icon(Icon::Terminal)\n                        .tint(theme.colors.accent),\n                    TabItem::new(\"game\", \"Harbour\")\n                        .icon(Icon::Play)\n                        .tint(theme.colors.warning),\n                    TabItem::new(\"design\", \"notes\")\n                        .icon(Icon::Pen)\n                        .tint(theme.colors.info),\n                ])\n                .selected(\"code\")\n                .on_select(|_, _, _| {}),\n        )\n        // The body belongs to the caller: tabs render the strip only.\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Runs are rendered by the caller, not by the strip.\",\n        ))\n        .child(caption(\n            &theme,\n            \"the other answer to a strip with no room: it scrolls, and the \\\n             edge with more behind it fades\",\n        ))\n        // Deliberately narrower than its tabs, because a strip that fits shows\n        // nothing about what a strip that does not fit does.\n        .child(\n            div().w(px(300.0)).child(\n                Tabs::new(\"scene.tabs.spaces\")\n                    .tabs((1..=9).map(|n| {\n                        TabItem::new(format!(\"space-{n}\"), format!(\"Workspace {n}\"))\n                            .icon(Icon::Widget)\n                    }))\n                    .selected(\"space-5\")\n                    .scrolling()\n                    .on_select(|_, _, _| {}),\n            ),\n        )\n        .into_any_element()\n}\n\n/// The overflow menu the document-tab scene hangs off the strip.\n///\n/// The strip does not own it: a menu is an entity with an open state that\n/// outlives a frame, so the caller builds it and the strip fills it.\npub(super) struct SceneDocumentTabs {\n    overflow: Entity<Menu>,\n}\n\nimpl Global for SceneDocumentTabs {}\n\npub(super) 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}\n\npub(super) struct SceneAnchorList {\n    overflow: Entity<Menu>,\n}\n\nimpl Global for SceneAnchorList {}\n\npub(super) fn anchor_list(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneAnchorList>() {\n        let label = cx.strings().text(StringKey::AnchorMoreSections);\n        let overflow = cx.new(|cx| Menu::new(\"scene.anchor-list.menu\", window, cx).trigger(label));\n        cx.set_global(SceneAnchorList { overflow });\n    }\n    let theme = cx.theme().clone();\n    let overflow = cx.global::<SceneAnchorList>().overflow.clone();\n    stack(&theme)\n        .w(px(700.0))\n        .child(caption(\n            &theme,\n            \"section intents only; the declared overflow moves anchors into a menu\",\n        ))\n        .child(\n            AnchorList::new(\"scene.anchor-list\")\n                .anchors([\n                    Anchor::new(\"summary\", \"Summary\"),\n                    Anchor::new(\"inputs\", \"Inputs\"),\n                    Anchor::new(\"constraints\", \"Constraints\"),\n                    Anchor::new(\"verification\", \"Verification\"),\n                    Anchor::new(\"history\", \"History\").disabled(true),\n                ])\n                .active(\"inputs\")\n                .overflow_after(3)\n                .overflow_menu(overflow)\n                .on_navigate(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Requests go out over the system proxy.\",\n                        )),\n                )\n                .section(\n                    AccordionSection::new(\"storage\", \"Storage\")\n                        .description(\"Where verified results are kept\")\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Nothing is written outside the workspace.\",\n                        )),\n                )\n                .section(\n                    AccordionSection::new(\"policy\", \"Managed by policy\")\n                        .description(\"This machine cannot change these\")\n                        .disabled(true)\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Set by the administrator.\",\n                        )),\n                ),\n        )\n        // The open section is the last one, which is the case where the body\n        // meets the card's rounded corners.\n        .child(\n            Accordion::new(\"scene.accordion.release\")\n                .expanded_ids(&[\"publish\"])\n                .on_toggle(|_, _, _, _| {})\n                .section(\n                    AccordionSection::new(\"build\", \"Build\")\n                        .description(\"What the last run produced\"),\n                )\n                .section(\n                    AccordionSection::new(\"publish\", \"Publish\")\n                        .description(\"Where the signed bundle goes\")\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"The bundle is published to the workspace channel.\",\n                        )),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) 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}\n\npub(super) fn navigation_sections() -> Vec<SidebarSection> {\n    vec![\n        SidebarSection::new(\"work\").title(\"Work\").items([\n            SidebarItem::new(\"runs\", \"Runs\")\n                .icon(Icon::List)\n                .badge(\"12\")\n                .children([\n                    SidebarItem::new(\"runs.active\", \"Active\").icon(Icon::Refresh),\n                    SidebarItem::new(\"runs.archived\", \"Archived\").icon(Icon::Archive),\n                ]),\n            SidebarItem::new(\"files\", \"Files\").icon(Icon::Folder),\n        ]),\n        SidebarSection::new(\"admin\").title(\"Administration\").items([\n            SidebarItem::new(\"settings\", \"Settings\").icon(Icon::Settings),\n            SidebarItem::new(\"policy\", \"Managed by policy\")\n                .icon(Icon::Key)\n                .disabled(true),\n        ]),\n    ]\n}\n\n#[derive(Default)]\nstruct SceneSidebar {\n    active: Option<SharedString>,\n    collapsed: bool,\n}\n\nimpl Global for SceneSidebar {}\n\npub(super) fn sidebar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSidebar>() {\n        cx.set_global(SceneSidebar::default());\n    }\n    let theme = cx.theme().clone();\n    let active = cx\n        .global::<SceneSidebar>()\n        .active\n        .clone()\n        .unwrap_or_else(|| \"runs.active\".into());\n    let collapsed = cx.global::<SceneSidebar>().collapsed;\n    let rail = |ident: &'static str, collapsed: bool| {\n        Sidebar::new(ident)\n            .sections(navigation_sections())\n            .active(active.clone())\n            .collapsed(collapsed)\n            .footer(\n                crate::foundation::text(\n                    &theme,\n                    TypeScale::Caption,\n                    if collapsed {\n                        SharedString::new_static(\"v0\")\n                    } else {\n                        SharedString::new_static(\"Fixture workspace\")\n                    },\n                )\n                .text_tone(&theme, TextTone::Faint),\n            )\n            .on_select(|id, window, cx| {\n                cx.global_mut::<SceneSidebar>().active = Some(id);\n                window.refresh();\n            })\n    };\n\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"Fixture navigation — select a destination, toggle a branch, or collapse the rail\",\n        ))\n        .child(\n            div()\n                .flex()\n                .flex_row()\n                .h(px(400.0))\n                .gap(px(theme.space(Space::Lg)))\n                .child(\n                    rail(\"scene.sidebar.expanded\", collapsed)\n                        .width(260.0)\n                        .header(caption(\n                            &theme,\n                            if collapsed { \"W\" } else { \"Fixture workspace\" },\n                        ))\n                        .on_collapse(|collapsed, window, cx| {\n                            cx.global_mut::<SceneSidebar>().collapsed = collapsed;\n                            window.refresh();\n                        }),\n                )\n                .child(rail(\"scene.sidebar.collapsed\", true)),\n        )\n        .child(caption(\n            &theme,\n            \"Current destination is caller-owned; arrow keys move focus without navigating\",\n        ))\n        .into_any_element()\n}\n\npub(super) fn sidebar_overflow(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Fixture stress states — fixed slots, scrolling, long labels, and a closed current branch\"))\n        .child(div().flex().gap(px(theme.space(Space::Lg))).h(px(320.0))\n            .child(div().w(px(300.0)).h_full().child(Sidebar::new(\"scene.sidebar-overflow.scroll\")\n                .fill_width()\n                .header(caption(&theme, \"Fixed header\"))\n                .footer(caption(&theme, \"Fixed footer\"))\n                .section(SidebarSection::new(\"destinations\").title(\"Destinations\").items(\n                    (0..24).map(|index| SidebarItem::new(format!(\"destination-{index}\"),\n                        if index == 1 { \"A long destination label that needs an ellipsis\".to_owned() }\n                        else { format!(\"Fixture destination {}\", index + 1) }).disabled(index == 2))\n                ))\n                .active(\"destination-1\")\n                .on_select(|_, _, _| {})))\n            .child(Sidebar::new(\"scene.sidebar-overflow.closed\")\n                .sections(navigation_sections()).expanded_ids(&[])\n                .active(\"runs.active\")\n                .header(caption(&theme, \"Host refuses branch expansion\"))\n                .footer(caption(&theme, \"Current: Active\"))\n                .on_select(|_, _, _| {}).on_toggle(|_, _, _, _| {})))\n        .into_any_element()\n}\n\n/// The page-size control of the pagination scene, kept across frames.\npub(super) struct ScenePagination {\n    page_size: Entity<Select>,\n}\n\nimpl Global for ScenePagination {}\n\npub(super) 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                .name(\"Rows per page\")\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(caption(\n            &theme,\n            \"a known total, with the page size the host offered\",\n        ))\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(caption(\n            &theme,\n            \"an unknown total: no numbers, no last page, and no count invented\",\n        ))\n        .child(\n            Pagination::new(\"scene.pagination.unknown\")\n                .page(3)\n                .unknown_total(true)\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    SharedString::new_static(\"The body of the current step belongs to the caller.\"),\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}\n\npub(super) fn undo_history(_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            \"the caller owns every revision and whether it can be restored\",\n        ))\n        .child(\n            UndoHistory::new(\"scene.undo-history\", \"Document undo history\")\n                .entries([\n                    HistoryEntry::new(\"opened\", \"Opened the fixture\")\n                        .description(\"The initial verified document\")\n                        .source(\"Fixture host\")\n                        .time(\"10:14\"),\n                    HistoryEntry::new(\"renamed\", \"Renamed the title\")\n                        .source(\"Alex\")\n                        .time(\"10:16\"),\n                    HistoryEntry::new(\"imported\", \"Imported archived blocks\")\n                        .description(\"The archive is no longer available\")\n                        .source(\"Archive\")\n                        .time(\"10:18\")\n                        .unavailable(\"This revision cannot be restored without the archive.\"),\n                    HistoryEntry::new(\"current\", \"Reordered the summary\")\n                        .description(\"Current document\")\n                        .source(\"Alex\")\n                        .time(\"10:21\"),\n                    HistoryEntry::new(\"draft\", \"Drafted a new conclusion\")\n                        .source(\"Fixture host\")\n                        .time(\"10:23\"),\n                ])\n                .current(\"current\")\n                .on_jump(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"Requests go out over the system proxy.\",\n                ))\n                .on_toggle(|_, _, _| {}),\n        )\n        .child(\n            Collapsible::new(\"scene.collapsible.shut\", \"Diagnostics\")\n                .description(\"Nothing is collected until this is opened\")\n                .body(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"This body is absent from the tree while it is shut.\",\n                ))\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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"Set by the administrator.\",\n                )),\n        )\n        .into_any_element()\n}\n\n//! Surfaces that appear above the page and take a decision.\n\nuse super::support::*;\n\npub(super) fn kbd(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // A keystroke is only ever read beside the thing it performs, so the\n    // exhibit shows it where it is used: at the end of a menu row, at the end\n    // of a sentence, and in the run of special keys whose glyphs are the part\n    // that goes wrong.\n    let named = |label: &'static str, keystroke: &'static str, id: &'static str| {\n        div()\n            .row()\n            .w_full()\n            .items_center()\n            .justify_between()\n            .gap_token(&theme, Space::Md)\n            .py_token(&theme, Space::Xs)\n            .child(crate::foundation::text(&theme, TypeScale::Body, label))\n            .child(Kbd::new(keystroke).id(id))\n    };\n\n    stack(&theme)\n        .w(px(420.0))\n        .child(caption(&theme, \"the shortcut sits with the thing it does\"))\n        .child(\n            div()\n                .column()\n                .w_full()\n                .card_surface(&theme, CardVariant::Elevated)\n                .px_token(&theme, Space::Md)\n                .py_token(&theme, Space::Sm)\n                .child(named(\n                    \"Open the command palette\",\n                    \"cmd-shift-p\",\n                    \"scene.kbd.palette\",\n                ))\n                .child(div().w_full().h(px(theme.space(Space::Sm))))\n                .child(named(\"Copy the selection\", \"ctrl-c\", \"scene.kbd.copy\"))\n                .child(div().w_full().h(px(theme.space(Space::Sm))))\n                .child(named(\"Rename in place\", \"cmd-alt-r\", \"scene.kbd.rename\")),\n        )\n        .child(caption(\n            &theme,\n            \"the keys that need the bundled symbol face\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(Kbd::new(\"enter\").id(\"scene.kbd.confirm\"))\n                .child(Kbd::new(\"escape\").id(\"scene.kbd.dismiss\"))\n                .child(Kbd::new(\"backspace\").id(\"scene.kbd.erase\"))\n                .child(Kbd::new(\"delete\").id(\"scene.kbd.delete\"))\n                .child(Kbd::new(\"tab\").id(\"scene.kbd.advance\"))\n                .child(Kbd::new(\"space\").id(\"scene.kbd.space\"))\n                .child(Kbd::new(\"up\").id(\"scene.kbd.up\"))\n                .child(Kbd::new(\"down\").id(\"scene.kbd.down\")),\n        )\n        .child(\n            div()\n                .row()\n                .items_center()\n                .gap_token(&theme, Space::Xs)\n                .child(crate::foundation::text(&theme, TypeScale::Body, \"Press\"))\n                .child(Kbd::new(\"cmd-enter\").id(\"scene.kbd.inline\"))\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"to send the message.\",\n                ))\n                .text_color(theme.colors.text_muted),\n        )\n        .into_any_element()\n}\n\n/// A page for a modal layer to sit over.\n///\n/// A scrim drawn over an empty canvas is indistinguishable from a fill: the\n/// only thing that shows it is translucent is what stays legible underneath\n/// it. So every scene in this file that raises a modal layer puts a page worth\n/// obscuring behind it rather than one line of text.\nfn page_behind(theme: &Theme, title: &'static str) -> gpui::Div {\n    let card = |heading: &'static str, lines: usize| {\n        div()\n            .flex_1()\n            .min_w_0()\n            .card_surface(theme, CardVariant::Elevated)\n            .overflow_hidden()\n            .child(filler(theme, heading, lines))\n    };\n    div()\n        .column()\n        .w_full()\n        .gap(px(theme.space(Space::Md)))\n        .child(crate::foundation::text(theme, TypeScale::Subtitle, title))\n        .child(\n            div()\n                .row()\n                .w_full()\n                .gap(px(theme.space(Space::Md)))\n                .child(card(\"Runs\", 5))\n                .child(card(\"Details\", 5)),\n        )\n}\n\npub(super) 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(page_behind(&theme, \"Workspace settings\"))\n        .child(\n            Overlay::modal(\"scene.overlay.dialog\")\n                .placement(Placement::Center)\n                .child(\n                    crate::overlay::surface(\n                        \"scene.overlay.surface\",\n                        &theme,\n                        crate::overlay::OverlaySurface::MODAL,\n                    )\n                    .w(px(320.0))\n                    .p(px(theme.spacing.lg))\n                    .gap(px(theme.spacing.sm))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Subtitle,\n                        \"Delete this workspace?\",\n                    ))\n                    .child(\n                        crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Its runs, filters and saved views are removed for everyone. This \\\n                                 cannot be undone.\",\n                        )\n                        .text_tone(&theme, TextTone::Muted),\n                    )\n                    .child(\n                        div()\n                            .row()\n                            .justify_end()\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}\n\n/// The dialog the scene shows, kept across frames.\n///\n/// A dialog owns whether it is open and which element had the keyboard before\n/// it opened, so rebuilding it every frame would reopen it every frame.\npub(super) struct SceneDialog {\n    replace: Entity<Dialog>,\n}\n\nimpl Global for SceneDialog {}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Content behind the dialog\",\n        ))\n        .child(replace)\n        .into_any_element()\n}\n\npub(super) 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                            .accessible_description(\"Writes the theme to a file on disk\")\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}\n\n/// The menu family the scenes show, kept across frames.\n///\n/// Each of these owns whether it is open, where the keyboard is, and which\n/// submenu stands expanded, so rebuilding them every frame would reopen them\n/// every frame. Building them once is also what makes the capture static.\npub(super) struct SceneMenus {\n    menu: Entity<Menu>,\n    context: Entity<ContextMenu>,\n    palette: Entity<CommandPalette>,\n    popover: Entity<Popover>,\n}\n\nimpl Global for SceneMenus {}\n\npub(super) fn menu_items() -> Vec<MenuItem> {\n    vec![\n        MenuItem::section(\"group\", \"This run\"),\n        MenuItem::command(\"copy\", \"Copy run id\")\n            .icon(Icon::Copy)\n            .shortcut(\"cmd-c\"),\n        MenuItem::check(\"follow\", \"Follow output\", true),\n        MenuItem::separator(\"rule\"),\n        MenuItem::command(\"publish\", \"Publish\").disabled(true),\n        MenuItem::submenu(\n            \"share\",\n            \"Share\",\n            [\n                MenuItem::command(\"share.link\", \"Copy link\").shortcut(\"cmd-shift-c\"),\n                MenuItem::command(\"share.export\", \"Export as file\"),\n            ],\n        ),\n        MenuItem::separator(\"destroy\"),\n        MenuItem::command(\"delete\", \"Delete this run\")\n            .icon(Icon::Trash)\n            .destructive(true),\n    ]\n}\n\npub(super) fn scene_commands() -> Vec<Command> {\n    vec![\n        Command::new(\"workspace.open\", \"Open workspace\")\n            .section(\"Workspace\")\n            .shortcut(\"cmd-o\"),\n        Command::new(\"workspace.close\", \"Close workspace\").section(\"Workspace\"),\n        Command::new(\"workspace.publish\", \"Publish workspace\")\n            .section(\"Workspace\")\n            .unavailable(\"Approval is required\"),\n        Command::new(\"editor.wrap\", \"Toggle word wrap\").section(\"Editor\"),\n    ]\n}\n\npub(super) fn ensure_menus(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneMenus>() {\n        return;\n    }\n    let menu = cx.new(|cx| {\n        Menu::new(\"scene.menu.run\", window, cx)\n            .trigger(\"Run actions\")\n            .items(menu_items())\n    });\n    menu.update(cx, |menu, cx| {\n        menu.open_submenu(\"share\", window, cx);\n    });\n\n    // The catalog reviews the drawn surface. Left on `Native`, `open_at` would\n    // hand this list to the operating system on macOS and Windows: a modal\n    // popup no capture can hold, opened under every scene that shares these\n    // fixtures, and on Windows it takes the keyboard from the `menu` scene's\n    // exhibit while the native UIA check reads it.\n    let context = cx.new(|cx| {\n        ContextMenu::new(\"scene.context.run\", window, cx)\n            .name(\"Run actions\")\n            .target(\"run-a04\")\n            .presentation(ContextMenuPresentation::InWindow)\n            .menu(menu_items())\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .w(px(320.0))\n                    .p(px(theme.spacing.md))\n                    .surface(&theme, Surface::Panel)\n                    .radius(&theme, Radius::Card)\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Body,\n                        \"Right-click this fixture row\",\n                    ))\n                    .into_any_element()\n            })\n    });\n    context.update(cx, |context, cx| {\n        context\n            .open_at(gpui::point(px(180.0), px(150.0)), window, cx)\n            .expect(\"in-window fixture\");\n    });\n\n    let palette = cx.new(|cx| {\n        CommandPalette::new(\"scene.palette.commands\", window, cx).commands(scene_commands())\n    });\n    palette.update(cx, |palette, cx| palette.set_query(\"work\", cx));\n\n    let popover = cx.new(|cx| {\n        Popover::new(\"scene.popover.filters\", window, cx)\n            .trigger(\"Filters\")\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .column()\n                    .w(px(260.0))\n                    .gap(px(theme.spacing.sm))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Body,\n                        \"Anything can live in a popover.\",\n                    ))\n                    .child(\n                        Checkbox::new(\"scene.popover.failing\")\n                            .label(\"Failing runs only\")\n                            .on_change(|_, _, _| {}),\n                    )\n                    .into_any_element()\n            })\n    });\n    popover.update(cx, |popover, cx| popover.open(window, cx));\n\n    cx.set_global(SceneMenus {\n        menu,\n        context,\n        palette,\n        popover,\n    });\n}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The trigger owns whether the surface is open.\",\n        ))\n        .child(popover)\n        .into_any_element()\n}\n\npub(super) fn menu(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_menus(window, cx);\n    let menus = cx.global::<SceneMenus>();\n    let menu = menus.menu.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .h(px(320.0))\n        // An open surface is an overlay and takes no room in the flow, so the\n        // scene reserves the panel's review area explicitly.\n        .child(div().h(px(300.0)).child(menu))\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The right-click reports the row. Nothing is selected by it.\",\n        ))\n        .child(context)\n        .into_any_element()\n}\n\npub(super) 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}\n\n/// The notification layer the scene shows, kept across frames.\n///\n/// The stack, each timer, and each entry animation outlive a frame, so the\n/// layer is built once and the toasts are pushed once with it.\npub(super) struct SceneToasts {\n    layer: Entity<ToastLayer>,\n}\n\nimpl Global for SceneToasts {}\n\npub(super) fn toast(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneToasts>() {\n        let layer = cx.new(|cx| ToastLayer::new(window, cx).capacity(4));\n        cx.set_global(SceneToasts { layer });\n        toast_push(\n            window,\n            cx,\n            Toast::new(\"scene.toast.saved\", \"Theme exported to disk\").tone(Tone::Success),\n        );\n        toast_push(\n            window,\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            window,\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            window,\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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Content behind the notifications\",\n        ))\n        // A failure keeps its report on screen; only the success times out.\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"A danger or warning toast stays until it is dismissed.\",\n        ))\n        .child(layer)\n        .into_any_element()\n}\n\n/// The notification centre the scene shows, kept across frames.\npub(super) struct SceneNotifications {\n    centre: Entity<NotificationCenter>,\n}\n\nimpl Global for SceneNotifications {}\n\npub(super) 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}\n\n/// Glass over the page it covers, which is the only way to see that the\n/// backdrop is blurred rather than merely tinted.\npub(super) fn frost(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let card = |title: &'static str, body: &'static str| {\n        div()\n            .column()\n            .gap(px(theme.space(Space::Xs)))\n            .p(px(theme.space(Space::Md)))\n            .child(crate::foundation::text(\n                &theme,\n                TypeScale::Label,\n                SharedString::from(title),\n            ))\n            .child(caption(&theme, body))\n    };\n    // What is behind the glass is a page, not a test pattern. A block of\n    // accent stripes dropped into a panel reads as a hole cut in it, and it\n    // answers the wrong question anyway: the thing a reader has to be able to\n    // judge is whether text they can otherwise read has gone out of focus.\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(&theme, \"A floating surface on glass\"))\n        .child(\n            div()\n                .relative()\n                .h(px(200.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(filler(&theme, \"Document\", 8))\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(48.0))\n                        // Far enough left to cross the lines. Placed clear of\n                        // them the glass had nothing behind it, so the picture\n                        // could not answer the one question it is here for:\n                        // whether text a reader can otherwise read has gone\n                        // out of focus.\n                        .left(px(64.0))\n                        .w(px(240.0))\n                        .child(\n                            Frost::new(\"scene.frost.popover\")\n                                .radius(Radius::Card)\n                                .child(card(\n                                    \"Rename\",\n                                    \"The page behind stays visible, out of focus\",\n                                )),\n                        ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"The same glass, blurred further and raised above the panel\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(160.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(filler(&theme, \"Files\", 6))\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(32.0))\n                        .left(px(64.0))\n                        .w(px(280.0))\n                        .child(\n                            Frost::new(\"scene.frost.rail\")\n                                // A surface a step above the page it covers.\n                                // Tinted with the page's own colour the glass\n                                // had no surface of its own: at any alpha, a\n                                // fill the colour of what is behind it adds\n                                // nothing, and the rail's words landed\n                                // directly on the words of the file list.\n                                .surface(gpui_kit_theme::Surface::Raised)\n                                .radius(Radius::Dialog)\n                                .blur(32.0)\n                                .child(card(\n                                    \"Rail\",\n                                    \"The lines behind stay legible and out of focus\",\n                                )),\n                        ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// The optics, one at a time and then together, over a backdrop with enough\n/// structure in it that a bend is visible as a bend rather than as a smudge.\n///\n/// The presets sit side by side deliberately: `Frosted` is the control, and\n/// what separates it from `Lens` is exactly the refraction, so a reviewer\n/// looking at the pair is looking at the thing that changed.\n/// One square of the backdrop every optics plate is read against, and the two\n/// plate footprints built from it. Both are whole numbers of squares.\nconst TILE: f32 = 48.0;\nconst PLATE_WIDTH: f32 = TILE * 8.0;\nconst PLATE_HEIGHT: f32 = TILE * 3.0;\nconst JOIN_WIDTH: f32 = PLATE_WIDTH;\n\n/// A deterministic raster media fixture, not downloaded product content.\nfn glass_media() -> Arc<RenderImage> {\n    static IMAGE: OnceLock<Arc<RenderImage>> = OnceLock::new();\n    IMAGE\n        .get_or_init(|| {\n            let mut pixels = Vec::with_capacity(480 * 144 * 4);\n            for y in 0..144 {\n                for x in 0..480 {\n                    let ridge = 65 + ((x as f32 * 0.018).sin() * 30.0) as i32;\n                    let rgba = if y > ridge {\n                        [28, 91 + (x / 8) as u8, 91, 255]\n                    } else {\n                        [110 + (y / 2) as u8, 165, 220, 255]\n                    };\n                    pixels.extend_from_slice(&rgba);\n                }\n            }\n            Arc::new(\n                RenderImage::from_rgba(size(DevicePixels(480), DevicePixels(144)), pixels)\n                    .expect(\"media fixture dimensions\"),\n            )\n        })\n        .clone()\n}\n\n/// A constrained media tile owns size; its caption only names edge anchors.\npub(super) fn media_caption(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let tile = |id: &'static str, reduced: bool| {\n        let material_theme = theme.clone().with_reduce_transparency(reduced);\n        div()\n            .relative()\n            .w_full()\n            .h(px(220.0))\n            .radius(&theme, Radius::Card)\n            .overflow_hidden()\n            .child(\n                gpui::img(glass_media())\n                    .size_full()\n                    .radius(&theme, Radius::Card)\n                    .object_fit(gpui::ObjectFit::Cover),\n            )\n            .child(\n                crate::overlay::surface(\n                    id,\n                    &material_theme,\n                    crate::overlay::OverlaySurface::MEDIA_CAPTION,\n                )\n                .absolute()\n                .left_0()\n                .right_0()\n                .bottom_0()\n                .flex_row()\n                .items_center()\n                .gap_token(&theme, Space::Md)\n                .p_token(&theme, Space::Md)\n                .child(\n                    div()\n                        .flex_1()\n                        .min_w_0()\n                        .type_scale(&theme, TypeScale::Label)\n                        .child(if reduced {\n                            \"Media fixture · reduced transparency\"\n                        } else {\n                            \"Media fixture · Clear caption\"\n                        }),\n                )\n                .child(\n                    div()\n                        .type_scale(&theme, TypeScale::Caption)\n                        .child(\"3 projects\"),\n                )\n                .child(\n                    Button::new(format!(\"{id}.new\"))\n                        .label(\"New project\")\n                        .ghost()\n                        .on_click(|_, _| {}),\n                ),\n            )\n    };\n    stack(&theme)\n        .w_full()\n        .child(caption(\n            &theme,\n            \"Parent-constrained width; caption height follows its content\",\n        ))\n        .child(tile(\"scene.media-caption.clear\", false))\n        .child(tile(\"scene.media-caption.reduced\", true))\n        .into_any_element()\n}\n\npub(super) fn glass(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let label = |title: &'static str, body: &'static str| {\n        div()\n            .column()\n            .gap(px(theme.space(Space::Xs)))\n            .p(px(theme.space(Space::Md)))\n            .child(div().type_scale(&theme, TypeScale::Label).child(title))\n            .child(div().type_scale(&theme, TypeScale::Caption).child(body))\n    };\n\n    // A ruled checkerboard makes the material contract visible: Regular's\n    // rim refracts the scattered source, bending colour and luminance bands\n    // without restoring recognizable fine lines. Clear stays sharp because\n    // its blur is zero. The board is neutral, and every plate is an exact\n    // number of squares across and down: a board cut through the middle of a\n    // square at the plate edge reads as a broken pattern rather than as the\n    // ruled backdrop the optics are being measured against.\n    let checker_light = theme.colors.text_faint;\n    let checker_dark = theme.colors.canvas;\n    let checker_rule = theme.colors.divider.opacity(0.55);\n    let checkerboard =\n        |width: f32, height: f32| {\n            let columns = (width / TILE).ceil() as usize;\n            let rows = (height / TILE).ceil() as usize;\n            div()\n                .absolute()\n                .top(px(0.0))\n                .left(px(0.0))\n                .w(px(width))\n                .h(px(height))\n                .column()\n                .overflow_hidden()\n                .children((0..rows).map(|row| {\n                    div()\n                        .flex()\n                        .flex_none()\n                        .h(px(TILE))\n                        .children((0..columns).map(move |column| {\n                            div().flex_none().w(px(TILE)).h(px(TILE)).bg(\n                                if (row + column) % 2 == 0 {\n                                    checker_light\n                                } else {\n                                    checker_dark\n                                },\n                            )\n                        }))\n                }))\n                .children((0..=(width / 12.0) as usize).map(|column| {\n                    div()\n                        .absolute()\n                        .top(px(0.0))\n                        .left(px(column as f32 * 12.0))\n                        .w(px(1.0))\n                        .h(px(height))\n                        .bg(checker_rule)\n                }))\n                .children((0..=(height / 12.0) as usize).map(|row| {\n                    div()\n                        .absolute()\n                        .top(px(row as f32 * 12.0))\n                        .left(px(0.0))\n                        .w(px(width))\n                        .h(px(1.0))\n                        .bg(checker_rule)\n                }))\n        };\n\n    let plate =\n        |ident: &'static str, preset: GlassPreset, title: &'static str, body: &'static str| {\n            div()\n                .relative()\n                .h(px(PLATE_HEIGHT))\n                .w(px(PLATE_WIDTH))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    if preset == GlassPreset::Clear || ident == \"scene.glass.media\" {\n                        gpui::img(glass_media())\n                            .object_fit(gpui::ObjectFit::Cover)\n                            .w(px(PLATE_WIDTH))\n                            .h(px(PLATE_HEIGHT))\n                            .into_any_element()\n                    } else {\n                        checkerboard(PLATE_WIDTH, PLATE_HEIGHT).into_any_element()\n                    },\n                )\n                .when(ident == \"scene.glass.liquid\", |element| {\n                    element.child(div().absolute().inset_0().child(filler(\n                        &theme,\n                        \"Document text behind Regular glass\",\n                        6,\n                    )))\n                })\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(28.0))\n                        .left(px(52.0))\n                        .w(px(280.0))\n                        .child(\n                            Glass::new(ident)\n                                .preset(preset)\n                                .dimmed(preset == GlassPreset::Clear)\n                                .adaptive(true)\n                                .radius(Radius::Dialog)\n                                .child(label(title, body)),\n                        ),\n                )\n        };\n\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"Clear: dark Frosted / reduced transparency           Clear + 35% dimming / media only\",\n        ))\n        .child(\n            row(&theme)\n                .child(crate::foundation::ThemeOverlay::theme(\n                    theme.clone().with_reduce_transparency(true),\n                    plate(\n                        \"scene.glass.frosted\",\n                        GlassPreset::Clear,\n                        \"Clear: reduced transparency\",\n                        \"Dark Frosted and light content in every theme\",\n                    ),\n                ))\n                .child(plate(\n                    \"scene.glass.clear\",\n                    GlassPreset::Clear,\n                    \"Clear + dimmed\",\n                    \"A sharp media fixture, never default chrome\",\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"Regular over text and media: blur, achromatic wash, lensing and hairline\",\n        ))\n        .child(\n            row(&theme)\n                .child(plate(\n                    \"scene.glass.liquid\",\n                    GlassPreset::Liquid,\n                    \"Regular Liquid\",\n                    \"Large reading surfaces keep the window appearance\",\n                ))\n                .child(plate(\n                    \"scene.glass.media\",\n                    GlassPreset::Liquid,\n                    \"Regular on media\",\n                    \"The same material, not the Clear variant\",\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"Compact Regular controls: appearance may flip; no opaque face\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(TILE * 2.0))\n                .w(px(PLATE_WIDTH))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(div().absolute().inset_0().bg(gpui::white()))\n                .child(\n                    div()\n                        .absolute()\n                        .right_0()\n                        .top_0()\n                        .w(px(PLATE_WIDTH / 2.0))\n                        .h_full()\n                        .bg(gpui::black()),\n                )\n                .child(\n                    div()\n                        .absolute()\n                        .inset_0()\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(\n                            Glass::new(\"scene.glass.regular.one\")\n                                .preset(GlassPreset::Liquid)\n                                .surface(Surface::Raised)\n                                .radius(Radius::Pill)\n                                .adaptive(true)\n                                .child(\n                                    div()\n                                        .w(px(110.0))\n                                        .h(px(32.0))\n                                        .flex()\n                                        .items_center()\n                                        .justify_center()\n                                        .child(\"Portal\"),\n                                ),\n                        )\n                        .child(\n                            Glass::new(\"scene.glass.regular.two\")\n                                .preset(GlassPreset::Liquid)\n                                .radius(Radius::Pill)\n                                .adaptive(true)\n                                .child(\n                                    div()\n                                        .w(px(110.0))\n                                        .h(px(32.0))\n                                        .rounded(px(theme.radius(Radius::Pill)))\n                                        .bg(theme.colors.selected)\n                                        .flex()\n                                        .items_center()\n                                        .justify_center()\n                                        .child(\"Harbour\"),\n                                ),\n                        ),\n                ),\n        )\n        // The last two demonstrations sit side by side so the whole scene\n        // stays inside the window a real display can give the gallery, which\n        // is where the DirectX renderer gets looked at.\n        .child(\n            div()\n                .flex()\n                .flex_row()\n                .gap(px(theme.space(Space::Md)))\n                .child(\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(caption(&theme, \"Fused: two panes joined into one body\"))\n                        .child(\n                            div()\n                                .relative()\n                                .h(px(PLATE_HEIGHT))\n                                .w(px(JOIN_WIDTH))\n                                .surface(&theme, Surface::Panel)\n                                .radius(&theme, Radius::Card)\n                                .overflow_hidden()\n                                .child(checkerboard(JOIN_WIDTH, PLATE_HEIGHT))\n                                .child(\n                                    div().absolute().top(px(40.0)).left(px(40.0)).child(\n                                        GlassGroup::new(\"scene.glass.fused\")\n                                            .preset(GlassPreset::Liquid)\n                                            .radius(Radius::Dialog)\n                                            .gap(12.0)\n                                            .pane(\n                                                \"scene.glass.fused.left\",\n                                                label(\"Left\", \"One lobe of the body\"),\n                                            )\n                                            .pane(\n                                                \"scene.glass.fused.right\",\n                                                label(\"Right\", \"Joined across the gap\"),\n                                            ),\n                                    ),\n                                ),\n                        ),\n                )\n                .child(\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(caption(&theme, \"Large adaptive surfaces never flip\"))\n                        .child(\n                            div()\n                                .relative()\n                                .h(px(PLATE_HEIGHT))\n                                .w(px(JOIN_WIDTH))\n                                .surface(&theme, Surface::Panel)\n                                .radius(&theme, Radius::Card)\n                                .overflow_hidden()\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(0.0))\n                                        .left(px(0.0))\n                                        .w(px(JOIN_WIDTH / 2.0))\n                                        .h(px(PLATE_HEIGHT))\n                                        .bg(gpui::white()),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(0.0))\n                                        .left(px(JOIN_WIDTH / 2.0))\n                                        .w(px(JOIN_WIDTH / 2.0))\n                                        .h(px(PLATE_HEIGHT))\n                                        .bg(gpui::black()),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(28.0))\n                                        .left(px(15.0))\n                                        .w(px(160.0))\n                                        .child(\n                                            Glass::new(\"scene.glass.adaptive.bright\")\n                                                .preset(GlassPreset::Liquid)\n                                                .radius(Radius::Dialog)\n                                                .adaptive(true)\n                                                .adaptive_appearance(true)\n                                                .child(label(\n                                                    \"Bright\",\n                                                    \"The reading lands next frame\",\n                                                )),\n                                        ),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(28.0))\n                                        .left(px(JOIN_WIDTH / 2.0 + 15.0))\n                                        .w(px(160.0))\n                                        .child(\n                                            Glass::new(\"scene.glass.adaptive.dark\")\n                                                .preset(GlassPreset::Liquid)\n                                                .radius(Radius::Dialog)\n                                                .adaptive(true)\n                                                .child(label(\"Dark\", \"The same glass, other side\")),\n                                        ),\n                                ),\n                        ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Focused: one inward report edge — Regular, Clear + dimmed, Frosted, reduced\",\n        ))\n        .child(\n            row(&theme).children(\n                [\n                    (\"regular\", GlassPreset::Liquid, false, \"Regular\"),\n                    (\"clear\", GlassPreset::Clear, false, \"Clear + dimmed\"),\n                    (\"frosted\", GlassPreset::Frosted, false, \"Frosted\"),\n                    (\"reduced\", GlassPreset::Clear, true, \"Reduced\"),\n                ]\n                .into_iter()\n                .map(|(name, preset, reduced, title)| {\n                    div()\n                        .relative()\n                        .w(px(210.0))\n                        .h(px(96.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .child(\n                            gpui::img(glass_media())\n                                .size_full()\n                                .object_fit(gpui::ObjectFit::Cover),\n                        )\n                        .child(\n                            div()\n                                .absolute()\n                                .left(px(12.0))\n                                .right(px(12.0))\n                                .top(px(24.0))\n                                .child(crate::foundation::ThemeOverlay::theme(\n                                    theme.clone().with_reduce_transparency(reduced),\n                                    Glass::new(format!(\"scene.glass.focused.{name}\"))\n                                        .preset(preset)\n                                        .dimmed(preset == GlassPreset::Clear)\n                                        .focused(true)\n                                        .radius(Radius::Pill)\n                                        .child(\n                                            div()\n                                                .w_full()\n                                                .h(px(40.0))\n                                                .flex()\n                                                .items_center()\n                                                .justify_center()\n                                                .type_scale(&theme, TypeScale::Label)\n                                                .child(title),\n                                        ),\n                                )),\n                        )\n                }),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"Budget fallback: opaque cards, never holes — R keeps its focus report\",\n        ))\n        .child(div().flex().gap(px(4.0)).children(('A'..='R').map(|name| {\n            Glass::new(format!(\"scene.glass.budget.{name}\"))\n                .focused(name == 'R')\n                .child(\n                    div()\n                        .w(px(38.0))\n                        .h(px(30.0))\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .child(name.to_string()),\n                )\n        })))\n        .child(caption(\n            &theme,\n            \"Nine lobes exceed the fused budget: every pane retains an opaque face\",\n        ))\n        .child(\n            ('A'..='I').fold(GlassGroup::new(\"scene.glass.lobe-budget\"), |group, name| {\n                group.pane(\n                    format!(\"scene.glass.lobe-budget.{name}\"),\n                    div()\n                        .w(px(58.0))\n                        .h(px(30.0))\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .child(name.to_string()),\n                )\n            }),\n        )\n        .into_any_element()\n}\n\n/// Optical parameters over a deterministic ruled fixture, without a wash or\n/// decorative highlight hiding the displacement. Labels sit outside the lens.\npub(super) fn glass_optics(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let specimens = [\n        (\"identity\", \"Index 1 / unchanged\", 1., 24., 24., 0., 0.),\n        (\"water\", \"Index 1.33 / shallow bend\", 1.33, 24., 24., 0., 0.),\n        (\"glass\", \"Index 1.5 / deeper bend\", 1.5, 24., 24., 0., 0.),\n        (\n            \"thick\",\n            \"48px thickness / same index\",\n            1.5,\n            48.,\n            24.,\n            0.,\n            0.,\n        ),\n        (\"contact\", \"Source plane at base\", 1.5, 24., 0., 0., 0.),\n        (\n            \"dispersion\",\n            \"Spectral indices / no highlight\",\n            1.5,\n            24.,\n            24.,\n            0.25,\n            0.,\n        ),\n        (\n            \"reflection\",\n            \"Fresnel / same surface normal\",\n            1.5,\n            24.,\n            24.,\n            0.,\n            1.,\n        ),\n        (\n            \"scatter\",\n            \"Same optics / 8px scattering\",\n            1.5,\n            24.,\n            24.,\n            0.,\n            0.,\n        ),\n    ];\n    stack(&theme)\n        .w(px(900.))\n        .child(caption(\n            &theme,\n            \"Snell refraction — fixture grid; foreground content is not distorted\",\n        ))\n        .children(specimens.chunks(4).map(|specimens| {\n            row(&theme).children(specimens.iter().map(\n                |&(name, title, index, thickness, depth, dispersion, specular)| {\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .w(px(210.))\n                        .child(caption(&theme, title))\n                        .child(\n                            div()\n                                .relative()\n                                .w(px(210.))\n                                .h(px(180.))\n                                .overflow_hidden()\n                                .bg(theme.colors.canvas)\n                                .children((0..18).map(|line| {\n                                    div()\n                                        .absolute()\n                                        .top(px(line as f32 * 10.))\n                                        .left_0()\n                                        .w_full()\n                                        .h(px(1.))\n                                        .bg(theme.colors.text_faint)\n                                }))\n                                .children((0..21).map(|line| {\n                                    div()\n                                        .absolute()\n                                        .left(px(line as f32 * 10.))\n                                        .top_0()\n                                        .h_full()\n                                        .w(px(1.))\n                                        .bg(theme.colors.text_faint)\n                                }))\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(22.))\n                                        .left(px(25.))\n                                        .w(px(160.))\n                                        .child(\n                                            Glass::new(format!(\"scene.glass-optics.{name}\"))\n                                                .preset(GlassPreset::Lens)\n                                                .radius_px(48.)\n                                                .refraction(1.)\n                                                .thickness(thickness)\n                                                .refractive_index(index)\n                                                .backdrop_depth(depth)\n                                                .dispersion(dispersion)\n                                                .specular(specular)\n                                                .blur(if name == \"scatter\" { 8. } else { 0. })\n                                                .track_pointer(name == \"reflection\")\n                                                .pressable(true)\n                                                .child(\n                                                    div()\n                                                        .w_full()\n                                                        .h(px(136.))\n                                                        .flex()\n                                                        .items_center()\n                                                        .justify_center()\n                                                        .child(\n                                                            div()\n                                                                .px_token(&theme, Space::Sm)\n                                                                .bg(theme.colors.panel)\n                                                                .child(\"Aa 123\"),\n                                                        ),\n                                                ),\n                                        ),\n                                ),\n                        )\n                },\n            ))\n        }))\n        .child(caption(\n            &theme,\n            \"Fused Regular / zero blur — one height field; press changes thickness and its normal\",\n        ))\n        .child(\n            div()\n                .relative()\n                .w(px(864.))\n                .h(px(120.))\n                .overflow_hidden()\n                .children((0..87).map(|line| {\n                    div()\n                        .absolute()\n                        .left(px(line as f32 * 10.))\n                        .top_0()\n                        .h_full()\n                        .w(px(1.))\n                        .bg(theme.colors.text_faint)\n                }))\n                .children((0..12).map(|line| {\n                    div()\n                        .absolute()\n                        .top(px(line as f32 * 10.))\n                        .left_0()\n                        .w_full()\n                        .h(px(1.))\n                        .bg(theme.colors.text_faint)\n                }))\n                .child(\n                    div().absolute().left(px(24.)).top(px(24.)).child(\n                        GlassGroup::new(\"scene.glass-optics.fused\")\n                            .preset(GlassPreset::Liquid)\n                            .blur(0.)\n                            .thickness(48.)\n                            .refractive_index(1.5)\n                            .backdrop_depth(24.)\n                            .radius(Radius::Pill)\n                            .gap(8.)\n                            .merge(32.)\n                            .pressable(true)\n                            .pane(\n                                \"scene.glass-optics.fused.left\",\n                                div()\n                                    .w(px(380.))\n                                    .h(px(72.))\n                                    .flex()\n                                    .items_center()\n                                    .justify_center()\n                                    .child(\"Left\"),\n                            )\n                            .pane(\n                                \"scene.glass-optics.fused.right\",\n                                div()\n                                    .w(px(380.))\n                                    .h(px(72.))\n                                    .flex()\n                                    .items_center()\n                                    .justify_center()\n                                    .child(\"Right\"),\n                            ),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// Colour belongs to the optical material, including a group's bridge.\n/// Captions remain outside the specimens so tint strength is visible.\npub(super) fn glass_materials(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let specimens = [\n        (\"protected\", \"Default body protection\", true, None),\n        (\"material\", \"Caller-owned legibility\", false, None),\n        (\n            \"tint-partial\",\n            \"25% tint / visible backdrop\",\n            true,\n            Some(0.25),\n        ),\n        (\n            \"tint-solid\",\n            \"100% tint / rim above colour\",\n            true,\n            Some(1.0),\n        ),\n    ];\n    let backdrop = || {\n        div()\n            .relative()\n            .w(px(200.0))\n            .h(px(112.0))\n            .bg(gpui::rgb(0xffffff))\n            .children((0..8).map(|stripe| {\n                div()\n                    .absolute()\n                    .left(px(stripe as f32 * 25.0))\n                    .top_0()\n                    .w(px(12.0))\n                    .h_full()\n                    .bg(gpui::rgb(0x8090a0))\n            }))\n    };\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"Material policy / deterministic stripe fixture, not native reference\",\n        ))\n        .child(\n            row(&theme).children(specimens.into_iter().map(|(id, title, protect, tint)| {\n                let mut glass = Glass::new(format!(\"scene.glass-materials.{id}\"))\n                    .radius_px(24.0)\n                    .blur(2.0)\n                    .protect_text_contrast(protect);\n                if let Some(alpha) = tint {\n                    glass = glass.tint(theme.colors.accent.opacity(alpha));\n                }\n                div()\n                    .column()\n                    .gap_token(&theme, Space::Sm)\n                    .child(caption(&theme, title))\n                    .child(\n                        backdrop().child(\n                            div()\n                                .absolute()\n                                .left(px(20.0))\n                                .top(px(24.0))\n                                .child(glass.child(div().w(px(160.0)).h(px(64.0)))),\n                        ),\n                    )\n            })),\n        )\n        .child(caption(\n            &theme,\n            \"Tint across joined panes / reduced-transparency fallback\",\n        ))\n        .child(\n            row(&theme).children([false, true].into_iter().map(|reduced| {\n                let id = if reduced { \"reduced\" } else { \"joined\" };\n                let tint = theme.colors.accent.opacity(0.25);\n                let group = GlassGroup::new(format!(\"scene.glass-materials.{id}\"))\n                    .radius(Radius::Pill)\n                    .gap(8.0)\n                    .merge(32.0)\n                    .blur(2.0)\n                    .tint(tint)\n                    .pane(\n                        format!(\"scene.glass-materials.{id}.left\"),\n                        div().w(px(68.0)).h(px(56.0)),\n                    )\n                    .pane(\n                        format!(\"scene.glass-materials.{id}.right\"),\n                        div().w(px(68.0)).h(px(56.0)),\n                    );\n                backdrop().child(div().absolute().left(px(28.0)).top(px(28.0)).child(\n                    ThemeOverlay::new(move |t| t.clone().with_reduce_transparency(reduced), group),\n                ))\n            })),\n        )\n        .child(caption(\n            &theme,\n            \"Rounded foreground clips / surface shadows and joined optics stay outside\",\n        ))\n        .child(\n            row(&theme)\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(20.0)).top(px(24.0)).child(\n                            Glass::new(\"scene.glass-materials.clip-surface\")\n                                .radius_px(24.0)\n                                .child(div().w(px(160.0)).h(px(64.0)).bg(theme.colors.accent)),\n                        ),\n                    ),\n                )\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(28.0)).top(px(28.0)).child(\n                            GlassGroup::new(\"scene.glass-materials.clip-group\")\n                                .radius(Radius::Pill)\n                                .gap(8.0)\n                                .merge(32.0)\n                                .pane(\n                                    \"scene.glass-materials.clip-left\",\n                                    div().w(px(68.0)).h(px(56.0)).bg(theme.colors.accent),\n                                )\n                                .pane(\n                                    \"scene.glass-materials.clip-right\",\n                                    div().w(px(68.0)).h(px(56.0)).bg(theme.colors.accent),\n                                ),\n                        ),\n                    ),\n                )\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(20.0)).top(px(24.0)).child(\n                            crate::overlay::surface(\n                                \"scene.glass-materials.clip-frame\",\n                                &theme,\n                                crate::overlay::OverlaySurface::MODAL,\n                            )\n                            .w(px(160.0))\n                            .h(px(64.0))\n                            .children(\n                                [theme.colors.accent, theme.colors.text_faint]\n                                    .map(|color| div().w_full().h(px(32.0)).bg(color)),\n                            ),\n                        ),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// The drawer the scene shows, kept across frames and settled so the capture\n/// photographs the panel where it comes to rest rather than mid-slide.\npub(super) struct SceneDrawer {\n    filters: Entity<Drawer>,\n}\n\nimpl Global for SceneDrawer {}\n\npub(super) 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                .resizable(true)\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                    let group = |heading: &'static str, rows: gpui::Div| {\n                        div()\n                            .column()\n                            .gap(px(theme.space(Space::Sm)))\n                            .child(\n                                crate::foundation::text(&theme, TypeScale::Label, heading)\n                                    .text_tone(&theme, TextTone::Muted),\n                            )\n                            .child(rows.column().gap(px(theme.space(Space::Sm))))\n                    };\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Lg)))\n                        .child(group(\n                            \"Outcome\",\n                            div()\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.cancelled\")\n                                        .label(\"Include cancelled\")\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .child(group(\n                            \"Ownership\",\n                            div()\n                                .child(\n                                    Checkbox::new(\"scene.drawer.mine\")\n                                        .label(\"Started by me\")\n                                        .on_change(|_, _, _| {}),\n                                )\n                                .child(\n                                    Checkbox::new(\"scene.drawer.watching\")\n                                        .label(\"Repositories I watch\")\n                                        .checked(true)\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .child(group(\n                            \"Window\",\n                            div()\n                                .child(\n                                    Checkbox::new(\"scene.drawer.today\")\n                                        .label(\"Today\")\n                                        .checked(true)\n                                        .on_change(|_, _, _| {}),\n                                )\n                                .child(\n                                    Checkbox::new(\"scene.drawer.week\")\n                                        .label(\"This week\")\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .into_any_element()\n                })\n                // Two controls, sized to their labels and pinned to the\n                // reading edge: a full-width primary slab is the loudest\n                // thing on the page and says the drawer has one exit.\n                .footer(|_, cx| {\n                    let theme = cx.theme().clone();\n                    div()\n                        .row()\n                        .justify_end()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(\n                            Button::new(\"scene.drawer.cancel\")\n                                .label(\"Cancel\")\n                                .secondary()\n                                .on_click(|_, _| {}),\n                        )\n                        .child(\n                            Button::new(\"scene.drawer.apply\")\n                                .label(\"Apply\")\n                                .primary()\n                                .on_click(|_, _| {}),\n                        )\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(page_behind(&theme, \"Runs\"))\n        .child(filters)\n        .into_any_element()\n}\n\npub(super) 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(\n            row(&theme)\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Reported by\",\n                ))\n                .child(card),\n        )\n        .into_any_element()\n}\n\npub(super) 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}\n\nstruct SceneBottomSheet(Entity<crate::overlay::sheet::BottomSheet>);\nimpl Global for SceneBottomSheet {}\n\npub(super) fn bottom_sheet(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::overlay::sheet::{BottomSheet, BottomSheetEvent, SheetDetent};\n    if !cx.has_global::<SceneBottomSheet>() {\n        let sheet = cx.new(|cx| BottomSheet::new(\"scene.bottom-sheet\", window, cx));\n        sheet.update(cx, |sheet, cx| {\n            sheet.set_title(\"Choose destination · fixture\", cx);\n            sheet.set_detents(\n                vec![\n                    SheetDetent::new(\"Compact\", 290.0),\n                    SheetDetent::new(\"Half\", 430.0),\n                    SheetDetent::new(\"Full\", 640.0),\n                ],\n                \"Half\",\n                cx,\n            );\n            let scroll = gpui::ScrollHandle::new();\n            sheet.set_scroll_handle(Some(scroll.clone()), cx);\n            sheet.set_content(\n                Some(Rc::new(move |_, cx| {\n                    let _theme = cx.theme().clone();\n                    div()\n                        .id(\"scene.bottom-sheet.list\")\n                        .column()\n                        .size_full()\n                        .overflow_y_scroll()\n                        .track_scroll(&scroll)\n                        .children(\n                            [\n                                (\"home\", \"Home\"),\n                                (\"work\", \"Work\"),\n                                (\"library\", \"Library\"),\n                                (\"airport\", \"Airport\"),\n                                (\"station\", \"Station\"),\n                                (\"garden\", \"Garden\"),\n                                (\"museum\", \"Museum\"),\n                            ]\n                            .into_iter()\n                            .map(|(id, label)| {\n                                Button::new(format!(\"scene.bottom-sheet.destination.{id}\"))\n                                    .label(label)\n                                    .secondary()\n                                    .control_size(gpui_kit_theme::ControlSize::Touch)\n                                    .on_click(|_, _| {})\n                            }),\n                        )\n                        .into_any_element()\n                })),\n                cx,\n            );\n            sheet.open(window, cx);\n            sheet.settle(cx);\n        });\n        cx.subscribe(&sheet, |sheet, event, cx| {\n            if let BottomSheetEvent::DetentRequested(id) = event {\n                sheet.update(cx, |sheet, cx| {\n                    sheet.set_detent(id.clone(), cx);\n                });\n            }\n        })\n        .detach();\n        cx.set_global(SceneBottomSheet(sheet));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .h(px(640.0))\n        .child(page_behind(&theme, \"Caller-owned destinations\"))\n        .child(cx.global::<SceneBottomSheet>().0.clone())\n        .into_any_element()\n}\n\nstruct SceneActionSheet(Entity<crate::overlay::sheet::ActionSheet>);\nimpl Global for SceneActionSheet {}\n\npub(super) fn action_sheet(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::overlay::sheet::{ActionSheet, SheetAction, SheetActionState};\n    if !cx.has_global::<SceneActionSheet>() {\n        let sheet = cx.new(|cx| ActionSheet::new(\"scene.action-sheet\", window, cx));\n        sheet.update(cx, |sheet, cx| {\n            let mut remove = SheetAction::new(\"remove\", \"Remove from collection\");\n            remove.destructive = true;\n            let mut share = SheetAction::new(\"share\", \"Share unavailable\");\n            share.disabled = true;\n            sheet.set_actions(\n                vec![SheetAction::new(\"save\", \"Save a copy\"), share, remove],\n                cx,\n            );\n            sheet.set_state(\n                SheetActionState::Error(\n                    \"Fixture refusal: the last attempt failed; nothing was removed.\".into(),\n                ),\n                cx,\n            );\n            sheet.sheet().update(cx, |sheet, cx| {\n                sheet.set_title(\"Collection actions · fixture\", cx);\n            });\n            sheet.open(window, cx);\n            sheet.sheet().update(cx, |sheet, cx| sheet.settle(cx));\n        });\n        cx.set_global(SceneActionSheet(sheet));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .h(px(600.0))\n        .child(page_behind(&theme, \"Last verified collection\"))\n        .child(cx.global::<SceneActionSheet>().0.clone())\n        .into_any_element()\n}\n\n//! Validated conserved flow layouts with persistent node/link labels.\nuse super::support::*;\nuse crate::display::plot::{SankeyAlignment, SankeyOrder};\n\n#[derive(Default)]\nstruct FlowRevisions {\n    revision: usize,\n    direct: bool,\n    selected: Option<SharedString>,\n}\n\npub(super) fn sankey_motion(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<FlowRevisions>(\n        &\"scene.sankey.motion-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision % 3;\n    let flows = if revision == 0 {\n        vec![(\"ad\", \"a\", \"d\", 70.0), (\"bc\", \"b\", \"c\", 30.0)]\n    } else if revision == 1 {\n        vec![(\"ad\", \"a\", \"d\", 20.0), (\"bc\", \"b\", \"c\", 80.0)]\n    } else {\n        vec![(\"ad\", \"a\", \"d\", 45.0)]\n    };\n    let mut nodes = Vec::new();\n    let mut links = Vec::new();\n    let mut weights = Vec::new();\n    for (id, source, target, value) in flows {\n        for node in [source, target] {\n            nodes.push(SankeyNode::new(\n                node,\n                node,\n                value.to_string(),\n                Default::default(),\n            ));\n        }\n        links.push(SankeyLink::new(\n            id,\n            source,\n            target,\n            format!(\"{source} → {target}\"),\n            value.to_string(),\n            Default::default(),\n            Default::default(),\n            0.0,\n        ));\n        weights.push(value);\n    }\n    let (data, _) = SankeyData::new(nodes, links)\n        .layout_ordered(\n            &weights,\n            0.08,\n            0.1,\n            SankeyAlignment::Left,\n            SankeyOrder::Barycenter,\n        )\n        .expect(\"conserved synthetic flow\");\n    let next = state.clone();\n    let direct = state.clone();\n    let select = state.clone();\n    stack(&theme).w(px(600.0)).child(caption(&theme,\"Synthetic conserved endpoint layouts · ribbons remain attached during motion; exact current values\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.sankey.motion.advance\").label(\"Advance flows\").on_click(move |window,_|{next.borrow_mut().revision+=1;window.refresh();}))\n            .child(Button::new(\"scene.sankey.motion.direct\").label(if state.borrow().direct {\"Enable animation\"} else {\"Direct updates\"}).on_click(move |window,_|{let mut s=direct.borrow_mut();s.direct = !s.direct;window.refresh();})))\n        .child(SankeyChart::new(\"scene.sankey.motion\",\"Keyed node and ribbon updates\",PlotState::Ready(data)).animate(!state.borrow().direct).labels(true)\n            .selected(state.borrow().selected.clone()).on_current(move |id,window,_|{select.borrow_mut().selected=Some(id);window.refresh();}))\n        .into_any_element()\n}\n\npub(super) fn sankey_layout(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let graph = SankeyData::new(\n        [\n            (\"a\", \"Incoming A\", \"70\"),\n            (\"b\", \"Incoming B\", \"30\"),\n            (\"c\", \"Destination C\", \"30\"),\n            (\"d\", \"Destination D\", \"70\"),\n        ]\n        .map(|(id, label, value)| SankeyNode::new(id, label, value, Default::default())),\n        [\n            (\"ad\", \"a\", \"d\", \"A → D\", \"70\"),\n            (\"bc\", \"b\", \"c\", \"B → C\", \"30\"),\n        ]\n        .map(|(id, source, target, label, value)| {\n            SankeyLink::new(\n                id,\n                source,\n                target,\n                label,\n                value,\n                Default::default(),\n                Default::default(),\n                0.0,\n            )\n        }),\n    );\n    stack(&theme)\n        .w(px(860.0))\n        .child(caption(\n            &theme,\n            \"Synthetic conserved flows · same 70:30 scale · deterministic crossing reduction\",\n        ))\n        .child(\n            div().row().gap_token(&theme, Space::Lg).children(\n                [\n                    (SankeyOrder::Input, \"input\", \"Input order\"),\n                    (SankeyOrder::Barycenter, \"ordered\", \"Barycenter order\"),\n                ]\n                .map(|(order, id, label)| {\n                    let (data, _) = graph\n                        .clone()\n                        .layout_ordered(&[70.0, 30.0], 0.08, 0.1, SankeyAlignment::Left, order)\n                        .expect(\"valid flows\");\n                    div().w(px(380.0)).child(\n                        SankeyChart::new(\n                            Ident::new(\"scene.sankey\").child(id),\n                            label,\n                            PlotState::Ready(data),\n                        )\n                        .labels(true)\n                        .on_current(|_, _, _| {}),\n                    )\n                }),\n            ),\n        )\n        .into_any_element()\n}\n\npub(super) fn raw_candlestick(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::display::chart::{\n        cartesian::CartesianChart,\n        data::{ChartScale, ChartValue, RawPoint, RawSeries, SeriesMark, ValueAxis},\n        scale::{NumericScale, ScaleKind},\n    };\n    use crate::display::plot::RawOhlc;\n    let theme = cx.theme().clone();\n    let day = 86_400_000.0;\n    let x = ChartScale::Numeric(\n        NumericScale::new(ScaleKind::Time, [0.0, 4.0 * day]).expect(\"time domain\"),\n    );\n    let candles = RawOhlc::series(\n        \"ohlc\",\n        \"price\",\n        [\n            RawOhlc::new(\n                \"day-a\",\n                day,\n                [30.0, 60.0, 20.0, 50.0],\n                \"Day A\",\n                \"O30 H60 L20 C50\",\n            ),\n            RawOhlc::new(\n                \"day-b\",\n                day * 2.0,\n                [65.0, 75.0, 35.0, 40.0],\n                \"Day B\",\n                \"O65 H75 L35 C40\",\n            ),\n            RawOhlc::new(\n                \"day-c\",\n                day * 3.0,\n                [45.0, 55.0, 30.0, 45.0],\n                \"Day C · doji\",\n                \"O45 H55 L30 C45\",\n            ),\n        ],\n        theme.colors.success,\n        theme.colors.danger,\n    )\n    .expect(\"validated OHLC\");\n    let volume = RawSeries::new(\"volume\", \"volume\", SeriesMark::Bar)\n        .tint(theme.colors.accent.opacity(0.22))\n        .points(\n            [\n                (\"day-a\", day, 120.0),\n                (\"day-b\", 2.0 * day, 260.0),\n                (\"day-c\", 3.0 * day, 80.0),\n            ]\n            .map(|(id, x, value)| RawPoint::new(id, ChartValue::Number(x), Some(value))),\n        );\n    let overlay = RawSeries::new(\"reference\", \"price\", SeriesMark::Line)\n        .tint(theme.colors.warning)\n        .points(\n            [\n                (\"day-a\", day, 42.0),\n                (\"day-b\", 2.0 * day, 48.0),\n                (\"day-c\", 3.0 * day, 46.0),\n            ]\n            .map(|(id, x, value)| RawPoint::new(id, ChartValue::Number(x), Some(value))),\n        );\n    stack(&theme).w(px(900.0)).child(caption(&theme, \"Synthetic OHLC · shared UTC-duration x scale · independent volume axis · caller overlay\"))\n        .child(CartesianChart::new(\"scene.raw-ohlc\", \"OHLC with volume and overlay\", x, [\n            ValueAxis { id: \"price\".into(), label: \"Price\".into(), scale: NumericScale::new(ScaleKind::Linear, [0.0, 80.0]).expect(\"price domain\") },\n            ValueAxis { id: \"volume\".into(), label: \"Volume\".into(), scale: NumericScale::new(ScaleKind::Linear, [0.0, 300.0]).expect(\"volume domain\") },\n        ]).series([volume, candles, overlay]).format_ticks(move |axis, value| if axis == \"x\" { format!(\"D{:.0}\", value / day).into() } else { value.to_string().into() }).selected(Some(ChartSelection::new(\"ohlc\", \"day-b\"))).on_event(|_, _, _| {}))\n        .into_any_element()\n}\n\n//! Raw-value specialized visualization exhibits, using original synthetic data.\n\nuse super::support::*;\nuse crate::display::specialized::{\n    HierarchyNode, SpecializedChart, SpecializedData, WeightedValue,\n};\n\n#[derive(Default)]\nstruct Exploration {\n    revision: usize,\n    focus: Option<SharedString>,\n    selected: Option<SharedString>,\n    refuse: bool,\n}\n\npub(super) fn specialized_exploration(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<Exploration>(\n        &\"scene.specialized.explore-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision;\n    let selected = state.borrow().selected.clone();\n    let focus = state\n        .borrow()\n        .focus\n        .clone()\n        .unwrap_or_else(|| \"total\".into());\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All samples\",\n        vec![\n            HierarchyNode::branch(\n                \"group\",\n                \"Processing\",\n                vec![\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"parse\",\n                        \"Parsing\",\n                        if revision.is_multiple_of(2) {\n                            12.0\n                        } else {\n                            47.0\n                        },\n                    )),\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"execute\",\n                        \"Execution\",\n                        if revision.is_multiple_of(2) {\n                            68.0\n                        } else {\n                            13.0\n                        },\n                    )),\n                ],\n            ),\n            HierarchyNode::leaf(WeightedValue::new(\"deliver\", \"Delivery\", 20.0)),\n        ],\n    );\n    let next = state.clone();\n    let refusal = state.clone();\n    let charts = [\n        (\n            \"tree\",\n            \"Area · drill/back\",\n            SpecializedData::treemap_at(&root, &focus),\n        ),\n        (\n            \"sun\",\n            \"Angle · drill/back\",\n            SpecializedData::sunburst_at(&root, &focus),\n        ),\n        (\n            \"funnel\",\n            \"Width · enter/update/exit\",\n            SpecializedData::funnel(match revision % 3 {\n                0 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 120.0),\n                    WeightedValue::new(\"finish\", \"Finished\", 24.0),\n                ],\n                1 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 75.0),\n                    WeightedValue::new(\"new\", \"New sample\", 38.0),\n                ],\n                _ => vec![],\n            }),\n        ),\n    ];\n    stack(&theme).w(px(860.0))\n        .child(caption(&theme,\"Synthetic live fixtures · advance during motion to interrupt; empty exit shapes are not selectable\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.specialized.advance\").label(\"Advance samples\").on_click(move |window,_| { next.borrow_mut().revision+=1; window.refresh(); }))\n            .child(Button::new(\"scene.specialized.refuse\").label(if state.borrow().refuse { \"Accept proposals\" } else { \"Refuse proposals\" }).on_click(move |window,_| { let mut s=refusal.borrow_mut(); s.refuse = !s.refuse; window.refresh(); })))\n        .child(div().row().gap_token(&theme,Space::Lg).children(charts.into_iter().map(|(id,label,data)| {\n            let select = state.clone();\n            let navigate = state.clone();\n            div().w(px(260.0)).child(SpecializedChart::new(Ident::new(\"scene.specialized.live\").child(id),label,PlotState::Ready(data.expect(\"valid exploration fixture\")))\n                .motion(true).labels(true).selected(selected.clone())\n                .on_current(move |id,window,_| { let mut s=select.borrow_mut(); if !s.refuse { s.selected=Some(id); } window.refresh(); })\n                .on_navigate(move |id,window,_| { let mut s=navigate.borrow_mut(); if !s.refuse { s.focus=Some(id); } window.refresh(); }))\n        }))).into_any_element()\n}\n\npub(super) fn specialized(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let leaf = |id, label, value| HierarchyNode::leaf(WeightedValue::new(id, label, value));\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All work\",\n        vec![\n            leaf(\"build\", \"Build\", 60.0),\n            HierarchyNode::branch(\n                \"verify\",\n                \"Verification\",\n                vec![leaf(\"tests\", \"Tests\", 30.0), leaf(\"lint\", \"Lint\", 10.0)],\n            ),\n        ],\n    );\n    let fixtures = [\n        (\n            \"treemap\",\n            \"Treemap · area = work\",\n            SpecializedData::treemap(&root),\n        ),\n        (\n            \"sunburst\",\n            \"Sunburst · angle = work\",\n            SpecializedData::sunburst(&root),\n        ),\n        (\n            \"funnel\",\n            \"Funnel · width = count\",\n            SpecializedData::funnel(vec![\n                WeightedValue::new(\"seen\", \"Seen\", 120.0),\n                WeightedValue::new(\"started\", \"Started\", 75.0),\n                WeightedValue::new(\"done\", \"Completed\", 24.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(940.0))\n        .child(caption(\n            &theme,\n            \"Synthetic hierarchy fixtures · select marks with arrow keys or value keys\",\n        ))\n        .child(\n            div()\n                .row()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(280.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid hierarchy\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .child(\n            div().w(px(220.0)).child(SpecializedChart::new(\n                \"scene.specialized.zero\",\n                \"Zero is measured, not missing\",\n                PlotState::Stale {\n                    data: SpecializedData::funnel(vec![WeightedValue::new(\n                        \"zero\",\n                        \"Measured zero\",\n                        0.0,\n                    )])\n                    .expect(\"zero\"),\n                    reason: \"Refresh refused; verified zero retained\".into(),\n                },\n            )),\n        )\n        .into_any_element()\n}\n\npub(super) fn specialized_distribution(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let fixtures = [\n        (\n            \"histogram\",\n            \"Histogram · count per bin\",\n            SpecializedData::histogram(&[-2.0, -1.0, 0.0, 0.0, 1.0, 3.0], &[-2.0, 0.0, 1.0, 3.0]),\n        ),\n        (\n            \"box\",\n            \"Box · R-7 / Tukey · domain 0–110\",\n            SpecializedData::box_plot(\n                \"latency\",\n                \"Latency\",\n                &[1.0, 2.0, 4.0, 7.0, 8.0, 100.0],\n                [0.0, 110.0],\n            ),\n        ),\n        (\n            \"range\",\n            \"Range · domain −10–30\",\n            SpecializedData::range(\"interval\", \"Expected interval\", -4.0, 18.0, [-10.0, 30.0]),\n        ),\n        (\n            \"waterfall\",\n            \"Waterfall · signed changes\",\n            SpecializedData::waterfall(vec![\n                WeightedValue::new(\"open\", \"Opening\", 60.0),\n                WeightedValue::new(\"cost\", \"Cost\", -90.0),\n                WeightedValue::new(\"credit\", \"Credit\", 10.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(1000.0))\n        .child(caption(\n            &theme,\n            \"Synthetic distribution fixtures · explicit bin edges and R-7 / Tukey statistics\",\n        ))\n        .child(\n            div()\n                .row()\n                .flex_wrap()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(440.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid synthetic fixture\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .into_any_element()\n}\n\n//! A schema, rendered as data or as a form.\n\nuse super::support::*;\n\n/// A document with the three facts a viewer usually confuses: a key holding\n/// `null`, a key holding an empty object, and a key that is simply not here.\npub(super) fn scene_document() -> JsonValue {\n    JsonValue::object([\n        (\"id\", JsonValue::string(\"run-4812\")),\n        (\"attempts\", JsonValue::number(\"3\")),\n        (\"streaming\", JsonValue::Bool(true)),\n        // Nothing has been recorded here yet, which is not the same as the\n        // key being missing: `resumed_from` is missing, and says nothing.\n        (\"cursor\", JsonValue::Null),\n        (\"labels\", JsonValue::object(Vec::<(&str, JsonValue)>::new())),\n        (\n            \"credentials\",\n            JsonValue::object([(\"token\", JsonValue::redacted(\"51 characters\"))]),\n        ),\n        (\n            \"request\",\n            JsonValue::object([\n                (\"method\", JsonValue::string(\"POST\")),\n                (\n                    \"headers\",\n                    JsonValue::object([\n                        (\"content-type\", JsonValue::string(\"application/json\")),\n                        (\"authorization\", JsonValue::redacted(\"a value\")),\n                    ]),\n                ),\n            ]),\n        ),\n        (\n            \"steps\",\n            JsonValue::array([\n                JsonValue::string(\"plan\"),\n                JsonValue::string(\"apply\"),\n                JsonValue::object([(\"retries\", JsonValue::number(\"0\"))]),\n            ]),\n        ),\n    ])\n}\n\npub(super) 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}\n\n/// The form kept across frames.\n///\n/// Its fields own carets, open menus and a selection, so rebuilding it every\n/// frame would throw away whatever had been typed into it.\npub(super) struct SceneSchemaForm {\n    form: Entity<SchemaForm>,\n}\n\nimpl Global for SceneSchemaForm {}\n\npub(super) fn scene_schema() -> Schema {\n    Schema::new()\n        .field(\n            SchemaField::new(\n                \"path\",\n                SchemaKind::Text {\n                    placeholder: Some(\"relative to the workspace\".into()),\n                    secret: false,\n                },\n            )\n            .label(\"File\")\n            .description(\"Which file the call reads\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\n                \"max_bytes\",\n                SchemaKind::Integer(NumberBounds::new().min(1.0).max(65_536.0).step(1024.0)),\n            )\n            .label(\"Maximum bytes\"),\n        )\n        .field(\n            SchemaField::new(\"follow_symlinks\", SchemaKind::Boolean).label(\"Follow symbolic links\"),\n        )\n        .field(\n            SchemaField::new(\n                \"encoding\",\n                SchemaKind::Enum(vec![\n                    SchemaChoice::new(\"utf-8\", \"UTF-8\"),\n                    SchemaChoice::new(\"latin-1\", \"Latin-1\"),\n                ]),\n            )\n            .label(\"Encoding\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\"attachments\", SchemaKind::Files { max: Some(2) })\n                .label(\"Attachments\")\n                .description(\"Paths are acquired and accepted by the host\"),\n        )\n        .field(\n            SchemaField::new(\n                \"headers\",\n                SchemaKind::List {\n                    item: Box::new(SchemaField::new(\n                        \"header\",\n                        SchemaKind::Object(vec![\n                            SchemaField::new(\n                                \"name\",\n                                SchemaKind::Text {\n                                    placeholder: Some(\"Header name\".into()),\n                                    secret: false,\n                                },\n                            )\n                            .label(\"Name\")\n                            .required(true),\n                            SchemaField::new(\"enabled\", SchemaKind::Boolean).label(\"Enabled\"),\n                        ]),\n                    )),\n                    max: Some(3),\n                },\n            )\n            .label(\"Headers\"),\n        )\n        .field(\n            SchemaField::new(\n                \"limits\",\n                SchemaKind::Object(vec![\n                    SchemaField::new(\"timeout_ms\", SchemaKind::Integer(NumberBounds::new()))\n                        .label(\"Timeout in milliseconds\"),\n                ]),\n            )\n            .label(\"Limits\"),\n        )\n        .field(\n            SchemaField::new(\n                \"matcher\",\n                SchemaKind::Unrenderable(\n                    \"This argument is one of three shapes at once, and no single control \\\n                     stands for that.\"\n                        .into(),\n                ),\n            )\n            .label(\"Matcher\")\n            .required(true),\n        )\n}\n\npub(super) fn schema_form(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSchemaForm>() {\n        set_schema_file_policy(DefaultSchemaFilePolicy, cx);\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            let _ = form.set_field_validation(\"encoding\", ValidationState::Validating, cx);\n            form.set_files(\"attachments\", vec![\"/workspace/brief.md\".into()], cx)\n                .expect(\"the scene's permissive file policy accepts its fixture\");\n            form.add_list_item(\"headers\", window, 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}\n\n//! What more than one family of scenes needs.\n//!\n//! Everything here is used by scenes in at least two families. A fixture\n//! that only one family builds lives in that family, next to the scenes\n//! that read it, so that moving a component moves its fixture with it.\n\npub(super) use gpui::{\n    AnyElement, App, Corners, DevicePixels, Entity, Focusable, Global, IntoElement, Pixels,\n    RenderImage, SharedString, SpriteBlendMode, SpriteColorMode, SpriteInstance, SpriteTransform,\n    Window, bounds, canvas, conic_gradient_stops, div, linear_color_stop, point, prelude::*, px,\n    radial_gradient_stops, radians, size,\n};\npub(super) use gpui_kit_assets::Icon;\npub(super) use gpui_kit_semantics::{NodeSpec, Role, Semantic};\npub(super) use gpui_kit_theme::{Radius, Space, Surface, SyntaxColor, TextTone, Theme, TypeScale};\npub(super) use std::rc::Rc;\npub(super) use std::sync::{Arc, OnceLock};\npub(super) use std::time::Duration;\n\npub(super) use crate::controls::combobox::Combobox;\npub(super) use crate::controls::input::TextInput;\npub(super) use crate::controls::keybinding_recorder::KeybindingRecorder;\npub(super) use crate::controls::number_input::NumberInput;\npub(super) use crate::controls::select::{Select, SelectOption};\npub(super) use crate::controls::split_button::SplitButton;\npub(super) use crate::controls::tag_input::TagInput;\npub(super) use crate::controls::textarea::{Frame, TextArea};\npub(super) use crate::display::badge::Tone;\npub(super) use crate::display::icon::{Icon as IconView, IconTone};\npub(super) use crate::foundation::ActiveTheme;\npub(super) use crate::foundation::direction::{ActiveDirection, DirectionalExt};\npub(super) use crate::interaction::dnd;\npub(super) use crate::overlay::toast::push as toast_push;\npub(super) use crate::overlay::{Edge, Kbd, Overlay, Placement, Tooltip, Tooltipped};\npub(super) use crate::prelude::*;\npub(super) use crate::strings::{ActiveStrings, StringKey};\n\npub(super) fn stack(theme: &Theme) -> gpui::Div {\n    div()\n        .column()\n        .gap(px(theme.spacing.md))\n        .p(px(theme.spacing.lg))\n        .page(theme)\n        .font_family(theme.typography.sans.clone())\n}\n\npub(super) fn row(theme: &Theme) -> gpui::Div {\n    div()\n        .row()\n        .flex_wrap()\n        .gap(px(theme.spacing.sm))\n        .items_center()\n}\n\n/// A pane of fixture copy, for a scene that needs something on both sides of a\n/// divider or below a viewport.\npub(super) fn filler(theme: &Theme, title: &'static str, lines: usize) -> gpui::Div {\n    let mut pane = div()\n        .flex()\n        .flex_col()\n        .gap(px(theme.space(Space::Xs)))\n        .p(px(theme.space(Space::Md)))\n        .child(crate::foundation::text(\n            theme,\n            TypeScale::Label,\n            SharedString::from(title),\n        ));\n    for line in 1..=lines {\n        pane = pane.child(\n            crate::foundation::text(\n                theme,\n                TypeScale::Code,\n                SharedString::from(format!(\"Fixture line {line:02}\")),\n            )\n            .text_tone(theme, TextTone::Muted),\n        );\n    }\n    pane\n}\n\n/// A caption naming the state a drag scene was staged in.\npub(super) fn caption(theme: &Theme, text: impl Into<SharedString>) -> gpui::Div {\n    crate::foundation::text(theme, TypeScale::Caption, text.into())\n        .text_tone(theme, TextTone::Muted)\n}\n\n/// The element a host hands back for an image this crate did not fetch.\n///\n/// A flat fill rather than a picture, because the crate ships no photographs\n/// and a scene has to photograph the same pixels every run. Neutral, and\n/// quieter than the surface it sits in: a stand-in painted in the accent was\n/// the loudest thing in every scene that used one, which said the placeholder\n/// mattered more than the component being reviewed around it.\npub(super) fn scene_picture(label: &'static str, cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .size_full()\n        .flex()\n        .flex_col()\n        .items_center()\n        .justify_center()\n        .gap(px(theme.space(gpui_kit_theme::Space::Xs)))\n        .bg(theme.colors.sunken)\n        .child(\n            gpui_kit_assets::icon(gpui_kit_assets::Icon::Image)\n                .size(px(theme.typography.subtitle.line_height))\n                .text_color(theme.colors.text_faint),\n        )\n        .child(\n            crate::foundation::text(&theme, TypeScale::Caption, SharedString::new_static(label))\n                .text_tone(&theme, TextTone::Faint),\n        )\n        .into_any_element()\n}\n\n/// The ordinary-application views that own state across frames.\npub(super) struct SceneOrdinary {\n    pub(super) menubar: Entity<Menubar>,\n    pub(super) hover_card: Entity<HoverCard>,\n    pub(super) copy_idle: Entity<CopyButton>,\n    pub(super) copy: Entity<CopyButton>,\n    pub(super) copy_refused: Entity<CopyButton>,\n}\n\nimpl Global for SceneOrdinary {}\n\npub(super) fn ensure_ordinary(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneOrdinary>() {\n        return;\n    }\n    let menubar = cx.new(|cx| {\n        Menubar::new(\n            \"scene.menubar\",\n            [\n                MenubarMenu::new(\n                    \"file\",\n                    \"File\",\n                    [\n                        MenuItem::command(\"file.new\", \"New run\").shortcut(\"cmd-n\"),\n                        MenuItem::command(\"file.open\", \"Open workspace\").shortcut(\"cmd-o\"),\n                        MenuItem::separator(\"file.rule\"),\n                        MenuItem::submenu(\n                            \"file.export\",\n                            \"Export\",\n                            [\n                                MenuItem::command(\"file.export.json\", \"As JSON\"),\n                                MenuItem::command(\"file.export.text\", \"As plain text\"),\n                            ],\n                        ),\n                    ],\n                ),\n                MenubarMenu::new(\n                    \"edit\",\n                    \"Edit\",\n                    [\n                        MenuItem::command(\"edit.undo\", \"Undo\").shortcut(\"cmd-z\"),\n                        MenuItem::check(\"edit.wrap\", \"Wrap lines\", true),\n                    ],\n                ),\n                MenubarMenu::new(\"view\", \"View\", [MenuItem::command(\"view.zoom\", \"Zoom in\")]),\n                MenubarMenu::new(\"policy\", \"Policy\", []).disabled(true),\n            ],\n            window,\n            cx,\n        )\n    });\n    menubar.update(cx, |bar, cx| bar.open(\"file\", window, cx));\n\n    let hover_card = cx.new(|cx| {\n        HoverCard::new(\"scene.hover-card\", window, cx)\n            .name(\"Run 4821\")\n            .trigger(|_, cx| {\n                let theme = cx.theme().clone();\n                crate::foundation::text(&theme, TypeScale::Caption, \"run 4821\")\n                    .text_color(theme.colors.accent)\n                    .into_any_element()\n            })\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .column()\n                    // A column stretches its children across, and a badge\n                    // stretched that far stops reading as a label and starts\n                    // reading as a filled bar.\n                    .items_start()\n                    .gap(px(theme.spacing.xs))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Strong,\n                        \"Nightly regression sweep\",\n                    ))\n                    .child(\n                        crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Finished in 4 minutes, 12 checks, none failed.\",\n                        )\n                        .text_tone(&theme, TextTone::Muted),\n                    )\n                    .child(Badge::new(\"Ready\").success())\n                    .into_any_element()\n            })\n    });\n    hover_card.update(cx, |card, cx| card.open(cx));\n\n    // Nobody has pressed this one. It is the state a reader sees almost all\n    // of the time, and it was the one state of the three no image held.\n    let copy_idle = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-idle\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Ok(()))\n    });\n\n    // The confirmation outlives the capture. At its ordinary length it expires\n    // partway through a run, so which of the two states this scene showed\n    // depended on how long the run took to reach it.\n    let copy = cx.new(|cx| {\n        CopyButton::new(\"scene.copy\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .confirmation(std::time::Duration::from_secs(60 * 60))\n            .copier(|_, _| Ok(()))\n    });\n    copy.update(cx, |button, cx| button.copy(cx));\n\n    let copy_refused = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-refused\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Err(\"The clipboard did not take it.\".into()))\n    });\n    copy_refused.update(cx, |button, cx| button.copy(cx));\n\n    cx.set_global(SceneOrdinary {\n        menubar,\n        hover_card,\n        copy_idle,\n        copy,\n        copy_refused,\n    });\n}\n"
    },
    {
      "name": "geography-scale",
      "capture": "cargo run -p xtask -- headless capture geography-scale",
      "kind": "exhibit",
      "subjects": [
        "GeoMap"
      ],
      "uses": [
        "GeoMap"
      ],
      "example": "fn geography_scale(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<FixtureCamera>(\n        &\"scene.geography.scale-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    if state.borrow().data.is_none() {\n        state.borrow_mut().viewport = GeoViewport {\n            center: GeoProjected { x: 0.5, y: 0.5 },\n            zoom: 8.0,\n        };\n    }\n    let data = state\n        .borrow_mut()\n        .data\n        .get_or_insert_with(|| {\n            Rc::new(\n                GeoData::new(\n                    GeoProjection::Equirectangular,\n                    vec![],\n                    (0..1000)\n                        .map(|i| GeoPoint {\n                            id: format!(\"sample-{i}\").into(),\n                            label: format!(\"Synthetic sample {i}\").into(),\n                            position: GeoPosition {\n                                longitude: -150.0 + f64::from(i % 100) * 3.0,\n                                latitude: -45.0 + f64::from(i / 100) * 10.0,\n                            },\n                        })\n                        .collect(),\n                    GeoColorDomain {\n                        minimum: 0.0,\n                        maximum: 1.0,\n                        minimum_label: \"0\".into(),\n                        maximum_label: \"1\".into(),\n                        missing_label: \"Unobserved\".into(),\n                    },\n                )\n                .expect(\"original point grid\"),\n            )\n        })\n        .clone();\n    let selected = state.borrow().selected.clone();\n    let viewport = state.borrow().viewport;\n    let dense = state.clone();\n    stack(&theme).w(px(900.0))\n        .child(caption(&theme,format!(\"{} original local point overlays · viewport culling · six-row virtual accessible readout\",data.points().len())))\n        .child(caption(&theme,\"Scroll the readout or navigate it by keyboard; offscreen rows retain source identities, not measured bounds\"))\n        .child(Button::new(\"scene.geography.scale-density\").label(\"Load 10,000 dense points\").on_click(move |window,_| {\n            let mut target=dense.borrow_mut();\n            let points=(0..10000).map(|i| GeoPoint{id:format!(\"sample-{i}\").into(),label:format!(\"Synthetic sample {i}\").into(),position:GeoPosition{longitude:-179.0+f64::from(i%1000)*0.358,latitude:-80.0+f64::from(i/1000)*1.6}}).collect();\n            let data=GeoData::new(GeoProjection::Equirectangular,vec![],points,target.data.as_ref().expect(\"prepared fixture\").color_domain().clone()).expect(\"original point grid\");\n            target.viewport=GeoViewport{center:data.projection().project(data.points()[5000].position).expect(\"prepared fixture\"),zoom:1.0};\n            target.data=Some(Rc::new(data));\n            window.refresh();\n        }))\n        .child(GeoMap::new(\"scene.geography.scale\",\"Controlled point cloud\").state(GeoState::Ready(data)).viewport(viewport).selected(selected)\n            .on_event(move |event,window,_| {match event {GeoEvent::Select(id)=>state.borrow_mut().selected=id,GeoEvent::Viewport(v)=>state.borrow_mut().viewport=v};window.refresh();}))\n        .into_any_element()\n}\n\n//! Explicit continuous color encodings, kept separate from contribution levels.\nuse super::support::*;\nuse crate::display::heatmap::{ContinuousHeatCell, ContinuousHeatmap, HeatColorScale};\n\n#[derive(Default)]\nstruct MatrixRevisions {\n    revision: usize,\n    direct: bool,\n    selected: Option<SharedString>,\n}\n\npub(super) fn heatmap_reordering(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<MatrixRevisions>(\n        &\"scene.heat.reorder-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision % 3;\n    let rows = match revision {\n        0 => vec![\"east\", \"west\"],\n        1 => vec![\"west\", \"north\", \"east\"],\n        _ => vec![\"east\"],\n    };\n    let columns = match revision {\n        0 => vec![\"a\", \"b\", \"c\"],\n        1 => vec![\"c\", \"a\", \"d\", \"b\"],\n        _ => vec![\"a\", \"b\"],\n    };\n    let cells = rows\n        .iter()\n        .flat_map(|row| {\n            columns.iter().map(move |column| {\n                let reading = match (*row, *column) {\n                    (\"east\", \"a\") => Some(3.0),\n                    (\"east\", \"b\") => Some(12.0),\n                    (\"west\", \"a\") => Some(42.0),\n                    (\"west\", \"c\") => Some(81.0),\n                    (\"north\", \"b\") => Some(65.0),\n                    _ => None,\n                };\n                ContinuousHeatCell::new(\n                    format!(\"{row}-{column}\"),\n                    *row,\n                    *column,\n                    format!(\"{row} / {column}\"),\n                    reading,\n                )\n            })\n        })\n        .collect();\n    let next = state.clone();\n    let direct = state.clone();\n    let selection = state.clone();\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"Synthetic keyed axes · reorder, enter, exit and reinsert · raw readings never tween\",\n        ))\n        .child(\n            div()\n                .row()\n                .gap_token(&theme, Space::Sm)\n                .child(\n                    Button::new(\"scene.heat.reorder.advance\")\n                        .label(\"Advance axes\")\n                        .on_click(move |window, _| {\n                            next.borrow_mut().revision += 1;\n                            window.refresh();\n                        }),\n                )\n                .child(\n                    Button::new(\"scene.heat.reorder.direct\")\n                        .label(if state.borrow().direct {\n                            \"Enable animation\"\n                        } else {\n                            \"Direct updates\"\n                        })\n                        .on_click(move |window, _| {\n                            let mut s = direct.borrow_mut();\n                            s.direct = !s.direct;\n                            window.refresh();\n                        }),\n                ),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.heat.reorder\",\n                \"Stable caller coordinates\",\n                HeatColorScale::sequential([0.0, 100.0], theme.colors.canvas, theme.colors.accent)\n                    .expect(\"domain\"),\n                PlotState::Ready(cells),\n            )\n            .rows(rows)\n            .columns(columns)\n            .animate(!state.borrow().direct)\n            .on_current(move |id, window, _| {\n                selection.borrow_mut().selected = Some(id);\n                window.refresh();\n            })\n            .when_some(state.borrow().selected.clone(), |chart, id| {\n                chart.current(id)\n            }),\n        )\n        .into_any_element()\n}\n\npub(super) fn continuous_heatmap_transition(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let revision = crate::motion::keyed::slot::<usize>(\n        &\"scene.heat.transition-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let value = match *revision.borrow() % 3 {\n        0 => Some(-8.0),\n        1 => Some(32.0),\n        _ => None,\n    };\n    let next = revision.clone();\n    stack(&theme)\n        .w(px(440.0))\n        .child(caption(\n            &theme,\n            \"Synthetic observations · exact latest text with animated color; missing is never zero\",\n        ))\n        .child(\n            Button::new(\"scene.heat.advance\")\n                .label(\"Advance reading\")\n                .on_click(move |window, _| {\n                    *next.borrow_mut() += 1;\n                    window.refresh();\n                }),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.heat.live\",\n                \"Controlled measurement\",\n                HeatColorScale::diverging(\n                    [-8.0, 2.0, 32.0],\n                    theme.colors.accent,\n                    theme.colors.canvas,\n                    theme.colors.danger,\n                )\n                .expect(\"domain\"),\n                PlotState::Ready(vec![\n                    ContinuousHeatCell::new(\"changing\", \"row\", \"a\", \"Changing reading\", value),\n                    ContinuousHeatCell::new(\"zero\", \"row\", \"b\", \"Verified zero\", Some(0.0)),\n                ]),\n            )\n            .rows([\"row\"])\n            .columns([\"a\", \"b\"])\n            .motion(true),\n        )\n        .into_any_element()\n}\n\npub(super) fn continuous_heatmap(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let diverging = HeatColorScale::diverging(\n        [-8.0, 2.0, 32.0],\n        theme.colors.accent,\n        theme.colors.canvas,\n        theme.colors.danger,\n    )\n    .expect(\"explicit domain\");\n    let sequential =\n        HeatColorScale::sequential([0.0, 100.0], theme.colors.canvas, theme.colors.success)\n            .expect(\"explicit domain\");\n    let cells = [\n        (\"east\", \"a\", Some(-8.0)),\n        (\"east\", \"b\", Some(0.0)),\n        (\"east\", \"c\", Some(2.0)),\n        (\"west\", \"a\", Some(17.0)),\n        (\"west\", \"b\", Some(32.0)),\n        (\"west\", \"c\", None),\n    ]\n    .into_iter()\n    .map(|(row, column, reading)| {\n        ContinuousHeatCell::new(\n            format!(\"{row}-{column}\"),\n            row,\n            column,\n            format!(\"Synthetic observation {row} / {column}\"),\n            reading,\n        )\n    })\n    .collect::<Vec<_>>();\n    stack(&theme)\n        .w(px(800.0))\n        .child(caption(\n            &theme,\n            \"Synthetic measurements · explicit neutral = 2 · no observation is not zero\",\n        ))\n        .child(\n            div().w(px(720.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.wide\",\n                    \"Diverging measurements\",\n                    diverging,\n                    PlotState::Ready(cells.clone()),\n                )\n                .rows([\"east\", \"west\"])\n                .columns([\"a\", \"b\", \"c\"])\n                .current(\"east-c\")\n                .on_current(|_, _, _| {}),\n            ),\n        )\n        .child(\n            div().w(px(240.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.narrow\",\n                    \"Narrow · last verified values\",\n                    diverging,\n                    PlotState::Stale {\n                        data: cells,\n                        reason: \"Refresh refused\".into(),\n                    },\n                )\n                .rows([\"east\", \"west\"])\n                .columns([\"a\", \"b\", \"c\"]),\n            ),\n        )\n        .child(\n            div().w(px(400.0)).child(\n                ContinuousHeatmap::new(\n                    \"scene.continuous.sequential\",\n                    \"Sequential · domain 0–100\",\n                    sequential,\n                    PlotState::Ready(vec![\n                        ContinuousHeatCell::new(\"zero\", \"r\", \"a\", \"Measured zero\", Some(0.0)),\n                        ContinuousHeatCell::new(\"middle\", \"r\", \"b\", \"Middle\", Some(50.0)),\n                        ContinuousHeatCell::new(\"high\", \"r\", \"c\", \"High\", Some(100.0)),\n                    ]),\n                )\n                .rows([\"r\"])\n                .columns([\"a\", \"b\", \"c\"]),\n            ),\n        )\n        .child(\n            ContinuousHeatmap::new(\n                \"scene.continuous.invalid\",\n                \"Invalid readings are errors\",\n                sequential,\n                PlotState::Ready(vec![ContinuousHeatCell::new(\n                    \"outside\",\n                    \"r\",\n                    \"c\",\n                    \"Outside domain\",\n                    Some(101.0),\n                )]),\n            )\n            .rows([\"r\"])\n            .columns([\"c\"]),\n        )\n        .into_any_element()\n}\n\n//! Mobile list interactions, with caller-owned async state and retained rows.\n\nuse super::support::*;\nuse crate::interaction::{\n    refresh::{PullToRefresh, RefreshState},\n    swipe::{SwipeActions, SwipeSide},\n};\nuse crate::overlay::sheet::{SheetAction, SheetActionState};\n\nstruct SceneRefresh(Vec<Entity<PullToRefresh>>);\nimpl Global for SceneRefresh {}\n\npub(super) fn pull_to_refresh(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneRefresh>() {\n        let states = [\n            (\"ready\", RefreshState::Ready),\n            (\n                \"pending\",\n                RefreshState::Pending(\"Waiting for caller\".into()),\n            ),\n            (\n                \"loading\",\n                RefreshState::Loading(\"Refreshing fixture\".into()),\n            ),\n            (\n                \"error\",\n                RefreshState::Error(\"Refresh failed · retained rows\".into()),\n            ),\n        ];\n        let mut views = Vec::new();\n        for (id, state) in states {\n            let scroll = gpui::ScrollHandle::new();\n            let view = cx.new(|_| {\n                PullToRefresh::new(\n                    format!(\"scene.refresh.{id}\"),\n                    scroll.clone(),\n                    \"Refresh\",\n                    \"Release to refresh\",\n                )\n            });\n            view.update(cx, |refresh, cx| {\n                refresh.set_state(state, cx);\n                refresh.set_content(\n                    Some(Rc::new(move |_, cx| {\n                        let theme = cx.theme().clone();\n                        div()\n                            .id(SharedString::from(format!(\"scene.refresh.{id}.scroll\")))\n                            .column()\n                            .size_full()\n                            .overflow_y_scroll()\n                            .track_scroll(&scroll)\n                            .children(\n                                [\n                                    (\"notes\", \"Notes · verified fixture\"),\n                                    (\"draft\", \"Draft · verified fixture\"),\n                                    (\"archive\", \"Archive · verified fixture\"),\n                                    (\"saved\", \"Saved · verified fixture\"),\n                                ]\n                                .into_iter()\n                                .map(|(key, label)| {\n                                    div()\n                                        .h(px(64.0))\n                                        .flex_none()\n                                        .p_token(&theme, Space::Sm)\n                                        .child(crate::foundation::text(\n                                            &theme,\n                                            TypeScale::Body,\n                                            label,\n                                        ))\n                                        .semantic_in(\n                                            cx,\n                                            NodeSpec::new(\n                                                format!(\"scene.refresh.{id}.{key}\"),\n                                                Role::Group,\n                                            )\n                                            .text(label),\n                                        )\n                                }),\n                            )\n                            .into_any_element()\n                    })),\n                    cx,\n                );\n            });\n            views.push(view);\n        }\n        cx.set_global(SceneRefresh(views));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .child(caption(\n            &theme,\n            \"Fixture states · refreshing never replaces the verified rows\",\n        ))\n        .child(\n            row(&theme).items_start().children(\n                cx.global::<SceneRefresh>()\n                    .0\n                    .iter()\n                    .map(|view| div().w(px(250.0)).h(px(370.0)).child(view.clone())),\n            ),\n        )\n        .into_any_element()\n}\n\nstruct SceneSwipe(Vec<Entity<SwipeActions>>);\nimpl Global for SceneSwipe {}\n\npub(super) fn swipe_actions(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSwipe>() {\n        let mut views = Vec::new();\n        for (id, side, state) in [\n            (\"closed\", None, SheetActionState::Ready),\n            (\"left\", Some(SwipeSide::Left), SheetActionState::Ready),\n            (\n                \"right\",\n                Some(SwipeSide::Right),\n                SheetActionState::Error(\"Deletion failed; row retained\".into()),\n            ),\n            (\n                \"pending\",\n                Some(SwipeSide::Right),\n                SheetActionState::Pending(\"Waiting for caller\".into()),\n            ),\n        ] {\n            let view = cx.new(|_| SwipeActions::new(format!(\"scene.swipe.{id}\"), \"Actions\"));\n            view.update(cx, |swipe, cx| {\n                let mut remove = SheetAction::new(\"remove\", \"Delete\");\n                remove.destructive = true;\n                swipe.set_actions(SwipeSide::Left, vec![SheetAction::new(\"pin\", \"Pin\")], cx);\n                swipe.set_actions(SwipeSide::Right, vec![remove], cx);\n                swipe.set_content(\n                    Some(Rc::new(move |_, cx| {\n                        let theme = cx.theme().clone();\n                        div()\n                            .h(px(64.0))\n                            .column()\n                            .justify_center()\n                            .child(crate::foundation::text(\n                                &theme,\n                                TypeScale::Label,\n                                \"Project notes · fixture\",\n                            ))\n                            .child(crate::foundation::text(\n                                &theme,\n                                TypeScale::Body,\n                                \"Last verified content remains visible\",\n                            ))\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(format!(\"scene.swipe.{id}.content\"), Role::Group)\n                                    .text(\"Project notes · fixture\"),\n                            )\n                            .into_any_element()\n                    })),\n                    cx,\n                );\n                swipe.reveal(side, cx);\n                swipe.set_state(state, cx);\n            });\n            views.push(view);\n        }\n        cx.set_global(SceneSwipe(views));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(580.0))\n        .child(caption(\n            &theme,\n            \"Reveal is not activation · physical left and right trays\",\n        ))\n        .children(cx.global::<SceneSwipe>().0.iter().cloned())\n        .into_any_element()\n}\n\n//! Frames that decide where their contents go.\n\nuse super::support::*;\n\npub(super) fn mobile_page(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{AppBar, PageLayout};\n    let theme = cx.theme().clone();\n    let page = |name: &'static str, keyboard: bool, safe: bool| {\n        let id = format!(\"scene.mobile-page.{name}\");\n        let mut insets = gpui::WindowInsets::default();\n        if safe {\n            insets.safe_area.top = px(24.0);\n            insets.safe_area.bottom = px(20.0);\n            insets.safe_area.left = px(7.0);\n            insets.safe_area.right = px(11.0);\n        }\n        if keyboard {\n            insets.ime.bottom = px(140.0);\n        }\n        div()\n            .w(px(290.0))\n            .h(px(430.0))\n            .border_1()\n            .border_color(theme.colors.control_hairline)\n            .surface(&theme, Surface::Panel)\n            .child(\n                PageLayout::new(\n                    id.clone(),\n                    ScrollArea::new(format!(\"{id}.scroll\")).child(filler(\n                        &theme,\n                        \"Fixture page content\",\n                        12,\n                    )),\n                )\n                .insets(insets)\n                .hide_footer(keyboard)\n                .header(\n                    AppBar::new(format!(\"{id}.bar\"), name).leading(\n                        Button::new(format!(\"{id}.back\"))\n                            .label(\"Back\")\n                            .ghost()\n                            .control_size(ControlSize::Touch)\n                            .disabled(!safe)\n                            .on_click(|_, _| {}),\n                    ),\n                )\n                .footer(div().p(px(theme.space(Space::Sm))).child(\"Caller footer\")),\n            )\n    };\n    stack(&theme)\n        .child(caption(&theme, \"Fixture residual insets: desktop zero · safe area · overlapping IME with footer unmounted\"))\n        .child(row(&theme).items_start().child(page(\"Desktop\", false, false))\n            .child(page(\"Safe area\", false, true)).child(page(\"Keyboard\", true, true)))\n        .into_any_element()\n}\n\npub(super) fn scroll_edge_effect(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"Fixture transcript: content scrolls beneath a Regular glass toolbar\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(240.0))\n                .overflow_hidden()\n                .child(\n                    crate::layout::ScrollEdgeEffect::new(\"scene.scroll-edge.soft\")\n                        .top(true)\n                        .soft()\n                        .band(64.0)\n                        .child(filler(&theme, \"Earlier messages beneath the toolbar\", 10)),\n                )\n                .child(\n                    div().absolute().top(px(8.0)).left(px(16.0)).child(\n                        Glass::new(\"scene.scroll-edge.toolbar\")\n                            .radius(Radius::Pill)\n                            .child(\n                                div()\n                                    .px(px(20.0))\n                                    .py(px(10.0))\n                                    .child(\"Transcript · fixture\"),\n                            ),\n                    ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Reduced transparency: opaque scroll-edge backing\",\n        ))\n        .child(\n            div().h(px(160.0)).overflow_hidden().child(\n                crate::layout::ScrollEdgeEffect::new(\"scene.scroll-edge.hard\")\n                    .top(true)\n                    .hard()\n                    .band(64.0)\n                    .child(filler(&theme, \"The same transcript\", 7)),\n            ),\n        )\n        .into_any_element()\n}\n\npub(super) fn grid(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let item = |id: &'static str, label: &'static str| {\n        GridItem::new(\n            id,\n            Card::new()\n                .id(format!(\"scene.grid.card.{id}\"))\n                .padding(Space::Md)\n                .child(crate::foundation::text(&theme, TypeScale::Label, label))\n                .child(caption(&theme, \"Caller-owned content\")),\n        )\n        .span_at(Breakpoint::Large, if id == \"summary\" { 2 } else { 1 })\n    };\n    stack(&theme)\n        .w(px(840.0))\n        .child(caption(\n            &theme,\n            \"Columns and spans resolve from the grid's measured width while semantic order stays source order\",\n        ))\n        .child(\n            Grid::new(\"scene.grid\")\n                .columns(1)\n                .columns_at(Breakpoint::Medium, 2)\n                .columns_at(Breakpoint::Large, 3)\n                .gap(Space::Sm)\n                .items([\n                    item(\"summary\", \"Summary\"),\n                    item(\"settings\", \"Settings\"),\n                    item(\"history\", \"History\"),\n                    item(\"policy\", \"Policy\"),\n                ]),\n        )\n        .into_any_element()\n}\n\npub(super) fn container(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"Page width and gutters come from the installed theme, not component-local pixels\",\n        ))\n        .child(\n            Container::new(\"scene.container.readable\")\n                .width(ContainerWidth::Readable)\n                .child(\n                    Card::new()\n                        .id(\"scene.container.readable.card\")\n                        .padding(Space::Md)\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Readable content\",\n                        )),\n                ),\n        )\n        .child(\n            Container::new(\"scene.container.dialog\")\n                .width(ContainerWidth::Dialog)\n                .child(\n                    Card::new()\n                        .id(\"scene.container.dialog.card\")\n                        .padding(Space::Md)\n                        .child(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Dialog-width content\",\n                        )),\n                ),\n        )\n        .into_any_element()\n}\n\n/// A pane with a heading and something under it worth resizing.\n///\n/// Two panes of the same fixture copy demonstrate a divider and nothing else:\n/// what a reader has to be able to judge is that the two sides hold different\n/// things and that dragging trades room between them, so each side is given\n/// its own kind of content and its own heading.\nfn pane(theme: &Theme, title: &'static str, rows: &'static [&'static str]) -> gpui::Div {\n    div()\n        .column()\n        .size_full()\n        .min_w_0()\n        .overflow_hidden()\n        .child(\n            div()\n                .row()\n                .items_center()\n                .px(px(theme.space(Space::Md)))\n                .py(px(theme.space(Space::Sm)))\n                .child(\n                    crate::foundation::text(theme, TypeScale::Label, title)\n                        .text_tone(theme, TextTone::Muted),\n                ),\n        )\n        .child(\n            div()\n                .column()\n                .gap(px(theme.space(Space::Xs)))\n                .px(px(theme.space(Space::Md)))\n                .py(px(theme.space(Space::Sm)))\n                .children(\n                    rows.iter()\n                        .map(|row| crate::foundation::text(theme, TypeScale::Body, *row)),\n                ),\n        )\n}\n\npub(super) 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                .surface(&theme, Surface::Panel)\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(pane(\n                            &theme,\n                            \"Files\",\n                            &[\n                                \"src/\",\n                                \"  main.rs\",\n                                \"  theme.rs\",\n                                \"  layout/\",\n                                \"    split.rs\",\n                                \"    scroll.rs\",\n                                \"Cargo.toml\",\n                            ],\n                        ))\n                        .end(pane(\n                            &theme,\n                            \"split.rs\",\n                            &[\n                                \"pub struct SplitPane {\",\n                                \"    ratio: f32,\",\n                                \"    min_start: f32,\",\n                                \"    min_end: f32,\",\n                                \"}\",\n                                \"\",\n                                \"// The divider reports the ratio a drag\",\n                                \"// asked for; the caller decides it.\",\n                            ],\n                        ))\n                        .on_resize(|_, _, _| {})\n                        .on_collapse(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}\n\n/// The same region, already scrolled, so the shadow that says there is content\n/// above the fold is in a captured image rather than only in a test.\npub(super) fn scroll_shadow(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    crate::layout::scroll_to(\n        \"scene.scroll.scrolled\",\n        gpui::point(px(0.0), px(120.0)),\n        window,\n        cx,\n    );\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(\n            &theme,\n            \"Scrolled to the middle: content is hidden past both ends, so both \\\n             fade\",\n        ))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\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}\n\npub(super) 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(caption(\n            &theme,\n            \"Overflowing: a scrollbar, and the edges fade\",\n        ))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\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 and\n        // no edge fades. The area is as tall as what it holds rather than a\n        // height guessed at and hoped to be enough: a box a few pixels short\n        // of its content draws the scrollbar and the fade of the card above\n        // while claiming to be the card that does neither.\n        .child(caption(&theme, \"Fits: no scrollbar, no fade\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollArea::new(\"scene.scroll.summary\")\n                        .label(\"Summary\")\n                        .vertical()\n                        .fit_height()\n                        .child(filler(&theme, \"Summary\", 4)),\n                ),\n        )\n        .into_any_element()\n}\n\n/// A region scrolled off both ends, so the fade that says there is more in\n/// either direction is in a captured image, beside one that hides nothing and\n/// therefore fades at neither edge.\npub(super) fn scroll_fade(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    crate::layout::scroll_to(\n        \"scene.fade.output\",\n        gpui::point(px(0.0), px(120.0)),\n        window,\n        cx,\n    );\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(&theme, \"Scrolled: content runs past both ends\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollFade::new(\"scene.fade.scrolled\")\n                        .edges(FadeEdges::vertical())\n                        .fit_height()\n                        .child(\n                            ScrollArea::new(\"scene.fade.output\")\n                                .label(\"Run output\")\n                                .vertical()\n                                .height(200.0)\n                                .child(filler(&theme, \"Output\", 20)),\n                        ),\n                ),\n        )\n        // Nothing is hidden here, so no edge fades and the caller says so.\n        .child(caption(&theme, \"Nothing hidden: no edge fades\"))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollFade::new(\"scene.fade.settled\").fit_height().child(\n                        ScrollArea::new(\"scene.fade.summary\")\n                            .label(\"Summary\")\n                            .vertical()\n                            .height(200.0)\n                            .child(filler(&theme, \"Summary\", 7)),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// A complete client titlebar: product content remains clickable inside the\n/// drag strip, and platform controls keep their native hit-test identities.\npub(super) fn desktop_titlebar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            div()\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    DesktopTitlebar::new(\"scene.desktop-titlebar\", \"Workspace\")\n                        .subtitle(\"main.rs\")\n                        .left(\n                            Button::new(\"scene.desktop-titlebar.workspace\")\n                                .label(\"Workspace menu\")\n                                .ghost()\n                                .small()\n                                .on_click(|_, _| {}),\n                        )\n                        .right(\n                            Badge::new(\"Connected\")\n                                .success()\n                                .id(\"scene.desktop-titlebar.status\"),\n                        )\n                        .on_event(|_, _, _| {}),\n                )\n                .child(div().h(px(112.0)).p_token(&theme, Space::Lg).child(caption(\n                    &theme,\n                    \"Host content is client input; maximize remains native Snap chrome.\",\n                ))),\n        )\n        .into_any_element()\n}\n\n/// The overflow menu of the toolbar scene, kept across frames.\npub(super) struct SceneToolbar {\n    overflow: Entity<Menu>,\n}\n\nimpl Global for SceneToolbar {}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The last two actions moved into the overflow menu.\",\n        ))\n        .into_any_element()\n}\n\n/// A layout nested three deep, with one leaf collapsed to its rail. The tree\n/// is the caller's: every divider reports the ratio it was asked for and moves\n/// nothing here.\npub(super) 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                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    SplitTree::new(\"scene.tree.workspace\")\n                        .layout(layout)\n                        // Each pane holds enough to reach the bottom of the\n                        // room the tree gave it: a pane drawn half empty says\n                        // the divider above it is in the wrong place, which is\n                        // the one thing this scene is not about.\n                        .pane(\"files\", filler(&theme, \"Files\", 13))\n                        .pane(\"editor\", filler(&theme, \"main.rs\", 7))\n                        .pane(\"terminal\", filler(&theme, \"Terminal\", 4))\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}\n\n/// A recursive dock topology: tab stacks are leaves of the same split tree,\n/// an empty stack remains available, and a collapsed nested stack keeps its\n/// rail instead of flattening the caller's arrangement.\npub(super) fn dock_tree(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let topology = DockTopology::vertical(\n        \"root\",\n        0.78,\n        DockTopology::horizontal(\n            \"workspace\",\n            0.28,\n            DockTopology::Stack(DockStack::new(\"source\", [\"files\", \"search\"]).active(\"files\")),\n            DockTopology::horizontal(\n                \"editing\",\n                0.9,\n                DockTopology::stack(\"editor\", [\"main\"]),\n                DockTopology::Stack(DockStack::new(\"outline\", [\"symbols\"]).collapsed(true)),\n            ),\n        ),\n        DockTopology::stack(\"terminal\", std::iter::empty::<&str>()),\n    );\n\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"recursive caller topology; tab groups, empty destinations, rails, and split dividers share existing primitives\",\n        ))\n        .child(\n            div()\n                .h(px(600.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    DockTree::new(\"scene.dock-tree\", topology)\n                        .panels([\n                            DockPanel::new(\"files\", \"Files\")\n                                .icon(Icon::Folder)\n                                .content(filler(&theme, \"Workspace\", 12)),\n                            DockPanel::new(\"search\", \"Search\")\n                                .icon(Icon::Magnifier)\n                                .badge(\"12\"),\n                            DockPanel::new(\"main\", \"main.rs\")\n                                .icon(Icon::Document)\n                                .content(filler(&theme, \"fn main()\", 15)),\n                            DockPanel::new(\"symbols\", \"Outline\").icon(Icon::List),\n                        ])\n                        .on_event(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}\n\n#[derive(Default)]\nstruct SceneFloatingDock {\n    bounds: Option<gpui::Bounds<f32>>,\n    saved: Option<gpui::Bounds<f32>>,\n}\nimpl Global for SceneFloatingDock {}\n\npub(super) fn dock_floating(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{DockTreeEvent, FloatingDock};\n    if !cx.has_global::<SceneFloatingDock>() {\n        cx.set_global(SceneFloatingDock::default());\n    }\n    let theme = cx.theme().clone();\n    let bounds = cx\n        .global::<SceneFloatingDock>()\n        .bounds\n        .unwrap_or(gpui::Bounds::new(\n            gpui::point(0.36, 0.18),\n            gpui::size(0.48, 0.58),\n        ));\n    stack(&theme).w(px(850.0))\n        .child(caption(&theme, \"Fixture: drag the floating header or resize corner; arrow keys adjust either. Restore uses caller-saved completed gestures.\"))\n        .child(Button::new(\"scene.dock-floating.restore\").label(\"Restore saved layout\").on_click(|_, cx| {\n            let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = state.saved; cx.refresh_windows();\n        }))\n        .child(div().h(px(500.0)).child(\n            DockTree::new(\"scene.dock-floating\", DockTopology::stack(\"workspace\", [\"main\"]))\n                .floating([FloatingDock::new(DockStack::new(\"inspector\", [\"details\"]), bounds).expect(\"valid fixture\")]).expect(\"unique fixture identities\")\n                .panels([\n                    DockPanel::new(\"main\", \"Workspace\").content(filler(&theme, \"Caller-owned background\", 15)),\n                    DockPanel::new(\"details\", \"Details\").content(filler(&theme, \"Floating inspector\", 7)),\n                ])\n                .on_event(|event, _, cx| {\n                    match event {\n                        DockTreeEvent::FloatingChanged { bounds, finished, .. } => {\n                            let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = Some(bounds); if finished { state.saved = Some(bounds); }\n                        }\n                        DockTreeEvent::FloatingCancelled { .. } => { let state = cx.global_mut::<SceneFloatingDock>(); state.bounds = state.saved; }\n                        _ => {}\n                    }\n                    cx.refresh_windows();\n                })\n        )).into_any_element()\n}\n\n/// A whole application frame: panels in regions, one region collapsed to a\n/// rail, one panel the host refuses, and a status bar under all of it.\npub(super) 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(940.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                    // The bottom region holds one refused panel, and a refusal\n                    // is a sentence rather than a document: given a third of\n                    // the frame it reads as a region that lost its content\n                    // instead of as a panel the host would not open.\n                    .share(DockRegion::Bottom, 0.17)\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                        // No badge: a panel that cannot list problems cannot\n                        // count them either, and one unavailable reason is the\n                        // whole claim. Gluing \"there is nothing here\" onto it\n                        // would report Empty and Unavailable at once.\n                        DockPanel::new(\"problems\", \"Problems\")\n                            .icon(Icon::Danger)\n                            .unavailable(\n                                \"The language server is not running, so problems cannot be listed.\",\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}\n\npub(super) fn aspect_ratio(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // The ratio is the subject, so the block it drives is drawn the way every\n    // other bounded region in the library is: a surface step, the card radius,\n    // and its label inside it.\n    let filled = |label: &'static str| {\n        div()\n            .size_full()\n            .flex()\n            .items_center()\n            .justify_center()\n            .surface(&theme, Surface::Sunken)\n            .radius(&theme, Radius::Card)\n            .overflow_hidden()\n            .child(\n                crate::foundation::text(&theme, TypeScale::Label, label)\n                    .text_tone(&theme, TextTone::Muted),\n            )\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}\n\n/// A container that arranges itself from its own measured width.\n///\n/// Both arrangements are shown at once, because the point of the component is\n/// that the caller decides them and neither is a fallback for the other. The\n/// unmeasured first frame is a state a still image cannot hold, so it is named\n/// rather than drawn.\npub(super) fn responsive(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let arrangement = move |id: &'static str| {\n        let theme = theme.clone();\n        move |size: ContainerSize, _: &mut Window, cx: &mut App| {\n            let wide = size.width().is_some_and(|measured| measured >= 480.0);\n            // The unmeasured frame is a real state and it is named rather than\n            // guessed, which is the whole argument the component makes.\n            let heading = match size.width() {\n                None => \"Not laid out yet, so neither arrangement is chosen\".to_string(),\n                Some(measured) if wide => format!(\"{measured:.0}px wide, so two columns\"),\n                Some(measured) => format!(\"{measured:.0}px wide, so one column\"),\n            };\n            // A card rather than a tinted rectangle, and with enough in it to\n            // be a column: two panels holding one word each say nothing about\n            // an arrangement, which is what the component is for.\n            let block = |label: &'static str, lines: &'static [&'static str], cx: &mut App| {\n                div()\n                    .flex_1()\n                    .min_w_0()\n                    .column()\n                    .gap_token(&theme, Space::Xs)\n                    .p_token(&theme, Space::Md)\n                    .card_surface(&theme, CardVariant::Elevated)\n                    .child(crate::foundation::text(&theme, TypeScale::Label, label))\n                    .children(lines.iter().map(|line| {\n                        crate::foundation::text(&theme, TypeScale::Caption, *line)\n                            .text_tone(&theme, TextTone::Muted)\n                    }))\n                    .semantic_in(\n                        cx,\n                        NodeSpec::new(format!(\"{id}.{}\", label.to_lowercase()), Role::Group)\n                            .text(label),\n                    )\n            };\n            let panes = div()\n                .gap_token(&theme, Space::Sm)\n                .child(block(\n                    \"Settings\",\n                    &[\"Theme\", \"Density\", \"Reading direction\"],\n                    cx,\n                ))\n                .child(block(\n                    \"Detail\",\n                    &[\"Studio Dark\", \"Comfortable\", \"Left to right\"],\n                    cx,\n                ));\n            div()\n                .column()\n                .gap_token(&theme, Space::Sm)\n                .child(\n                    crate::foundation::text(&theme, TypeScale::Caption, heading.clone())\n                        .text_tone(&theme, TextTone::Faint),\n                )\n                .child(if wide { panes.row() } else { panes.column() })\n                .semantic_in(cx, NodeSpec::new(id, Role::Group).value(heading))\n                .into_any_element()\n        }\n    };\n\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Wide enough for two columns\"))\n        .child(div().w(px(620.0)).child(Responsive::new(\n            \"scene.responsive.wide\",\n            arrangement(\"scene.responsive.wide.body\"),\n        )))\n        .child(caption(&theme, \"The same content, narrow\"))\n        .child(div().w(px(320.0)).child(Responsive::new(\n            \"scene.responsive.narrow\",\n            arrangement(\"scene.responsive.narrow.body\"),\n        )))\n        .into_any_element()\n}\n\n//! Time-based and dimensional media.\n\nuse super::support::*;\n\n/// The cube the model scenes read: a glTF document with its own buffer\n/// inside it, so the reader is exercised on the path a host would take and\n/// nothing is fetched to draw a scene.\npub(super) const CUBE: &[u8] = include_bytes!(\"../../assets/models/cube.gltf\");\n\n/// A measured envelope, in the shape a host that read the samples would hand\n/// over. It is written down rather than sampled, because a scene that drew a\n/// different waveform every run could not be a visual baseline.\npub(super) fn scene_peaks(count: usize) -> Vec<f32> {\n    (0..count)\n        .map(|index| {\n            let phase = index as f32 / count as f32;\n            let swell = (phase * 11.0).sin() * 0.32 + (phase * 3.0).cos() * 0.28;\n            (0.42 + swell).clamp(0.05, 1.0)\n        })\n        .collect()\n}\n\npub(super) fn audio_player(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(392.0))\n        .child(\n            AudioPlayer::new(\"scene.audio.ready\")\n                .control_size(gpui_kit_theme::ControlSize::Touch)\n                .title(\"Release walkthrough\")\n                .subtitle(\"Recorded 12 March\")\n                .transport(\n                    FixtureTransport::ready(240.0)\n                        .position(72.0)\n                        .state(TransportState::Playing)\n                        .volume(0.7)\n                        .buffered([BufferedRange::new(0.0, 156.0)])\n                        .shared(),\n                )\n                .elapsed(\"01:12\")\n                .remaining(\"-02:48\")\n                .peaks(scene_peaks(96))\n                .speeds([1.0, 1.5, 2.0])\n                .step_seconds(10.0)\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.audio.rule.backend\")\n                .label(\"Nothing here can decode it\"),\n        )\n        .child(\n            AudioPlayer::new(\"scene.audio.absent\")\n                .title(\"interview.opus\")\n                .transport(\n                    FixtureTransport::new()\n                        .no_backend(\"There is no Opus decoder on this machine.\")\n                        .shared(),\n                )\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.audio.rule.none\")\n                .label(\"No player connected at all\"),\n        )\n        .child(\n            AudioPlayer::new(\"scene.audio.none\")\n                .title(\"Standup recording\")\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\nfn walkthrough_frame(cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let metric = |label: &'static str, value: &'static str| {\n        div()\n            .flex_1()\n            .min_w_0()\n            .column()\n            .gap_token(&theme, Space::Xs)\n            .p_token(&theme, Space::Sm)\n            .radius(&theme, Radius::Small)\n            .bg(theme.colors.raised)\n            .child(\n                crate::foundation::text(&theme, TypeScale::Caption, label)\n                    .text_tone(&theme, TextTone::Muted),\n            )\n            .child(crate::foundation::text(&theme, TypeScale::Subtitle, value))\n    };\n    div()\n        .size_full()\n        .column()\n        .bg(theme.colors.panel)\n        .child(\n            div()\n                .row()\n                .items_center()\n                .gap_token(&theme, Space::Sm)\n                .px_token(&theme, Space::Md)\n                .py_token(&theme, Space::Sm)\n                .surface(&theme, Surface::Raised)\n                .child(div().size(px(7.0)).rounded_full().bg(theme.colors.success))\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Release command center\",\n                )),\n        )\n        .child(\n            div()\n                .flex_1()\n                .min_h_0()\n                .row()\n                .child(\n                    div()\n                        .w(px(76.0))\n                        .h_full()\n                        .flex_none()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .p_token(&theme, Space::Sm)\n                        .bg(theme.colors.sunken)\n                        .children([16.0, 34.0, 26.0, 42.0].map(|width| {\n                            div()\n                                .w(px(width))\n                                .h(px(theme.borders.thick))\n                                .rounded_full()\n                                .bg(theme.colors.hairline_strong)\n                        })),\n                )\n                .child(\n                    div()\n                        .flex_1()\n                        .min_w_0()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .p_token(&theme, Space::Md)\n                        .child(\n                            div()\n                                .row()\n                                .gap_token(&theme, Space::Sm)\n                                .child(metric(\"Checks\", \"48 / 52\"))\n                                .child(metric(\"Coverage\", \"92%\"))\n                                .child(metric(\"Elapsed\", \"04:18\")),\n                        )\n                        .child(\n                            div()\n                                .column()\n                                .gap_token(&theme, Space::Xs)\n                                .p_token(&theme, Space::Sm)\n                                .radius(&theme, Radius::Small)\n                                .surface(&theme, Surface::Raised)\n                                .child(crate::foundation::text(\n                                    &theme,\n                                    TypeScale::Caption,\n                                    \"Verification progress\",\n                                ))\n                                .child(\n                                    div()\n                                        .h(px(6.0))\n                                        .w_full()\n                                        .rounded_full()\n                                        .overflow_hidden()\n                                        .bg(theme.colors.track)\n                                        .child(\n                                            div()\n                                                .h_full()\n                                                .w(px(218.0))\n                                                .rounded_full()\n                                                .bg(theme.colors.accent),\n                                        ),\n                                ),\n                        ),\n                ),\n        )\n        .into_any_element()\n}\n\nfn walkthrough_poster(cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .size_full()\n        .flex()\n        .flex_col()\n        .items_center()\n        .justify_center()\n        .gap_token(&theme, Space::Sm)\n        .bg(theme.colors.sunken)\n        .child(\n            div()\n                .size(px(46.0))\n                .flex()\n                .items_center()\n                .justify_center()\n                .rounded_full()\n                .frame(&theme, Surface::Raised, Elevation::Raised)\n                .child(\n                    gpui_kit_assets::icon(Icon::Play)\n                        .size(px(theme.control.md.icon_size))\n                        .text_color(theme.colors.accent_strong),\n                ),\n        )\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Subtitle,\n            \"Release walkthrough\",\n        ))\n        .child(\n            crate::foundation::text(&theme, TypeScale::Caption, \"4 minutes · 8 chapters\")\n                .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}\n\npub(super) fn video_player(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(392.0))\n        .child(\n            VideoPlayer::new(\"scene.video.frame\")\n                .control_size(gpui_kit_theme::ControlSize::Touch)\n                .presentation(\n                    crate::content::transport::MediaPresentation::Inline,\n                    \"Present video\",\n                )\n                .presentation_refused(\"Fixture host: native video presentation is unavailable.\")\n                .on_presentation_request(|_, _, _| {})\n                .title(\"Screen capture\")\n                .transport(\n                    FixtureTransport::ready(96.0)\n                        .position(24.0)\n                        .state(TransportState::Playing)\n                        .volume(0.6)\n                        .shared(),\n                )\n                .frame(|_, cx| Some(walkthrough_frame(cx)))\n                .elapsed(\"00:24\")\n                .remaining(\"-01:12\")\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.video.rule.poster\")\n                .label(\"Poster while the first frame is still unavailable\"),\n        )\n        .child(\n            VideoPlayer::new(\"scene.video.poster\")\n                .title(\"Release walkthrough\")\n                .transport(FixtureTransport::ready(240.0).shared())\n                .poster(|_, cx| Some(walkthrough_poster(cx)))\n                .elapsed(\"00:00\")\n                .remaining(\"-04:00\")\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) fn model_viewer(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let read = || ModelState::read(CUBE, ModelBounds::default());\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            div()\n                .row()\n                .items_start()\n                .gap(px(theme.spacing.lg))\n                .child(\n                    div().flex_1().min_w_0().child(\n                        ModelViewer::new(\"scene.model.flat\")\n                            .title(\"cube.gltf\")\n                            .state(read())\n                            .orbit(0.62, 0.42)\n                            .height(240.0)\n                            .on_event(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    div().flex_1().min_w_0().child(\n                        ModelViewer::new(\"scene.model.wireframe\")\n                            .title(\"cube.gltf\")\n                            .state(read())\n                            .shading(ModelShading::Wireframe)\n                            .orbit(0.62, 0.42)\n                            .height(240.0)\n                            .on_event(|_, _, _| {}),\n                    ),\n                ),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.model.rule.refused\")\n                .label(\"A document past a bound\"),\n        )\n        .child(\n            ModelViewer::new(\"scene.model.refused\")\n                .title(\"city-block.glb\")\n                .rejected(ModelError::TooLarge {\n                    limit: ModelLimit::Triangles,\n                    found: 412_930,\n                    allowed: 24_576,\n                })\n                .height(160.0)\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) fn audio_waveform(_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            \"already-normalized peaks; a missing playhead draws no played split\",\n        ))\n        .child(\n            AudioWaveform::new(\"scene.waveform.ready\")\n                .peaks(scene_peaks(48))\n                .playhead(0.38),\n        )\n        .child(AudioWaveform::new(\"scene.waveform.loading\").state(AudioWaveformState::Loading))\n        .child(AudioWaveform::new(\"scene.waveform.empty\").state(AudioWaveformState::Empty))\n        .child(AudioWaveform::new(\"scene.waveform.unavailable\").state(\n            AudioWaveformState::Unavailable(\"The sampler host refused the request.\".into()),\n        ))\n        .child(\n            AudioWaveform::new(\"scene.waveform.error\").state(AudioWaveformState::Error(\n                \"The sampler request failed.\".into(),\n            )),\n        )\n        .into_any_element()\n}\n\n//! One canonical rendering per component, grouped the way the components are.\n//!\n//! A scene is the single description of a component's states that both the\n//! gallery and the audit tests consume, so a component cannot be reviewed\n//! visually in one arrangement and tested in another.\n//!\n//! Almost every scene is an *exhibit*: it is about one component, it lives in\n//! the file named after that component's family, and it is where a reader is\n//! sent to review it. `xtask api check` fails when a public component has no\n//! exhibit, so a component cannot be added and left unseen.\n//!\n//! The rest are *compositions*, and there are three of them. A composition is\n//! built the way a product would build one, because components interact in\n//! ways none of them shows alone. It is nobody's coverage, and [`Shows`]\n//! records the difference so the catalog does not claim a component was\n//! reviewed when it was only recognised inside a shell.\n//!\n//! What is deliberately not here is a scene per screenshot. The files below\n//! are the component families, not a taxonomy invented for this module, so a\n//! component and the rendering that reviews it move together.\n\nmod support;\n\nmod agent;\nmod canvas;\nmod cartesian;\nmod compositions;\nmod content;\nmod controls;\nmod data;\n#[cfg(feature = \"fixtures\")]\nmod datetime;\nmod display;\nmod effects;\nmod flip_configuration;\nmod game;\nmod geography;\nmod heatmap;\nmod interaction;\nmod layout;\nmod media;\nmod motion;\nmod navigation;\nmod overlay;\nmod plot;\nmod specialized;\nmod structured;\n\nuse gpui::{AnyElement, App, Window};\n\nuse crate::foundation::direction::LayoutDirection;\n\nuse agent::{\n    agent_avatar, agent_plan, agent_roster, agent_run_canvas, agent_run_issues, approval,\n    artifact_preview, clarification, cost_meter, feedback_rating, offering_catalog,\n    permission_matrix, persona, prompt_builder, server_list, thinking, tool_call,\n};\nuse canvas::{\n    canvas_regions, canvas_tools, node_graph, node_graph_layout, node_graph_motion,\n    node_graph_routing,\n};\nuse cartesian::{\n    cartesian, cartesian_dense, cartesian_layout, cartesian_lifecycle, cartesian_linked,\n    cartesian_states,\n};\nuse compositions::{motion_flip, motion_state, reading_direction};\n#[cfg(all(feature = \"terminal\", not(target_family = \"wasm\")))]\nuse content::terminal;\nuse content::{\n    agent_document, browser_panel, code_view, conversation, conversation_growing, diff_view,\n    image_viewer, log_stream, markdown, outline, transport,\n};\nuse controls::{\n    actions, auth_sign_in, auth_verification, button, cascader, choice, color_picker, copy_button,\n    dropzone, editor, editor_folding, editor_multicursor, editor_options, editor_services,\n    filter_bar, find_replace, form, inline_edit, input, keybinding, keymap_editor, mention_input,\n    multi_select, rich_text_editor, search_field, search_input, settings, settings_page, textarea,\n    toggle, touch_inputs, touch_pickers, touch_pickers_open, transfer_list, translation_packs,\n    upload_list,\n};\nuse data::{\n    data_grid, data_grid_editing, deferred_drop, diagnostics_list, drag_list, drag_tree, flow,\n    image_list, kanban, list, masonry, table, tree, tree_grid,\n};\n#[cfg(feature = \"fixtures\")]\nuse datetime::{calendar, date_range, date_time, touch_dates};\nuse display::{\n    animated_number, attachment, avatar, badge, banner, bubble, card, chart, detail, divider,\n    empty_state, failure_panel, heatmap, icon, loading, metric_card, outcome_panel,\n    performance_hud, plot, progress_bar, progress_circle, rating, sparkline, stage_progress,\n    state_ladder, status, tag, trace, trace_time,\n};\nuse effects::{cinematic_effects, visual_effects};\nuse flip_configuration::flip_configuration;\nuse game::game_ui;\nuse geography::{geography, geography_scale};\nuse heatmap::{continuous_heatmap, continuous_heatmap_transition, heatmap_reordering};\nuse interaction::{pull_to_refresh, swipe_actions};\nuse layout::{\n    aspect_ratio, container, desktop_titlebar, dock_floating, dock_tree, grid, ide_shell,\n    mobile_page, responsive, scroll_area, scroll_edge_effect, scroll_fade, scroll_shadow,\n    split_pane, split_tree, toolbar,\n};\nuse media::{audio_player, audio_waveform, model_viewer, video_player};\nuse motion::{micro, motion_primitives};\nuse navigation::{\n    accordion, adaptive_navigation, anchor_list, bottom_navigation, breadcrumb, carousel,\n    collapsible, document_tabs, nav_back_preview, nav_stack, pagination, sidebar, sidebar_overflow,\n    tabs, undo_history, wizard,\n};\nuse overlay::{\n    action_sheet, bottom_sheet, command_palette, context_menu, dialog, drawer, frost, glass,\n    glass_materials, glass_optics, hover_card, kbd, media_caption, menu, menubar,\n    notification_center, overlay, popover, toast, tooltip,\n};\nuse plot::{raw_candlestick, sankey_layout, sankey_motion};\nuse specialized::{specialized, specialized_distribution, specialized_exploration};\nuse structured::{json_view, schema_form};\n\n/// What a rendering exists to show.\n///\n/// The distinction is the difference between reviewing a component and\n/// recognising it. A component that has only ever been seen inside a shell has\n/// been recognised; nobody has looked at its states, and the catalog should\n/// not claim otherwise, which is why only [`Shows::Subjects`] counts as\n/// coverage.\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum Shows {\n    /// The components this rendering is *about*. It arranges them so their\n    /// states can be compared, and it is where a reader is sent to review\n    /// them. Everything else it draws is scaffolding.\n    Subjects(&'static [&'static str]),\n    /// An arrangement the way a product would build one, kept because\n    /// components interact in ways none of them shows alone. It is nobody's\n    /// coverage: every component it draws is reviewed somewhere else.\n    Composition(&'static [&'static str]),\n}\n\nimpl Shows {\n    /// Every component named, whichever kind this is.\n    pub fn components(&self) -> &'static [&'static str] {\n        match self {\n            Self::Subjects(names) | Self::Composition(names) => names,\n        }\n    }\n\n    /// The components this rendering is the review of, which is empty for a\n    /// composition.\n    pub fn subjects(&self) -> &'static [&'static str] {\n        match self {\n            Self::Subjects(names) => names,\n            Self::Composition(_) => &[],\n        }\n    }\n}\n\n/// One canonical rendering, addressed by name.\npub struct Scene {\n    pub name: &'static str,\n    pub build: fn(&mut Window, &mut App) -> AnyElement,\n    /// What this rendering is for, declared rather than inferred.\n    ///\n    /// It used to be read back out of the source by following every helper a\n    /// scene called, which answered a different question — *what types does\n    /// this code path touch* — and answered it as an upper bound. Three\n    /// unrelated scenes that shared one fixture helper reported the same seven\n    /// components, so \"which scene shows me\" was a claim no reader could rely\n    /// on. Declaring it makes it exact, and `xtask api check` holds the\n    /// declaration to what the source can actually reach.\n    pub shows: Shows,\n}\n\nimpl std::fmt::Debug for Scene {\n    fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        formatter\n            .debug_struct(\"Scene\")\n            .field(\"name\", &self.name)\n            .field(\"shows\", &self.shows)\n            .finish()\n    }\n}\n\n/// Every scene, in a stable order.\npub fn catalog() -> Vec<Scene> {\n    #[allow(unused_mut)]\n    let mut scenes = vec![\n        Scene {\n            name: \"bottom-sheet\",\n            build: bottom_sheet,\n            shows: Shows::Subjects(&[\"BottomSheet\"]),\n        },\n        Scene {\n            name: \"action-sheet\",\n            build: action_sheet,\n            shows: Shows::Subjects(&[\"ActionSheet\"]),\n        },\n        Scene {\n            name: \"pull-to-refresh\",\n            build: pull_to_refresh,\n            shows: Shows::Subjects(&[\"PullToRefresh\"]),\n        },\n        Scene {\n            name: \"swipe-actions\",\n            build: swipe_actions,\n            shows: Shows::Subjects(&[\"SwipeActions\"]),\n        },\n        Scene {\n            name: \"button\",\n            build: button,\n            shows: Shows::Subjects(&[\"Button\"]),\n        },\n        Scene {\n            name: \"badge\",\n            build: badge,\n            shows: Shows::Subjects(&[\"Badge\"]),\n        },\n        Scene {\n            name: \"card\",\n            build: card,\n            shows: Shows::Subjects(&[\"Card\", \"ListRow\"]),\n        },\n        Scene {\n            name: \"rating\",\n            build: rating,\n            shows: Shows::Subjects(&[\"Rating\"]),\n        },\n        Scene {\n            name: \"bubble\",\n            build: bubble,\n            shows: Shows::Subjects(&[\"Bubble\"]),\n        },\n        Scene {\n            name: \"status\",\n            build: status,\n            shows: Shows::Subjects(&[\"Callout\", \"StatusDot\", \"StatusLine\"]),\n        },\n        Scene {\n            name: \"loading\",\n            build: loading,\n            shows: Shows::Subjects(&[\n                \"BarLoader\",\n                \"LoadMore\",\n                \"PulseLoader\",\n                \"RefreshVeil\",\n                \"Skeleton\",\n                \"Spinner\",\n            ]),\n        },\n        Scene {\n            name: \"visual-effects\",\n            build: visual_effects,\n            shows: Shows::Subjects(&[\"EffectParticles\"]),\n        },\n        Scene {\n            name: \"cinematic-effects\",\n            build: cinematic_effects,\n            shows: Shows::Subjects(&[\"CinematicEffect\"]),\n        },\n        Scene {\n            name: \"choice\",\n            build: choice,\n            shows: Shows::Subjects(&[\"Checkbox\", \"Radio\", \"Slider\", \"Switch\"]),\n        },\n        Scene {\n            name: \"multi-select\",\n            build: multi_select,\n            shows: Shows::Subjects(&[\"MultiSelect\"]),\n        },\n        Scene {\n            name: \"transfer-list\",\n            build: transfer_list,\n            shows: Shows::Subjects(&[\"TransferList\"]),\n        },\n        Scene {\n            name: \"input\",\n            build: input,\n            shows: Shows::Subjects(&[\"Select\", \"TextInput\"]),\n        },\n        Scene {\n            name: \"touch-inputs\",\n            build: touch_inputs,\n            shows: Shows::Subjects(&[\"TextInput\", \"TextArea\", \"PasswordInput\", \"OneTimeCodeInput\"]),\n        },\n        Scene {\n            name: \"touch-pickers\",\n            build: touch_pickers,\n            shows: Shows::Subjects(&[\"Select\", \"Combobox\", \"MultiSelect\"]),\n        },\n        Scene {\n            name: \"touch-pickers-open\",\n            build: touch_pickers_open,\n            shows: Shows::Subjects(&[\"Combobox\"]),\n        },\n        Scene {\n            name: \"textarea\",\n            build: textarea,\n            shows: Shows::Subjects(&[\"TextArea\"]),\n        },\n        Scene {\n            name: \"editor\",\n            build: editor,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-multicursor\",\n            build: editor_multicursor,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-services\",\n            build: editor_services,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-folding\",\n            build: editor_folding,\n            shows: Shows::Subjects(&[\"Editor\"]),\n        },\n        Scene {\n            name: \"editor-options\",\n            build: editor_options,\n            shows: Shows::Subjects(&[\"Editor\", \"TextArea\", \"RichTextEditor\"]),\n        },\n        Scene {\n            name: \"mention-input\",\n            build: mention_input,\n            shows: Shows::Subjects(&[\"MentionInput\"]),\n        },\n        Scene {\n            name: \"rich-text-editor\",\n            build: rich_text_editor,\n            shows: Shows::Subjects(&[\"RichTextEditor\"]),\n        },\n        Scene {\n            name: \"form\",\n            build: form,\n            shows: Shows::Subjects(&[\n                \"Combobox\",\n                \"FormField\",\n                \"NumberInput\",\n                \"SegmentedControl\",\n                \"TagInput\",\n            ]),\n        },\n        Scene {\n            name: \"auth-sign-in\",\n            build: auth_sign_in,\n            shows: Shows::Subjects(&[\"PasswordInput\"]),\n        },\n        Scene {\n            name: \"auth-verification\",\n            build: auth_verification,\n            shows: Shows::Subjects(&[\"OneTimeCodeInput\"]),\n        },\n        Scene {\n            name: \"actions\",\n            build: actions,\n            shows: Shows::Subjects(&[\"ButtonGroup\", \"IconButton\", \"SplitButton\"]),\n        },\n        Scene {\n            name: \"progress-bar\",\n            build: progress_bar,\n            shows: Shows::Subjects(&[\"ProgressBar\"]),\n        },\n        Scene {\n            name: \"state-ladder\",\n            build: state_ladder,\n            shows: Shows::Subjects(&[\"StateView\", \"StaleMark\"]),\n        },\n        Scene {\n            name: \"banner\",\n            build: banner,\n            shows: Shows::Subjects(&[\"Banner\"]),\n        },\n        Scene {\n            name: \"outcome-panel\",\n            build: outcome_panel,\n            shows: Shows::Subjects(&[\"OutcomePanel\"]),\n        },\n        Scene {\n            name: \"stage-progress\",\n            build: stage_progress,\n            shows: Shows::Subjects(&[\"StageProgress\"]),\n        },\n        Scene {\n            name: \"divider\",\n            build: divider,\n            shows: Shows::Subjects(&[\"Divider\"]),\n        },\n        Scene {\n            name: \"tag\",\n            build: tag,\n            shows: Shows::Subjects(&[\"Tag\"]),\n        },\n        Scene {\n            name: \"avatar\",\n            build: avatar,\n            shows: Shows::Subjects(&[\"Avatar\", \"AvatarGroup\"]),\n        },\n        Scene {\n            name: \"empty-state\",\n            build: empty_state,\n            shows: Shows::Subjects(&[\"EmptyState\"]),\n        },\n        Scene {\n            name: \"kbd\",\n            build: kbd,\n            shows: Shows::Subjects(&[\"Kbd\"]),\n        },\n        Scene {\n            name: \"overlay\",\n            build: overlay,\n            shows: Shows::Subjects(&[\"Overlay\"]),\n        },\n        Scene {\n            name: \"dialog\",\n            build: dialog,\n            shows: Shows::Subjects(&[\"Dialog\"]),\n        },\n        Scene {\n            name: \"tooltip\",\n            build: tooltip,\n            shows: Shows::Subjects(&[\"Tooltip\"]),\n        },\n        Scene {\n            name: \"menu\",\n            build: menu,\n            shows: Shows::Subjects(&[\"Menu\"]),\n        },\n        Scene {\n            name: \"context-menu\",\n            build: context_menu,\n            shows: Shows::Subjects(&[\"ContextMenu\"]),\n        },\n        Scene {\n            name: \"popover\",\n            build: popover,\n            shows: Shows::Subjects(&[\"Popover\"]),\n        },\n        Scene {\n            name: \"command-palette\",\n            build: command_palette,\n            shows: Shows::Subjects(&[\"CommandPalette\"]),\n        },\n        Scene {\n            name: \"toast\",\n            build: toast,\n            shows: Shows::Subjects(&[\"ToastLayer\"]),\n        },\n        Scene {\n            name: \"tabs\",\n            build: tabs,\n            shows: Shows::Subjects(&[\"Tabs\"]),\n        },\n        Scene {\n            name: \"carousel\",\n            build: carousel,\n            shows: Shows::Subjects(&[\"Carousel\"]),\n        },\n        Scene {\n            name: \"nav-stack\",\n            build: nav_stack,\n            shows: Shows::Subjects(&[\"NavStack\"]),\n        },\n        Scene {\n            name: \"accordion\",\n            build: accordion,\n            shows: Shows::Subjects(&[\"Accordion\"]),\n        },\n        Scene {\n            name: \"breadcrumb\",\n            build: breadcrumb,\n            shows: Shows::Subjects(&[\"Breadcrumb\"]),\n        },\n        Scene {\n            name: \"list\",\n            build: list,\n            shows: Shows::Subjects(&[\"List\"]),\n        },\n        Scene {\n            name: \"image-list\",\n            build: image_list,\n            shows: Shows::Subjects(&[\"ImageList\"]),\n        },\n        Scene {\n            name: \"masonry\",\n            build: masonry,\n            shows: Shows::Subjects(&[\"Masonry\"]),\n        },\n        Scene {\n            name: \"flow\",\n            build: flow,\n            shows: Shows::Subjects(&[\"Flow\"]),\n        },\n        Scene {\n            name: \"table\",\n            build: table,\n            shows: Shows::Subjects(&[\"Table\"]),\n        },\n        Scene {\n            name: \"data-grid\",\n            build: data_grid,\n            shows: Shows::Subjects(&[\"BulkBar\", \"DataGrid\"]),\n        },\n        Scene {\n            name: \"data-grid-editing\",\n            build: data_grid_editing,\n            shows: Shows::Subjects(&[\"DataGrid\"]),\n        },\n        Scene {\n            name: \"tree-grid\",\n            build: tree_grid,\n            shows: Shows::Subjects(&[\"TreeGrid\"]),\n        },\n        Scene {\n            name: \"tree\",\n            build: tree,\n            shows: Shows::Subjects(&[\"Tree\"]),\n        },\n        Scene {\n            name: \"split-pane\",\n            build: split_pane,\n            shows: Shows::Subjects(&[\"SplitPane\"]),\n        },\n        Scene {\n            name: \"grid\",\n            build: grid,\n            shows: Shows::Subjects(&[\"Grid\"]),\n        },\n        Scene {\n            name: \"container\",\n            build: container,\n            shows: Shows::Subjects(&[\"Container\"]),\n        },\n        Scene {\n            name: \"scroll-area\",\n            build: scroll_area,\n            shows: Shows::Subjects(&[\"ScrollArea\"]),\n        },\n        Scene {\n            name: \"scroll-shadow\",\n            build: scroll_shadow,\n            shows: Shows::Subjects(&[\"ScrollArea\"]),\n        },\n        Scene {\n            name: \"scroll-fade\",\n            build: scroll_fade,\n            shows: Shows::Subjects(&[\"ScrollFade\"]),\n        },\n        Scene {\n            name: \"scroll-edge-effect\",\n            build: scroll_edge_effect,\n            shows: Shows::Subjects(&[\"ScrollEdgeEffect\"]),\n        },\n        Scene {\n            name: \"frost\",\n            build: frost,\n            shows: Shows::Subjects(&[\"Frost\"]),\n        },\n        Scene {\n            name: \"glass\",\n            build: glass,\n            shows: Shows::Subjects(&[\"Glass\"]),\n        },\n        Scene {\n            name: \"glass-optics\",\n            build: glass_optics,\n            shows: Shows::Subjects(&[\"Glass\", \"GlassGroup\"]),\n        },\n        Scene {\n            name: \"glass-materials\",\n            build: glass_materials,\n            shows: Shows::Subjects(&[\"Glass\", \"GlassGroup\"]),\n        },\n        Scene {\n            name: \"media-caption\",\n            build: media_caption,\n            shows: Shows::Composition(&[\"Button\"]),\n        },\n        Scene {\n            name: \"toolbar\",\n            build: toolbar,\n            shows: Shows::Subjects(&[\"Toolbar\"]),\n        },\n        Scene {\n            name: \"desktop-titlebar\",\n            build: desktop_titlebar,\n            shows: Shows::Subjects(&[\"DesktopTitlebar\"]),\n        },\n        Scene {\n            name: \"mobile-page\",\n            build: mobile_page,\n            shows: Shows::Subjects(&[\"AppBar\", \"PageLayout\"]),\n        },\n        Scene {\n            name: \"bottom-navigation\",\n            build: bottom_navigation,\n            shows: Shows::Subjects(&[\"BottomNavigation\"]),\n        },\n        Scene {\n            name: \"nav-back-preview\",\n            build: nav_back_preview,\n            shows: Shows::Subjects(&[\"NavStack\"]),\n        },\n        Scene {\n            name: \"adaptive-navigation\",\n            build: adaptive_navigation,\n            shows: Shows::Composition(&[\n                \"Responsive\",\n                \"Sidebar\",\n                \"BottomNavigation\",\n                \"PageLayout\",\n                \"AppBar\",\n            ]),\n        },\n        Scene {\n            name: \"sidebar\",\n            build: sidebar,\n            shows: Shows::Subjects(&[\"Sidebar\"]),\n        },\n        Scene {\n            name: \"sidebar-overflow\",\n            build: sidebar_overflow,\n            shows: Shows::Subjects(&[\"Sidebar\"]),\n        },\n        Scene {\n            name: \"pagination\",\n            build: pagination,\n            shows: Shows::Subjects(&[\"Pagination\"]),\n        },\n        Scene {\n            name: \"drawer\",\n            build: drawer,\n            shows: Shows::Subjects(&[\"Drawer\"]),\n        },\n        Scene {\n            name: \"motion-flip\",\n            build: motion_flip,\n            shows: Shows::Composition(&[\"Button\", \"Card\", \"ListRow\"]),\n        },\n        Scene {\n            name: \"flip-configuration\",\n            build: flip_configuration,\n            shows: Shows::Composition(&[\"Button\"]),\n        },\n        Scene {\n            name: \"motion-state\",\n            build: motion_state,\n            shows: Shows::Composition(&[\n                \"Accordion\",\n                \"Button\",\n                \"Checkbox\",\n                \"ProgressBar\",\n                \"Radio\",\n                \"SegmentedControl\",\n                \"Switch\",\n                \"Tabs\",\n            ]),\n        },\n        Scene {\n            name: \"motion-primitives\",\n            build: motion_primitives,\n            shows: Shows::Composition(&[\"Button\", \"Tabs\"]),\n        },\n        Scene {\n            name: \"animated-number\",\n            build: animated_number,\n            shows: Shows::Subjects(&[\"AnimatedNumber\"]),\n        },\n        Scene {\n            name: \"drag-list\",\n            build: drag_list,\n            shows: Shows::Subjects(&[\"List\"]),\n        },\n        Scene {\n            name: \"deferred-drop\",\n            build: deferred_drop,\n            shows: Shows::Composition(&[\"List\", \"Tabs\", \"Tree\", \"Button\"]),\n        },\n        Scene {\n            name: \"drag-tree\",\n            build: drag_tree,\n            shows: Shows::Subjects(&[\"Tree\"]),\n        },\n        Scene {\n            name: \"dropzone\",\n            build: dropzone,\n            shows: Shows::Subjects(&[\"Dropzone\"]),\n        },\n        Scene {\n            name: \"wizard\",\n            build: wizard,\n            shows: Shows::Subjects(&[\"Wizard\"]),\n        },\n        Scene {\n            name: \"undo-history\",\n            build: undo_history,\n            shows: Shows::Subjects(&[\"UndoHistory\"]),\n        },\n        Scene {\n            name: \"settings\",\n            build: settings,\n            shows: Shows::Subjects(&[\"SettingsList\", \"SettingsRow\", \"SettingsSection\"]),\n        },\n        Scene {\n            name: \"settings-page\",\n            build: settings_page,\n            shows: Shows::Subjects(&[\"SettingsList\"]),\n        },\n        Scene {\n            name: \"translation-packs\",\n            build: translation_packs,\n            shows: Shows::Composition(&[\"Card\", \"Button\"]),\n        },\n        Scene {\n            name: \"detail\",\n            build: detail,\n            shows: Shows::Subjects(&[\"DescriptionList\", \"Timeline\"]),\n        },\n        Scene {\n            name: \"filter-bar\",\n            build: filter_bar,\n            shows: Shows::Subjects(&[\"FilterBar\"]),\n        },\n        Scene {\n            name: \"inline-edit\",\n            build: inline_edit,\n            shows: Shows::Subjects(&[\"InlineEdit\"]),\n        },\n        Scene {\n            name: \"progress-circle\",\n            build: progress_circle,\n            shows: Shows::Subjects(&[\"ProgressCircle\"]),\n        },\n        Scene {\n            name: \"split-tree\",\n            build: split_tree,\n            shows: Shows::Subjects(&[\"SplitTree\"]),\n        },\n        Scene {\n            name: \"dock-tree\",\n            build: dock_tree,\n            shows: Shows::Subjects(&[\"DockTree\"]),\n        },\n        Scene {\n            name: \"dock-floating\",\n            build: dock_floating,\n            shows: Shows::Subjects(&[\"DockTree\"]),\n        },\n        Scene {\n            name: \"ide-shell\",\n            build: ide_shell,\n            shows: Shows::Subjects(&[\"Dock\", \"StatusBar\"]),\n        },\n        Scene {\n            name: \"keybinding\",\n            build: keybinding,\n            shows: Shows::Subjects(&[\"KeybindingRecorder\"]),\n        },\n        Scene {\n            name: \"keymap-editor\",\n            build: keymap_editor,\n            shows: Shows::Subjects(&[\"KeymapEditor\"]),\n        },\n        Scene {\n            name: \"markdown\",\n            build: markdown,\n            shows: Shows::Subjects(&[\"Markdown\"]),\n        },\n        Scene {\n            name: \"agent-document\",\n            build: agent_document,\n            shows: Shows::Subjects(&[\"AgentDocument\"]),\n        },\n        Scene {\n            name: \"agent-roster\",\n            build: agent_roster,\n            shows: Shows::Subjects(&[\"AgentCard\", \"AgentGroup\", \"AgentRoster\", \"SubagentTree\"]),\n        },\n        Scene {\n            name: \"persona\",\n            build: persona,\n            shows: Shows::Subjects(&[\"PersonaDialogue\", \"PersonaPortrait\", \"VoiceReactive\"]),\n        },\n        Scene {\n            name: \"game-ui\",\n            build: game_ui,\n            shows: Shows::Subjects(&[\n                \"AbilityBar\",\n                \"ObjectiveTracker\",\n                \"PartyRoster\",\n                \"RewardReveal\",\n            ]),\n        },\n        Scene {\n            name: \"agent-run-canvas\",\n            build: agent_run_canvas,\n            shows: Shows::Subjects(&[\"AgentRunCanvas\"]),\n        },\n        Scene {\n            name: \"agent-run-issues\",\n            build: agent_run_issues,\n            shows: Shows::Subjects(&[\"AgentRunIssues\"]),\n        },\n        Scene {\n            name: \"agent-avatar\",\n            build: agent_avatar,\n            shows: Shows::Subjects(&[\"AgentActivityLine\", \"AgentAvatar\"]),\n        },\n        Scene {\n            name: \"conversation\",\n            build: conversation,\n            shows: Shows::Subjects(&[\"MessageList\"]),\n        },\n        Scene {\n            name: \"outline\",\n            build: outline,\n            shows: Shows::Subjects(&[\"Outline\"]),\n        },\n        Scene {\n            name: \"conversation-growing\",\n            build: conversation_growing,\n            shows: Shows::Subjects(&[\"MessageList\"]),\n        },\n        Scene {\n            name: \"image-viewer\",\n            build: image_viewer,\n            shows: Shows::Subjects(&[\"ImageViewer\"]),\n        },\n        Scene {\n            name: \"transport\",\n            build: transport,\n            shows: Shows::Subjects(&[\"TransportBar\"]),\n        },\n        Scene {\n            name: \"audio-player\",\n            build: audio_player,\n            shows: Shows::Subjects(&[\"AudioPlayer\"]),\n        },\n        Scene {\n            name: \"audio-waveform\",\n            build: audio_waveform,\n            shows: Shows::Subjects(&[\"AudioWaveform\"]),\n        },\n        Scene {\n            name: \"video-player\",\n            build: video_player,\n            shows: Shows::Subjects(&[\"VideoPlayer\"]),\n        },\n        Scene {\n            name: \"model-viewer\",\n            build: model_viewer,\n            shows: Shows::Subjects(&[\"ModelViewer\"]),\n        },\n        Scene {\n            name: \"approval\",\n            build: approval,\n            shows: Shows::Subjects(&[\"ApprovalPrompt\"]),\n        },\n        Scene {\n            name: \"clarification\",\n            build: clarification,\n            shows: Shows::Subjects(&[\"ClarificationPanel\"]),\n        },\n        Scene {\n            name: \"permission-matrix\",\n            build: permission_matrix,\n            shows: Shows::Subjects(&[\"PermissionMatrix\"]),\n        },\n        Scene {\n            name: \"cost-meter\",\n            build: cost_meter,\n            shows: Shows::Subjects(&[\"ContextGauge\", \"CostMeter\"]),\n        },\n        Scene {\n            name: \"prompt-builder\",\n            build: prompt_builder,\n            shows: Shows::Subjects(&[\"PromptBuilder\"]),\n        },\n        Scene {\n            name: \"feedback-rating\",\n            build: feedback_rating,\n            shows: Shows::Subjects(&[\"FeedbackRating\"]),\n        },\n        Scene {\n            name: \"artifact-preview\",\n            build: artifact_preview,\n            shows: Shows::Subjects(&[\"ArtifactPreview\"]),\n        },\n        Scene {\n            name: \"tool-call\",\n            build: tool_call,\n            shows: Shows::Subjects(&[\"ToolCall\"]),\n        },\n        Scene {\n            name: \"agent-plan\",\n            build: agent_plan,\n            shows: Shows::Subjects(&[\"AgentPlan\"]),\n        },\n        Scene {\n            name: \"node-graph\",\n            build: node_graph,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"node-graph-layout\",\n            build: node_graph_layout,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"node-graph-routing\",\n            build: node_graph_routing,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"node-graph-motion\",\n            build: node_graph_motion,\n            shows: Shows::Subjects(&[\"GraphNode\", \"NodeGraph\"]),\n        },\n        Scene {\n            name: \"canvas-tools\",\n            build: canvas_tools,\n            shows: Shows::Subjects(&[\"CanvasToolbar\", \"Minimap\", \"NodeGroup\"]),\n        },\n        Scene {\n            name: \"canvas-regions\",\n            build: canvas_regions,\n            shows: Shows::Subjects(&[\"NodeGraph\"]),\n        },\n        Scene {\n            name: \"browser-panel\",\n            build: browser_panel,\n            shows: Shows::Subjects(&[\"BrowserPanel\"]),\n        },\n        Scene {\n            name: \"thinking\",\n            build: thinking,\n            shows: Shows::Subjects(&[\"ThinkingBlock\"]),\n        },\n        Scene {\n            name: \"json-view\",\n            build: json_view,\n            shows: Shows::Subjects(&[\"JsonView\"]),\n        },\n        Scene {\n            name: \"schema-form\",\n            build: schema_form,\n            shows: Shows::Subjects(&[\"SchemaForm\"]),\n        },\n        Scene {\n            name: \"server-list\",\n            build: server_list,\n            shows: Shows::Subjects(&[\"ServerList\"]),\n        },\n        Scene {\n            name: \"offering-catalog\",\n            build: offering_catalog,\n            shows: Shows::Subjects(&[\"OfferingCatalog\"]),\n        },\n        Scene {\n            name: \"reading-direction\",\n            build: reading_direction,\n            shows: Shows::Composition(&[\n                \"Accordion\",\n                \"Breadcrumb\",\n                \"Button\",\n                \"Card\",\n                \"Icon\",\n                \"JsonView\",\n                \"Tabs\",\n                \"Tree\",\n            ]),\n        },\n        Scene {\n            name: \"toggle\",\n            build: toggle,\n            shows: Shows::Subjects(&[\"Toggle\", \"ToggleGroup\"]),\n        },\n        Scene {\n            name: \"collapsible\",\n            build: collapsible,\n            shows: Shows::Subjects(&[\"Collapsible\"]),\n        },\n        Scene {\n            name: \"hover-card\",\n            build: hover_card,\n            shows: Shows::Subjects(&[\"HoverCard\"]),\n        },\n        Scene {\n            name: \"menubar\",\n            build: menubar,\n            shows: Shows::Subjects(&[\"Menubar\"]),\n        },\n        Scene {\n            name: \"copy-button\",\n            build: copy_button,\n            shows: Shows::Subjects(&[\"CopyButton\"]),\n        },\n        Scene {\n            name: \"aspect-ratio\",\n            build: aspect_ratio,\n            shows: Shows::Subjects(&[\"AspectRatio\"]),\n        },\n        Scene {\n            name: \"responsive\",\n            build: responsive,\n            shows: Shows::Subjects(&[\"Responsive\"]),\n        },\n        Scene {\n            name: \"icon\",\n            build: icon,\n            shows: Shows::Subjects(&[\"Icon\"]),\n        },\n        Scene {\n            name: \"document-tabs\",\n            build: document_tabs,\n            shows: Shows::Subjects(&[\"Tabs\"]),\n        },\n        Scene {\n            name: \"search-input\",\n            build: search_input,\n            shows: Shows::Subjects(&[\"SearchInput\"]),\n        },\n        Scene {\n            name: \"search-field\",\n            build: search_field,\n            shows: Shows::Subjects(&[\"HighlightedText\", \"SearchField\"]),\n        },\n        Scene {\n            name: \"find-replace\",\n            build: find_replace,\n            shows: Shows::Subjects(&[\"FindReplace\"]),\n        },\n        Scene {\n            name: \"notification-center\",\n            build: notification_center,\n            shows: Shows::Subjects(&[\"NotificationCenter\"]),\n        },\n        Scene {\n            name: \"failure-panel\",\n            build: failure_panel,\n            shows: Shows::Subjects(&[\"FailurePanel\"]),\n        },\n        Scene {\n            name: \"log-stream\",\n            build: log_stream,\n            shows: Shows::Subjects(&[\"LogStream\"]),\n        },\n        Scene {\n            name: \"diff-view\",\n            build: diff_view,\n            shows: Shows::Subjects(&[\"DiffView\"]),\n        },\n        Scene {\n            name: \"sparkline\",\n            build: sparkline,\n            shows: Shows::Subjects(&[\"Sparkline\"]),\n        },\n        Scene {\n            name: \"performance-hud\",\n            build: performance_hud,\n            shows: Shows::Subjects(&[\"PerformanceHud\"]),\n        },\n        Scene {\n            name: \"chart\",\n            build: chart,\n            shows: Shows::Subjects(&[\n                \"AreaChart\",\n                \"BarChart\",\n                \"ChartLegend\",\n                \"GaugeChart\",\n                \"LineChart\",\n                \"PieChart\",\n                \"RadarChart\",\n                \"ScatterChart\",\n                \"StackedBarChart\",\n            ]),\n        },\n        Scene {\n            name: \"cartesian\",\n            build: cartesian,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-linked\",\n            build: cartesian_linked,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-layout\",\n            build: cartesian_layout,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-lifecycle\",\n            build: cartesian_lifecycle,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-dense\",\n            build: cartesian_dense,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"cartesian-states\",\n            build: cartesian_states,\n            shows: Shows::Subjects(&[\"CartesianChart\", \"PieChart\", \"RadarChart\", \"GaugeChart\"]),\n        },\n        Scene {\n            name: \"plot\",\n            build: plot,\n            shows: Shows::Subjects(&[\"CandlestickChart\", \"Plot\", \"SankeyChart\"]),\n        },\n        Scene {\n            name: \"specialized\",\n            build: specialized,\n            shows: Shows::Subjects(&[\"SpecializedChart\"]),\n        },\n        Scene {\n            name: \"specialized-distribution\",\n            build: specialized_distribution,\n            shows: Shows::Subjects(&[\"SpecializedChart\"]),\n        },\n        Scene {\n            name: \"specialized-exploration\",\n            build: specialized_exploration,\n            shows: Shows::Subjects(&[\"SpecializedChart\"]),\n        },\n        Scene {\n            name: \"continuous-heatmap-transition\",\n            build: continuous_heatmap_transition,\n            shows: Shows::Subjects(&[\"ContinuousHeatmap\"]),\n        },\n        Scene {\n            name: \"heatmap-reordering\",\n            build: heatmap_reordering,\n            shows: Shows::Subjects(&[\"ContinuousHeatmap\"]),\n        },\n        Scene {\n            name: \"sankey-motion\",\n            build: sankey_motion,\n            shows: Shows::Subjects(&[\"SankeyChart\"]),\n        },\n        Scene {\n            name: \"continuous-heatmap\",\n            build: continuous_heatmap,\n            shows: Shows::Subjects(&[\"ContinuousHeatmap\"]),\n        },\n        Scene {\n            name: \"sankey-layout\",\n            build: sankey_layout,\n            shows: Shows::Subjects(&[\"SankeyChart\"]),\n        },\n        Scene {\n            name: \"raw-candlestick\",\n            build: raw_candlestick,\n            shows: Shows::Subjects(&[\"CartesianChart\"]),\n        },\n        Scene {\n            name: \"geography\",\n            build: geography,\n            shows: Shows::Subjects(&[\"GeoMap\"]),\n        },\n        Scene {\n            name: \"geography-scale\",\n            build: geography_scale,\n            shows: Shows::Subjects(&[\"GeoMap\"]),\n        },\n        Scene {\n            name: \"attachment\",\n            build: attachment,\n            shows: Shows::Subjects(&[\"AttachmentTile\"]),\n        },\n        Scene {\n            name: \"metric-card\",\n            build: metric_card,\n            shows: Shows::Subjects(&[\"MetricCard\"]),\n        },\n        Scene {\n            name: \"kanban\",\n            build: kanban,\n            shows: Shows::Subjects(&[\"KanbanBoard\"]),\n        },\n        Scene {\n            name: \"micro\",\n            build: micro,\n            shows: Shows::Subjects(&[\"MicroMark\"]),\n        },\n        Scene {\n            name: \"trace\",\n            build: trace,\n            shows: Shows::Subjects(&[\"SpanTimeline\", \"TraceView\"]),\n        },\n        Scene {\n            name: \"trace-time\",\n            build: trace_time,\n            shows: Shows::Subjects(&[\"SpanTimeline\", \"TraceView\"]),\n        },\n        Scene {\n            name: \"heatmap\",\n            build: heatmap,\n            shows: Shows::Subjects(&[\"Heatmap\"]),\n        },\n        Scene {\n            name: \"color-picker\",\n            build: color_picker,\n            shows: Shows::Subjects(&[\"ColorPicker\", \"ColorSwatch\"]),\n        },\n        Scene {\n            name: \"code-view\",\n            build: code_view,\n            shows: Shows::Subjects(&[\"CodeView\"]),\n        },\n        Scene {\n            name: \"upload-list\",\n            build: upload_list,\n            shows: Shows::Subjects(&[\"UploadList\"]),\n        },\n        Scene {\n            name: \"cascader\",\n            build: cascader,\n            shows: Shows::Subjects(&[\"Cascader\"]),\n        },\n        Scene {\n            name: \"anchor-list\",\n            build: anchor_list,\n            shows: Shows::Subjects(&[\"AnchorList\"]),\n        },\n        Scene {\n            name: \"diagnostics-list\",\n            build: diagnostics_list,\n            shows: Shows::Subjects(&[\"DiagnosticsList\"]),\n        },\n    ];\n    #[cfg(all(feature = \"terminal\", not(target_family = \"wasm\")))]\n    scenes.push(Scene {\n        name: \"terminal\",\n        build: terminal,\n        shows: Shows::Subjects(&[\"Terminal\"]),\n    });\n    #[cfg(feature = \"fixtures\")]\n    scenes.extend([\n        Scene {\n            name: \"calendar\",\n            build: calendar,\n            shows: Shows::Subjects(&[\"Calendar\"]),\n        },\n        Scene {\n            name: \"date-range\",\n            build: date_range,\n            shows: Shows::Subjects(&[\"RangePicker\"]),\n        },\n        Scene {\n            name: \"date-time\",\n            build: date_time,\n            shows: Shows::Subjects(&[\"DateInput\", \"TimeInput\"]),\n        },\n        Scene {\n            name: \"touch-dates\",\n            build: touch_dates,\n            shows: Shows::Subjects(&[\"DateInput\", \"TimeInput\", \"RangePicker\"]),\n        },\n    ]);\n    scenes\n}\n\n/// The scene registered under `name`, or `None` when nothing is.\npub fn find(name: &str) -> Option<Scene> {\n    catalog().into_iter().find(|scene| scene.name == name)\n}\n\n/// The reading direction a scene expects.\n///\n/// The direction is a global, like the theme, so a capture run that renders\n/// the whole catalog into one process has to set it per scene the same way it\n/// activates a theme per scene. A scene that changed it while rendering would\n/// leak into whichever scene came next, and the leak would show up as a\n/// changed image somewhere else entirely.\npub fn direction(name: &str) -> LayoutDirection {\n    match name {\n        \"reading-direction\" => LayoutDirection::RightToLeft,\n        _ => LayoutDirection::LeftToRight,\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn scene_names_are_unique_and_addressable() {\n        let mut names: Vec<&str> = catalog().iter().map(|scene| scene.name).collect();\n        let count = names.len();\n        names.sort_unstable();\n        names.dedup();\n        assert_eq!(names.len(), count);\n        assert!(find(\"button\").is_some());\n        assert!(find(\"nothing\").is_none());\n    }\n}\n\n//! Motion primitives exercised against a live clock, plus described motion at rest.\n\nuse super::support::*;\nuse crate::motion::{\n    CubicBezier, Easing, Keyframe, Keyframes, MotionSpec, Presence, Spring, Stagger, Transition,\n};\nuse web_time::Instant;\n\nconst CLOCK_START: u16 = 8 * 60;\nconst CLOCK_END: u16 = 20 * 60;\nconst CLOCK_STEP: u16 = 30;\nconst CLOCK_TICK: Duration = Duration::from_millis(500);\nconst CLOCK_TRANSITION_MS: u64 = 620;\n\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\nenum MotionDemo {\n    SlidingTime,\n    Spring,\n    Keyframes,\n    Presence,\n    Stagger,\n}\n\nimpl MotionDemo {\n    fn id(self) -> &'static str {\n        match self {\n            Self::SlidingTime => \"sliding-time\",\n            Self::Spring => \"spring\",\n            Self::Keyframes => \"keyframes\",\n            Self::Presence => \"presence\",\n            Self::Stagger => \"stagger\",\n        }\n    }\n\n    fn from_id(id: &str) -> Option<Self> {\n        match id {\n            \"sliding-time\" => Some(Self::SlidingTime),\n            \"spring\" => Some(Self::Spring),\n            \"keyframes\" => Some(Self::Keyframes),\n            \"presence\" => Some(Self::Presence),\n            \"stagger\" => Some(Self::Stagger),\n            _ => None,\n        }\n    }\n}\n\n/// Caller-owned state for the five demonstrations.\n///\n/// The catalog rebuilds a scene every frame, just as an ordinary host rebuilds\n/// component builders. The state therefore lives outside the element tree;\n/// every animated channel beneath it still has a stable semantic identity.\n#[derive(Debug)]\nstruct SceneMotionPrimitives {\n    demo: MotionDemo,\n    clock_minutes: u16,\n    clock_targets: [f32; 4],\n    clock_digits: [Transition<f32>; 4],\n    clock_playing: bool,\n    clock_started_at: Option<Instant>,\n    clock_ticks: u16,\n    spring_selected: usize,\n    spring_indicator: Transition<f32>,\n    present: bool,\n    presence: Presence,\n    keyframes_started_at: Option<Instant>,\n    stagger_generation: u64,\n    stagger_started_at: Option<Instant>,\n}\n\nimpl Global for SceneMotionPrimitives {}\n\nimpl SceneMotionPrimitives {\n    fn new(theme: &Theme) -> Self {\n        let clock_spec = clock_spec(theme);\n        let spring_spec = spring_spec();\n        let presence_spec = presence_spec(theme);\n        let targets = clock_digits(CLOCK_START).map(f32::from);\n        Self {\n            demo: MotionDemo::SlidingTime,\n            clock_minutes: CLOCK_START,\n            clock_targets: targets,\n            clock_digits: targets.map(|digit| Transition::new(digit, clock_spec)),\n            clock_playing: false,\n            clock_started_at: None,\n            clock_ticks: 0,\n            spring_selected: 0,\n            spring_indicator: Transition::new(0.0, spring_spec),\n            present: true,\n            presence: Presence::visible(presence_spec, presence_spec),\n            keyframes_started_at: None,\n            stagger_generation: 0,\n            stagger_started_at: None,\n        }\n    }\n\n    fn select(&mut self, demo: MotionDemo, theme: &Theme) {\n        self.demo = demo;\n        // Element-retained animation state disappears when its tab leaves the\n        // tree. Recreate that boundary here even though the scene state itself\n        // is longer lived, so returning to a tab never resumes an invisible\n        // half-frame from the previous visit.\n        match demo {\n            MotionDemo::SlidingTime => {\n                for (digit, target) in self\n                    .clock_digits\n                    .iter_mut()\n                    .zip(self.clock_targets.iter().copied())\n                {\n                    *digit = Transition::new(target, clock_spec(theme));\n                }\n            }\n            MotionDemo::Spring => self.spring_indicator.snap(if self.spring_selected == 0 {\n                0.0\n            } else {\n                120.0\n            }),\n            MotionDemo::Keyframes => self.keyframes_started_at = None,\n            MotionDemo::Presence => {\n                let spec = presence_spec(theme);\n                self.presence = if self.present {\n                    Presence::visible(spec, spec)\n                } else {\n                    Presence::hidden(spec, spec)\n                };\n            }\n            MotionDemo::Stagger => self.stagger_started_at = None,\n        }\n    }\n\n    fn toggle_clock(&mut self, now: Instant, theme: &Theme) {\n        if self.clock_playing {\n            self.clock_playing = false;\n            self.clock_started_at = None;\n            self.clock_ticks = 0;\n            return;\n        }\n        if self.clock_minutes >= CLOCK_END {\n            self.clock_minutes = CLOCK_START;\n            self.clock_targets = clock_digits(CLOCK_START).map(f32::from);\n            for (digit, target) in self\n                .clock_digits\n                .iter_mut()\n                .zip(self.clock_targets.iter().copied())\n            {\n                *digit = Transition::new(target, clock_spec(theme));\n            }\n        }\n        self.clock_playing = true;\n        self.clock_started_at = Some(now);\n        self.clock_ticks = 0;\n    }\n\n    fn update_clock(&mut self, now: Instant) {\n        let Some(started) = self.clock_started_at else {\n            return;\n        };\n        let due = now\n            .saturating_duration_since(started)\n            .as_millis()\n            .checked_div(CLOCK_TICK.as_millis())\n            .unwrap_or(0) as u16;\n        while self.clock_ticks < due && self.clock_minutes < CLOCK_END {\n            self.clock_ticks += 1;\n            self.clock_minutes = (self.clock_minutes + CLOCK_STEP).min(CLOCK_END);\n            for (target, next) in self\n                .clock_targets\n                .iter_mut()\n                .zip(clock_digits(self.clock_minutes))\n            {\n                *target = advance_digit(*target, next);\n            }\n        }\n        if self.clock_minutes >= CLOCK_END {\n            self.clock_playing = false;\n            self.clock_started_at = None;\n            self.clock_ticks = 0;\n        }\n    }\n\n    fn sliding_time(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let spec = clock_spec(theme);\n        let values: [f32; 4] = std::array::from_fn(|index| {\n            let mut digit = self.clock_digits[index].spec(spec);\n            digit.set(self.clock_targets[index]);\n            let value = digit.animate(window, cx);\n            self.clock_digits[index] = digit;\n            value\n        });\n        let announced = format_time(self.clock_minutes);\n        let play_label = if self.clock_playing { \"Pause\" } else { \"Play\" };\n\n        demo_panel(theme, \"Four interrupted transitions on one clock\")\n            .child(\n                div()\n                    .row()\n                    .items_center()\n                    .gap(px(theme.space(Space::Xs)))\n                    .child(rolling_digit(theme, values[0]))\n                    .child(rolling_digit(theme, values[1]))\n                    .child(\n                        div()\n                            .h(px(52.0))\n                            .flex()\n                            .items_center()\n                            .mono(theme)\n                            .text_size(px(36.0))\n                            .child(\":\"),\n                    )\n                    .child(rolling_digit(theme, values[2]))\n                    .child(rolling_digit(theme, values[3]))\n                    .semantic_in(\n                        cx,\n                        NodeSpec::new(\"scene.motion.clock\", Role::Status)\n                            .text(\"Simulated time\")\n                            .value(announced),\n                    ),\n            )\n            .child(\n                Button::new(\"scene.motion.clock.play\")\n                    .label(play_label)\n                    .secondary()\n                    .on_click(|_, cx| {\n                        let now = cx.background_executor().now();\n                        let theme = cx.theme().clone();\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.toggle_clock(now, &theme)\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n            .into_any_element()\n    }\n\n    fn spring(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let mut indicator = self.spring_indicator.spec(spring_spec());\n        indicator.set(if self.spring_selected == 0 {\n            0.0\n        } else {\n            120.0\n        });\n        let left = indicator.animate(window, cx);\n        self.spring_indicator = indicator;\n        let selected = self.spring_selected;\n\n        let segment = |id: &'static str, label: &'static str, index: usize| {\n            div().w(px(120.0)).child(\n                Button::new(id)\n                    .label(label)\n                    .ghost()\n                    .selected(selected == index)\n                    .full_width(true)\n                    .on_click(move |_, cx| {\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.spring_selected = index\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n        };\n\n        demo_panel(theme, \"Velocity survives rapid retargeting\")\n            .child(\n                div()\n                    .relative()\n                    .w(px(240.0))\n                    .radius(theme, Radius::Control)\n                    .well(theme)\n                    .child(\n                        div()\n                            .row()\n                            .child(segment(\"scene.motion.spring.queue\", \"Queue\", 0))\n                            .child(segment(\"scene.motion.spring.timeline\", \"Timeline\", 1)),\n                    )\n                    .child(\n                        div()\n                            .absolute()\n                            .left(px(left))\n                            .top_0()\n                            .w(px(120.0))\n                            .h(px(theme.control.md.height))\n                            .radius(theme, Radius::Control)\n                            .bg(theme.colors.selected)\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(\"scene.motion.spring.indicator\", Role::Status)\n                                    .text(\"Selected segment indicator\")\n                                    .value(if selected == 0 { \"Queue\" } else { \"Timeline\" }),\n                            ),\n                    ),\n            )\n            .into_any_element()\n    }\n\n    fn keyframes(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let now = cx.background_executor().now();\n        let started = *self.keyframes_started_at.get_or_insert(now);\n        let elapsed = now.saturating_duration_since(started);\n        let period = Duration::from_millis(1_200);\n        let still = cx.reduce_motion();\n        if !still {\n            window.request_animation_frame();\n        }\n        let path = activity_keyframes(theme);\n        let bars = [\n            \"clone\", \"resolve\", \"compile\", \"test\", \"lint\", \"package\", \"publish\",\n        ];\n\n        demo_panel(theme, \"One validated path, seven delayed playheads\")\n            .child(\n                div()\n                    .h(px(72.0))\n                    .row()\n                    .items_end()\n                    .gap(px(theme.space(Space::Sm)))\n                    .children(bars.into_iter().enumerate().map(|(index, name)| {\n                        let delay = Duration::from_millis(index as u64 * 80);\n                        let phase = if still || elapsed < delay {\n                            0.0\n                        } else {\n                            elapsed.saturating_sub(delay).as_secs_f32() / period.as_secs_f32()\n                        };\n                        let value = path.sample(phase.rem_euclid(1.0));\n                        div()\n                            .w(px(18.0))\n                            .h(px(18.0 + 38.0 * value))\n                            .radius(theme, Radius::Small)\n                            .bg(theme.colors.accent)\n                            .opacity(0.35 + 0.65 * value)\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(\n                                    format!(\"scene.motion.keyframes.{name}\"),\n                                    Role::Status,\n                                )\n                                .text(format!(\"{name} activity\"))\n                                .value(format!(\"{value:.3}\")),\n                            )\n                    })),\n            )\n            .into_any_element()\n    }\n\n    fn presence(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let progress = self.presence.animate(window, cx);\n        let visible = self.presence.is_rendered();\n        let button = if self.present {\n            \"Hide notice\"\n        } else {\n            \"Show notice\"\n        };\n\n        demo_panel(theme, \"Logical absence waits for the exit to finish\")\n            .child(\n                div()\n                    .h(px(76.0))\n                    .flex()\n                    .items_center()\n                    .children(visible.then(|| {\n                        div()\n                            .w(px(360.0))\n                            .p(px(theme.space(Space::Md)))\n                            .radius(theme, Radius::Card)\n                            .bg(theme.colors.accent.opacity(0.14))\n                            .opacity(progress)\n                            .child(crate::foundation::text(\n                                theme,\n                                TypeScale::Body,\n                                \"The verified result is ready to review.\",\n                            ))\n                            .semantic_in(\n                                cx,\n                                NodeSpec::new(\"scene.motion.presence.notice\", Role::Status)\n                                    .text(\"The verified result is ready to review.\"),\n                            )\n                    })),\n            )\n            .child(\n                Button::new(\"scene.motion.presence.toggle\")\n                    .label(button)\n                    .secondary()\n                    .on_click(|_, cx| {\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.present = !scene.present;\n                            if scene.present {\n                                scene.presence.show();\n                            } else {\n                                scene.presence.hide();\n                            }\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n            .into_any_element()\n    }\n\n    fn stagger(&mut self, theme: &Theme, window: &mut Window, cx: &mut App) -> AnyElement {\n        let now = cx.background_executor().now();\n        let started = *self.stagger_started_at.get_or_insert(now);\n        let elapsed = now.saturating_duration_since(started);\n        let spec = MotionSpec::new(360, Easing::EaseOut.curve(theme));\n        let stagger = Stagger::from_millis(90);\n        let total = stagger.total(3, spec);\n        let still = cx.reduce_motion();\n        if !still && elapsed < total {\n            window.request_animation_frame();\n        }\n        let rows = [\n            (\"plan\", \"Plan the release\"),\n            (\"build\", \"Build the artifacts\"),\n            (\"publish\", \"Publish the result\"),\n        ];\n\n        demo_panel(theme, \"A shared clock spreads one entrance across a list\")\n            .child(div().column().gap(px(theme.space(Space::Sm))).children(\n                rows.into_iter().enumerate().map(|(index, (id, label))| {\n                    let progress = if still {\n                        1.0\n                    } else {\n                        stagger.progress_at(elapsed, index, 3, spec)\n                    };\n                    div()\n                        .relative()\n                        .left(px(24.0 * (1.0 - progress)))\n                        .w(px(360.0))\n                        .p(px(theme.space(Space::Sm)))\n                        .radius(theme, Radius::Control)\n                        .well(theme)\n                        .opacity(progress)\n                        .child(crate::foundation::text(theme, TypeScale::Body, label))\n                        .semantic_in(\n                            cx,\n                            NodeSpec::new(format!(\"scene.motion.stagger.{id}\"), Role::Status)\n                                .text(label)\n                                .value(format!(\"replay {}\", self.stagger_generation)),\n                        )\n                }),\n            ))\n            .child(\n                Button::new(\"scene.motion.stagger.replay\")\n                    .label(\"Replay\")\n                    .secondary()\n                    .on_click(|_, cx| {\n                        let now = cx.background_executor().now();\n                        cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| {\n                            scene.stagger_generation += 1;\n                            scene.stagger_started_at = Some(now);\n                        });\n                        cx.refresh_windows();\n                    }),\n            )\n            .into_any_element()\n    }\n}\n\n/// Five interactive demonstrations of interruption, physical motion,\n/// authored timelines, delayed unmount and list choreography.\npub(super) fn motion_primitives(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneMotionPrimitives>() {\n        cx.set_global(SceneMotionPrimitives::new(cx.theme()));\n    }\n    let now = cx.background_executor().now();\n    let theme = cx.theme().clone();\n    let selected = cx.global::<SceneMotionPrimitives>().demo;\n    let tabs = Tabs::new(\"scene.motion.tabs\")\n        .tabs([\n            TabItem::new(\"sliding-time\", \"Sliding time\"),\n            TabItem::new(\"spring\", \"Spring\"),\n            TabItem::new(\"keyframes\", \"Keyframes\"),\n            TabItem::new(\"presence\", \"Presence\"),\n            TabItem::new(\"stagger\", \"Stagger\"),\n        ])\n        .selected(selected.id())\n        .on_select(|id, _, cx| {\n            let Some(demo) = MotionDemo::from_id(id.as_ref()) else {\n                return;\n            };\n            let theme = cx.theme().clone();\n            cx.update_global::<SceneMotionPrimitives, ()>(|scene, _| scene.select(demo, &theme));\n            cx.refresh_windows();\n        });\n\n    let body = cx.update_global::<SceneMotionPrimitives, AnyElement>(|scene, cx| {\n        scene.update_clock(now);\n        if scene.clock_playing {\n            window.request_animation_frame();\n        }\n        match scene.demo {\n            MotionDemo::SlidingTime => scene.sliding_time(&theme, window, cx),\n            MotionDemo::Spring => scene.spring(&theme, window, cx),\n            MotionDemo::Keyframes => scene.keyframes(&theme, window, cx),\n            MotionDemo::Presence => scene.presence(&theme, window, cx),\n            MotionDemo::Stagger => scene.stagger(&theme, window, cx),\n        }\n    });\n\n    stack(&theme)\n        .w(px(640.0))\n        .child(tabs)\n        .child(body)\n        .into_any_element()\n}\n\nfn clock_spec(theme: &Theme) -> MotionSpec {\n    MotionSpec::new(CLOCK_TRANSITION_MS, Easing::EaseInOut.curve(theme))\n}\n\nfn spring_spec() -> MotionSpec {\n    // `bounce = 1 - damping_ratio`, so this is the same 420ms / 0.68 policy\n    // used by the reference segmented indicator.\n    MotionSpec::sprung(Spring::perceptual(Duration::from_millis(420), 0.32))\n}\n\nfn presence_spec(theme: &Theme) -> MotionSpec {\n    MotionSpec::new(360, Easing::EaseInOut.curve(theme))\n}\n\nfn activity_keyframes(theme: &Theme) -> Keyframes<f32> {\n    let linear = MotionSpec::new(1_200, CubicBezier::new(0.0, 0.0, 1.0, 1.0));\n    Keyframes::new(\n        theme,\n        linear,\n        [\n            Keyframe::new(0.0, 0.0),\n            Keyframe::new(0.35, 1.0),\n            // Local keyframes attach the curve to the stop being reached. Put\n            // EaseOut on the 0.7 stop so the outgoing 0.35..0.7 segment has\n            // the same curve as the reference implementation.\n            Keyframe::new(0.7, 0.0).eased(Easing::EaseOut),\n            Keyframe::new(1.0, 0.0),\n        ],\n    )\n    .expect(\"the activity path has four stops\")\n}\n\nfn demo_panel(theme: &Theme, caption_text: &'static str) -> gpui::Div {\n    div()\n        .min_h(px(260.0))\n        .w_full()\n        .column()\n        .items_center()\n        .justify_center()\n        .gap(px(theme.space(Space::Lg)))\n        .p(px(theme.space(Space::Xl)))\n        .radius(theme, Radius::Card)\n        .card_surface(theme, CardVariant::Elevated)\n        .child(caption(theme, caption_text))\n}\n\nfn rolling_digit(theme: &Theme, value: f32) -> gpui::Div {\n    let whole = value.floor();\n    let fraction = value - whole;\n    let current = (whole as i32).rem_euclid(10);\n    let next = (current + 1).rem_euclid(10);\n    let glyph = |digit: i32, top: f32| {\n        div()\n            .absolute()\n            .left_0()\n            .right_0()\n            .top(px(top))\n            .h(px(52.0))\n            .flex()\n            .items_center()\n            .justify_center()\n            .child(digit.to_string())\n    };\n\n    div()\n        .relative()\n        .w(px(38.0))\n        .h(px(52.0))\n        .overflow_hidden()\n        .radius(theme, Radius::Control)\n        .well(theme)\n        .mono(theme)\n        .text_size(px(40.0))\n        .child(glyph(current, -52.0 * fraction))\n        .child(glyph(next, 52.0 * (1.0 - fraction)))\n}\n\nfn clock_digits(minutes: u16) -> [u8; 4] {\n    let hour = minutes / 60;\n    let minute = minutes % 60;\n    [\n        (hour / 10) as u8,\n        (hour % 10) as u8,\n        (minute / 10) as u8,\n        (minute % 10) as u8,\n    ]\n}\n\nfn format_time(minutes: u16) -> String {\n    format!(\"{:02}:{:02}\", minutes / 60, minutes % 60)\n}\n\n/// The next scalar congruent to `digit`, always travelling forward around the\n/// decimal wheel. Thus 8 → 0 becomes 8 → 10 rather than rolling backwards.\nfn advance_digit(current: f32, digit: u8) -> f32 {\n    let current_digit = (current.round() as i32).rem_euclid(10);\n    let distance = (i32::from(digit) - current_digit).rem_euclid(10);\n    current + distance as f32\n}\n\npub(super) fn micro(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // Each motion gets a cell of its own. A still frame cannot show any of\n    // them moving, so what the picture has to carry instead is that there are\n    // five of them, that they are the same size, and which name belongs to\n    // which mark.\n    let cell = |mark: MicroMark| {\n        div()\n            .w(px(96.0))\n            .flex_none()\n            .column()\n            .items_center()\n            .justify_center()\n            .gap_token(&theme, Space::Xs)\n            .py_token(&theme, Space::Md)\n            .radius(&theme, Radius::Card)\n            .well(&theme)\n            .child(mark)\n    };\n\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"named functions of time; reduced motion leaves the glyph still\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(cell(MicroMark::new(\n                    \"scene.micro.heartbeat\",\n                    Micro::Heartbeat,\n                    \"Hb\",\n                )))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.bounce\",\n                    Micro::Bounce,\n                    \"Bn\",\n                )))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.wobble\",\n                    Micro::Wobble,\n                    \"Wb\",\n                )))\n                .child(cell(MicroMark::new(\"scene.micro.pop\", Micro::Pop, \"Pp\")))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.sparkle\",\n                    Micro::Sparkle,\n                    \"Sk\",\n                ))),\n        )\n        .child(caption(\n            &theme,\n            \"the same functions on things that are not glyphs\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(div().child(Badge::new(\"12 unread\").neutral()).micro(\n                    \"scene.micro.badge\",\n                    Micro::Pop,\n                    cx,\n                ))\n                .child(div().child(Tag::new(\"scene.micro.tag\", \"fixture\")).micro(\n                    \"scene.micro.tag.mark\",\n                    Micro::Wobble,\n                    cx,\n                ))\n                .child(div().child(StatusDot::new(Tone::Success)).micro(\n                    \"scene.micro.dot\",\n                    Micro::Heartbeat,\n                    cx,\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"a described motion, sampled along its own run rather than played\",\n        ))\n        .child(described(&theme))\n        .into_any_element()\n}\n\n/// A motion written with `motion!`, laid out as the frames it passes through.\n///\n/// This is the one thing a still frame can say about motion: a described\n/// motion can be read at a point in its run without running it, so the frames\n/// are drawn side by side and the picture is the same every time. Playing it\n/// is [`Animator`]'s job and needs a window; the gallery is where that is\n/// looked at.\nfn described(theme: &Theme) -> gpui::Div {\n    let arrive = crate::motion! {\n        duration: 420;\n        ease: overshoot;\n        opacity: 0.0 => 1.0;\n        y: 12.0 => 0.0;\n    };\n\n    let frame = |head: f32, label: &'static str| {\n        let sample = arrive.sample(theme, head);\n        div()\n            .w(px(96.0))\n            .flex_none()\n            .column()\n            .items_center()\n            .gap_token(theme, Space::Xs)\n            .py_token(theme, Space::Md)\n            .radius(theme, Radius::Card)\n            .well(theme)\n            // The slot stays drawn at every head. At the start of the run the\n            // mark has not arrived yet, and a cell with nothing in it reads\n            // as a frame that failed to render rather than as the frame where\n            // the motion has not begun.\n            .child(\n                div()\n                    .w(px(56.0))\n                    .h(px(24.0))\n                    .radius(theme, Radius::Control)\n                    .bg(theme.colors.track)\n                    .child(\n                        sample.apply(\n                            div()\n                                .size_full()\n                                .radius(theme, Radius::Control)\n                                .bg(theme.colors.accent),\n                        ),\n                    ),\n            )\n            .child(caption(theme, label))\n    };\n\n    row(theme)\n        .gap_token(theme, Space::Sm)\n        .child(frame(0.0, \"start\"))\n        .child(frame(0.25, \"quarter\"))\n        .child(frame(0.5, \"half\"))\n        .child(frame(0.75, \"three quarters\"))\n        .child(frame(1.0, \"settled\"))\n}\n\n//! Getting to a place, and knowing which place you are in.\n\nuse super::support::*;\n\npub(super) fn bottom_navigation(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::{BottomNavigation, NavigationItem};\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(390.0))\n        .child(caption(\n            &theme,\n            \"Fixture destinations; selected, enabled and disabled actions\",\n        ))\n        .child(\n            BottomNavigation::new(\"scene.bottom-navigation.ready\")\n                .items([\n                    NavigationItem::new(\"library\", \"Library\"),\n                    NavigationItem::new(\"search\", \"Search\"),\n                    NavigationItem::new(\"settings\", \"Settings\").disabled(true),\n                ])\n                .selected(\"search\")\n                .on_select(|_, _, _| {}),\n        )\n        .child(caption(\n            &theme,\n            \"No host handler: destinations are unavailable\",\n        ))\n        .child(\n            BottomNavigation::new(\"scene.bottom-navigation.unavailable\")\n                .items([\n                    NavigationItem::new(\"library\", \"Library\"),\n                    NavigationItem::new(\"search\", \"Search\"),\n                ])\n                .selected(\"library\"),\n        )\n        .into_any_element()\n}\n\npub(super) fn adaptive_navigation(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::layout::{AppBar, PageLayout, Responsive};\n    use crate::navigation::{BottomNavigation, NavigationItem};\n    let theme = cx.theme().clone();\n    let make = |id: &'static str, width: f32| {\n        div().w(px(width)).h(px(320.0)).child(\n            Responsive::new(id, move |size, _, _| {\n                let wide = size.at_least(600.0);\n                let body = div()\n                    .flex()\n                    .size_full()\n                    .when(wide, |body| {\n                        body.child(\n                            Sidebar::new(format!(\"{id}.rail\"))\n                                .section(SidebarSection::new(\"destinations\").items([\n                                    SidebarItem::new(\"library\", \"Library\"),\n                                    SidebarItem::new(\"search\", \"Search\"),\n                                ]))\n                                .active(\"search\")\n                                .on_select(|_, _, _| {}),\n                        )\n                    })\n                    .child(\n                        div()\n                            .flex_1()\n                            .p(px(16.0))\n                            .child(\"Fixture content · caller owns route selection\"),\n                    );\n                PageLayout::new(format!(\"{id}.page\"), body)\n                    .insets(gpui::WindowInsets::default())\n                    .header(AppBar::new(\n                        format!(\"{id}.bar\"),\n                        if wide {\n                            \"Wide container\"\n                        } else {\n                            \"Compact container\"\n                        },\n                    ))\n                    .hide_footer(wide)\n                    .footer(\n                        BottomNavigation::new(format!(\"{id}.bottom\"))\n                            .items([\n                                NavigationItem::new(\"library\", \"Library\"),\n                                NavigationItem::new(\"search\", \"Search\"),\n                            ])\n                            .selected(\"search\")\n                            .on_select(|_, _, _| {}),\n                    )\n                    .into_any_element()\n            })\n            .fill(),\n        )\n    };\n    stack(&theme)\n        .child(caption(&theme, \"Same caller data; measured container width selects rail or bottom destinations. No platform guessing.\"))\n        .child(make(\"scene.adaptive-navigation.wide\", 640.0))\n        .child(make(\"scene.adaptive-navigation.compact\", 350.0))\n        .into_any_element()\n}\n\npub(super) fn nav_back_preview(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::{BackTransition, NavHistory, NavStack};\n    let theme = cx.theme().clone();\n    let state = window.use_keyed_state(\"scene.nav-back-preview.state\", cx, |_, cx| {\n        let mut history = NavHistory::new(\"overview\");\n        history.push(\"details\");\n        (history, None::<BackTransition>, cx.focus_handle())\n    });\n    let (history, preview, focus) = state.read(cx).clone();\n    let progress = state.clone();\n    let cancel = state.clone();\n    let commit = state.clone();\n    let reset = state.clone();\n    let mut page = NavStack::new(\n        \"scene.nav-back-preview\",\n        &history,\n        history.current().clone(),\n        focus,\n        Card::new()\n            .padding(Space::Xl)\n            .child(history.current().clone()),\n    );\n    if let Some(preview) = &preview {\n        page = page.back_transition(preview);\n    }\n    stack(&theme).w(px(550.0))\n        .child(caption(&theme, \"Fixture host-fed progress; cancel retains the page, accept mutates caller history. Reduced motion holds full opacity.\"))\n        .child(Slider::new(\"scene.nav-back-preview.progress\").label(\"Back progress\")\n            .range(0.0, 1.0).value(preview.as_ref().map_or(0.0, BackTransition::progress))\n            .disabled(!history.can_pop()).on_change(move |value, _, cx| progress.update(cx, |state, cx| {\n                if state.1.is_none() { state.1 = BackTransition::begin(&state.0); }\n                if let Some(preview) = &mut state.1 { preview.update(value); }\n                cx.notify();\n            })))\n        .child(row(&theme)\n            .child(Button::new(\"scene.nav-back-preview.cancel\").label(\"Cancel\").disabled(preview.is_none())\n                .on_click(move |_, cx| cancel.update(cx, |state, cx| {\n                    if let Some(preview) = state.1.take() { preview.cancel(); } cx.notify();\n                })))\n            .child(Button::new(\"scene.nav-back-preview.accept\").label(\"Accept back\").disabled(preview.is_none())\n                .on_click(move |_, cx| commit.update(cx, |state, cx| {\n                    if let Some(preview) = state.1.take() { preview.commit(&mut state.0); } cx.notify();\n                })))\n            .child(Button::new(\"scene.nav-back-preview.reset\").label(\"Forward\").disabled(!history.can_forward())\n                .on_click(move |_, cx| reset.update(cx, |state, cx| { state.0.forward(); cx.notify(); }))))\n        .child(page).into_any_element()\n}\n\npub(super) fn nav_stack(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::navigation::nav_stack::{NavHistory, NavStack};\n    let theme = cx.theme().clone();\n    let state = window.use_keyed_state(\"scene.nav-stack.state\", cx, |_, cx| {\n        (\n            NavHistory::new(\"overview\"),\n            cx.focus_handle(),\n            cx.focus_handle(),\n            cx.focus_handle(),\n        )\n    });\n    let (history, overview, details, replacement) = state.read(cx).clone();\n    let focus = match history.current().as_ref() {\n        \"details\" => details,\n        \"replacement\" => replacement,\n        _ => overview,\n    };\n    let back = state.clone();\n    let forward = state.clone();\n    let push = state.clone();\n    let replace = state.clone();\n    stack(&theme).w(px(620.0))\n        .child(caption(&theme, \"Caller-owned visit history; back retains forward visits, push forks, replace preserves branches\"))\n        .child(row(&theme)\n            .child(Button::new(\"scene.nav-stack.back\").label(\"Back\").disabled(!history.can_pop())\n                .on_click(move |_, cx| back.update(cx, |state, cx| { state.0.pop(); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.forward\").label(\"Forward\").disabled(!history.can_forward())\n                .on_click(move |_, cx| forward.update(cx, |state, cx| { state.0.forward(); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.push\").label(\"Push details\")\n                .disabled(history.entries().iter().any(|id| id.as_ref() == \"details\"))\n                .on_click(move |_, cx| push.update(cx, |state, cx| { state.0.push(\"details\"); cx.notify(); })))\n            .child(Button::new(\"scene.nav-stack.replace\").label(\"Replace\")\n                .disabled(history.entries().iter().any(|id| id.as_ref() == \"replacement\"))\n                .on_click(move |_, cx| replace.update(cx, |state, cx| { state.0.replace(\"replacement\"); cx.notify(); }))))\n        .child(NavStack::new(\"scene.nav-stack\", &history, history.current().clone(), focus,\n            Card::new().padding(Space::Xl)\n                .child(crate::foundation::text(&theme, TypeScale::Title, history.current().clone()))\n                .child(crate::foundation::text(&theme, TypeScale::Body,\n                    \"Only the active page is mounted. Return visits restore focus without keeping inactive controls live.\"))))\n        .into_any_element()\n}\n\npub(super) fn carousel(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let page = |id: &'static str, label: &'static str, text: &'static str| {\n        CarouselItem::new(\n            id,\n            label,\n            Card::new()\n                .id(format!(\"scene.carousel.card.{id}\"))\n                .padding(Space::Xl)\n                .child(crate::foundation::text(&theme, TypeScale::Title, label))\n                .child(crate::foundation::text(&theme, TypeScale::Body, text)),\n        )\n    };\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"A controlled, focusable page track with direct selection and reduced-motion-aware transitions\",\n        ))\n        .child(\n            Carousel::new(\"scene.carousel.ready\")\n                .items([\n                    page(\"overview\", \"Overview\", \"The first page is active.\"),\n                    page(\"details\", \"Details\", \"The caller owns the page content.\"),\n                    page(\"history\", \"History\", \"The track reports page intents.\"),\n                ])\n                .active(\"details\")\n                .looped(true)\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Carousel::new(\"scene.carousel.empty\")\n                .phase(Phase::Empty)\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(caption(\n            &theme,\n            \"In-content tabs: raised control, quiet track, tabular count\",\n        ))\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        .child(caption(\n            &theme,\n            \"places, not documents: Regular Liquid capsules, \\\n             with a translucent selected fill on the material\",\n        ))\n        .child(\n            Tabs::new(\"scene.tabs.capsules\")\n                .capsules()\n                .control_size(ControlSize::Sm)\n                .tabs([\n                    TabItem::new(\"code\", \"Portal\")\n                        .icon(Icon::Terminal)\n                        .tint(theme.colors.accent),\n                    TabItem::new(\"game\", \"Harbour\")\n                        .icon(Icon::Play)\n                        .tint(theme.colors.warning),\n                    TabItem::new(\"design\", \"notes\")\n                        .icon(Icon::Pen)\n                        .tint(theme.colors.info),\n                ])\n                .selected(\"code\")\n                .on_select(|_, _, _| {}),\n        )\n        // The body belongs to the caller: tabs render the strip only.\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Runs are rendered by the caller, not by the strip.\",\n        ))\n        .child(caption(\n            &theme,\n            \"the other answer to a strip with no room: it scrolls, and the \\\n             edge with more behind it fades\",\n        ))\n        // Deliberately narrower than its tabs, because a strip that fits shows\n        // nothing about what a strip that does not fit does.\n        .child(\n            div().w(px(300.0)).child(\n                Tabs::new(\"scene.tabs.spaces\")\n                    .tabs((1..=9).map(|n| {\n                        TabItem::new(format!(\"space-{n}\"), format!(\"Workspace {n}\"))\n                            .icon(Icon::Widget)\n                    }))\n                    .selected(\"space-5\")\n                    .scrolling()\n                    .on_select(|_, _, _| {}),\n            ),\n        )\n        .into_any_element()\n}\n\n/// The overflow menu the document-tab scene hangs off the strip.\n///\n/// The strip does not own it: a menu is an entity with an open state that\n/// outlives a frame, so the caller builds it and the strip fills it.\npub(super) struct SceneDocumentTabs {\n    overflow: Entity<Menu>,\n}\n\nimpl Global for SceneDocumentTabs {}\n\npub(super) 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}\n\npub(super) struct SceneAnchorList {\n    overflow: Entity<Menu>,\n}\n\nimpl Global for SceneAnchorList {}\n\npub(super) fn anchor_list(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneAnchorList>() {\n        let label = cx.strings().text(StringKey::AnchorMoreSections);\n        let overflow = cx.new(|cx| Menu::new(\"scene.anchor-list.menu\", window, cx).trigger(label));\n        cx.set_global(SceneAnchorList { overflow });\n    }\n    let theme = cx.theme().clone();\n    let overflow = cx.global::<SceneAnchorList>().overflow.clone();\n    stack(&theme)\n        .w(px(700.0))\n        .child(caption(\n            &theme,\n            \"section intents only; the declared overflow moves anchors into a menu\",\n        ))\n        .child(\n            AnchorList::new(\"scene.anchor-list\")\n                .anchors([\n                    Anchor::new(\"summary\", \"Summary\"),\n                    Anchor::new(\"inputs\", \"Inputs\"),\n                    Anchor::new(\"constraints\", \"Constraints\"),\n                    Anchor::new(\"verification\", \"Verification\"),\n                    Anchor::new(\"history\", \"History\").disabled(true),\n                ])\n                .active(\"inputs\")\n                .overflow_after(3)\n                .overflow_menu(overflow)\n                .on_navigate(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Requests go out over the system proxy.\",\n                        )),\n                )\n                .section(\n                    AccordionSection::new(\"storage\", \"Storage\")\n                        .description(\"Where verified results are kept\")\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Nothing is written outside the workspace.\",\n                        )),\n                )\n                .section(\n                    AccordionSection::new(\"policy\", \"Managed by policy\")\n                        .description(\"This machine cannot change these\")\n                        .disabled(true)\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Set by the administrator.\",\n                        )),\n                ),\n        )\n        // The open section is the last one, which is the case where the body\n        // meets the card's rounded corners.\n        .child(\n            Accordion::new(\"scene.accordion.release\")\n                .expanded_ids(&[\"publish\"])\n                .on_toggle(|_, _, _, _| {})\n                .section(\n                    AccordionSection::new(\"build\", \"Build\")\n                        .description(\"What the last run produced\"),\n                )\n                .section(\n                    AccordionSection::new(\"publish\", \"Publish\")\n                        .description(\"Where the signed bundle goes\")\n                        .body(crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"The bundle is published to the workspace channel.\",\n                        )),\n                ),\n        )\n        .into_any_element()\n}\n\npub(super) 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}\n\npub(super) fn navigation_sections() -> Vec<SidebarSection> {\n    vec![\n        SidebarSection::new(\"work\").title(\"Work\").items([\n            SidebarItem::new(\"runs\", \"Runs\")\n                .icon(Icon::List)\n                .badge(\"12\")\n                .children([\n                    SidebarItem::new(\"runs.active\", \"Active\").icon(Icon::Refresh),\n                    SidebarItem::new(\"runs.archived\", \"Archived\").icon(Icon::Archive),\n                ]),\n            SidebarItem::new(\"files\", \"Files\").icon(Icon::Folder),\n        ]),\n        SidebarSection::new(\"admin\").title(\"Administration\").items([\n            SidebarItem::new(\"settings\", \"Settings\").icon(Icon::Settings),\n            SidebarItem::new(\"policy\", \"Managed by policy\")\n                .icon(Icon::Key)\n                .disabled(true),\n        ]),\n    ]\n}\n\n#[derive(Default)]\nstruct SceneSidebar {\n    active: Option<SharedString>,\n    collapsed: bool,\n}\n\nimpl Global for SceneSidebar {}\n\npub(super) fn sidebar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSidebar>() {\n        cx.set_global(SceneSidebar::default());\n    }\n    let theme = cx.theme().clone();\n    let active = cx\n        .global::<SceneSidebar>()\n        .active\n        .clone()\n        .unwrap_or_else(|| \"runs.active\".into());\n    let collapsed = cx.global::<SceneSidebar>().collapsed;\n    let rail = |ident: &'static str, collapsed: bool| {\n        Sidebar::new(ident)\n            .sections(navigation_sections())\n            .active(active.clone())\n            .collapsed(collapsed)\n            .footer(\n                crate::foundation::text(\n                    &theme,\n                    TypeScale::Caption,\n                    if collapsed {\n                        SharedString::new_static(\"v0\")\n                    } else {\n                        SharedString::new_static(\"Fixture workspace\")\n                    },\n                )\n                .text_tone(&theme, TextTone::Faint),\n            )\n            .on_select(|id, window, cx| {\n                cx.global_mut::<SceneSidebar>().active = Some(id);\n                window.refresh();\n            })\n    };\n\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"Fixture navigation — select a destination, toggle a branch, or collapse the rail\",\n        ))\n        .child(\n            div()\n                .flex()\n                .flex_row()\n                .h(px(400.0))\n                .gap(px(theme.space(Space::Lg)))\n                .child(\n                    rail(\"scene.sidebar.expanded\", collapsed)\n                        .width(260.0)\n                        .header(caption(\n                            &theme,\n                            if collapsed { \"W\" } else { \"Fixture workspace\" },\n                        ))\n                        .on_collapse(|collapsed, window, cx| {\n                            cx.global_mut::<SceneSidebar>().collapsed = collapsed;\n                            window.refresh();\n                        }),\n                )\n                .child(rail(\"scene.sidebar.collapsed\", true)),\n        )\n        .child(caption(\n            &theme,\n            \"Current destination is caller-owned; arrow keys move focus without navigating\",\n        ))\n        .into_any_element()\n}\n\npub(super) fn sidebar_overflow(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Fixture stress states — fixed slots, scrolling, long labels, and a closed current branch\"))\n        .child(div().flex().gap(px(theme.space(Space::Lg))).h(px(320.0))\n            .child(div().w(px(300.0)).h_full().child(Sidebar::new(\"scene.sidebar-overflow.scroll\")\n                .fill_width()\n                .header(caption(&theme, \"Fixed header\"))\n                .footer(caption(&theme, \"Fixed footer\"))\n                .section(SidebarSection::new(\"destinations\").title(\"Destinations\").items(\n                    (0..24).map(|index| SidebarItem::new(format!(\"destination-{index}\"),\n                        if index == 1 { \"A long destination label that needs an ellipsis\".to_owned() }\n                        else { format!(\"Fixture destination {}\", index + 1) }).disabled(index == 2))\n                ))\n                .active(\"destination-1\")\n                .on_select(|_, _, _| {})))\n            .child(Sidebar::new(\"scene.sidebar-overflow.closed\")\n                .sections(navigation_sections()).expanded_ids(&[])\n                .active(\"runs.active\")\n                .header(caption(&theme, \"Host refuses branch expansion\"))\n                .footer(caption(&theme, \"Current: Active\"))\n                .on_select(|_, _, _| {}).on_toggle(|_, _, _, _| {})))\n        .into_any_element()\n}\n\n/// The page-size control of the pagination scene, kept across frames.\npub(super) struct ScenePagination {\n    page_size: Entity<Select>,\n}\n\nimpl Global for ScenePagination {}\n\npub(super) 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                .name(\"Rows per page\")\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(caption(\n            &theme,\n            \"a known total, with the page size the host offered\",\n        ))\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(caption(\n            &theme,\n            \"an unknown total: no numbers, no last page, and no count invented\",\n        ))\n        .child(\n            Pagination::new(\"scene.pagination.unknown\")\n                .page(3)\n                .unknown_total(true)\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    SharedString::new_static(\"The body of the current step belongs to the caller.\"),\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}\n\npub(super) fn undo_history(_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            \"the caller owns every revision and whether it can be restored\",\n        ))\n        .child(\n            UndoHistory::new(\"scene.undo-history\", \"Document undo history\")\n                .entries([\n                    HistoryEntry::new(\"opened\", \"Opened the fixture\")\n                        .description(\"The initial verified document\")\n                        .source(\"Fixture host\")\n                        .time(\"10:14\"),\n                    HistoryEntry::new(\"renamed\", \"Renamed the title\")\n                        .source(\"Alex\")\n                        .time(\"10:16\"),\n                    HistoryEntry::new(\"imported\", \"Imported archived blocks\")\n                        .description(\"The archive is no longer available\")\n                        .source(\"Archive\")\n                        .time(\"10:18\")\n                        .unavailable(\"This revision cannot be restored without the archive.\"),\n                    HistoryEntry::new(\"current\", \"Reordered the summary\")\n                        .description(\"Current document\")\n                        .source(\"Alex\")\n                        .time(\"10:21\"),\n                    HistoryEntry::new(\"draft\", \"Drafted a new conclusion\")\n                        .source(\"Fixture host\")\n                        .time(\"10:23\"),\n                ])\n                .current(\"current\")\n                .on_jump(|_, _, _| {}),\n        )\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"Requests go out over the system proxy.\",\n                ))\n                .on_toggle(|_, _, _| {}),\n        )\n        .child(\n            Collapsible::new(\"scene.collapsible.shut\", \"Diagnostics\")\n                .description(\"Nothing is collected until this is opened\")\n                .body(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"This body is absent from the tree while it is shut.\",\n                ))\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(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"Set by the administrator.\",\n                )),\n        )\n        .into_any_element()\n}\n\n//! Surfaces that appear above the page and take a decision.\n\nuse super::support::*;\n\npub(super) fn kbd(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // A keystroke is only ever read beside the thing it performs, so the\n    // exhibit shows it where it is used: at the end of a menu row, at the end\n    // of a sentence, and in the run of special keys whose glyphs are the part\n    // that goes wrong.\n    let named = |label: &'static str, keystroke: &'static str, id: &'static str| {\n        div()\n            .row()\n            .w_full()\n            .items_center()\n            .justify_between()\n            .gap_token(&theme, Space::Md)\n            .py_token(&theme, Space::Xs)\n            .child(crate::foundation::text(&theme, TypeScale::Body, label))\n            .child(Kbd::new(keystroke).id(id))\n    };\n\n    stack(&theme)\n        .w(px(420.0))\n        .child(caption(&theme, \"the shortcut sits with the thing it does\"))\n        .child(\n            div()\n                .column()\n                .w_full()\n                .card_surface(&theme, CardVariant::Elevated)\n                .px_token(&theme, Space::Md)\n                .py_token(&theme, Space::Sm)\n                .child(named(\n                    \"Open the command palette\",\n                    \"cmd-shift-p\",\n                    \"scene.kbd.palette\",\n                ))\n                .child(div().w_full().h(px(theme.space(Space::Sm))))\n                .child(named(\"Copy the selection\", \"ctrl-c\", \"scene.kbd.copy\"))\n                .child(div().w_full().h(px(theme.space(Space::Sm))))\n                .child(named(\"Rename in place\", \"cmd-alt-r\", \"scene.kbd.rename\")),\n        )\n        .child(caption(\n            &theme,\n            \"the keys that need the bundled symbol face\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(Kbd::new(\"enter\").id(\"scene.kbd.confirm\"))\n                .child(Kbd::new(\"escape\").id(\"scene.kbd.dismiss\"))\n                .child(Kbd::new(\"backspace\").id(\"scene.kbd.erase\"))\n                .child(Kbd::new(\"delete\").id(\"scene.kbd.delete\"))\n                .child(Kbd::new(\"tab\").id(\"scene.kbd.advance\"))\n                .child(Kbd::new(\"space\").id(\"scene.kbd.space\"))\n                .child(Kbd::new(\"up\").id(\"scene.kbd.up\"))\n                .child(Kbd::new(\"down\").id(\"scene.kbd.down\")),\n        )\n        .child(\n            div()\n                .row()\n                .items_center()\n                .gap_token(&theme, Space::Xs)\n                .child(crate::foundation::text(&theme, TypeScale::Body, \"Press\"))\n                .child(Kbd::new(\"cmd-enter\").id(\"scene.kbd.inline\"))\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Body,\n                    \"to send the message.\",\n                ))\n                .text_color(theme.colors.text_muted),\n        )\n        .into_any_element()\n}\n\n/// A page for a modal layer to sit over.\n///\n/// A scrim drawn over an empty canvas is indistinguishable from a fill: the\n/// only thing that shows it is translucent is what stays legible underneath\n/// it. So every scene in this file that raises a modal layer puts a page worth\n/// obscuring behind it rather than one line of text.\nfn page_behind(theme: &Theme, title: &'static str) -> gpui::Div {\n    let card = |heading: &'static str, lines: usize| {\n        div()\n            .flex_1()\n            .min_w_0()\n            .card_surface(theme, CardVariant::Elevated)\n            .overflow_hidden()\n            .child(filler(theme, heading, lines))\n    };\n    div()\n        .column()\n        .w_full()\n        .gap(px(theme.space(Space::Md)))\n        .child(crate::foundation::text(theme, TypeScale::Subtitle, title))\n        .child(\n            div()\n                .row()\n                .w_full()\n                .gap(px(theme.space(Space::Md)))\n                .child(card(\"Runs\", 5))\n                .child(card(\"Details\", 5)),\n        )\n}\n\npub(super) 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(page_behind(&theme, \"Workspace settings\"))\n        .child(\n            Overlay::modal(\"scene.overlay.dialog\")\n                .placement(Placement::Center)\n                .child(\n                    crate::overlay::surface(\n                        \"scene.overlay.surface\",\n                        &theme,\n                        crate::overlay::OverlaySurface::MODAL,\n                    )\n                    .w(px(320.0))\n                    .p(px(theme.spacing.lg))\n                    .gap(px(theme.spacing.sm))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Subtitle,\n                        \"Delete this workspace?\",\n                    ))\n                    .child(\n                        crate::foundation::text(\n                            &theme,\n                            TypeScale::Body,\n                            \"Its runs, filters and saved views are removed for everyone. This \\\n                                 cannot be undone.\",\n                        )\n                        .text_tone(&theme, TextTone::Muted),\n                    )\n                    .child(\n                        div()\n                            .row()\n                            .justify_end()\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}\n\n/// The dialog the scene shows, kept across frames.\n///\n/// A dialog owns whether it is open and which element had the keyboard before\n/// it opened, so rebuilding it every frame would reopen it every frame.\npub(super) struct SceneDialog {\n    replace: Entity<Dialog>,\n}\n\nimpl Global for SceneDialog {}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Content behind the dialog\",\n        ))\n        .child(replace)\n        .into_any_element()\n}\n\npub(super) 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                            .accessible_description(\"Writes the theme to a file on disk\")\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}\n\n/// The menu family the scenes show, kept across frames.\n///\n/// Each of these owns whether it is open, where the keyboard is, and which\n/// submenu stands expanded, so rebuilding them every frame would reopen them\n/// every frame. Building them once is also what makes the capture static.\npub(super) struct SceneMenus {\n    menu: Entity<Menu>,\n    context: Entity<ContextMenu>,\n    palette: Entity<CommandPalette>,\n    popover: Entity<Popover>,\n}\n\nimpl Global for SceneMenus {}\n\npub(super) fn menu_items() -> Vec<MenuItem> {\n    vec![\n        MenuItem::section(\"group\", \"This run\"),\n        MenuItem::command(\"copy\", \"Copy run id\")\n            .icon(Icon::Copy)\n            .shortcut(\"cmd-c\"),\n        MenuItem::check(\"follow\", \"Follow output\", true),\n        MenuItem::separator(\"rule\"),\n        MenuItem::command(\"publish\", \"Publish\").disabled(true),\n        MenuItem::submenu(\n            \"share\",\n            \"Share\",\n            [\n                MenuItem::command(\"share.link\", \"Copy link\").shortcut(\"cmd-shift-c\"),\n                MenuItem::command(\"share.export\", \"Export as file\"),\n            ],\n        ),\n        MenuItem::separator(\"destroy\"),\n        MenuItem::command(\"delete\", \"Delete this run\")\n            .icon(Icon::Trash)\n            .destructive(true),\n    ]\n}\n\npub(super) fn scene_commands() -> Vec<Command> {\n    vec![\n        Command::new(\"workspace.open\", \"Open workspace\")\n            .section(\"Workspace\")\n            .shortcut(\"cmd-o\"),\n        Command::new(\"workspace.close\", \"Close workspace\").section(\"Workspace\"),\n        Command::new(\"workspace.publish\", \"Publish workspace\")\n            .section(\"Workspace\")\n            .unavailable(\"Approval is required\"),\n        Command::new(\"editor.wrap\", \"Toggle word wrap\").section(\"Editor\"),\n    ]\n}\n\npub(super) fn ensure_menus(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneMenus>() {\n        return;\n    }\n    let menu = cx.new(|cx| {\n        Menu::new(\"scene.menu.run\", window, cx)\n            .trigger(\"Run actions\")\n            .items(menu_items())\n    });\n    menu.update(cx, |menu, cx| {\n        menu.open_submenu(\"share\", window, cx);\n    });\n\n    // The catalog reviews the drawn surface. Left on `Native`, `open_at` would\n    // hand this list to the operating system on macOS and Windows: a modal\n    // popup no capture can hold, opened under every scene that shares these\n    // fixtures, and on Windows it takes the keyboard from the `menu` scene's\n    // exhibit while the native UIA check reads it.\n    let context = cx.new(|cx| {\n        ContextMenu::new(\"scene.context.run\", window, cx)\n            .name(\"Run actions\")\n            .target(\"run-a04\")\n            .presentation(ContextMenuPresentation::InWindow)\n            .menu(menu_items())\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .w(px(320.0))\n                    .p(px(theme.spacing.md))\n                    .surface(&theme, Surface::Panel)\n                    .radius(&theme, Radius::Card)\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Body,\n                        \"Right-click this fixture row\",\n                    ))\n                    .into_any_element()\n            })\n    });\n    context.update(cx, |context, cx| {\n        context\n            .open_at(gpui::point(px(180.0), px(150.0)), window, cx)\n            .expect(\"in-window fixture\");\n    });\n\n    let palette = cx.new(|cx| {\n        CommandPalette::new(\"scene.palette.commands\", window, cx).commands(scene_commands())\n    });\n    palette.update(cx, |palette, cx| palette.set_query(\"work\", cx));\n\n    let popover = cx.new(|cx| {\n        Popover::new(\"scene.popover.filters\", window, cx)\n            .trigger(\"Filters\")\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .column()\n                    .w(px(260.0))\n                    .gap(px(theme.spacing.sm))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Body,\n                        \"Anything can live in a popover.\",\n                    ))\n                    .child(\n                        Checkbox::new(\"scene.popover.failing\")\n                            .label(\"Failing runs only\")\n                            .on_change(|_, _, _| {}),\n                    )\n                    .into_any_element()\n            })\n    });\n    popover.update(cx, |popover, cx| popover.open(window, cx));\n\n    cx.set_global(SceneMenus {\n        menu,\n        context,\n        palette,\n        popover,\n    });\n}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The trigger owns whether the surface is open.\",\n        ))\n        .child(popover)\n        .into_any_element()\n}\n\npub(super) fn menu(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_menus(window, cx);\n    let menus = cx.global::<SceneMenus>();\n    let menu = menus.menu.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .h(px(320.0))\n        // An open surface is an overlay and takes no room in the flow, so the\n        // scene reserves the panel's review area explicitly.\n        .child(div().h(px(300.0)).child(menu))\n        .into_any_element()\n}\n\npub(super) 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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"The right-click reports the row. Nothing is selected by it.\",\n        ))\n        .child(context)\n        .into_any_element()\n}\n\npub(super) 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}\n\n/// The notification layer the scene shows, kept across frames.\n///\n/// The stack, each timer, and each entry animation outlive a frame, so the\n/// layer is built once and the toasts are pushed once with it.\npub(super) struct SceneToasts {\n    layer: Entity<ToastLayer>,\n}\n\nimpl Global for SceneToasts {}\n\npub(super) fn toast(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneToasts>() {\n        let layer = cx.new(|cx| ToastLayer::new(window, cx).capacity(4));\n        cx.set_global(SceneToasts { layer });\n        toast_push(\n            window,\n            cx,\n            Toast::new(\"scene.toast.saved\", \"Theme exported to disk\").tone(Tone::Success),\n        );\n        toast_push(\n            window,\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            window,\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            window,\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(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"Content behind the notifications\",\n        ))\n        // A failure keeps its report on screen; only the success times out.\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Body,\n            \"A danger or warning toast stays until it is dismissed.\",\n        ))\n        .child(layer)\n        .into_any_element()\n}\n\n/// The notification centre the scene shows, kept across frames.\npub(super) struct SceneNotifications {\n    centre: Entity<NotificationCenter>,\n}\n\nimpl Global for SceneNotifications {}\n\npub(super) 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}\n\n/// Glass over the page it covers, which is the only way to see that the\n/// backdrop is blurred rather than merely tinted.\npub(super) fn frost(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let card = |title: &'static str, body: &'static str| {\n        div()\n            .column()\n            .gap(px(theme.space(Space::Xs)))\n            .p(px(theme.space(Space::Md)))\n            .child(crate::foundation::text(\n                &theme,\n                TypeScale::Label,\n                SharedString::from(title),\n            ))\n            .child(caption(&theme, body))\n    };\n    // What is behind the glass is a page, not a test pattern. A block of\n    // accent stripes dropped into a panel reads as a hole cut in it, and it\n    // answers the wrong question anyway: the thing a reader has to be able to\n    // judge is whether text they can otherwise read has gone out of focus.\n    stack(&theme)\n        .w(px(480.0))\n        .child(caption(&theme, \"A floating surface on glass\"))\n        .child(\n            div()\n                .relative()\n                .h(px(200.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(filler(&theme, \"Document\", 8))\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(48.0))\n                        // Far enough left to cross the lines. Placed clear of\n                        // them the glass had nothing behind it, so the picture\n                        // could not answer the one question it is here for:\n                        // whether text a reader can otherwise read has gone\n                        // out of focus.\n                        .left(px(64.0))\n                        .w(px(240.0))\n                        .child(\n                            Frost::new(\"scene.frost.popover\")\n                                .radius(Radius::Card)\n                                .child(card(\n                                    \"Rename\",\n                                    \"The page behind stays visible, out of focus\",\n                                )),\n                        ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"The same glass, blurred further and raised above the panel\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(160.0))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(filler(&theme, \"Files\", 6))\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(32.0))\n                        .left(px(64.0))\n                        .w(px(280.0))\n                        .child(\n                            Frost::new(\"scene.frost.rail\")\n                                // A surface a step above the page it covers.\n                                // Tinted with the page's own colour the glass\n                                // had no surface of its own: at any alpha, a\n                                // fill the colour of what is behind it adds\n                                // nothing, and the rail's words landed\n                                // directly on the words of the file list.\n                                .surface(gpui_kit_theme::Surface::Raised)\n                                .radius(Radius::Dialog)\n                                .blur(32.0)\n                                .child(card(\n                                    \"Rail\",\n                                    \"The lines behind stay legible and out of focus\",\n                                )),\n                        ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// The optics, one at a time and then together, over a backdrop with enough\n/// structure in it that a bend is visible as a bend rather than as a smudge.\n///\n/// The presets sit side by side deliberately: `Frosted` is the control, and\n/// what separates it from `Lens` is exactly the refraction, so a reviewer\n/// looking at the pair is looking at the thing that changed.\n/// One square of the backdrop every optics plate is read against, and the two\n/// plate footprints built from it. Both are whole numbers of squares.\nconst TILE: f32 = 48.0;\nconst PLATE_WIDTH: f32 = TILE * 8.0;\nconst PLATE_HEIGHT: f32 = TILE * 3.0;\nconst JOIN_WIDTH: f32 = PLATE_WIDTH;\n\n/// A deterministic raster media fixture, not downloaded product content.\nfn glass_media() -> Arc<RenderImage> {\n    static IMAGE: OnceLock<Arc<RenderImage>> = OnceLock::new();\n    IMAGE\n        .get_or_init(|| {\n            let mut pixels = Vec::with_capacity(480 * 144 * 4);\n            for y in 0..144 {\n                for x in 0..480 {\n                    let ridge = 65 + ((x as f32 * 0.018).sin() * 30.0) as i32;\n                    let rgba = if y > ridge {\n                        [28, 91 + (x / 8) as u8, 91, 255]\n                    } else {\n                        [110 + (y / 2) as u8, 165, 220, 255]\n                    };\n                    pixels.extend_from_slice(&rgba);\n                }\n            }\n            Arc::new(\n                RenderImage::from_rgba(size(DevicePixels(480), DevicePixels(144)), pixels)\n                    .expect(\"media fixture dimensions\"),\n            )\n        })\n        .clone()\n}\n\n/// A constrained media tile owns size; its caption only names edge anchors.\npub(super) fn media_caption(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let tile = |id: &'static str, reduced: bool| {\n        let material_theme = theme.clone().with_reduce_transparency(reduced);\n        div()\n            .relative()\n            .w_full()\n            .h(px(220.0))\n            .radius(&theme, Radius::Card)\n            .overflow_hidden()\n            .child(\n                gpui::img(glass_media())\n                    .size_full()\n                    .radius(&theme, Radius::Card)\n                    .object_fit(gpui::ObjectFit::Cover),\n            )\n            .child(\n                crate::overlay::surface(\n                    id,\n                    &material_theme,\n                    crate::overlay::OverlaySurface::MEDIA_CAPTION,\n                )\n                .absolute()\n                .left_0()\n                .right_0()\n                .bottom_0()\n                .flex_row()\n                .items_center()\n                .gap_token(&theme, Space::Md)\n                .p_token(&theme, Space::Md)\n                .child(\n                    div()\n                        .flex_1()\n                        .min_w_0()\n                        .type_scale(&theme, TypeScale::Label)\n                        .child(if reduced {\n                            \"Media fixture · reduced transparency\"\n                        } else {\n                            \"Media fixture · Clear caption\"\n                        }),\n                )\n                .child(\n                    div()\n                        .type_scale(&theme, TypeScale::Caption)\n                        .child(\"3 projects\"),\n                )\n                .child(\n                    Button::new(format!(\"{id}.new\"))\n                        .label(\"New project\")\n                        .ghost()\n                        .on_click(|_, _| {}),\n                ),\n            )\n    };\n    stack(&theme)\n        .w_full()\n        .child(caption(\n            &theme,\n            \"Parent-constrained width; caption height follows its content\",\n        ))\n        .child(tile(\"scene.media-caption.clear\", false))\n        .child(tile(\"scene.media-caption.reduced\", true))\n        .into_any_element()\n}\n\npub(super) fn glass(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let label = |title: &'static str, body: &'static str| {\n        div()\n            .column()\n            .gap(px(theme.space(Space::Xs)))\n            .p(px(theme.space(Space::Md)))\n            .child(div().type_scale(&theme, TypeScale::Label).child(title))\n            .child(div().type_scale(&theme, TypeScale::Caption).child(body))\n    };\n\n    // A ruled checkerboard makes the material contract visible: Regular's\n    // rim refracts the scattered source, bending colour and luminance bands\n    // without restoring recognizable fine lines. Clear stays sharp because\n    // its blur is zero. The board is neutral, and every plate is an exact\n    // number of squares across and down: a board cut through the middle of a\n    // square at the plate edge reads as a broken pattern rather than as the\n    // ruled backdrop the optics are being measured against.\n    let checker_light = theme.colors.text_faint;\n    let checker_dark = theme.colors.canvas;\n    let checker_rule = theme.colors.divider.opacity(0.55);\n    let checkerboard =\n        |width: f32, height: f32| {\n            let columns = (width / TILE).ceil() as usize;\n            let rows = (height / TILE).ceil() as usize;\n            div()\n                .absolute()\n                .top(px(0.0))\n                .left(px(0.0))\n                .w(px(width))\n                .h(px(height))\n                .column()\n                .overflow_hidden()\n                .children((0..rows).map(|row| {\n                    div()\n                        .flex()\n                        .flex_none()\n                        .h(px(TILE))\n                        .children((0..columns).map(move |column| {\n                            div().flex_none().w(px(TILE)).h(px(TILE)).bg(\n                                if (row + column) % 2 == 0 {\n                                    checker_light\n                                } else {\n                                    checker_dark\n                                },\n                            )\n                        }))\n                }))\n                .children((0..=(width / 12.0) as usize).map(|column| {\n                    div()\n                        .absolute()\n                        .top(px(0.0))\n                        .left(px(column as f32 * 12.0))\n                        .w(px(1.0))\n                        .h(px(height))\n                        .bg(checker_rule)\n                }))\n                .children((0..=(height / 12.0) as usize).map(|row| {\n                    div()\n                        .absolute()\n                        .top(px(row as f32 * 12.0))\n                        .left(px(0.0))\n                        .w(px(width))\n                        .h(px(1.0))\n                        .bg(checker_rule)\n                }))\n        };\n\n    let plate =\n        |ident: &'static str, preset: GlassPreset, title: &'static str, body: &'static str| {\n            div()\n                .relative()\n                .h(px(PLATE_HEIGHT))\n                .w(px(PLATE_WIDTH))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    if preset == GlassPreset::Clear || ident == \"scene.glass.media\" {\n                        gpui::img(glass_media())\n                            .object_fit(gpui::ObjectFit::Cover)\n                            .w(px(PLATE_WIDTH))\n                            .h(px(PLATE_HEIGHT))\n                            .into_any_element()\n                    } else {\n                        checkerboard(PLATE_WIDTH, PLATE_HEIGHT).into_any_element()\n                    },\n                )\n                .when(ident == \"scene.glass.liquid\", |element| {\n                    element.child(div().absolute().inset_0().child(filler(\n                        &theme,\n                        \"Document text behind Regular glass\",\n                        6,\n                    )))\n                })\n                .child(\n                    div()\n                        .absolute()\n                        .top(px(28.0))\n                        .left(px(52.0))\n                        .w(px(280.0))\n                        .child(\n                            Glass::new(ident)\n                                .preset(preset)\n                                .dimmed(preset == GlassPreset::Clear)\n                                .adaptive(true)\n                                .radius(Radius::Dialog)\n                                .child(label(title, body)),\n                        ),\n                )\n        };\n\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"Clear: dark Frosted / reduced transparency           Clear + 35% dimming / media only\",\n        ))\n        .child(\n            row(&theme)\n                .child(crate::foundation::ThemeOverlay::theme(\n                    theme.clone().with_reduce_transparency(true),\n                    plate(\n                        \"scene.glass.frosted\",\n                        GlassPreset::Clear,\n                        \"Clear: reduced transparency\",\n                        \"Dark Frosted and light content in every theme\",\n                    ),\n                ))\n                .child(plate(\n                    \"scene.glass.clear\",\n                    GlassPreset::Clear,\n                    \"Clear + dimmed\",\n                    \"A sharp media fixture, never default chrome\",\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"Regular over text and media: blur, achromatic wash, lensing and hairline\",\n        ))\n        .child(\n            row(&theme)\n                .child(plate(\n                    \"scene.glass.liquid\",\n                    GlassPreset::Liquid,\n                    \"Regular Liquid\",\n                    \"Large reading surfaces keep the window appearance\",\n                ))\n                .child(plate(\n                    \"scene.glass.media\",\n                    GlassPreset::Liquid,\n                    \"Regular on media\",\n                    \"The same material, not the Clear variant\",\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"Compact Regular controls: appearance may flip; no opaque face\",\n        ))\n        .child(\n            div()\n                .relative()\n                .h(px(TILE * 2.0))\n                .w(px(PLATE_WIDTH))\n                .surface(&theme, Surface::Panel)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(div().absolute().inset_0().bg(gpui::white()))\n                .child(\n                    div()\n                        .absolute()\n                        .right_0()\n                        .top_0()\n                        .w(px(PLATE_WIDTH / 2.0))\n                        .h_full()\n                        .bg(gpui::black()),\n                )\n                .child(\n                    div()\n                        .absolute()\n                        .inset_0()\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(\n                            Glass::new(\"scene.glass.regular.one\")\n                                .preset(GlassPreset::Liquid)\n                                .surface(Surface::Raised)\n                                .radius(Radius::Pill)\n                                .adaptive(true)\n                                .child(\n                                    div()\n                                        .w(px(110.0))\n                                        .h(px(32.0))\n                                        .flex()\n                                        .items_center()\n                                        .justify_center()\n                                        .child(\"Portal\"),\n                                ),\n                        )\n                        .child(\n                            Glass::new(\"scene.glass.regular.two\")\n                                .preset(GlassPreset::Liquid)\n                                .radius(Radius::Pill)\n                                .adaptive(true)\n                                .child(\n                                    div()\n                                        .w(px(110.0))\n                                        .h(px(32.0))\n                                        .rounded(px(theme.radius(Radius::Pill)))\n                                        .bg(theme.colors.selected)\n                                        .flex()\n                                        .items_center()\n                                        .justify_center()\n                                        .child(\"Harbour\"),\n                                ),\n                        ),\n                ),\n        )\n        // The last two demonstrations sit side by side so the whole scene\n        // stays inside the window a real display can give the gallery, which\n        // is where the DirectX renderer gets looked at.\n        .child(\n            div()\n                .flex()\n                .flex_row()\n                .gap(px(theme.space(Space::Md)))\n                .child(\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(caption(&theme, \"Fused: two panes joined into one body\"))\n                        .child(\n                            div()\n                                .relative()\n                                .h(px(PLATE_HEIGHT))\n                                .w(px(JOIN_WIDTH))\n                                .surface(&theme, Surface::Panel)\n                                .radius(&theme, Radius::Card)\n                                .overflow_hidden()\n                                .child(checkerboard(JOIN_WIDTH, PLATE_HEIGHT))\n                                .child(\n                                    div().absolute().top(px(40.0)).left(px(40.0)).child(\n                                        GlassGroup::new(\"scene.glass.fused\")\n                                            .preset(GlassPreset::Liquid)\n                                            .radius(Radius::Dialog)\n                                            .gap(12.0)\n                                            .pane(\n                                                \"scene.glass.fused.left\",\n                                                label(\"Left\", \"One lobe of the body\"),\n                                            )\n                                            .pane(\n                                                \"scene.glass.fused.right\",\n                                                label(\"Right\", \"Joined across the gap\"),\n                                            ),\n                                    ),\n                                ),\n                        ),\n                )\n                .child(\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(caption(&theme, \"Large adaptive surfaces never flip\"))\n                        .child(\n                            div()\n                                .relative()\n                                .h(px(PLATE_HEIGHT))\n                                .w(px(JOIN_WIDTH))\n                                .surface(&theme, Surface::Panel)\n                                .radius(&theme, Radius::Card)\n                                .overflow_hidden()\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(0.0))\n                                        .left(px(0.0))\n                                        .w(px(JOIN_WIDTH / 2.0))\n                                        .h(px(PLATE_HEIGHT))\n                                        .bg(gpui::white()),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(0.0))\n                                        .left(px(JOIN_WIDTH / 2.0))\n                                        .w(px(JOIN_WIDTH / 2.0))\n                                        .h(px(PLATE_HEIGHT))\n                                        .bg(gpui::black()),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(28.0))\n                                        .left(px(15.0))\n                                        .w(px(160.0))\n                                        .child(\n                                            Glass::new(\"scene.glass.adaptive.bright\")\n                                                .preset(GlassPreset::Liquid)\n                                                .radius(Radius::Dialog)\n                                                .adaptive(true)\n                                                .adaptive_appearance(true)\n                                                .child(label(\n                                                    \"Bright\",\n                                                    \"The reading lands next frame\",\n                                                )),\n                                        ),\n                                )\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(28.0))\n                                        .left(px(JOIN_WIDTH / 2.0 + 15.0))\n                                        .w(px(160.0))\n                                        .child(\n                                            Glass::new(\"scene.glass.adaptive.dark\")\n                                                .preset(GlassPreset::Liquid)\n                                                .radius(Radius::Dialog)\n                                                .adaptive(true)\n                                                .child(label(\"Dark\", \"The same glass, other side\")),\n                                        ),\n                                ),\n                        ),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Focused: one inward report edge — Regular, Clear + dimmed, Frosted, reduced\",\n        ))\n        .child(\n            row(&theme).children(\n                [\n                    (\"regular\", GlassPreset::Liquid, false, \"Regular\"),\n                    (\"clear\", GlassPreset::Clear, false, \"Clear + dimmed\"),\n                    (\"frosted\", GlassPreset::Frosted, false, \"Frosted\"),\n                    (\"reduced\", GlassPreset::Clear, true, \"Reduced\"),\n                ]\n                .into_iter()\n                .map(|(name, preset, reduced, title)| {\n                    div()\n                        .relative()\n                        .w(px(210.0))\n                        .h(px(96.0))\n                        .radius(&theme, Radius::Card)\n                        .overflow_hidden()\n                        .child(\n                            gpui::img(glass_media())\n                                .size_full()\n                                .object_fit(gpui::ObjectFit::Cover),\n                        )\n                        .child(\n                            div()\n                                .absolute()\n                                .left(px(12.0))\n                                .right(px(12.0))\n                                .top(px(24.0))\n                                .child(crate::foundation::ThemeOverlay::theme(\n                                    theme.clone().with_reduce_transparency(reduced),\n                                    Glass::new(format!(\"scene.glass.focused.{name}\"))\n                                        .preset(preset)\n                                        .dimmed(preset == GlassPreset::Clear)\n                                        .focused(true)\n                                        .radius(Radius::Pill)\n                                        .child(\n                                            div()\n                                                .w_full()\n                                                .h(px(40.0))\n                                                .flex()\n                                                .items_center()\n                                                .justify_center()\n                                                .type_scale(&theme, TypeScale::Label)\n                                                .child(title),\n                                        ),\n                                )),\n                        )\n                }),\n            ),\n        )\n        .child(caption(\n            &theme,\n            \"Budget fallback: opaque cards, never holes — R keeps its focus report\",\n        ))\n        .child(div().flex().gap(px(4.0)).children(('A'..='R').map(|name| {\n            Glass::new(format!(\"scene.glass.budget.{name}\"))\n                .focused(name == 'R')\n                .child(\n                    div()\n                        .w(px(38.0))\n                        .h(px(30.0))\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .child(name.to_string()),\n                )\n        })))\n        .child(caption(\n            &theme,\n            \"Nine lobes exceed the fused budget: every pane retains an opaque face\",\n        ))\n        .child(\n            ('A'..='I').fold(GlassGroup::new(\"scene.glass.lobe-budget\"), |group, name| {\n                group.pane(\n                    format!(\"scene.glass.lobe-budget.{name}\"),\n                    div()\n                        .w(px(58.0))\n                        .h(px(30.0))\n                        .flex()\n                        .items_center()\n                        .justify_center()\n                        .child(name.to_string()),\n                )\n            }),\n        )\n        .into_any_element()\n}\n\n/// Optical parameters over a deterministic ruled fixture, without a wash or\n/// decorative highlight hiding the displacement. Labels sit outside the lens.\npub(super) fn glass_optics(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let specimens = [\n        (\"identity\", \"Index 1 / unchanged\", 1., 24., 24., 0., 0.),\n        (\"water\", \"Index 1.33 / shallow bend\", 1.33, 24., 24., 0., 0.),\n        (\"glass\", \"Index 1.5 / deeper bend\", 1.5, 24., 24., 0., 0.),\n        (\n            \"thick\",\n            \"48px thickness / same index\",\n            1.5,\n            48.,\n            24.,\n            0.,\n            0.,\n        ),\n        (\"contact\", \"Source plane at base\", 1.5, 24., 0., 0., 0.),\n        (\n            \"dispersion\",\n            \"Spectral indices / no highlight\",\n            1.5,\n            24.,\n            24.,\n            0.25,\n            0.,\n        ),\n        (\n            \"reflection\",\n            \"Fresnel / same surface normal\",\n            1.5,\n            24.,\n            24.,\n            0.,\n            1.,\n        ),\n        (\n            \"scatter\",\n            \"Same optics / 8px scattering\",\n            1.5,\n            24.,\n            24.,\n            0.,\n            0.,\n        ),\n    ];\n    stack(&theme)\n        .w(px(900.))\n        .child(caption(\n            &theme,\n            \"Snell refraction — fixture grid; foreground content is not distorted\",\n        ))\n        .children(specimens.chunks(4).map(|specimens| {\n            row(&theme).children(specimens.iter().map(\n                |&(name, title, index, thickness, depth, dispersion, specular)| {\n                    div()\n                        .column()\n                        .gap_token(&theme, Space::Sm)\n                        .w(px(210.))\n                        .child(caption(&theme, title))\n                        .child(\n                            div()\n                                .relative()\n                                .w(px(210.))\n                                .h(px(180.))\n                                .overflow_hidden()\n                                .bg(theme.colors.canvas)\n                                .children((0..18).map(|line| {\n                                    div()\n                                        .absolute()\n                                        .top(px(line as f32 * 10.))\n                                        .left_0()\n                                        .w_full()\n                                        .h(px(1.))\n                                        .bg(theme.colors.text_faint)\n                                }))\n                                .children((0..21).map(|line| {\n                                    div()\n                                        .absolute()\n                                        .left(px(line as f32 * 10.))\n                                        .top_0()\n                                        .h_full()\n                                        .w(px(1.))\n                                        .bg(theme.colors.text_faint)\n                                }))\n                                .child(\n                                    div()\n                                        .absolute()\n                                        .top(px(22.))\n                                        .left(px(25.))\n                                        .w(px(160.))\n                                        .child(\n                                            Glass::new(format!(\"scene.glass-optics.{name}\"))\n                                                .preset(GlassPreset::Lens)\n                                                .radius_px(48.)\n                                                .refraction(1.)\n                                                .thickness(thickness)\n                                                .refractive_index(index)\n                                                .backdrop_depth(depth)\n                                                .dispersion(dispersion)\n                                                .specular(specular)\n                                                .blur(if name == \"scatter\" { 8. } else { 0. })\n                                                .track_pointer(name == \"reflection\")\n                                                .pressable(true)\n                                                .child(\n                                                    div()\n                                                        .w_full()\n                                                        .h(px(136.))\n                                                        .flex()\n                                                        .items_center()\n                                                        .justify_center()\n                                                        .child(\n                                                            div()\n                                                                .px_token(&theme, Space::Sm)\n                                                                .bg(theme.colors.panel)\n                                                                .child(\"Aa 123\"),\n                                                        ),\n                                                ),\n                                        ),\n                                ),\n                        )\n                },\n            ))\n        }))\n        .child(caption(\n            &theme,\n            \"Fused Regular / zero blur — one height field; press changes thickness and its normal\",\n        ))\n        .child(\n            div()\n                .relative()\n                .w(px(864.))\n                .h(px(120.))\n                .overflow_hidden()\n                .children((0..87).map(|line| {\n                    div()\n                        .absolute()\n                        .left(px(line as f32 * 10.))\n                        .top_0()\n                        .h_full()\n                        .w(px(1.))\n                        .bg(theme.colors.text_faint)\n                }))\n                .children((0..12).map(|line| {\n                    div()\n                        .absolute()\n                        .top(px(line as f32 * 10.))\n                        .left_0()\n                        .w_full()\n                        .h(px(1.))\n                        .bg(theme.colors.text_faint)\n                }))\n                .child(\n                    div().absolute().left(px(24.)).top(px(24.)).child(\n                        GlassGroup::new(\"scene.glass-optics.fused\")\n                            .preset(GlassPreset::Liquid)\n                            .blur(0.)\n                            .thickness(48.)\n                            .refractive_index(1.5)\n                            .backdrop_depth(24.)\n                            .radius(Radius::Pill)\n                            .gap(8.)\n                            .merge(32.)\n                            .pressable(true)\n                            .pane(\n                                \"scene.glass-optics.fused.left\",\n                                div()\n                                    .w(px(380.))\n                                    .h(px(72.))\n                                    .flex()\n                                    .items_center()\n                                    .justify_center()\n                                    .child(\"Left\"),\n                            )\n                            .pane(\n                                \"scene.glass-optics.fused.right\",\n                                div()\n                                    .w(px(380.))\n                                    .h(px(72.))\n                                    .flex()\n                                    .items_center()\n                                    .justify_center()\n                                    .child(\"Right\"),\n                            ),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// Colour belongs to the optical material, including a group's bridge.\n/// Captions remain outside the specimens so tint strength is visible.\npub(super) fn glass_materials(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let specimens = [\n        (\"protected\", \"Default body protection\", true, None),\n        (\"material\", \"Caller-owned legibility\", false, None),\n        (\n            \"tint-partial\",\n            \"25% tint / visible backdrop\",\n            true,\n            Some(0.25),\n        ),\n        (\n            \"tint-solid\",\n            \"100% tint / rim above colour\",\n            true,\n            Some(1.0),\n        ),\n    ];\n    let backdrop = || {\n        div()\n            .relative()\n            .w(px(200.0))\n            .h(px(112.0))\n            .bg(gpui::rgb(0xffffff))\n            .children((0..8).map(|stripe| {\n                div()\n                    .absolute()\n                    .left(px(stripe as f32 * 25.0))\n                    .top_0()\n                    .w(px(12.0))\n                    .h_full()\n                    .bg(gpui::rgb(0x8090a0))\n            }))\n    };\n    stack(&theme)\n        .w(px(900.0))\n        .child(caption(\n            &theme,\n            \"Material policy / deterministic stripe fixture, not native reference\",\n        ))\n        .child(\n            row(&theme).children(specimens.into_iter().map(|(id, title, protect, tint)| {\n                let mut glass = Glass::new(format!(\"scene.glass-materials.{id}\"))\n                    .radius_px(24.0)\n                    .blur(2.0)\n                    .protect_text_contrast(protect);\n                if let Some(alpha) = tint {\n                    glass = glass.tint(theme.colors.accent.opacity(alpha));\n                }\n                div()\n                    .column()\n                    .gap_token(&theme, Space::Sm)\n                    .child(caption(&theme, title))\n                    .child(\n                        backdrop().child(\n                            div()\n                                .absolute()\n                                .left(px(20.0))\n                                .top(px(24.0))\n                                .child(glass.child(div().w(px(160.0)).h(px(64.0)))),\n                        ),\n                    )\n            })),\n        )\n        .child(caption(\n            &theme,\n            \"Tint across joined panes / reduced-transparency fallback\",\n        ))\n        .child(\n            row(&theme).children([false, true].into_iter().map(|reduced| {\n                let id = if reduced { \"reduced\" } else { \"joined\" };\n                let tint = theme.colors.accent.opacity(0.25);\n                let group = GlassGroup::new(format!(\"scene.glass-materials.{id}\"))\n                    .radius(Radius::Pill)\n                    .gap(8.0)\n                    .merge(32.0)\n                    .blur(2.0)\n                    .tint(tint)\n                    .pane(\n                        format!(\"scene.glass-materials.{id}.left\"),\n                        div().w(px(68.0)).h(px(56.0)),\n                    )\n                    .pane(\n                        format!(\"scene.glass-materials.{id}.right\"),\n                        div().w(px(68.0)).h(px(56.0)),\n                    );\n                backdrop().child(div().absolute().left(px(28.0)).top(px(28.0)).child(\n                    ThemeOverlay::new(move |t| t.clone().with_reduce_transparency(reduced), group),\n                ))\n            })),\n        )\n        .child(caption(\n            &theme,\n            \"Rounded foreground clips / surface shadows and joined optics stay outside\",\n        ))\n        .child(\n            row(&theme)\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(20.0)).top(px(24.0)).child(\n                            Glass::new(\"scene.glass-materials.clip-surface\")\n                                .radius_px(24.0)\n                                .child(div().w(px(160.0)).h(px(64.0)).bg(theme.colors.accent)),\n                        ),\n                    ),\n                )\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(28.0)).top(px(28.0)).child(\n                            GlassGroup::new(\"scene.glass-materials.clip-group\")\n                                .radius(Radius::Pill)\n                                .gap(8.0)\n                                .merge(32.0)\n                                .pane(\n                                    \"scene.glass-materials.clip-left\",\n                                    div().w(px(68.0)).h(px(56.0)).bg(theme.colors.accent),\n                                )\n                                .pane(\n                                    \"scene.glass-materials.clip-right\",\n                                    div().w(px(68.0)).h(px(56.0)).bg(theme.colors.accent),\n                                ),\n                        ),\n                    ),\n                )\n                .child(\n                    backdrop().child(\n                        div().absolute().left(px(20.0)).top(px(24.0)).child(\n                            crate::overlay::surface(\n                                \"scene.glass-materials.clip-frame\",\n                                &theme,\n                                crate::overlay::OverlaySurface::MODAL,\n                            )\n                            .w(px(160.0))\n                            .h(px(64.0))\n                            .children(\n                                [theme.colors.accent, theme.colors.text_faint]\n                                    .map(|color| div().w_full().h(px(32.0)).bg(color)),\n                            ),\n                        ),\n                    ),\n                ),\n        )\n        .into_any_element()\n}\n\n/// The drawer the scene shows, kept across frames and settled so the capture\n/// photographs the panel where it comes to rest rather than mid-slide.\npub(super) struct SceneDrawer {\n    filters: Entity<Drawer>,\n}\n\nimpl Global for SceneDrawer {}\n\npub(super) 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                .resizable(true)\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                    let group = |heading: &'static str, rows: gpui::Div| {\n                        div()\n                            .column()\n                            .gap(px(theme.space(Space::Sm)))\n                            .child(\n                                crate::foundation::text(&theme, TypeScale::Label, heading)\n                                    .text_tone(&theme, TextTone::Muted),\n                            )\n                            .child(rows.column().gap(px(theme.space(Space::Sm))))\n                    };\n                    div()\n                        .column()\n                        .gap(px(theme.space(Space::Lg)))\n                        .child(group(\n                            \"Outcome\",\n                            div()\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.cancelled\")\n                                        .label(\"Include cancelled\")\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .child(group(\n                            \"Ownership\",\n                            div()\n                                .child(\n                                    Checkbox::new(\"scene.drawer.mine\")\n                                        .label(\"Started by me\")\n                                        .on_change(|_, _, _| {}),\n                                )\n                                .child(\n                                    Checkbox::new(\"scene.drawer.watching\")\n                                        .label(\"Repositories I watch\")\n                                        .checked(true)\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .child(group(\n                            \"Window\",\n                            div()\n                                .child(\n                                    Checkbox::new(\"scene.drawer.today\")\n                                        .label(\"Today\")\n                                        .checked(true)\n                                        .on_change(|_, _, _| {}),\n                                )\n                                .child(\n                                    Checkbox::new(\"scene.drawer.week\")\n                                        .label(\"This week\")\n                                        .on_change(|_, _, _| {}),\n                                ),\n                        ))\n                        .into_any_element()\n                })\n                // Two controls, sized to their labels and pinned to the\n                // reading edge: a full-width primary slab is the loudest\n                // thing on the page and says the drawer has one exit.\n                .footer(|_, cx| {\n                    let theme = cx.theme().clone();\n                    div()\n                        .row()\n                        .justify_end()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(\n                            Button::new(\"scene.drawer.cancel\")\n                                .label(\"Cancel\")\n                                .secondary()\n                                .on_click(|_, _| {}),\n                        )\n                        .child(\n                            Button::new(\"scene.drawer.apply\")\n                                .label(\"Apply\")\n                                .primary()\n                                .on_click(|_, _| {}),\n                        )\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(page_behind(&theme, \"Runs\"))\n        .child(filters)\n        .into_any_element()\n}\n\npub(super) 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(\n            row(&theme)\n                .child(crate::foundation::text(\n                    &theme,\n                    TypeScale::Label,\n                    \"Reported by\",\n                ))\n                .child(card),\n        )\n        .into_any_element()\n}\n\npub(super) 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}\n\nstruct SceneBottomSheet(Entity<crate::overlay::sheet::BottomSheet>);\nimpl Global for SceneBottomSheet {}\n\npub(super) fn bottom_sheet(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::overlay::sheet::{BottomSheet, BottomSheetEvent, SheetDetent};\n    if !cx.has_global::<SceneBottomSheet>() {\n        let sheet = cx.new(|cx| BottomSheet::new(\"scene.bottom-sheet\", window, cx));\n        sheet.update(cx, |sheet, cx| {\n            sheet.set_title(\"Choose destination · fixture\", cx);\n            sheet.set_detents(\n                vec![\n                    SheetDetent::new(\"Compact\", 290.0),\n                    SheetDetent::new(\"Half\", 430.0),\n                    SheetDetent::new(\"Full\", 640.0),\n                ],\n                \"Half\",\n                cx,\n            );\n            let scroll = gpui::ScrollHandle::new();\n            sheet.set_scroll_handle(Some(scroll.clone()), cx);\n            sheet.set_content(\n                Some(Rc::new(move |_, cx| {\n                    let _theme = cx.theme().clone();\n                    div()\n                        .id(\"scene.bottom-sheet.list\")\n                        .column()\n                        .size_full()\n                        .overflow_y_scroll()\n                        .track_scroll(&scroll)\n                        .children(\n                            [\n                                (\"home\", \"Home\"),\n                                (\"work\", \"Work\"),\n                                (\"library\", \"Library\"),\n                                (\"airport\", \"Airport\"),\n                                (\"station\", \"Station\"),\n                                (\"garden\", \"Garden\"),\n                                (\"museum\", \"Museum\"),\n                            ]\n                            .into_iter()\n                            .map(|(id, label)| {\n                                Button::new(format!(\"scene.bottom-sheet.destination.{id}\"))\n                                    .label(label)\n                                    .secondary()\n                                    .control_size(gpui_kit_theme::ControlSize::Touch)\n                                    .on_click(|_, _| {})\n                            }),\n                        )\n                        .into_any_element()\n                })),\n                cx,\n            );\n            sheet.open(window, cx);\n            sheet.settle(cx);\n        });\n        cx.subscribe(&sheet, |sheet, event, cx| {\n            if let BottomSheetEvent::DetentRequested(id) = event {\n                sheet.update(cx, |sheet, cx| {\n                    sheet.set_detent(id.clone(), cx);\n                });\n            }\n        })\n        .detach();\n        cx.set_global(SceneBottomSheet(sheet));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .h(px(640.0))\n        .child(page_behind(&theme, \"Caller-owned destinations\"))\n        .child(cx.global::<SceneBottomSheet>().0.clone())\n        .into_any_element()\n}\n\nstruct SceneActionSheet(Entity<crate::overlay::sheet::ActionSheet>);\nimpl Global for SceneActionSheet {}\n\npub(super) fn action_sheet(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::overlay::sheet::{ActionSheet, SheetAction, SheetActionState};\n    if !cx.has_global::<SceneActionSheet>() {\n        let sheet = cx.new(|cx| ActionSheet::new(\"scene.action-sheet\", window, cx));\n        sheet.update(cx, |sheet, cx| {\n            let mut remove = SheetAction::new(\"remove\", \"Remove from collection\");\n            remove.destructive = true;\n            let mut share = SheetAction::new(\"share\", \"Share unavailable\");\n            share.disabled = true;\n            sheet.set_actions(\n                vec![SheetAction::new(\"save\", \"Save a copy\"), share, remove],\n                cx,\n            );\n            sheet.set_state(\n                SheetActionState::Error(\n                    \"Fixture refusal: the last attempt failed; nothing was removed.\".into(),\n                ),\n                cx,\n            );\n            sheet.sheet().update(cx, |sheet, cx| {\n                sheet.set_title(\"Collection actions · fixture\", cx);\n            });\n            sheet.open(window, cx);\n            sheet.sheet().update(cx, |sheet, cx| sheet.settle(cx));\n        });\n        cx.set_global(SceneActionSheet(sheet));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w_full()\n        .h(px(600.0))\n        .child(page_behind(&theme, \"Last verified collection\"))\n        .child(cx.global::<SceneActionSheet>().0.clone())\n        .into_any_element()\n}\n\n//! Validated conserved flow layouts with persistent node/link labels.\nuse super::support::*;\nuse crate::display::plot::{SankeyAlignment, SankeyOrder};\n\n#[derive(Default)]\nstruct FlowRevisions {\n    revision: usize,\n    direct: bool,\n    selected: Option<SharedString>,\n}\n\npub(super) fn sankey_motion(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<FlowRevisions>(\n        &\"scene.sankey.motion-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision % 3;\n    let flows = if revision == 0 {\n        vec![(\"ad\", \"a\", \"d\", 70.0), (\"bc\", \"b\", \"c\", 30.0)]\n    } else if revision == 1 {\n        vec![(\"ad\", \"a\", \"d\", 20.0), (\"bc\", \"b\", \"c\", 80.0)]\n    } else {\n        vec![(\"ad\", \"a\", \"d\", 45.0)]\n    };\n    let mut nodes = Vec::new();\n    let mut links = Vec::new();\n    let mut weights = Vec::new();\n    for (id, source, target, value) in flows {\n        for node in [source, target] {\n            nodes.push(SankeyNode::new(\n                node,\n                node,\n                value.to_string(),\n                Default::default(),\n            ));\n        }\n        links.push(SankeyLink::new(\n            id,\n            source,\n            target,\n            format!(\"{source} → {target}\"),\n            value.to_string(),\n            Default::default(),\n            Default::default(),\n            0.0,\n        ));\n        weights.push(value);\n    }\n    let (data, _) = SankeyData::new(nodes, links)\n        .layout_ordered(\n            &weights,\n            0.08,\n            0.1,\n            SankeyAlignment::Left,\n            SankeyOrder::Barycenter,\n        )\n        .expect(\"conserved synthetic flow\");\n    let next = state.clone();\n    let direct = state.clone();\n    let select = state.clone();\n    stack(&theme).w(px(600.0)).child(caption(&theme,\"Synthetic conserved endpoint layouts · ribbons remain attached during motion; exact current values\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.sankey.motion.advance\").label(\"Advance flows\").on_click(move |window,_|{next.borrow_mut().revision+=1;window.refresh();}))\n            .child(Button::new(\"scene.sankey.motion.direct\").label(if state.borrow().direct {\"Enable animation\"} else {\"Direct updates\"}).on_click(move |window,_|{let mut s=direct.borrow_mut();s.direct = !s.direct;window.refresh();})))\n        .child(SankeyChart::new(\"scene.sankey.motion\",\"Keyed node and ribbon updates\",PlotState::Ready(data)).animate(!state.borrow().direct).labels(true)\n            .selected(state.borrow().selected.clone()).on_current(move |id,window,_|{select.borrow_mut().selected=Some(id);window.refresh();}))\n        .into_any_element()\n}\n\npub(super) fn sankey_layout(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let graph = SankeyData::new(\n        [\n            (\"a\", \"Incoming A\", \"70\"),\n            (\"b\", \"Incoming B\", \"30\"),\n            (\"c\", \"Destination C\", \"30\"),\n            (\"d\", \"Destination D\", \"70\"),\n        ]\n        .map(|(id, label, value)| SankeyNode::new(id, label, value, Default::default())),\n        [\n            (\"ad\", \"a\", \"d\", \"A → D\", \"70\"),\n            (\"bc\", \"b\", \"c\", \"B → C\", \"30\"),\n        ]\n        .map(|(id, source, target, label, value)| {\n            SankeyLink::new(\n                id,\n                source,\n                target,\n                label,\n                value,\n                Default::default(),\n                Default::default(),\n                0.0,\n            )\n        }),\n    );\n    stack(&theme)\n        .w(px(860.0))\n        .child(caption(\n            &theme,\n            \"Synthetic conserved flows · same 70:30 scale · deterministic crossing reduction\",\n        ))\n        .child(\n            div().row().gap_token(&theme, Space::Lg).children(\n                [\n                    (SankeyOrder::Input, \"input\", \"Input order\"),\n                    (SankeyOrder::Barycenter, \"ordered\", \"Barycenter order\"),\n                ]\n                .map(|(order, id, label)| {\n                    let (data, _) = graph\n                        .clone()\n                        .layout_ordered(&[70.0, 30.0], 0.08, 0.1, SankeyAlignment::Left, order)\n                        .expect(\"valid flows\");\n                    div().w(px(380.0)).child(\n                        SankeyChart::new(\n                            Ident::new(\"scene.sankey\").child(id),\n                            label,\n                            PlotState::Ready(data),\n                        )\n                        .labels(true)\n                        .on_current(|_, _, _| {}),\n                    )\n                }),\n            ),\n        )\n        .into_any_element()\n}\n\npub(super) fn raw_candlestick(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::display::chart::{\n        cartesian::CartesianChart,\n        data::{ChartScale, ChartValue, RawPoint, RawSeries, SeriesMark, ValueAxis},\n        scale::{NumericScale, ScaleKind},\n    };\n    use crate::display::plot::RawOhlc;\n    let theme = cx.theme().clone();\n    let day = 86_400_000.0;\n    let x = ChartScale::Numeric(\n        NumericScale::new(ScaleKind::Time, [0.0, 4.0 * day]).expect(\"time domain\"),\n    );\n    let candles = RawOhlc::series(\n        \"ohlc\",\n        \"price\",\n        [\n            RawOhlc::new(\n                \"day-a\",\n                day,\n                [30.0, 60.0, 20.0, 50.0],\n                \"Day A\",\n                \"O30 H60 L20 C50\",\n            ),\n            RawOhlc::new(\n                \"day-b\",\n                day * 2.0,\n                [65.0, 75.0, 35.0, 40.0],\n                \"Day B\",\n                \"O65 H75 L35 C40\",\n            ),\n            RawOhlc::new(\n                \"day-c\",\n                day * 3.0,\n                [45.0, 55.0, 30.0, 45.0],\n                \"Day C · doji\",\n                \"O45 H55 L30 C45\",\n            ),\n        ],\n        theme.colors.success,\n        theme.colors.danger,\n    )\n    .expect(\"validated OHLC\");\n    let volume = RawSeries::new(\"volume\", \"volume\", SeriesMark::Bar)\n        .tint(theme.colors.accent.opacity(0.22))\n        .points(\n            [\n                (\"day-a\", day, 120.0),\n                (\"day-b\", 2.0 * day, 260.0),\n                (\"day-c\", 3.0 * day, 80.0),\n            ]\n            .map(|(id, x, value)| RawPoint::new(id, ChartValue::Number(x), Some(value))),\n        );\n    let overlay = RawSeries::new(\"reference\", \"price\", SeriesMark::Line)\n        .tint(theme.colors.warning)\n        .points(\n            [\n                (\"day-a\", day, 42.0),\n                (\"day-b\", 2.0 * day, 48.0),\n                (\"day-c\", 3.0 * day, 46.0),\n            ]\n            .map(|(id, x, value)| RawPoint::new(id, ChartValue::Number(x), Some(value))),\n        );\n    stack(&theme).w(px(900.0)).child(caption(&theme, \"Synthetic OHLC · shared UTC-duration x scale · independent volume axis · caller overlay\"))\n        .child(CartesianChart::new(\"scene.raw-ohlc\", \"OHLC with volume and overlay\", x, [\n            ValueAxis { id: \"price\".into(), label: \"Price\".into(), scale: NumericScale::new(ScaleKind::Linear, [0.0, 80.0]).expect(\"price domain\") },\n            ValueAxis { id: \"volume\".into(), label: \"Volume\".into(), scale: NumericScale::new(ScaleKind::Linear, [0.0, 300.0]).expect(\"volume domain\") },\n        ]).series([volume, candles, overlay]).format_ticks(move |axis, value| if axis == \"x\" { format!(\"D{:.0}\", value / day).into() } else { value.to_string().into() }).selected(Some(ChartSelection::new(\"ohlc\", \"day-b\"))).on_event(|_, _, _| {}))\n        .into_any_element()\n}\n\n//! Raw-value specialized visualization exhibits, using original synthetic data.\n\nuse super::support::*;\nuse crate::display::specialized::{\n    HierarchyNode, SpecializedChart, SpecializedData, WeightedValue,\n};\n\n#[derive(Default)]\nstruct Exploration {\n    revision: usize,\n    focus: Option<SharedString>,\n    selected: Option<SharedString>,\n    refuse: bool,\n}\n\npub(super) fn specialized_exploration(window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = crate::motion::keyed::slot::<Exploration>(\n        &\"scene.specialized.explore-state\".into(),\n        window.window_handle().window_id(),\n        cx,\n    );\n    let revision = state.borrow().revision;\n    let selected = state.borrow().selected.clone();\n    let focus = state\n        .borrow()\n        .focus\n        .clone()\n        .unwrap_or_else(|| \"total\".into());\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All samples\",\n        vec![\n            HierarchyNode::branch(\n                \"group\",\n                \"Processing\",\n                vec![\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"parse\",\n                        \"Parsing\",\n                        if revision.is_multiple_of(2) {\n                            12.0\n                        } else {\n                            47.0\n                        },\n                    )),\n                    HierarchyNode::leaf(WeightedValue::new(\n                        \"execute\",\n                        \"Execution\",\n                        if revision.is_multiple_of(2) {\n                            68.0\n                        } else {\n                            13.0\n                        },\n                    )),\n                ],\n            ),\n            HierarchyNode::leaf(WeightedValue::new(\"deliver\", \"Delivery\", 20.0)),\n        ],\n    );\n    let next = state.clone();\n    let refusal = state.clone();\n    let charts = [\n        (\n            \"tree\",\n            \"Area · drill/back\",\n            SpecializedData::treemap_at(&root, &focus),\n        ),\n        (\n            \"sun\",\n            \"Angle · drill/back\",\n            SpecializedData::sunburst_at(&root, &focus),\n        ),\n        (\n            \"funnel\",\n            \"Width · enter/update/exit\",\n            SpecializedData::funnel(match revision % 3 {\n                0 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 120.0),\n                    WeightedValue::new(\"finish\", \"Finished\", 24.0),\n                ],\n                1 => vec![\n                    WeightedValue::new(\"start\", \"Started\", 75.0),\n                    WeightedValue::new(\"new\", \"New sample\", 38.0),\n                ],\n                _ => vec![],\n            }),\n        ),\n    ];\n    stack(&theme).w(px(860.0))\n        .child(caption(&theme,\"Synthetic live fixtures · advance during motion to interrupt; empty exit shapes are not selectable\"))\n        .child(div().row().gap_token(&theme,Space::Sm)\n            .child(Button::new(\"scene.specialized.advance\").label(\"Advance samples\").on_click(move |window,_| { next.borrow_mut().revision+=1; window.refresh(); }))\n            .child(Button::new(\"scene.specialized.refuse\").label(if state.borrow().refuse { \"Accept proposals\" } else { \"Refuse proposals\" }).on_click(move |window,_| { let mut s=refusal.borrow_mut(); s.refuse = !s.refuse; window.refresh(); })))\n        .child(div().row().gap_token(&theme,Space::Lg).children(charts.into_iter().map(|(id,label,data)| {\n            let select = state.clone();\n            let navigate = state.clone();\n            div().w(px(260.0)).child(SpecializedChart::new(Ident::new(\"scene.specialized.live\").child(id),label,PlotState::Ready(data.expect(\"valid exploration fixture\")))\n                .motion(true).labels(true).selected(selected.clone())\n                .on_current(move |id,window,_| { let mut s=select.borrow_mut(); if !s.refuse { s.selected=Some(id); } window.refresh(); })\n                .on_navigate(move |id,window,_| { let mut s=navigate.borrow_mut(); if !s.refuse { s.focus=Some(id); } window.refresh(); }))\n        }))).into_any_element()\n}\n\npub(super) fn specialized(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let leaf = |id, label, value| HierarchyNode::leaf(WeightedValue::new(id, label, value));\n    let root = HierarchyNode::branch(\n        \"total\",\n        \"All work\",\n        vec![\n            leaf(\"build\", \"Build\", 60.0),\n            HierarchyNode::branch(\n                \"verify\",\n                \"Verification\",\n                vec![leaf(\"tests\", \"Tests\", 30.0), leaf(\"lint\", \"Lint\", 10.0)],\n            ),\n        ],\n    );\n    let fixtures = [\n        (\n            \"treemap\",\n            \"Treemap · area = work\",\n            SpecializedData::treemap(&root),\n        ),\n        (\n            \"sunburst\",\n            \"Sunburst · angle = work\",\n            SpecializedData::sunburst(&root),\n        ),\n        (\n            \"funnel\",\n            \"Funnel · width = count\",\n            SpecializedData::funnel(vec![\n                WeightedValue::new(\"seen\", \"Seen\", 120.0),\n                WeightedValue::new(\"started\", \"Started\", 75.0),\n                WeightedValue::new(\"done\", \"Completed\", 24.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(940.0))\n        .child(caption(\n            &theme,\n            \"Synthetic hierarchy fixtures · select marks with arrow keys or value keys\",\n        ))\n        .child(\n            div()\n                .row()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(280.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid hierarchy\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .child(\n            div().w(px(220.0)).child(SpecializedChart::new(\n                \"scene.specialized.zero\",\n                \"Zero is measured, not missing\",\n                PlotState::Stale {\n                    data: SpecializedData::funnel(vec![WeightedValue::new(\n                        \"zero\",\n                        \"Measured zero\",\n                        0.0,\n                    )])\n                    .expect(\"zero\"),\n                    reason: \"Refresh refused; verified zero retained\".into(),\n                },\n            )),\n        )\n        .into_any_element()\n}\n\npub(super) fn specialized_distribution(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let fixtures = [\n        (\n            \"histogram\",\n            \"Histogram · count per bin\",\n            SpecializedData::histogram(&[-2.0, -1.0, 0.0, 0.0, 1.0, 3.0], &[-2.0, 0.0, 1.0, 3.0]),\n        ),\n        (\n            \"box\",\n            \"Box · R-7 / Tukey · domain 0–110\",\n            SpecializedData::box_plot(\n                \"latency\",\n                \"Latency\",\n                &[1.0, 2.0, 4.0, 7.0, 8.0, 100.0],\n                [0.0, 110.0],\n            ),\n        ),\n        (\n            \"range\",\n            \"Range · domain −10–30\",\n            SpecializedData::range(\"interval\", \"Expected interval\", -4.0, 18.0, [-10.0, 30.0]),\n        ),\n        (\n            \"waterfall\",\n            \"Waterfall · signed changes\",\n            SpecializedData::waterfall(vec![\n                WeightedValue::new(\"open\", \"Opening\", 60.0),\n                WeightedValue::new(\"cost\", \"Cost\", -90.0),\n                WeightedValue::new(\"credit\", \"Credit\", 10.0),\n            ]),\n        ),\n    ];\n    stack(&theme)\n        .w(px(1000.0))\n        .child(caption(\n            &theme,\n            \"Synthetic distribution fixtures · explicit bin edges and R-7 / Tukey statistics\",\n        ))\n        .child(\n            div()\n                .row()\n                .flex_wrap()\n                .gap_token(&theme, Space::Lg)\n                .children(fixtures.into_iter().map(|(id, label, data)| {\n                    div().w(px(440.0)).child(\n                        SpecializedChart::new(\n                            Ident::new(\"scene.specialized\").child(id),\n                            label,\n                            PlotState::Ready(data.expect(\"valid synthetic fixture\")),\n                        )\n                        .on_current(|_, _, _| {}),\n                    )\n                })),\n        )\n        .into_any_element()\n}\n\n//! A schema, rendered as data or as a form.\n\nuse super::support::*;\n\n/// A document with the three facts a viewer usually confuses: a key holding\n/// `null`, a key holding an empty object, and a key that is simply not here.\npub(super) fn scene_document() -> JsonValue {\n    JsonValue::object([\n        (\"id\", JsonValue::string(\"run-4812\")),\n        (\"attempts\", JsonValue::number(\"3\")),\n        (\"streaming\", JsonValue::Bool(true)),\n        // Nothing has been recorded here yet, which is not the same as the\n        // key being missing: `resumed_from` is missing, and says nothing.\n        (\"cursor\", JsonValue::Null),\n        (\"labels\", JsonValue::object(Vec::<(&str, JsonValue)>::new())),\n        (\n            \"credentials\",\n            JsonValue::object([(\"token\", JsonValue::redacted(\"51 characters\"))]),\n        ),\n        (\n            \"request\",\n            JsonValue::object([\n                (\"method\", JsonValue::string(\"POST\")),\n                (\n                    \"headers\",\n                    JsonValue::object([\n                        (\"content-type\", JsonValue::string(\"application/json\")),\n                        (\"authorization\", JsonValue::redacted(\"a value\")),\n                    ]),\n                ),\n            ]),\n        ),\n        (\n            \"steps\",\n            JsonValue::array([\n                JsonValue::string(\"plan\"),\n                JsonValue::string(\"apply\"),\n                JsonValue::object([(\"retries\", JsonValue::number(\"0\"))]),\n            ]),\n        ),\n    ])\n}\n\npub(super) 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}\n\n/// The form kept across frames.\n///\n/// Its fields own carets, open menus and a selection, so rebuilding it every\n/// frame would throw away whatever had been typed into it.\npub(super) struct SceneSchemaForm {\n    form: Entity<SchemaForm>,\n}\n\nimpl Global for SceneSchemaForm {}\n\npub(super) fn scene_schema() -> Schema {\n    Schema::new()\n        .field(\n            SchemaField::new(\n                \"path\",\n                SchemaKind::Text {\n                    placeholder: Some(\"relative to the workspace\".into()),\n                    secret: false,\n                },\n            )\n            .label(\"File\")\n            .description(\"Which file the call reads\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\n                \"max_bytes\",\n                SchemaKind::Integer(NumberBounds::new().min(1.0).max(65_536.0).step(1024.0)),\n            )\n            .label(\"Maximum bytes\"),\n        )\n        .field(\n            SchemaField::new(\"follow_symlinks\", SchemaKind::Boolean).label(\"Follow symbolic links\"),\n        )\n        .field(\n            SchemaField::new(\n                \"encoding\",\n                SchemaKind::Enum(vec![\n                    SchemaChoice::new(\"utf-8\", \"UTF-8\"),\n                    SchemaChoice::new(\"latin-1\", \"Latin-1\"),\n                ]),\n            )\n            .label(\"Encoding\")\n            .required(true),\n        )\n        .field(\n            SchemaField::new(\"attachments\", SchemaKind::Files { max: Some(2) })\n                .label(\"Attachments\")\n                .description(\"Paths are acquired and accepted by the host\"),\n        )\n        .field(\n            SchemaField::new(\n                \"headers\",\n                SchemaKind::List {\n                    item: Box::new(SchemaField::new(\n                        \"header\",\n                        SchemaKind::Object(vec![\n                            SchemaField::new(\n                                \"name\",\n                                SchemaKind::Text {\n                                    placeholder: Some(\"Header name\".into()),\n                                    secret: false,\n                                },\n                            )\n                            .label(\"Name\")\n                            .required(true),\n                            SchemaField::new(\"enabled\", SchemaKind::Boolean).label(\"Enabled\"),\n                        ]),\n                    )),\n                    max: Some(3),\n                },\n            )\n            .label(\"Headers\"),\n        )\n        .field(\n            SchemaField::new(\n                \"limits\",\n                SchemaKind::Object(vec![\n                    SchemaField::new(\"timeout_ms\", SchemaKind::Integer(NumberBounds::new()))\n                        .label(\"Timeout in milliseconds\"),\n                ]),\n            )\n            .label(\"Limits\"),\n        )\n        .field(\n            SchemaField::new(\n                \"matcher\",\n                SchemaKind::Unrenderable(\n                    \"This argument is one of three shapes at once, and no single control \\\n                     stands for that.\"\n                        .into(),\n                ),\n            )\n            .label(\"Matcher\")\n            .required(true),\n        )\n}\n\npub(super) fn schema_form(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSchemaForm>() {\n        set_schema_file_policy(DefaultSchemaFilePolicy, cx);\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            let _ = form.set_field_validation(\"encoding\", ValidationState::Validating, cx);\n            form.set_files(\"attachments\", vec![\"/workspace/brief.md\".into()], cx)\n                .expect(\"the scene's permissive file policy accepts its fixture\");\n            form.add_list_item(\"headers\", window, 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}\n\n//! What more than one family of scenes needs.\n//!\n//! Everything here is used by scenes in at least two families. A fixture\n//! that only one family builds lives in that family, next to the scenes\n//! that read it, so that moving a component moves its fixture with it.\n\npub(super) use gpui::{\n    AnyElement, App, Corners, DevicePixels, Entity, Focusable, Global, IntoElement, Pixels,\n    RenderImage, SharedString, SpriteBlendMode, SpriteColorMode, SpriteInstance, SpriteTransform,\n    Window, bounds, canvas, conic_gradient_stops, div, linear_color_stop, point, prelude::*, px,\n    radial_gradient_stops, radians, size,\n};\npub(super) use gpui_kit_assets::Icon;\npub(super) use gpui_kit_semantics::{NodeSpec, Role, Semantic};\npub(super) use gpui_kit_theme::{Radius, Space, Surface, SyntaxColor, TextTone, Theme, TypeScale};\npub(super) use std::rc::Rc;\npub(super) use std::sync::{Arc, OnceLock};\npub(super) use std::time::Duration;\n\npub(super) use crate::controls::combobox::Combobox;\npub(super) use crate::controls::input::TextInput;\npub(super) use crate::controls::keybinding_recorder::KeybindingRecorder;\npub(super) use crate::controls::number_input::NumberInput;\npub(super) use crate::controls::select::{Select, SelectOption};\npub(super) use crate::controls::split_button::SplitButton;\npub(super) use crate::controls::tag_input::TagInput;\npub(super) use crate::controls::textarea::{Frame, TextArea};\npub(super) use crate::display::badge::Tone;\npub(super) use crate::display::icon::{Icon as IconView, IconTone};\npub(super) use crate::foundation::ActiveTheme;\npub(super) use crate::foundation::direction::{ActiveDirection, DirectionalExt};\npub(super) use crate::interaction::dnd;\npub(super) use crate::overlay::toast::push as toast_push;\npub(super) use crate::overlay::{Edge, Kbd, Overlay, Placement, Tooltip, Tooltipped};\npub(super) use crate::prelude::*;\npub(super) use crate::strings::{ActiveStrings, StringKey};\n\npub(super) fn stack(theme: &Theme) -> gpui::Div {\n    div()\n        .column()\n        .gap(px(theme.spacing.md))\n        .p(px(theme.spacing.lg))\n        .page(theme)\n        .font_family(theme.typography.sans.clone())\n}\n\npub(super) fn row(theme: &Theme) -> gpui::Div {\n    div()\n        .row()\n        .flex_wrap()\n        .gap(px(theme.spacing.sm))\n        .items_center()\n}\n\n/// A pane of fixture copy, for a scene that needs something on both sides of a\n/// divider or below a viewport.\npub(super) fn filler(theme: &Theme, title: &'static str, lines: usize) -> gpui::Div {\n    let mut pane = div()\n        .flex()\n        .flex_col()\n        .gap(px(theme.space(Space::Xs)))\n        .p(px(theme.space(Space::Md)))\n        .child(crate::foundation::text(\n            theme,\n            TypeScale::Label,\n            SharedString::from(title),\n        ));\n    for line in 1..=lines {\n        pane = pane.child(\n            crate::foundation::text(\n                theme,\n                TypeScale::Code,\n                SharedString::from(format!(\"Fixture line {line:02}\")),\n            )\n            .text_tone(theme, TextTone::Muted),\n        );\n    }\n    pane\n}\n\n/// A caption naming the state a drag scene was staged in.\npub(super) fn caption(theme: &Theme, text: impl Into<SharedString>) -> gpui::Div {\n    crate::foundation::text(theme, TypeScale::Caption, text.into())\n        .text_tone(theme, TextTone::Muted)\n}\n\n/// The element a host hands back for an image this crate did not fetch.\n///\n/// A flat fill rather than a picture, because the crate ships no photographs\n/// and a scene has to photograph the same pixels every run. Neutral, and\n/// quieter than the surface it sits in: a stand-in painted in the accent was\n/// the loudest thing in every scene that used one, which said the placeholder\n/// mattered more than the component being reviewed around it.\npub(super) fn scene_picture(label: &'static str, cx: &App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .size_full()\n        .flex()\n        .flex_col()\n        .items_center()\n        .justify_center()\n        .gap(px(theme.space(gpui_kit_theme::Space::Xs)))\n        .bg(theme.colors.sunken)\n        .child(\n            gpui_kit_assets::icon(gpui_kit_assets::Icon::Image)\n                .size(px(theme.typography.subtitle.line_height))\n                .text_color(theme.colors.text_faint),\n        )\n        .child(\n            crate::foundation::text(&theme, TypeScale::Caption, SharedString::new_static(label))\n                .text_tone(&theme, TextTone::Faint),\n        )\n        .into_any_element()\n}\n\n/// The ordinary-application views that own state across frames.\npub(super) struct SceneOrdinary {\n    pub(super) menubar: Entity<Menubar>,\n    pub(super) hover_card: Entity<HoverCard>,\n    pub(super) copy_idle: Entity<CopyButton>,\n    pub(super) copy: Entity<CopyButton>,\n    pub(super) copy_refused: Entity<CopyButton>,\n}\n\nimpl Global for SceneOrdinary {}\n\npub(super) fn ensure_ordinary(window: &mut Window, cx: &mut App) {\n    if cx.has_global::<SceneOrdinary>() {\n        return;\n    }\n    let menubar = cx.new(|cx| {\n        Menubar::new(\n            \"scene.menubar\",\n            [\n                MenubarMenu::new(\n                    \"file\",\n                    \"File\",\n                    [\n                        MenuItem::command(\"file.new\", \"New run\").shortcut(\"cmd-n\"),\n                        MenuItem::command(\"file.open\", \"Open workspace\").shortcut(\"cmd-o\"),\n                        MenuItem::separator(\"file.rule\"),\n                        MenuItem::submenu(\n                            \"file.export\",\n                            \"Export\",\n                            [\n                                MenuItem::command(\"file.export.json\", \"As JSON\"),\n                                MenuItem::command(\"file.export.text\", \"As plain text\"),\n                            ],\n                        ),\n                    ],\n                ),\n                MenubarMenu::new(\n                    \"edit\",\n                    \"Edit\",\n                    [\n                        MenuItem::command(\"edit.undo\", \"Undo\").shortcut(\"cmd-z\"),\n                        MenuItem::check(\"edit.wrap\", \"Wrap lines\", true),\n                    ],\n                ),\n                MenubarMenu::new(\"view\", \"View\", [MenuItem::command(\"view.zoom\", \"Zoom in\")]),\n                MenubarMenu::new(\"policy\", \"Policy\", []).disabled(true),\n            ],\n            window,\n            cx,\n        )\n    });\n    menubar.update(cx, |bar, cx| bar.open(\"file\", window, cx));\n\n    let hover_card = cx.new(|cx| {\n        HoverCard::new(\"scene.hover-card\", window, cx)\n            .name(\"Run 4821\")\n            .trigger(|_, cx| {\n                let theme = cx.theme().clone();\n                crate::foundation::text(&theme, TypeScale::Caption, \"run 4821\")\n                    .text_color(theme.colors.accent)\n                    .into_any_element()\n            })\n            .content(|_, cx| {\n                let theme = cx.theme().clone();\n                div()\n                    .column()\n                    // A column stretches its children across, and a badge\n                    // stretched that far stops reading as a label and starts\n                    // reading as a filled bar.\n                    .items_start()\n                    .gap(px(theme.spacing.xs))\n                    .child(crate::foundation::text(\n                        &theme,\n                        TypeScale::Strong,\n                        \"Nightly regression sweep\",\n                    ))\n                    .child(\n                        crate::foundation::text(\n                            &theme,\n                            TypeScale::Caption,\n                            \"Finished in 4 minutes, 12 checks, none failed.\",\n                        )\n                        .text_tone(&theme, TextTone::Muted),\n                    )\n                    .child(Badge::new(\"Ready\").success())\n                    .into_any_element()\n            })\n    });\n    hover_card.update(cx, |card, cx| card.open(cx));\n\n    // Nobody has pressed this one. It is the state a reader sees almost all\n    // of the time, and it was the one state of the three no image held.\n    let copy_idle = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-idle\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Ok(()))\n    });\n\n    // The confirmation outlives the capture. At its ordinary length it expires\n    // partway through a run, so which of the two states this scene showed\n    // depended on how long the run took to reach it.\n    let copy = cx.new(|cx| {\n        CopyButton::new(\"scene.copy\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .confirmation(std::time::Duration::from_secs(60 * 60))\n            .copier(|_, _| Ok(()))\n    });\n    copy.update(cx, |button, cx| button.copy(cx));\n\n    let copy_refused = cx.new(|cx| {\n        CopyButton::new(\"scene.copy-refused\", window, cx)\n            .text(\"run-4821-9f3a\")\n            .copier(|_, _| Err(\"The clipboard did not take it.\".into()))\n    });\n    copy_refused.update(cx, |button, cx| button.copy(cx));\n\n    cx.set_global(SceneOrdinary {\n        menubar,\n        hover_card,\n        copy_idle,\n        copy,\n        copy_refused,\n    });\n}\n"
    },
    {
      "name": "attachment",
      "capture": "cargo run -p xtask -- headless capture attachment",
      "kind": "exhibit",
      "subjects": [
        "AttachmentTile"
      ],
      "uses": [
        "AttachmentTile"
      ],
      "example": "fn attachment(_window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::display::attachment::{AttachmentState, AttachmentTile};\n    let theme = cx.theme().clone();\n    let states = [\n        (\"ready\", \"Verified preview\", AttachmentState::Ready),\n        (\"queued\", \"Waiting for a worker\", AttachmentState::Queued),\n        (\n            \"transfer\",\n            \"Known transfer total\",\n            AttachmentState::Transferring {\n                completed: 3,\n                total: Some(8),\n            },\n        ),\n        (\n            \"unknown\",\n            \"Unknown transfer total\",\n            AttachmentState::Transferring {\n                completed: 3,\n                total: None,\n            },\n        ),\n        (\n            \"paused\",\n            \"Paused transfer\",\n            AttachmentState::Paused {\n                completed: 3,\n                total: Some(8),\n            },\n        ),\n        (\n            \"processing\",\n            \"Transfer complete, processing pending\",\n            AttachmentState::Processing,\n        ),\n        (\n            \"failed\",\n            \"Last verified preview retained\",\n            AttachmentState::Failed(\"The host refused this upload\".into()),\n        ),\n        (\n            \"unavailable\",\n            \"Unavailable media\",\n            AttachmentState::Unavailable(\"Media is not available on this host\".into()),\n        ),\n        (\n            \"cancelled\",\n            \"Cancelled by caller\",\n            AttachmentState::Cancelled,\n        ),\n    ];\n    stack(&theme).w(px(860.0))\n        .child(caption(&theme, \"Fixture attachments: composed media, title, description, actions; transfer completion does not imply readiness\"))\n        .child(div().row().flex_wrap().gap_token(&theme, Space::Md)\n            .children(states.into_iter().map(|(id, title, state)| {\n                let preview = matches!(state, AttachmentState::Ready | AttachmentState::Failed(_));\n                let tile = AttachmentTile::new(format!(\"scene.attachment.{id}\"), title)\n                    .description(\"Fixture asset · caller-owned state\")\n                    .state(state)\n                    .when(preview, |tile| tile.slot(\"media\", |_, cx| {\n                        let theme = cx.theme();\n                        div().w_full().h(px(52.0)).bg(theme.colors.control_hover)\n                            .child(crate::foundation::text(theme, TypeScale::Label, \"Local preview\"))\n                            .into_any_element()\n                    }))\n                    .slot(\"actions\", move |_, _| Button::new(format!(\"scene.attachment.{id}.open\"))\n                        .label(\"Inspect fixture\").on_click(|_, _| {}).into_any_element());\n                div().w(px(250.0)).child(tile)\n            })))\n        .into_any_element()\n}"
    },
    {
      "name": "metric-card",
      "capture": "cargo run -p xtask -- headless capture metric-card",
      "kind": "exhibit",
      "subjects": [
        "MetricCard"
      ],
      "uses": [
        "MetricCard"
      ],
      "example": "fn metric_card(_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            \"a KPI keeps the last verified reading when a refresh fails\",\n        ))\n        .child(MetricCard::new(\n            \"scene.metric.ready\",\n            \"Tokens\",\n            MetricState::Ready(\n                MetricReading::new(\"12.4k\")\n                    .delta(\"+8%\", Tone::Success)\n                    .trend([\n                        SparklinePoint::new(0.0, 0.30),\n                        SparklinePoint::new(0.35, 0.55),\n                        SparklinePoint::new(0.70, 0.48),\n                        SparklinePoint::new(1.0, 0.72),\n                    ]),\n            ),\n        ))\n        .child(MetricCard::new(\n            \"scene.metric.loading\",\n            \"Tokens\",\n            MetricState::Loading,\n        ))\n        .child(MetricCard::new(\n            \"scene.metric.empty\",\n            \"Tokens\",\n            MetricState::Empty,\n        ))\n        .child(MetricCard::new(\n            \"scene.metric.unavailable\",\n            \"Tokens\",\n            MetricState::Unavailable(\"The meter host is offline.\".into()),\n        ))\n        .child(MetricCard::new(\n            \"scene.metric.error\",\n            \"Tokens\",\n            MetricState::Error(\"The meter returned an invalid reading.\".into()),\n        ))\n        .child(MetricCard::new(\n            \"scene.metric.stale\",\n            \"Tokens\",\n            MetricState::Stale {\n                reading: MetricReading::new(\"12.4k\").delta(\"+8%\", Tone::Warning),\n                reason: \"Refresh failed; showing last verified reading\".into(),\n            },\n        ))\n        .into_any_element()\n}"
    },
    {
      "name": "kanban",
      "capture": "cargo run -p xtask -- headless capture kanban",
      "kind": "exhibit",
      "subjects": [
        "KanbanBoard"
      ],
      "uses": [
        "KanbanBoard"
      ],
      "example": "fn kanban(_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            \"columns and cards are host-owned; a held card can report a move\",\n        ))\n        .child(\n            KanbanBoard::new(\"scene.kanban.ready\")\n                .columns([\n                    KanbanColumn::new(\"inbox\", \"Inbox\"),\n                    KanbanColumn::new(\"doing\", \"Doing\").limit(2),\n                    KanbanColumn::new(\"done\", \"Done\"),\n                ])\n                .cards([\n                    KanbanCard::new(\"triage\", \"Triage fixture\", \"inbox\")\n                        .detail(\"Waiting on review\"),\n                    KanbanCard::new(\"draw\", \"Draw scene\", \"doing\"),\n                    KanbanCard::new(\"caption\", \"Write captions\", \"doing\"),\n                    KanbanCard::new(\"audit\", \"Audit tokens\", \"doing\"),\n                    KanbanCard::new(\"ship\", \"Ship notes\", \"done\"),\n                ])\n                .held(\"triage\")\n                .on_card(|_, _, _| {})\n                .on_move(|_, _, _, _| {})\n                .on_add(|_, _, _| {}),\n        )\n        .child(KanbanBoard::new(\"scene.kanban.loading\").state(KanbanState::Loading))\n        .child(KanbanBoard::new(\"scene.kanban.empty\").state(KanbanState::Empty))\n        .child(\n            KanbanBoard::new(\"scene.kanban.unavailable\").state(KanbanState::Unavailable(\n                \"The board host refused the request.\".into(),\n            )),\n        )\n        .child(\n            KanbanBoard::new(\"scene.kanban.error\")\n                .state(KanbanState::Error(\"The board request failed.\".into())),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "micro",
      "capture": "cargo run -p xtask -- headless capture micro",
      "kind": "exhibit",
      "subjects": [
        "MicroMark"
      ],
      "uses": [
        "MicroMark"
      ],
      "example": "fn micro(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // Each motion gets a cell of its own. A still frame cannot show any of\n    // them moving, so what the picture has to carry instead is that there are\n    // five of them, that they are the same size, and which name belongs to\n    // which mark.\n    let cell = |mark: MicroMark| {\n        div()\n            .w(px(96.0))\n            .flex_none()\n            .column()\n            .items_center()\n            .justify_center()\n            .gap_token(&theme, Space::Xs)\n            .py_token(&theme, Space::Md)\n            .radius(&theme, Radius::Card)\n            .well(&theme)\n            .child(mark)\n    };\n\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"named functions of time; reduced motion leaves the glyph still\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(cell(MicroMark::new(\n                    \"scene.micro.heartbeat\",\n                    Micro::Heartbeat,\n                    \"Hb\",\n                )))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.bounce\",\n                    Micro::Bounce,\n                    \"Bn\",\n                )))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.wobble\",\n                    Micro::Wobble,\n                    \"Wb\",\n                )))\n                .child(cell(MicroMark::new(\"scene.micro.pop\", Micro::Pop, \"Pp\")))\n                .child(cell(MicroMark::new(\n                    \"scene.micro.sparkle\",\n                    Micro::Sparkle,\n                    \"Sk\",\n                ))),\n        )\n        .child(caption(\n            &theme,\n            \"the same functions on things that are not glyphs\",\n        ))\n        .child(\n            row(&theme)\n                .gap_token(&theme, Space::Sm)\n                .child(div().child(Badge::new(\"12 unread\").neutral()).micro(\n                    \"scene.micro.badge\",\n                    Micro::Pop,\n                    cx,\n                ))\n                .child(div().child(Tag::new(\"scene.micro.tag\", \"fixture\")).micro(\n                    \"scene.micro.tag.mark\",\n                    Micro::Wobble,\n                    cx,\n                ))\n                .child(div().child(StatusDot::new(Tone::Success)).micro(\n                    \"scene.micro.dot\",\n                    Micro::Heartbeat,\n                    cx,\n                )),\n        )\n        .child(caption(\n            &theme,\n            \"a described motion, sampled along its own run rather than played\",\n        ))\n        .child(described(&theme))\n        .into_any_element()\n}"
    },
    {
      "name": "trace",
      "capture": "cargo run -p xtask -- headless capture trace",
      "kind": "exhibit",
      "subjects": [
        "SpanTimeline",
        "TraceView"
      ],
      "uses": [
        "SpanTimeline",
        "TraceView"
      ],
      "example": "fn trace(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let spans = [\n        TraceSpan::new(\"plan\", \"Plan\", 0.00, 0.18)\n            .state(SpanState::Succeeded)\n            .duration(\"216 ms\")\n            .detail(\"planner.finish\"),\n        TraceSpan::new(\"generate\", \"Generate\", 0.18, 0.62)\n            .depth(1)\n            .state(SpanState::Running)\n            .duration(\"528 ms\")\n            .detail(\"model.reply\"),\n        TraceSpan::new(\"tool\", \"Search\", 0.40, 0.55)\n            .depth(2)\n            .duration(\"180 ms\")\n            .state(SpanState::Succeeded),\n        TraceSpan::new(\"wait\", \"Review\", 0.62, 0.80)\n            .depth(1)\n            .duration(\"216 ms\")\n            .state(SpanState::Pending),\n        TraceSpan::new(\"fail\", \"Publish\", 0.80, 1.00)\n            .duration(\"240 ms\")\n            .state(SpanState::Failed),\n    ];\n    // The host owns every reading on the axis; the component only places them.\n    let ticks = [(0.25, \"300 ms\"), (0.5, \"600 ms\"), (0.75, \"900 ms\")];\n    stack(&theme)\n        .w(px(640.0))\n        .child(caption(\n            &theme,\n            \"normalized intervals, host-owned labels, a refusal stays a failure\",\n        ))\n        .child(\n            TraceView::new(\"scene.trace.view\", \"Fixture run\")\n                .spans(spans.clone())\n                .axis(\"0 ms\", \"1.2 s\")\n                .ticks(ticks)\n                .current(\"generate\")\n                .on_select(|_, _, _| {}),\n        )\n        .child(\n            SpanTimeline::new(\"scene.trace.timeline\", \"Fixture waterfall\")\n                .spans(spans)\n                .axis(\"0 ms\", \"1.2 s\")\n                .ticks(ticks)\n                .current(\"generate\")\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "trace-time",
      "capture": "cargo run -p xtask -- headless capture trace-time",
      "kind": "exhibit",
      "subjects": [
        "SpanTimeline",
        "TraceView"
      ],
      "uses": [
        "SpanTimeline",
        "TraceView"
      ],
      "example": "fn trace_time(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<TemporalScene>() {\n        cx.set_global(TemporalScene {\n            domain: [1_700_000_000_200., 1_700_000_001_000.],\n            collapsed: std::collections::HashSet::from([\"request.birch\".into()]),\n            selected: \"request.atlas.decode\".into(),\n            time_selection: Some([1_700_000_000_420., 1_700_000_000_655.]),\n            accepts_time_selection: true,\n        });\n    }\n    let state = cx.global::<TemporalScene>().clone();\n    let theme = cx.theme().clone();\n    let mut spans = vec![];\n    for request in [\n        \"atlas\", \"birch\", \"cedar\", \"delta\", \"elm\", \"fjord\", \"grove\", \"harbor\", \"iris\", \"jade\",\n        \"kelp\", \"lagoon\", \"maple\", \"north\", \"oak\", \"pine\", \"quartz\", \"reed\", \"spruce\", \"tide\",\n        \"umber\", \"vale\", \"willow\", \"yarrow\",\n    ] {\n        spans.push(\n            TraceSpan::new(\n                format!(\"request.{request}\"),\n                format!(\"Request {request}\"),\n                0.,\n                1.,\n            )\n            .time(1_700_000_000_100., 1_700_000_001_200.)\n            .state(SpanState::Succeeded)\n            .duration(\"1.1 s\"),\n        );\n        for (child, stage) in [\"prepare\", \"fetch\", \"decode\", \"render\", \"commit\"]\n            .into_iter()\n            .enumerate()\n        {\n            let start = 1_700_000_000_100. + child as f64 * 160.;\n            spans.push(\n                TraceSpan::new(format!(\"request.{request}.{stage}\"), stage, 0., 1.)\n                    .time(start, start + 235.)\n                    .depth(1)\n                    .state(SpanState::Succeeded)\n                    .duration(\"235 ms\"),\n            );\n        }\n    }\n    let spans = std::rc::Rc::new(spans);\n    stack(&theme).w(px(760.)).child(caption(&theme, \"Fixture raw UTC milliseconds · Ctrl-wheel zoom · Shift-wheel pan · disclosure / arrow keys\"))\n        .child(div().row().gap_token(&theme, Space::Sm)\n            .child(Button::new(\"scene.trace-time.zoom-in\").label(\"Zoom in\").secondary().small()\n                .on_click(|_, cx| {\n                    cx.update_global::<TemporalScene, ()>(|s, _| {\n                        use crate::display::chart::scale::{NumericScale, ScaleKind};\n                        if let Ok(scale) = NumericScale::new(ScaleKind::Time, s.domain).and_then(|scale| scale.zoom(0.5, 1.5)) {\n                            s.domain = scale.domain();\n                        }\n                    }); cx.refresh_windows();\n                }))\n            .child(Button::new(\"scene.trace-time.later\").label(\"Later\").secondary().small()\n                .on_click(|_, cx| {\n                    cx.update_global::<TemporalScene, ()>(|s, _| {\n                        use crate::display::chart::scale::{NumericScale, ScaleKind};\n                        if let Ok(scale) = NumericScale::new(ScaleKind::Time, s.domain).and_then(|scale| scale.pan(0.2)) {\n                            s.domain = scale.domain();\n                        }\n                    }); cx.refresh_windows();\n                }))\n            .child(Button::new(\"scene.trace-time.reset\").label(\"Reset window\").secondary().small()\n                .on_click(|_, cx| {\n                    cx.update_global::<TemporalScene, ()>(|s, _| s.domain = [1_700_000_000_200., 1_700_000_001_000.]);\n                    cx.refresh_windows();\n                }))\n            .child(Button::new(\"scene.trace-time.clear-range\").label(\"Clear range\").secondary().small()\n                .on_click(|_,cx| {\n                    cx.update_global::<TemporalScene, ()>(|s,_| s.time_selection = None);\n                    cx.refresh_windows();\n                }))\n            .child(Button::new(\"scene.trace-time.zoom-range\").label(\"Zoom to range\").secondary().small()\n                .disabled(state.time_selection.is_none())\n                .on_click(|_,cx| {\n                    cx.update_global::<TemporalScene, ()>(|s,_| {\n                        use crate::display::chart::scale::{NumericScale,ScaleKind};\n                        if let Some(range) = s.time_selection && let Ok(scale) = NumericScale::new(ScaleKind::Time,range) {\n                            s.domain = scale.domain();\n                        }\n                    });\n                    cx.refresh_windows();\n                }))\n            .child(Button::new(\"scene.trace-time.accept-range\").label(if state.accepts_time_selection {\"Refuse edits\"} else {\"Accept edits\"}).secondary().small()\n                .on_click(|_,cx| {\n                    cx.update_global::<TemporalScene, ()>(|s,_| s.accepts_time_selection = !s.accepts_time_selection);\n                    cx.refresh_windows();\n                })))\n        .child(TraceView::new(\"scene.trace-time.tree\", \"144 spans · eight-row viewport\")\n            .shared_spans(spans.clone()).time_viewport(state.domain).expect(\"valid time window\")\n            .selected_time(state.time_selection).expect(\"valid selection\")\n            .on_time_selection(|event,_,cx| {\n                use crate::interaction::range::RangeEvent;\n                cx.update_global::<TemporalScene, ()>(|s,_| {\n                    if s.accepts_time_selection && let RangeEvent::Update {value,..} | RangeEvent::Commit {value,..} = event {\n                        s.time_selection = Some(value);\n                    }\n                });\n                cx.refresh_windows();\n            })\n            .format_time(|time| format!(\"{:.0} ms\", time - 1_700_000_000_000.).into())\n            .visible_rows(8).collapsed(state.collapsed.clone()).current(state.selected.clone())\n            .on_viewport(|scale, _, cx| { cx.update_global::<TemporalScene, ()>(|s, _| s.domain = scale.domain()); cx.refresh_windows(); })\n            .on_toggle(|id, expanded, _, cx| {\n                cx.update_global::<TemporalScene, ()>(|s, _| {\n                    if expanded {\n                        s.collapsed.remove(&id);\n                    } else {\n                        s.collapsed.insert(id);\n                    }\n                });\n                cx.refresh_windows();\n            })\n            .on_select(|id, _, cx| { cx.update_global::<TemporalScene, ()>(|s, _| s.selected = id); cx.refresh_windows(); }))\n        .child(SpanTimeline::new(\"scene.trace-time.timeline\", \"Same caller-owned time window\")\n            .shared_spans(spans).time_viewport(state.domain).expect(\"valid time window\")\n            .selected_time(state.time_selection).expect(\"valid selection\")\n            .format_time(|time| format!(\"{:.0} ms\", time - 1_700_000_000_000.).into())\n            .visible_rows(4).collapsed(state.collapsed).current(state.selected)\n            .on_viewport(|scale, _, cx| { cx.update_global::<TemporalScene, ()>(|s, _| s.domain = scale.domain()); cx.refresh_windows(); }))\n        .into_any_element()\n}"
    },
    {
      "name": "heatmap",
      "capture": "cargo run -p xtask -- headless capture heatmap",
      "kind": "exhibit",
      "subjects": [
        "Heatmap"
      ],
      "uses": [
        "Heatmap"
      ],
      "example": "fn heatmap(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // A quarter of weekdays, which is the shape this component is actually\n    // asked for. Four columns of five said nothing about how the grid reads\n    // once it carries a period somebody would look at.\n    let days = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\"];\n    // Week-starting dates. Each column is joined on by its own key and prints\n    // the day of the month, which is what fits over a cell; the month it came\n    // from is the group header over the run of columns that share it, because\n    // `3 10 17 24` three times over names nothing on its own.\n    let starts = [6, 13, 20, 27, 3, 10, 17, 24, 3, 10, 17, 24];\n    let month_of = |column: usize| [\"January\", \"February\", \"March\"][column / 4];\n    let weeks: Vec<HeatAxis> = starts\n        .iter()\n        .enumerate()\n        .map(|(column, day)| {\n            HeatAxis::new(format!(\"w{column}\"), day.to_string()).group(month_of(column))\n        })\n        .collect();\n    let mut cells = Vec::new();\n    for (row, day) in days.iter().enumerate() {\n        for (column, week) in weeks.iter().enumerate() {\n            let month = month_of(column);\n            let mut cell = HeatCell::new(format!(\"{day}-{}\", week.id), *day, week.id.clone())\n                .label(format!(\"{day}, {month} {}\", week.label));\n            // Deterministic, and holed in two places so the difference between\n            // \"nothing was measured\" and \"zero was measured\" has somewhere to\n            // show itself.\n            let sample = (row * 7 + column * 3 + (column * column) % 5) % 11;\n            if sample != 4 && sample != 9 {\n                let level = (sample % 5) as u8;\n                cell = cell.level(level).value(format!(\"{level} runs\"));\n            }\n            cells.push(cell);\n        }\n    }\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"January to March, by weekday: five intensity steps, and a missing \\\n             cell is not a measured zero\",\n        ))\n        .child(\n            Heatmap::new(\"scene.heatmap.ready\", \"Fixture activity\")\n                .rows(days)\n                // The ramp is neutral until a caller says whose quantity it\n                // is. This matrix is the run activity the rest of the frame\n                // is already reading in the accent, so it hands that over.\n                .tint(theme.colors.accent)\n                .columns(weeks.clone())\n                .cells(cells),\n        )\n        .child(\n            Heatmap::new(\"scene.heatmap.loading\", \"Fixture activity\").state(HeatmapState::Loading),\n        )\n        .child(caption(&theme, \"Nothing measured in the period at all\"))\n        .child(Heatmap::new(\"scene.heatmap.empty\", \"Fixture activity\").state(HeatmapState::Empty))\n        .child(\n            Heatmap::new(\"scene.heatmap.error\", \"Fixture activity\")\n                .state(HeatmapState::Error(\"The activity request failed.\".into())),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "color-picker",
      "capture": "cargo run -p xtask -- headless capture color-picker",
      "kind": "exhibit",
      "subjects": [
        "ColorPicker",
        "ColorSwatch"
      ],
      "uses": [
        "ColorPicker",
        "ColorSwatch"
      ],
      "example": "fn color_picker(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let current = theme.colors.info;\n    stack(&theme)\n        .child(caption(\n            &theme,\n            \"the value is caller-owned; presets and recents are host lists\",\n        ))\n        .child(\n            ColorPicker::new(\"scene.color.picker\", current)\n                .alpha(true)\n                .presets([\n                    theme.colors.danger,\n                    theme.colors.warning,\n                    theme.colors.info,\n                    theme.colors.success,\n                    theme.colors.accent,\n                ])\n                .recent([theme.colors.accent, theme.colors.success])\n                .on_change(|_, _, _| {}),\n        )\n        .child(caption(&theme, \"a swatch reports the colour it was given\"))\n        .child(\n            row(&theme)\n                .items_start()\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(ColorSwatch::new(\n                            \"scene.color.swatch.accent\",\n                            theme.colors.accent,\n                        ))\n                        .child(caption(&theme, \"Default\")),\n                )\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            ColorSwatch::new(\"scene.color.swatch.selected\", current)\n                                .selected(true)\n                                .on_click(|_, _, _| {}),\n                        )\n                        .child(caption(&theme, \"Selected\")),\n                )\n                .child(\n                    div()\n                        .column()\n                        .items_center()\n                        .gap_token(&theme, Space::Xs)\n                        .child(\n                            ColorSwatch::new(\"scene.color.swatch.disabled\", theme.colors.danger)\n                                .disabled(true),\n                        )\n                        .child(caption(&theme, \"Disabled\")),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "code-view",
      "capture": "cargo run -p xtask -- headless capture code-view",
      "kind": "exhibit",
      "subjects": [
        "CodeView"
      ],
      "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, and they\n    // outrank what the scanner would have found for the same line.\n    let lines = [\n        CodeLine::new(40, \"fn report(&self) -> Outcome {\").spans([CodeSpan {\n            range: 0..2,\n            role: SyntaxColor::Keyword,\n        }]),\n        CodeLine::new(41, \"    let verified = self.check();\")\n            .spans([CodeSpan {\n                range: 4..7,\n                role: SyntaxColor::Keyword,\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        .child(caption(\n            &theme,\n            \"and where the caller says only what the language is, the four classes it can find\",\n        ))\n        .child(\n            CodeView::new(\n                \"scene.code.scanned\",\n                [\n                    CodeLine::new(1, \"def summarize(runs):  # every class in one line\"),\n                    CodeLine::new(2, \"    total = 0\"),\n                    CodeLine::new(3, \"    for run in runs:\"),\n                    CodeLine::new(4, \"        if run.status == \\\"passed\\\":\"),\n                    CodeLine::new(5, \"            total += 1\"),\n                    CodeLine::new(6, \"    return total\"),\n                ],\n            )\n            .language(\"python\"),\n        )\n        .child(caption(\n            &theme,\n            \"a language with no table is shown and left plain, never guessed at\",\n        ))\n        .child(\n            CodeView::new(\n                \"scene.code.unknown\",\n                [\n                    CodeLine::new(1, \"REPORT SECTION.\"),\n                    CodeLine::new(2, \"    MOVE 0 TO TOTAL.\"),\n                ],\n            )\n            .language(\"cobol\"),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "upload-list",
      "capture": "cargo run -p xtask -- headless capture upload-list",
      "kind": "exhibit",
      "subjects": [
        "UploadList"
      ],
      "uses": [
        "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": "cascader",
      "capture": "cargo run -p xtask -- headless capture cascader",
      "kind": "exhibit",
      "subjects": [
        "Cascader"
      ],
      "uses": [
        "Cascader"
      ],
      "example": "fn cascader(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneCascader>() {\n        let cascader = cx.new(|cx| {\n            Cascader::new(\"scene.cascader\", window, cx)\n                .name(\"Fixture destination\")\n                .selected(\"release-notes\")\n                .options([\n                    CascaderOption::new(\"guides\", \"Guides\").children([\n                        CascaderOption::new(\"getting-started\", \"Getting started\"),\n                        CascaderOption::new(\"configuration\", \"Configuration\"),\n                    ]),\n                    CascaderOption::new(\"reference\", \"Reference\").loading_children(),\n                    CascaderOption::new(\"archive\", \"Archive\").unavailable_children(\n                        \"The fixture host does not provide archived sections.\",\n                    ),\n                    CascaderOption::new(\"release-notes\", \"Release notes\"),\n                    CascaderOption::new(\"managed\", \"Managed section\").disabled(true),\n                ])\n        });\n        cascader.update(cx, |cascader, cx| cascader.open(window, cx));\n        cx.set_global(SceneCascader { cascader });\n    }\n    let theme = cx.theme().clone();\n    let cascader = cx.global::<SceneCascader>().cascader.clone();\n    stack(&theme)\n        .w(px(680.0))\n        .child(caption(\n            &theme,\n            \"caller-owned hierarchy and value; the open path belongs only to the view\",\n        ))\n        // The trigger is given the width its own popup has, so the scene does\n        // not show a control that disagrees with the surface it opens.\n        .child(div().w(px(380.0)).child(cascader))\n        .into_any_element()\n}"
    },
    {
      "name": "anchor-list",
      "capture": "cargo run -p xtask -- headless capture anchor-list",
      "kind": "exhibit",
      "subjects": [
        "AnchorList"
      ],
      "uses": [
        "AnchorList"
      ],
      "example": "fn anchor_list(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneAnchorList>() {\n        let label = cx.strings().text(StringKey::AnchorMoreSections);\n        let overflow = cx.new(|cx| Menu::new(\"scene.anchor-list.menu\", window, cx).trigger(label));\n        cx.set_global(SceneAnchorList { overflow });\n    }\n    let theme = cx.theme().clone();\n    let overflow = cx.global::<SceneAnchorList>().overflow.clone();\n    stack(&theme)\n        .w(px(700.0))\n        .child(caption(\n            &theme,\n            \"section intents only; the declared overflow moves anchors into a menu\",\n        ))\n        .child(\n            AnchorList::new(\"scene.anchor-list\")\n                .anchors([\n                    Anchor::new(\"summary\", \"Summary\"),\n                    Anchor::new(\"inputs\", \"Inputs\"),\n                    Anchor::new(\"constraints\", \"Constraints\"),\n                    Anchor::new(\"verification\", \"Verification\"),\n                    Anchor::new(\"history\", \"History\").disabled(true),\n                ])\n                .active(\"inputs\")\n                .overflow_after(3)\n                .overflow_menu(overflow)\n                .on_navigate(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "diagnostics-list",
      "capture": "cargo run -p xtask -- headless capture diagnostics-list",
      "kind": "exhibit",
      "subjects": [
        "DiagnosticsList"
      ],
      "uses": [
        "DiagnosticsList"
      ],
      "example": "fn diagnostics_list(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let diagnostics = [\n        Diagnostic::new(\n            \"fixture-error\",\n            DiagnosticSeverity::Error,\n            DiagnosticLocation::new(\"fixture.rs:18\"),\n            \"Fixture diagnostic: incompatible value\",\n        )\n        .action(DiagnosticAction::new(\"inspect\", \"Inspect fixture\")),\n        Diagnostic::new(\n            \"fixture-warning\",\n            DiagnosticSeverity::Warning,\n            DiagnosticLocation::new(\"fixture.rs:31\"),\n            \"Fixture diagnostic: unused declaration\",\n        ),\n        Diagnostic::new(\n            \"fixture-information\",\n            DiagnosticSeverity::Information,\n            DiagnosticLocation::new(\"fixture.rs:47\"),\n            \"Fixture diagnostic: a simpler form is available\",\n        ),\n        Diagnostic::new(\n            \"fixture-hint\",\n            DiagnosticSeverity::Hint,\n            DiagnosticLocation::new(\"fixture.rs:64\"),\n            \"Fixture diagnostic: consider a descriptive name\",\n        ),\n    ];\n    stack(&theme)\n        .w(px(760.0))\n        .child(caption(\n            &theme,\n            \"synthetic diagnostics; filters, selection, and actions are caller-owned intents\",\n        ))\n        .child(\n            DiagnosticsList::new(\"scene.diagnostics\", Loadable::Ready(diagnostics.to_vec()))\n                .selected(\"fixture-warning\")\n                .visible_rows(5)\n                .on_filter(|_, _, _| {})\n                .on_select(|_, _, _| {})\n                .on_action(|_, _, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "terminal",
      "capture": "cargo run -p xtask -- headless capture terminal",
      "kind": "exhibit",
      "subjects": [
        "Terminal"
      ],
      "uses": [
        "Terminal"
      ],
      "example": "fn terminal(_window: &mut Window, cx: &mut App) -> AnyElement {\n    /// A session's worth of output, chosen so every branch of the painter has\n    /// something to paint.\n    const SESSION: &[u8] = concat!(\n        \"\\x1b[32m>\\x1b[0m cargo run -p xtask -- gate\\r\\n\",\n        \"\\x1b[1mCompiling\\x1b[0m gpui-box-kit v0.1.2\\r\\n\",\n        \"\\x1b[2m    dim text stays legible and stays dim\\x1b[0m\\r\\n\",\n        \"\\x1b[4munderlined\\x1b[0m \\x1b[7minverse\\x1b[0m \\x1b[44;97m on a background \\x1b[0m\\r\\n\",\n        \"\\x1b[30m0\\x1b[31m1\\x1b[32m2\\x1b[33m3\\x1b[34m4\\x1b[35m5\\x1b[36m6\\x1b[37m7\",\n        \"\\x1b[90m8\\x1b[91m9\\x1b[92ma\\x1b[93mb\\x1b[94mc\\x1b[95md\\x1b[96me\\x1b[97mf\\x1b[0m\\r\\n\",\n        \"\\x1b[38;5;208m256-colour cube\\x1b[0m and \\x1b[38;2;120;200;255mtruecolour\\x1b[0m\\r\\n\",\n        \"\\x1b[32m>\\x1b[0m \",\n    )\n    .as_bytes();\n\n    let theme = cx.theme().clone();\n    let panel = |ident: &'static str, state: TerminalState| {\n        div()\n            .w(px(400.0))\n            .h(px(180.0))\n            .child(Terminal::new(ident).state(state))\n    };\n\n    stack(&theme)\n        .child(\n            div().w(px(400.0)).h(px(180.0)).child(\n                Terminal::new(\"scene.terminal.ready\")\n                    .focused(true)\n                    .grid(|geometry, _| {\n                        let mut emulator = Emulator::new(geometry.cols, geometry.rows);\n                        emulator.feed(SESSION);\n                        // A selection over the middle of a coloured row, so the\n                        // achromatic wash is reviewable against sixteen hues at\n                        // once rather than against one.\n                        emulator.start_selection(\n                            SelectionKind::Drag,\n                            emulator.grid_point(4, 0),\n                            CellSide::Left,\n                        );\n                        emulator.update_selection(emulator.grid_point(4, 15), CellSide::Right);\n                        Some(GridSnapshot {\n                            lines: emulator.lines(),\n                            cursor: emulator.cursor(),\n                        })\n                    })\n                    .on_event(|_, _, _| {}),\n            ),\n        )\n        .child(\n            row(&theme)\n                .items_start()\n                .child(panel(\"scene.terminal.starting\", TerminalState::Loading))\n                .child(panel(\n                    \"scene.terminal.unavailable\",\n                    TerminalState::Unavailable(\"No shell is configured for this workspace.\".into()),\n                )),\n        )\n        .child(\n            div().w(px(400.0)).h(px(180.0)).child(\n                Terminal::new(\"scene.terminal.ended\")\n                    .state(TerminalState::Error(\"The process exited with status 130.\".into()))\n                    .grid(|geometry, _| {\n                        let mut emulator = Emulator::new(geometry.cols, geometry.rows);\n                        emulator.feed(b\"\\x1b[32m>\\x1b[0m tail -f build.log\\r\\n\\x1b[31merror\\x1b[0m: interrupted\\r\\n\");\n                        Some(GridSnapshot {\n                            lines: emulator.lines(),\n                            // Nothing is reading this grid any more, so there\n                            // is no insertion point in it: a caret drawn under\n                            // an exited process invites a keystroke that has\n                            // nowhere to go.\n                            cursor: None,\n                        })\n                    }),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "calendar",
      "capture": "cargo run -p xtask -- headless capture calendar",
      "kind": "exhibit",
      "subjects": [
        "Calendar"
      ],
      "uses": [
        "Calendar"
      ],
      "example": "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            crate::foundation::text(\n                &theme,\n                TypeScale::Body,\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            .max_w(px(560.0))\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "date-range",
      "capture": "cargo run -p xtask -- headless capture date-range",
      "kind": "exhibit",
      "subjects": [
        "RangePicker"
      ],
      "uses": [
        "RangePicker"
      ],
      "example": "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    // The first two ranges report the same thing, because they are the same\n    // range; what differs is that the pointer is over a day in the second, so\n    // the caption has to say which picture is which.\n    let column = |caption: &'static str, picker: AnyElement| {\n        div()\n            .column()\n            .w(px(320.0))\n            .gap(px(theme.space(Space::Xs)))\n            .child(\n                crate::foundation::text(&theme, TypeScale::Caption, caption)\n                    .text_tone(&theme, TextTone::Muted),\n            )\n            .child(picker)\n    };\n    stack(&theme)\n        .child(\n            div()\n                .row()\n                .items_start()\n                .gap(px(theme.space(Space::Lg)))\n                .child(column(\n                    \"a start with no end yet\",\n                    incomplete.into_any_element(),\n                ))\n                .child(column(\n                    \"the same start, previewing the end under the pointer\",\n                    preview.into_any_element(),\n                )),\n        )\n        // The third picker used to overhang the fixed review frame and looked\n        // narrower only because its right edge was clipped. Give every state\n        // the same full-width review column instead of squeezing three across.\n        .child(column(\n            \"a finished range with a blocked day inside it\",\n            blocked.into_any_element(),\n        ))\n        .into_any_element()\n}"
    },
    {
      "name": "date-time",
      "capture": "cargo run -p xtask -- headless capture date-time",
      "kind": "exhibit",
      "subjects": [
        "DateInput",
        "TimeInput"
      ],
      "uses": [
        "DateInput",
        "TimeInput"
      ],
      "example": "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            crate::foundation::text(\n                &theme,\n                TypeScale::Body,\n                \"What the field could not read is still in it, and the refusal is the \\\n                     adapter's own sentence.\",\n            )\n            .max_w(px(560.0))\n            .text_tone(&theme, TextTone::Muted),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "touch-dates",
      "capture": "cargo run -p xtask -- headless capture touch-dates",
      "kind": "exhibit",
      "subjects": [
        "DateInput",
        "TimeInput",
        "RangePicker"
      ],
      "uses": [
        "DateInput",
        "TimeInput",
        "RangePicker"
      ],
      "example": "fn touch_dates(window: &mut Window, cx: &mut App) -> AnyElement {\n    use crate::foundation::{Disableable, Sizable};\n    use gpui_kit_theme::ControlSize;\n    if !cx.has_global::<TouchDates>() {\n        let adapter = adapter();\n        let field = cx.new(|cx| {\n            DateInput::new(\"scene.touch.date\", adapter.clone(), window, cx)\n                .name(\"Appointment date\")\n                .control_size(ControlSize::Touch)\n                .presentation(crate::overlay::popover::PickerPresentation::Bottom)\n        });\n        let disabled = cx.new(|cx| {\n            DateInput::new(\"scene.touch.date-disabled\", adapter.clone(), window, cx)\n                .name(\"Managed appointment date\")\n                .value(adapter.today().expect(\"fixture today\"))\n                .control_size(ControlSize::Touch)\n                .disabled(true)\n        });\n        let invalid = cx.new(|cx| {\n            DateInput::new(\"scene.touch.date-invalid\", adapter.clone(), window, cx)\n                .name(\"Invalid appointment date\")\n                .value(adapter.today().expect(\"fixture today\"))\n                .control_size(ControlSize::Touch)\n                .invalid(true)\n        });\n        let time = cx.new(|cx| {\n            TimeInput::new(\"scene.touch.time\", adapter.clone(), window, cx)\n                .value(TimeOfDay::new(9, 37))\n                .control_size(ControlSize::Touch)\n        });\n        let range = cx.new(|cx| {\n            let mut picker = RangePicker::new(\"scene.touch.range\", adapter.clone(), window, cx);\n            picker.set_control_size(ControlSize::Touch, cx);\n            picker\n        });\n        cx.set_global(TouchDates(vec![\n            field.into(),\n            disabled.into(),\n            invalid.into(),\n            time.into(),\n            range.into(),\n        ]));\n    }\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(390.0))\n        .max_w_full()\n        // Seven 48px day targets plus card padding require at least352px.\n        // This exhibit deliberately grants the calendar the full narrow width.\n        .px_0()\n        .child(crate::foundation::text(\n            &theme,\n            TypeScale::Caption,\n            \"Touch dates · empty, disabled, invalid · full-width calendar (minimum352px)\",\n        ))\n        .children(cx.global::<TouchDates>().0.clone())\n        .into_any_element()\n}"
    }
  ],
  "assets": {
    "icons": [],
    "fonts": [
      "Geist",
      "Geist-Bold",
      "Geist-Medium",
      "Geist-SemiBold",
      "GeistMono",
      "KeySymbols",
      "NotoSansArabic",
      "NotoSansHebrew"
    ]
  },
  "compatibility": {
    "assigned_root_layout": {
      "commands": [
        "cargo test -p gpui-box --features test-support --lib assigned_root",
        "cargo test -p gpui-box-kit --all-features --test flip_configuration",
        "cargo test -p gpui-box-kit --all-features --lib motion::flip",
        "python3 crates/gpui-kit/tests/flip_playback.py target/flip-playback"
      ],
      "contract": "Invocation-local assigned border box overrides authored root width/height/min/max/aspect ratio; descendants reflow and authored styles return for natural measurement. Padding/border minima and device rounding determine actual size. Drawable caches assignment mode and dimensions.",
      "limitations": [
        "Linux full gate and both-theme simulated offscreen frames establish layout/input/semantic behavior, not native-window presentation or FPS",
        "macOS/Windows native acceptance remains pending",
        "Playback requires the opt-in local headless tooling; baseline defaults remain unchanged"
      ]
    },
    "cohort": "0.2.x",
    "edition": "2024",
    "framework_accessibility": {
      "clipped_role_bounds": "Role-bearing element bounds are intersected with the active content mask before AccessKit publication; fully clipped nodes are omitted for that frame.",
      "cross_tree_active_descendant": "A role-bearing overlay option may refer to one uniquely identified focused owner in the same window; GPUI projects AccessKit focus without reparenting either node.",
      "logical_caches": "TextArea retains no-wrap row arrays by persistent document/projection identity and grapheme representability by immutable source storage. Static and selection-only frames construct zero row entries and check zero grapheme bytes. Edits invalidate both; wrap geometry changes invalidate rows. Native tree metadata remains document-wide.",
      "resolved_element_focus": "InteractiveElement::on_focus_resolved observes the exact explicit or framework-generated handle after subtree prepaint; non-focusable elements report no handle, and Kit diagnostics use this authority without changing AccessKit focus.",
      "shared_values": "Element::write_a11y_info_shared defers complete Value materialization until final node properties change. Static parents and identical visible TextRuns are retained; changed selection, value, bounds and reactivation publish complete values. Legacy mutable parent access and relationship naming retain full-value semantics.",
      "value_work": "Window::accessibility_value_work reports producer materialized, retained, debug-cloned and relationship UTF-8 bytes. It excludes source flattening, child metadata, stock native consumer/adapter copies and explicit full-value queries; neither selection-only nor text-edit total work is claimed bounded. Native macOS/Windows evidence requires the on-demand platform lane.",
      "wrapped_publication": "TextArea publishes current prepaint wrapped rows with current cell geometry, avoiding a transient hard-row topology on edits. Folded views preserve full-source accessibility rows. A local wrapped edit segments its changed paragraph; subsequent unchanged draws publish no text runs. Complete native Value and document-wide metadata costs remain."
    },
    "framework_context_menu": {
      "contract": "Window::show_context_menu returns an opaque revision session with captured EffectOwner. Cancellation invalidates command authority immediately, but completion waits for native tracking exit. Replacements serialize across windows; stale cancellation cannot end a newer menu. Only NotSupported permits fallback; cancellation refusal and unavailable presentation are distinct from dismissal. macOS uses NSMenu.cancelTracking and Windows uses identity-guarded EndMenu. Linux/browser retain explicit unsupported capability.",
      "native_smoke": "cargo run --locked -p gpui-box-platform --features test-support --example native_menu_smoke",
      "native_smoke_contract": "Logged-in macOS/Windows desktop only: observe actual tracking before cancel/replacement, preserve the new menu after stale/wrong-window close and old-owner destruction, await teardown, then open successfully in the surviving window. Unsupported and watchdog expiry fail; no Kit fallback or native selection-input claim.",
      "native_smoke_evidence": "Platforms run34396298822 at 02468534 failed both native menu watchdogs at initial active cancellation. Main NSRunLoop scheduling on macOS and restored Windows menu-loop notifications are candidates requiring native re-execution; queued replacement cancellation is also checked before invocation.",
      "tests": [
        "native_context_menu_revision_and_refusal",
        "native_context_menu_cross_window_replacement",
        "native_context_menu_invalidation_waits_for_real_completion",
        "native_context_menu_transport_loss_is_not_dismissal",
        "native_context_menu_dispatches_in_the_captured_focus_context"
      ],
      "validation": "Shared lifecycle tests run on Linux; native cancellation/replacement/teardown execution requires the dispatched macOS/Windows lanes and is not established by Linux tests."
    },
    "framework_editable_document": {
      "contract": "EditBuffer uses persistent Ropey storage with LF line indexing; EditSnapshot indexed slices and UTF-16 conversion avoid whole-document materialization. Legacy text() intentionally materializes once per revision. Grapheme clamping traverses borrowed rope chunks; exact history byte deltas are never re-clamped. No-wrap EditableTextLayout shapes visible lines and exact on-demand geometry through WindowTextSystem; selection painting is bounded independently of logical range queries.",
      "limitations": [
        "contiguous compatibility callers still copy the whole document",
        "unbounded Unicode grapheme context may require traversing many chunks without copying them",
        "cold soft-wrap layout and font/width reflow still shape the full document",
        "a giant hard paragraph remains one shaping input and its paint path may traverse offscreen glyphs",
        "new revisions rebuild wrap/visual/native metadata; unchanged row arrays are retained",
        "no-wrap width reports measured lines rather than unseen lines",
        "native macOS and Windows evidence requires the on-demand platform lane"
      ],
      "soft_wrap": "EditableWrappedCache retains exact paragraph shapes and row indices across static/scroll/selection frames, reshaping changed source/style paragraphs. TextArea applies exact viewport rows after caret reveal. Initial layout and font/width reflow shape all paragraphs; source changes rebuild hard-line metadata. The same shapes govern paint, hit tests, IME and native visual rows.",
      "tests": [
        "indexed_lines_survive_asymmetric_edits_and_persistent_snapshots",
        "large_file_edits_do_not_materialize_document_and_lines_stay_indexed",
        "indexed_unicode_offsets_match_platform_rounding",
        "chunk_crossing_graphemes_match_contiguous_clamping",
        "undo_replays_exact_bytes_when_insertion_joined_a_grapheme"
      ]
    },
    "framework_effect_owner": {
      "contract": "EffectOwner is an opaque host token inherited through all subtree element phases, measured layout, registered mouse/key/action/accessibility/focus callbacks, deferred draws, tooltip timers/window overlays, prompts, drag previews and installed IME handlers. Cached callbacks retain their owner; owner changes invalidate view reuse. Host clipboard policy denies missing owners and never grants implicit gesture exceptions. Legacy APIs enforce the policy; try APIs distinguish refusal from empty clipboard.",
      "limitations": [
        "host must map tokens to grants and revoke stale generations",
        "async and deferred notification work must explicitly retain/re-enter an owner; it never borrows later focus",
        "without installed host policy plain native apps retain existing clipboard behavior",
        "write success means authorized platform submission, not readback verification or a display acknowledgement"
      ],
      "platform_validation": "Shared callback, cache and IME dispatch tests run on Linux. macOS and Windows native validation requires the on-demand Platforms lane after integration; macOS find pasteboard is cfg-gated. No native event translator or renderer ABI changes.",
      "tests": [
        "clipboard_policy_denies_missing_stale_and_legacy_effects",
        "owner_scopes_restore_on_unwind_and_deferred_work_requires_explicit_retention",
        "cached_and_deferred_callbacks_retain_nested_owner_and_reparent_safely",
        "installed_ime_owner_is_not_taken_from_later_focus_or_dispatch",
        "asynchronous_continuations_require_explicit_owner_reentry",
        "tooltip_timer_and_window_overlay_preserve_owner"
      ]
    },
    "framework_gestures": {
      "handoff": "After live scroll consumes movement, a TouchPanEvent may acquire only its residual; touch_start_position retains the hit anchor and start_position rebases to current minus residual. Captured ownership lasts through reversal and one terminal phase. Prediction is disabled in frames with arbitration listeners.",
      "interruption": "Inactive platform status invokes Window::cancel_touch_input before suspension, cancelling pending recognition, owned gestures and released momentum. Per-contact cancellation never cancels an unrelated owner.",
      "limitations": [
        "no rotation or arbitrary simultaneous gesture graph",
        "captured manipulation does not hand back to scrolling on reversal",
        "owners must cancel before unregistering their captured listener",
        "shared tests do not establish native device integration"
      ],
      "portable_touch": "Stable contact IDs resolve to tap, axis-locked scrolling/fling, claimed drag/long press, captured directional pan or two-contact pinch. Unclaimed pan cancels before pinch; a captured pan promotes only to its same-ID registered pinch. Extra contacts drain without phantom taps.",
      "scroll_physics": "PlatformGestures selects exponential or Android friction-spline deceleration without replacing the source-compatible GestureTuning::momentum_decay_per_ms field."
    },
    "framework_glass_profile": {
      "contract": "A bounded elliptical height field drives Snell refraction, spectral indices and Schlick Fresnel reflection in Metal, HLSL and WGSL. Thickness and effective optical-plane depth are scaled lengths; refractive index is dimensionless. The union retains derivative magnitude and its normal flattens before rounded arc collapse. Sampling bounds derive from Snell slope, with no empirical displacement cap. Material ABI adds three scalar fields; WGPU/Direct3D uniform headers are 176 bytes. Screen-space single-interface optics, not volume tracing or Apple's private renderer.",
      "tests": [
        "rounded_optical_profiles_flatten_before_the_arc_normal_collapses",
        "snell_sampling_bound_covers_thick_distant_and_dispersed_surfaces",
        "glass_snell_pixels_follow_height_index_dispersion_and_optical_plane",
        "glass_index_one_has_no_fresnel_even_with_a_curved_surface",
        "glass_corner_medial_axis_does_not_invent_a_specular_normal",
        "glass_menu_corner_does_not_concentrate_light_at_the_arc_centre"
      ],
      "validation": "Linux WGPU pixel tests and offscreen catalog are local authority. Native Metal tests, HLSL compilation and macOS/Windows baselines require the Platforms lane; WARP uses WGPU and is not native Direct3D pixel evidence."
    },
    "framework_glass_wash": {
      "contract": "GlassMaterial wash preserves straight-alpha RGB; finite channels clamp independently to 0..=1 and non-finite channels become zero. Existing Metal/WGSL/HLSL colour paths are reused without ABI changes. Kit tints compose once before rim lighting, including joined bridges; default untinted body-text protection remains explicit and independently selectable.",
      "tests": [
        "material_wash_clamps_each_channel_without_destroying_tint",
        "optical_tint_composes_with_wash_without_covering_the_rim",
        "material_policy_and_tint_reach_surface_and_fused_bridge_pixels"
      ],
      "validation": "Linux framework unit tests and the glass_reference example's WGPU pixel tests exercise colour and policy. The same example's four tests passed on native Metal in source snapshot ccf09bc1b45fa3fdaff4c6411beba30a0603c3bd844a39f882da3f371cd0c79c (macOS27 build26A5416b, M4 Pro, SDK26.2). SwiftUI captures remain reference acquisition, not GPUI equivalence evidence. Native Direct3D runtime validation remains pending."
    },
    "framework_intrinsic_layout": {
      "contract": "Window::request_intrinsic_layout distinguishes natural content dimensions from authored aspect ratio. Assigned axes and size constraints win; only missing axes derive from the natural ratio. Block intrinsic widths, flex/grid stretch, absolute insets and unresolved percentages share one local layout result authority. Ordinary measured text retains the stock leaf algorithm; no Taffy vendor or patch and no renderer ABI change.",
      "tests": [
        "image_intrinsic_measurement_matrix",
        "measured_leaf_stretch_is_not_forced_by_the_flex_parent",
        "cover_image_rounds_all_corners_in_a_clipped_media_card"
      ]
    },
    "framework_layout": {
      "measured_reveal": "A stable-id Reveal measures its subtree at an unconstrained primary extent, contributes caller progress to layout, and shares one clip across paint, hit testing, and accessibility; it owns no motion clock or easing."
    },
    "framework_line_breaking": {
      "contract": "Unshaped fragments, shaped glyph runs and wrapped truncation use Unicode 15.0 UAX #14 opportunities from unicode-linebreak 0.1.5. Inline objects use U+FFFC for classification while retaining caller UTF-8 byte lengths. Continuation indentation and emergency character wrapping remain supported. No host text preprocessing or width expansion.",
      "tests": [
        "unicode_wrap_keeps_punctuation_with_its_text",
        "unicode_wrap_crosses_fragments_and_maps_inline_element_bytes",
        "unicode_wrap_preserves_words_and_mixed_script_opportunities",
        "unicode_mandatory_breaks_and_truncation_share_wrap_boundaries",
        "shaped_unicode_wrap_respects_punctuation_across_runs"
      ]
    },
    "framework_luminance_probe": {
      "contract": "LuminanceProbeLease encodes a 4-bit physical slot and 28-bit generation in the existing u32 material field. Exhausted slots retire without wraparound. Metal, Direct3D and WGPU share LuminanceProbeCache: absent probes read None; completed samples must match full ID and current activation, and cannot overwrite newer samples. No GPU ABI change or new Metal wait.",
      "statistics": "BackdropStatistics decodes the same five optical-source texels after scattering and before compositing: encoded RGB mean and Rec.709 encoded luminance mean/min/max/population variance. Alpha is ignored, without unpremultiplication. These are sample statistics, not exhaustive extrema or linear light. Platform forwarding retains identical freshness; WGPU poll and Direct3D staging Map may wait, while Metal reads completion-populated cache.",
      "statistics_tests": [
        "encoded_statistics_respect_channels_padding_and_alpha",
        "statistics_follow_owner_activation_and_completion_freshness",
        "coloured_backdrop_statistics_use_the_existing_optical_readback"
      ],
      "tests": [
        "a_reacquired_slot_cannot_read_or_publish_the_previous_owners_value",
        "an_unsubmitted_fallback_probe_has_no_reading",
        "late_old_activation_callbacks_cannot_restore_or_overwrite_readings",
        "exhausted_generations_retire_slots_instead_of_wrapping",
        "a_reacquired_probe_requires_its_own_admitted_metal_submission",
        "a_reacquired_probe_requires_its_own_admitted_wgpu_submission"
      ]
    },
    "framework_mask_escape": {
      "contract": "without_content_masks clears inherited rectangular and rounded masks in paired prepaint/paint scopes, restores siblings, and preserves transforms, offsets and accessibility ownership. Own inner masks and the viewport still apply. Deferred::unclipped opts into escape; default deferred clipping is unchanged. Kit Overlay opts in for its window-level surfaces.",
      "tests": [
        "unclipped_deferred_preserves_scale_inner_masks_restoration_cache_and_a11y",
        "unclipped_deferred_pixels_keep_scale_and_restore_ancestor_masks",
        "window_overlay_escapes_rounded_glass_ancestor"
      ],
      "validation": "Integrated Linux CPU, software WGPU pixel and Kit overlay/popover/toast pointer regressions pass. The three-state pixel image was inspected. Exact source e6ad41ee828afe07ae1973e204bbcbdc00628017d9c800ac01325888c41eaf9f passed 605 GPUI, 978 Kit, 16 headless and 7 Metal renderer tests on macOS27 build26A5416b/M4 Pro/SDK26.2, including the portable escape pixels. Its resize example initially failed an exact-byte restoration assertion; the separate restoration entry records the correction and rerun. Native Direct3D and full native catalog execution remain pending."
    },
    "framework_mobile_input": {
      "insets": "Window::insets and invalidation callbacks expose residual edge occlusion in logical current-viewport pixels; effective is per-edge maximum, not addition. Floating keyboards are not approximated as full-width edge padding.",
      "limitations": [
        "keyboard/autofill hints are best-effort, not validation or SMS retrieval",
        "unknown text geometry returns unavailable rather than invented coordinates",
        "unsupported paragraph-direction mutations return false"
      ],
      "text": "InputHandler, EntityInputHandler and PlatformInputHandler forward keyboard/autofill hints, fallible editor actions and UTF-16 native geometry queries. Focus/options notifications follow the installed accepting handler; backend callbacks must defer reentrant queries."
    },
    "framework_motion": {
      "spring": "SpringConfig analytically advances position and velocity for fixed or steadily moving targets; with_spring retains per-element state across retargeting, supports pause, stop, complete, and cancel, and resolves finite overshoot without clamping. Reduced motion snaps a running spring to its target."
    },
    "framework_native_editable_geometry": {
      "commands": [
        "cargo test -p gpui-box --lib editable_text --no-default-features",
        "cargo run -p xtask -- dependencies check",
        "cargo run -p xtask -- gate full"
      ],
      "contract": "Native selection fragments follow retained shaped glyph cells and exact soft-wrap rows, preserving logical endpoint flags and Unicode resolved direction. NativeTextPosition preserves both incident bidi/soft-wrap carets; NativeTextSelection atomically retains primary anchor/head affinities in EditBuffer and history. Legacy logical selection setters explicitly reset downstream. Undo, redo and active IME cancellation restore both primary affinities.",
      "limitations": [
        "Linux geometry tests do not certify UIKit or Android native execution",
        "legacy usize geometry is an explicitly lossy projection of the affinity-aware methods",
        "the current editable layout paints uniform-height horizontal rows",
        "font-provided intra-ligature caret positions are absent from ShapedGlyph; interior caret queries and movement requiring them return None, and selections cover the actual full cluster",
        "paragraph-direction mutation is unsupported because the editable model has no direction overrides",
        "point, range and movement queries enumerate the document; caret bounds instead resolve only the incident hard paragraph, with indexed UTF16 conversion for source layouts",
        "secondary cursors retain the existing logical-only policy; an atomic native selection replaces the primary and clears secondaries",
        "secret fields retain only active composition rollback state, never completed undo/redo history"
      ]
    },
    "framework_native_operations": {
      "automatic_pointer": "Draw and hit-test cursor styling check SetCursorStyle; typing and handled-action hiding independently check HideCursorUntilMouseMoves. Refusal skips only the native call, preserving rendering, hit testing and input delivery. Android admits its implemented styling; UIKit currently refuses both.",
      "contract": "App::try_* and Window::try_* check support and dispatch synchronously on the owning thread. Unsupported, unavailable and refused requests are distinct; acceptance does not mean the OS transition completed. Mobile defaults deny unless a backend implements the operation. Legacy desktop behavior is preserved.",
      "mobile_host_linking": "The generic priority queue is exported on every target. Mobile host-check adapters satisfy desktop-only traits without fabricating handles; non-Android NDK surface operations explicitly reject execution instead of importing unavailable Android symbols. Host linking does not certify an APK or native Android execution.",
      "surface_lifecycle": "WGPU explicit detach/destroy drain submitted native resources before platform handle invalidation. Device loss can make completion unconfirmable; destroy still releases resources and reports failure. Repeated cleanup after release succeeds. Native lifecycle execution remains required."
    },
    "framework_paint": {
      "backdrop_glass_region": "Metal, Direct3D, and WGPU snapshot and process only the integral visible backdrop-glass region plus conservative Gaussian and optical sampling reach while retaining full-viewport texture coordinates; WGPU evaluates each Gaussian weight once into a GPU texture and reuses stable bind groups.",
      "backdrop_luminance": "A Metal luminance query returns the latest reading published by a completed command buffer and never waits for the GPU; a slow completion may therefore leave the previous completed frame's reading visible for another frame.",
      "edge_fade": "Solid quads and filled paths crossing one active edge fade per pixel in their shader bounds; shadows, SVG masks, images, and sprite instances larger than the band sample alpha at the center of bounds intersected with the fade region, while atomic primitives no larger than the band retain nearest-edge fading.",
      "sprite_corner_coverage": "A polychrome sprite's rounded-corner mask sizes its antialiasing ramp from the analytic gradient of its own signed distance field, mapped to device pixels through the sprite's transform, on every renderer; it consumes no screen-space derivative and so does not depend on how a backend fills a helper invocation across a triangle seam."
    },
    "framework_paint_recording": {
      "contract": "PaintMark captures a same-window, same-frame contiguous balanced paint range. PaintRecording owns visible paint and leased sprite allocations, not elements or live authority. Replay normalizes ambient transform/opacity, applies a current-local offset once, and intersects current clipping with the moved capture-visible picture. Clipped or culled pixels never reappear.",
      "lifetime": "Callers bound recording counts and retirement duration, dropping on completion/reinsertion/reduced motion. Final recording and frame release unpins only referenced allocations; reset invalidates all outstanding leases before reuse. Native leases remain Send + Sync for submission callbacks; Wasm leases stay thread-confined with browser GPU resources.",
      "linux": "Framework mounted input/IME/accessibility tests, WGPU lease eviction/reset and submission tests, and dynamic offscreen text/image/Kit semantic removal demonstration.",
      "native_acceptance": "Metal and Direct3D atlas leases and submission guards are implemented; macOS and Windows execution remains coordinator-owned and pending.",
      "refusals": [
        "glass needs a frozen composited backdrop",
        "platform surfaces and hosted views",
        "frames containing deferred draws",
        "unbalanced ranges",
        "window/display-scale mismatch",
        "capture-time eviction or renderer reset",
        "atlases without leases",
        "zero/nonfinite capture opacity",
        "position-dependent replay edge fade"
      ]
    },
    "framework_pointer_capture_retirement": {
      "contract": "Stable capture identities survive rebuilt and cached hitboxes. When the captured hitbox is absent after prepaint, old live listeners receive cancellation before frame retirement; no release/click is manufactured, and reinsertion does not revive the press. Cached siblings retain their listeners without receiving retired-frame cancellation.",
      "tests": [
        "pointer_capture_cached_owner_unmount_cancels_without_click_or_resurrection",
        "pointer_capture_survives_a_redraw_and_delivers_events_outside_the_element",
        "pointer_capture_matches_button_and_cancellation_does_not_click"
      ],
      "validation": "625 portable framework tests and the integrated Linux full gate pass, including 394 scene images and 13 browser mobile input checks. Native macOS/Windows platform lanes remain pending."
    },
    "framework_profiling": {
      "excluded": [
        "upstream profiler journal",
        "hang report integration",
        "debug frame overlay",
        "compositor presentation callbacks"
      ],
      "frame_submission": "FrameTiming retains each draw; FrameSubmissionTiming pairs the newly drawn frame with the synchronous platform submission call, first invalidating input, and coalesced top-level input count. FrameTimingMonitor remains passive and bounded but summarizes submitted frames.",
      "meaning": "Submission completion means the PlatformWindow draw call returned, not that a compositor or display presented the frame."
    },
    "framework_rounded_subtree_clip": {
      "contract": "Explicit with_rounded_content_mask scopes must surround descendants in both prepaint and paint using window-coordinate logical pixels. Geometry-equal inherited chains govern pointer hitboxes and retained/deferred execution. Scene-local parent-first replay masks primitive writes, leaving rectangular ContentMask culling and optical source capture/probes unchanged. AccessKit uses conservative outer rectangle intersections, not curved bounds. Style overflow behavior is unchanged.",
      "portable_test": "framework_rounded_subtree_clip_pixels",
      "validation": "Combined Linux CPU613/WGPU57/headless13 tests and 364 catalog images pass. The integer-texture test is not browser GL runtime evidence. Native Metal executed the portable clip pixel test in source snapshot ccf09bc1b45fa3fdaff4c6411beba30a0603c3bd844a39f882da3f371cd0c79c (macOS27 build26A5416b, M4 Pro, SDK26.2). CVPixelBuffer pixels, native D3D/FXC and native full-catalog validation remain pending; this evidence does not cover subsequent visual-scale work."
    },
    "framework_typed_scopes_and_scroll_axes": {
      "contract": "EffectScoped<T> retains the child's EffectOwner through typed map operations until element rendering. From<T> inherits ambient ownership. Vertical Div/UniformList no longer project pure horizontal wheel input into row scrolling; diagonal residuals preserve independent axes.",
      "platform_validation": "Shared native input/owner tests and Linux full gate; macOS and Windows require the parent's integrated Platforms lane. No native translator or renderer changes.",
      "tests": [
        "unscoped_typed_children_inherit_but_owned_siblings_keep_their_scope",
        "cached_and_deferred_callbacks_retain_nested_owner_and_reparent_safely",
        "horizontal_wheel_bypasses_tall_uniform_list"
      ]
    },
    "framework_virtual_scroll": {
      "contract": "ListState::remap_items and ListOffset::remap retain row geometry and identity anchors at absolute pixel offsets for measured and keyed uniform lists. Removal selects the nearest surviving old-order successor, then predecessor. Width changes invalidate geometry. Window::consume_scroll_delta subtracts actual clamped source-axis motion; subsequent listeners receive unused axes and partial-edge remainder in native pixel/line units. ListScrollEvent reports actual signed motion, not layout growth. Targeted remeasurement refreshes only its window.",
      "limitations": [
        "count-only surfaces cannot infer insertion or reorder identity; use unique keys",
        "offscreen asynchronous geometry changes require explicit revision or remeasure_rows notification"
      ],
      "platform_validation": "Shared platform-independent tests run on Linux; dispatch Platforms after integration for native macOS/Windows input tests and Metal/WARP scene catalogs. No platform renderer or native event translation changes.",
      "tests": [
        "reordered_rows_preserve_identity_anchor",
        "removed_anchor_uses_old_order_successor_then_predecessor",
        "remap_retains_measurements_focus_and_rebases_pending_geometry",
        "nested_wheel_moves_only_consumer_and_chains_at_edge",
        "revisions_remeasure_offscreen_rows_without_reidentifying_them",
        "history_and_reorder_are_not_new_tail_messages"
      ]
    },
    "framework_visual_scale": {
      "contract": "Pair with_visual_scale in prepaint and paint; captured VisualTransform composes inner then outer around enclosing logical origins. Layout, shaping, scroll distances and canvas bounds remain logical. Primitive geometry and effective glyph/emoji/SVG raster resolution scale; inherited outer clips stay fixed and inner clips transform. Hitboxes inverse-map displayed global pointers. Retained/deferred/replay chains capture transforms and invalidate on scale changes. Native PlatformView refuses nonidentity transforms.",
      "coordinates": "Events remain displayed window-global. on_focus_resolved reports full displayed bounds, not clip-intersected bounds. AccessKit uses conservative displayed rectangles and centrally scaled synthetic character geometry. ElementInputHandler transforms element_bounds metadata ONLY: entity callbacks remain global-in/displayed-out with logical bounds_for_range element bounds. TextLayout pointer indexing inverse-maps points and position_for_index returns displayed points; range rectangles stay logical. Anchored.position stays logical.",
      "frame_validation": "Follow-up source cb8f42c7c47c832e4934f77a0befc9a2d65b986d5c810422df54cf6c7ac3784e changes only Kit Glass/frame integration, scene, docs and the pixel fixture; framework/renderers/locks are byte-identical to de1837ee. On the same Mac, 975 Kit and 5 native Metal glass_reference tests pass, including two percentage-width siblings and rounded corner rejection through GlassSurface.",
      "kit": "Input, TextArea and independent auth slots publish captured transforms with layout snapshots; pointer indices inverse-map once and native/legacy IME rectangles forward-map once. TextArea source geometry remains logical plus transform and emits transform-only geometry changes. Editor exports displayed row/viewport rectangles and inverse-maps popup anchors into its shared logical scope. Glass clips caller foreground writes, not surface fill/shadow coverage or the fused optical bridge.",
      "tests": [
        "scale_preserves_layout_deferred_cache_clips_and_accessibility",
        "visual_scale_rasterizes_glyph_and_svg_at_effective_resolution",
        "input_visual_transform_maps_pointer_selection_and_ime_once",
        "textarea_visual_transform_preserves_rectangle_selection_and_geometry",
        "auth_visual_transform_uses_each_slots_own_snapshot",
        "editor_visual_transform_keeps_public_geometry_hover_and_popup_coherent",
        "rounded_glass_descendants_reject_corner_input",
        "glass_clips_foreground_without_clipping_surface_shadows_or_fused_bridge"
      ],
      "validation": "Focused integrated Linux CPU, WGPU and Kit tests pass. Storage and integer-texture transports execute on a native software adapter, not a browser GL context. Exact source archive de1837ee42cd66184a684a3113881f9d4e87b147aca2a6700823bda1124806a6 passed 604 GPUI, 14 headless, 5 glass_reference, 7 Metal renderer and 975 Kit tests on macOS27 build26A5416b/M4 Pro/SDK26.2. This includes native Metal effective-resolution glyph/SVG and Glass clipping pixels, plus simulated Kit pointer/IME mappings. Native Direct3D runtime, native-view refusal, physical/native IME delivery and the native full visual catalog remain unverified; no SwiftUI equivalence is claimed."
    },
    "framework_win32_toolkit_allocation": {
      "commands": [
        "cargo test -p gpui-box allocation_callback --features test-support",
        "cargo run --locked -p gpui-box-webview --example smoke"
      ],
      "contract": "After native HWND placement, an opt-in UI-thread callback allocates toolkit content using the full physical viewport, not the clip region. WebView2 controller bounds use this callback; GPUI retains HWND positioning and clipping authority.",
      "limitations": [
        "Windows native execution required; cross-compilation and Linux smoke do not certify WebView2 allocation",
        "does not add arbitrary transforms or rounded clipping"
      ]
    },
    "framework_x11_platform_view": {
      "commands": [
        "xvfb-run -a cargo test -p gpui-box-linux x11_native_children -- --ignored",
        "cargo test -p gpui-box platform_view --features test-support"
      ],
      "contract": "Linux X11 (including XWayland) hosts caller-owned native child XIDs in rectangular clip windows; full viewport allocation, physical-pixel resize, native input crop, paint-order stacking and detach/lifetime restoration are supported. Native Wayland, GPU transforms, rounded masks and X11 GPUI scene overlays above native children are not supported."
    },
    "glass_reference_resize": {
      "ci_counterexample": "Platforms run 34677542322 on bf45061d failed the unrelated-region byte-equality assertion on Metal. Independent reconstruction of both raw arrays found 24 blue channels differing by exactly one code at x553-563/y745-748 in a 1920x800 crop; the edge difference was inspected. Unrelated regions now use the same existing one-step/channel contract as settled/restored frames. This does not establish a renderer cause; historical exact results above remain limited to their named source and environment.",
      "contract": "A persistent menu replays repository Animator linear 800ms from 144x48 to 272x128 and reports actual prepaint geometry/time for independently replayed samples. Expanded content switches at the trigger and clips to the current surface. Capture-bracket midpoint is a sample choice, not presentation time or Apple dynamics equivalence.",
      "tests": [
        "persistent_resize_measures_real_early_intermediate_and_settled_frames"
      ],
      "validation": "Exact e6ad41ee source initially passed 7 example tests and failed byte-exact restoration at 2x. Native diagnostics found 177 light/241 dark lower-edge pixels differing by one code, stable after additional frames/10s; no cause is established. The same production source with example SHA256 1c90acec857deca129f051bb7e2bf305a043688aee4ff78e795ccaa0a764f6ea passes all 8 Metal example tests: all four scale/appearance cases restore exact logical bounds/dimensions, pixels within the existing headless one-step/channel contract, and unrelated fixtures byte-exact. Logs SHA256 71cb00d4cce9e9e1d177db9b8506705f675eab96a6ad973669ceb480f68a49cb. No whole-frame byte-exact, native full-catalog or Windows runtime claim."
    },
    "kit_dock_tree": {
      "excluded": [
        "upstream retained PaneTree reducer",
        "panel entity registry",
        "DockArea reconciliation cache",
        "product persistence transport"
      ],
      "invariants": [
        "load/dump/load fixpoint",
        "empty stacks persist",
        "malformed records reject",
        "selection and collapse preserve unrelated ratios",
        "resize reports only the dragged split",
        "one completed drop emits one move intent",
        "ratios are dimensionless across container sizes"
      ],
      "ownership": "DockTopology and its stable ids remain caller-owned; DockTree projects them through SplitTree, Tabs, and the shared drag system and emits selection, collapse, resize, move, and split intents without applying them."
    },
    "kit_editor_syntax": {
      "contract": "Optional syntax feature: Tree-sitter 0.25.10 with bundled JSON 0.24.8; borrowed EditSnapshot byte chunks, exact revisioned UTF-8 InputEdit transitions, viewport highlight queries, caller highlight precedence. No LSP transport, grammar download, process, or workspace ownership.",
      "limitations": [
        "synchronous parsing",
        "parser internal work is not measured by borrowed input counters",
        "only JSON grammar bundled",
        "native macOS and Windows parser evidence awaits platform lane"
      ],
      "tests": [
        "incremental_json_edits_use_utf8_points_and_match_a_fresh_parse",
        "a_large_json_edit_reuses_the_tree_and_queries_only_the_requested_region",
        "grammar_errors_and_invalid_queries_are_reported",
        "syntax_tracks_real_area_edits_and_reports_parse_errors"
      ]
    },
    "kit_glass_press": {
      "contract": "A shared Tracking/Grab spring drives optical depth and foreground scale around each logical surface/pane center. glassPressScale=1.014 is Kit policy, not a universal native constant. Layout and material outline stay fixed; reduced motion suppresses foreground scale. Shadows use the last completed five-sample mean/variance cue, not exhaustive backdrop analysis.",
      "motion_validation": "On that same production source, an inspected 18s macOS gallery recording with injected OS events shows single/fused material and rim press responses and coherent release without layout jumps or text clipping. The 1.014 foreground scale is NOT clearly resolved in the movie or magnified crops; its evidence remains the separate headless tests. No physical-HID, Apple-dynamics or latency claim. Gallery binary SHA256 54ef51d021aed2f2310535a48cb7a693eb880dd11395bd69852cb2172ed1d7e0; evidence archive SHA256 5713e82419df1b330a9a3b4fa54119bcb39f2938083bd564831f24ce0ec1186c.",
      "tests": [
        "glass_foreground_press_renders_about_each_logical_center"
      ],
      "validation": "Actual software-WGPU and native Metal headless down/up tests cover intermediate/settled frames, independent pixel boundaries, single/group centers, glyph changes, release and reduced motion. Native evidence is the exact e6ad41ee source named above; optical fixture frames were inspected. These tests are not physical pointer delivery or a real-window motion recording.",
      "window_limitations": "The current gallery and an origin/main control build both created decorated but blank client windows in the same Xvfb/Openbox setup. Their common cause is not established; this is not successful Linux real-window motion evidence. Linux offscreen coverage is independent."
    },
    "kit_owner_keyed_state": {
      "contract": "All typed keyed registries partition by exact EffectOwner, window and key. Hosts explicitly register_owner_state on minting a mount; ambient scopes never register. release_owner_state drops only that owner's registry entries synchronously and removes registration. Unknown/retired tokens cannot recache. Unowned native state retains prior behavior.",
      "limitations": [
        "host must register freshly minted true mount tokens and preserve typed child scopes; never register from rerender or callbacks",
        "worker principals/grants are separate host policy",
        "release drops registry references, not arbitrary externally retained Rc/Entity handles",
        "active and owner-group tables shrink geometrically after removals; per-type release registry remains bounded by state types, and window shells live until window close",
        "window-wide modal coordination, weak toast routing and effect budgeting are not keyed mount caches"
      ],
      "tests": [
        "owner_churn_retains_no_history_or_peak_table_with_a_live_peer",
        "owner_release_drops_every_typed_composite_key_without_touching_siblings",
        "a_late_explicit_owner_continuation_cannot_repopulate_released_state",
        "owner_is_retained_when_wheel_follow_updates_are_deferred",
        "owner_retirement_stops_a_glide_before_its_final_jump"
      ]
    },
    "mobile_development": {
      "android": "API33+ arm64 Vulkan, one opaque Activity; JNI lifecycle, touch, InputConnection and basic AccessKit bridge. Host-check does not compile Java, link an APK or execute Android.",
      "browser": "Pointer contact identity, lifecycle cancellation, residual VisualViewport/safe-area edges, keyless input and IME traits. Chromium touch and inset fixtures are not Android Chrome or iOS Safari device acceptance.",
      "host_checks": [
        "cargo test -p gpui-box-ios -p gpui-box-android --all-features",
        "cargo check -p gpui-box-ios --features platform-check",
        "cargo check -p gpui-box-android-example --features host-check",
        "npm --prefix examples/browser-gallery run mobile"
      ],
      "ios": "UIKit host and WGPU Metal adapter with caller-supplied fonts, affinity-aware text queries and basic AccessKit projection. Linux platform-check is not Xcode linking or UIKit execution.",
      "limitations": [
        "no complete mobile accessibility claim",
        "native hardware keyboard/pointer coverage incomplete",
        "OS autofill, process restoration and predictive back remain capability-scoped",
        "portable tests and construction markers do not establish presented frames"
      ],
      "native_editors": "TextInput and TextArea implement native affinity/selection hooks, including masked and OTP wrappers. RichTextEditor retains its legacy handler; its native affinity/geometry adapter is missing, and Android's native selection bridge refuses it.",
      "native_requirements": [
        "licensed Android SDK/NDK and authorized device or external emulator",
        "macOS with Xcode and installed iOS simulator runtime",
        "actual keyboard/IME, accessibility and surface lifecycle acceptance",
        "signing and device provisioning for physical iOS devices"
      ],
      "status": "experimental-source-native-acceptance-pending"
    },
    "mobile_reference": {
      "android": "bash examples/android/launch.sh reference",
      "capture": "cargo run -p gpui-box-mobile-reference --features capture --example capture -- target/mobile-reference",
      "contract": "Default library mounts caller-owned fixture state without a desktop platform dependency. Versioned checkpoints exclude focus, keyboard, open overlays and active refresh. Native example hosts choose back policy and private persistence.",
      "ios": "python3 -B examples/ios-native/run-simulator.py --reference",
      "limitations": [
        "offscreen 390px and resized-window captures do not establish native keyboard or touch timing",
        "native persistence and recreation require executed device/simulator evidence",
        "Android requires a separately installed development APK and ANDROID_SERIAL"
      ],
      "package": "gpui-box-mobile-reference"
    },
    "platform": [
      {
        "ci_commands": [
          "cargo test -p gpui-box-media --all-features --locked",
          "cargo test --workspace --all-features --locked --exclude gpui-box-media",
          "cargo clippy --workspace --all-targets --all-features --locked -- -D warnings",
          "cargo run -p xtask -- performance check",
          "cargo run -p xtask -- headless check"
        ],
        "ci_gated": true,
        "commands": [
          "cargo test -p gpui-box-media --all-features --locked",
          "cargo run -p xtask -- gate full",
          "cargo run -p xtask -- accessibility check",
          "cargo run -p xtask -- performance check",
          "cargo run -p xtask -- headless check"
        ],
        "contract": "framework-kit-native-metal-context-menu-clipped-platform-view-avfoundation-media",
        "gate_lane": "on-demand",
        "limitations": [
          "evidence comes from a dispatched Platforms run, not from every push",
          "native context-menu presentation requires a logged-in host",
          "native playback covers unprotected sources and operating-system codecs only",
          "does not prove other platforms"
        ],
        "name": "macos"
      },
      {
        "ci_commands": [
          "cargo test -p gpui-box-media --all-features --locked",
          "cargo clippy --workspace --all-targets --all-features --locked -- -D warnings",
          "cargo run -p xtask -- accessibility check",
          "cargo run -p xtask -- performance check",
          "cargo check -p gpui-box-windows --release --locked",
          "cargo run -p xtask -- headless check"
        ],
        "ci_gated": true,
        "commands": [
          "cargo test -p gpui-box-media --all-features --locked",
          "cargo run -p xtask -- performance check",
          "cargo run -p xtask -- headless check"
        ],
        "contract": "framework-kit-native-context-menu-clipped-platform-view-media-foundation-headless-warp",
        "gate_lane": "on-demand",
        "limitations": [
          "evidence comes from a dispatched Platforms run, not from every push",
          "native frame capture not implemented",
          "native playback covers unprotected sources and operating-system codecs only"
        ],
        "name": "windows"
      },
      {
        "ci_commands": [
          "cargo run -p xtask -- gate full"
        ],
        "ci_gated": true,
        "commands": [
          "cargo run -p xtask -- gate full"
        ],
        "contract": "wayland-x11-code-and-llvmpipe-baseline",
        "gate_lane": "authority",
        "limitations": [
          "application context menus use the in-window fallback",
          "native media playback is unavailable",
          "AT-SPI coverage remains capability-scoped",
          "native behavior still requires host-specific review"
        ],
        "name": "linux"
      },
      {
        "ci_commands": [
          "cargo run -p xtask -- web check"
        ],
        "ci_gated": true,
        "commands": [
          "cargo run -p xtask -- web check",
          "cargo run -p xtask -- web build",
          "cargo run -p xtask -- web smoke",
          "cargo run -p xtask -- web visual check button input dialog node-graph"
        ],
        "contract": "single-threaded-browser-gallery",
        "gate_lane": "authority",
        "limitations": [
          "application context menus use the in-window fallback",
          "native media playback is unavailable",
          "threaded COOP/COEP not claimed",
          "screen-reader announcements not covered"
        ],
        "name": "wasm32-unknown-unknown"
      }
    ],
    "project": "GPUI Box",
    "release_date": "2026-09-12",
    "release_status": "released",
    "release_validation": {
      "dependency_graph": "cargo run -p xtask -- dependencies check",
      "publication_plan": "cargo run -p xtask -- package plan",
      "registry_only": "cargo run -p xtask -- package check",
      "requires_recorded_platform_evidence": true
    },
    "release_version": "0.2.0",
    "renderer_timing": {
      "backends": [
        "wgpu Linux software Vulkan",
        "wgpu Windows WARP",
        "native Metal command-buffer timestamps"
      ],
      "contract": "Opt-in headless measurement separates CPU encoding/submission, CPU-observed completion, GPU execution-clock evidence, and query readback. FrameTimingMonitor input-to-submission remains a CPU boundary. Normal rendering does not wait.",
      "excluded": [
        "native Windows Direct3D renderer timing",
        "compositor and display presentation latency",
        "cross-host comparisons",
        "pixel readback as GPU execution",
        "complete application or component performance coverage"
      ],
      "validation": "Run renderer_timing_is_owned_by_each_successful_submission on the native backend and the renderer-timing harness on each native host; Linux results do not prove Metal or WARP."
    },
    "repository": "https://github.com/fran0220/gpui-box",
    "rust_version": "1.97",
    "schema": 1,
    "type_universe_crate": "gpui",
    "type_universe_package": "gpui-box"
  }
}
